From 85e2c3eb70c9b9a2f034f7d963acfaff13c6ce23 Mon Sep 17 00:00:00 2001 From: Moonbase Date: Tue, 9 Dec 2025 16:23:42 -0800 Subject: [PATCH] Reimplement Contact Actions, Profile Editing, and Profile Image Changing. --- QtCNETAPI/Models/Contact.cs | 2 +- .../Controls/CurrentProfileControl.cs | 7 + .../Controls/MainTabControl.Designer.cs | 1 + qtcnet-client/Controls/MainTabControl.cs | 79 ++- qtcnet-client/Controls/MainTabControl.resx | 636 +++++++++--------- qtcnet-client/Forms/MainForm.cs | 129 +++- qtcnet-client/Forms/ProfileForm.Designer.cs | 48 ++ qtcnet-client/Forms/ProfileForm.cs | 258 ++++++- .../Properties/Resources.Designer.cs | 70 ++ qtcnet-client/Properties/Resources.resx | 25 +- qtcnet-client/Resources/AcceptContactIcon.png | Bin 0 -> 1696 bytes qtcnet-client/Resources/AddContactIcon.png | Bin 0 -> 1737 bytes qtcnet-client/Resources/CancelRequestIcon.png | Bin 0 -> 2160 bytes .../Resources/DeclineContactIcon.png | Bin 0 -> 1684 bytes qtcnet-client/Resources/MessageIcon.png | Bin 0 -> 2019 bytes qtcnet-client/Resources/RemoveContactIcon.png | Bin 0 -> 2333 bytes qtcnet-client/Resources/RequestSentIcon.png | Bin 0 -> 2756 bytes 17 files changed, 910 insertions(+), 345 deletions(-) create mode 100644 qtcnet-client/Resources/AcceptContactIcon.png create mode 100644 qtcnet-client/Resources/AddContactIcon.png create mode 100644 qtcnet-client/Resources/CancelRequestIcon.png create mode 100644 qtcnet-client/Resources/DeclineContactIcon.png create mode 100644 qtcnet-client/Resources/MessageIcon.png create mode 100644 qtcnet-client/Resources/RemoveContactIcon.png create mode 100644 qtcnet-client/Resources/RequestSentIcon.png diff --git a/QtCNETAPI/Models/Contact.cs b/QtCNETAPI/Models/Contact.cs index ebdcdde..301db51 100644 --- a/QtCNETAPI/Models/Contact.cs +++ b/QtCNETAPI/Models/Contact.cs @@ -11,6 +11,6 @@ public virtual User? Owner { get; } public virtual User? User { get; } - public enum ContactStatus { AwaitingApprovalFromOther = 0, AwaitingApprovalFromSelf = 1, Accepted = 2 } + public enum ContactStatus { AwaitingApprovalFromOther = 0, AwaitingApprovalFromSelf = 1, Accepted = 2, NoRelation = 3 } } } diff --git a/qtcnet-client/Controls/CurrentProfileControl.cs b/qtcnet-client/Controls/CurrentProfileControl.cs index 6c67c9a..635c8cb 100644 --- a/qtcnet-client/Controls/CurrentProfileControl.cs +++ b/qtcnet-client/Controls/CurrentProfileControl.cs @@ -33,5 +33,12 @@ namespace qtcnet_client.Controls } private void pbCurrentProfilePic_Click(object sender, EventArgs e) => OnProfileImageClicked?.Invoke(this, EventArgs.Empty); + + public void RefreshInfo() + { + lblUsername.Text = $"Welcome, {Username}!"; + lblCurrencyAmount.Text = CurrencyCount.ToString(); + pbCurrentProfilePic.Image = ProfileImage; + } } } diff --git a/qtcnet-client/Controls/MainTabControl.Designer.cs b/qtcnet-client/Controls/MainTabControl.Designer.cs index 5908376..b179a52 100644 --- a/qtcnet-client/Controls/MainTabControl.Designer.cs +++ b/qtcnet-client/Controls/MainTabControl.Designer.cs @@ -154,6 +154,7 @@ lvUserList.TabIndex = 0; lvUserList.UseCompatibleStateImageBehavior = false; lvUserList.View = View.SmallIcon; + lvUserList.MouseDoubleClick += lvUserList_MouseDoubleClick; // // ilStatusIcons // diff --git a/qtcnet-client/Controls/MainTabControl.cs b/qtcnet-client/Controls/MainTabControl.cs index ba694e4..5c7018a 100644 --- a/qtcnet-client/Controls/MainTabControl.cs +++ b/qtcnet-client/Controls/MainTabControl.cs @@ -11,7 +11,11 @@ namespace qtcnet_client.Controls { public partial class MainTabControl : UserControl { + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public ListViewItem? SelectedUser { get; set; } + public event EventHandler? OnContactControlDoubleClicked; + public event EventHandler? OnUserItemDoubleClicked; public event EventHandler? OnRoomControlDoubleClicked; public MainTabControl() @@ -21,18 +25,38 @@ namespace qtcnet_client.Controls public void AddContacts(List contactControls) { - tlpContactsList.SuspendLayout(); - - foreach (ContactControl contactControl in contactControls) + if(tlpContactsList.InvokeRequired) { - contactControl.Width = tlpContactsList.ClientSize.Width; - contactControl.OnContactDoubleClicked += ContactControl_OnContactDoubleClicked; + tlpContactsList.Invoke(() => + { + tlpContactsList.SuspendLayout(); + + foreach (ContactControl contactControl in contactControls) + { + contactControl.Width = tlpContactsList.ClientSize.Width; + contactControl.OnContactDoubleClicked += ContactControl_OnContactDoubleClicked; + } + + tlpContactsList.Controls.Clear(); + tlpContactsList.Controls.AddRange([.. contactControls.DistinctBy(ctrl => ctrl.UserId)]); + + tlpContactsList.ResumeLayout(true); + }); + } else + { + tlpContactsList.SuspendLayout(); + + foreach (ContactControl contactControl in contactControls) + { + contactControl.Width = tlpContactsList.ClientSize.Width; + contactControl.OnContactDoubleClicked += ContactControl_OnContactDoubleClicked; + } + + tlpContactsList.Controls.Clear(); + tlpContactsList.Controls.AddRange([.. contactControls.DistinctBy(ctrl => ctrl.UserId)]); + + tlpContactsList.ResumeLayout(true); } - - tlpContactsList.Controls.Clear(); - tlpContactsList.Controls.AddRange([.. contactControls.DistinctBy(ctrl => ctrl.UserId)]); - - tlpContactsList.ResumeLayout(true); } private void ContactControl_OnContactDoubleClicked(object? sender, EventArgs e) => OnContactControlDoubleClicked?.Invoke(sender, e); @@ -57,12 +81,39 @@ namespace qtcnet_client.Controls public void AddUsers(List users) { - lvUserList.SuspendLayout(); + if(lvUserList.InvokeRequired) + { + lvUserList.Invoke(() => + { + lvUserList.SuspendLayout(); - lvUserList.Items.Clear(); - lvUserList.Items.AddRange([.. users.DistinctBy(lvi => lvi.Tag)]); // Tag = UserId here + lvUserList.Items.Clear(); + lvUserList.Items.AddRange([.. users.DistinctBy(lvi => lvi.Tag)]); // Tag = UserId here - lvUserList.ResumeLayout(true); + lvUserList.ResumeLayout(true); + }); + } else + { + lvUserList.SuspendLayout(); + + lvUserList.Items.Clear(); + lvUserList.Items.AddRange([.. users.DistinctBy(lvi => lvi.Tag)]); // Tag = UserId here + + lvUserList.ResumeLayout(true); + } + } + + private void lvUserList_MouseDoubleClick(object sender, MouseEventArgs e) + { + if(lvUserList.SelectedItems.Count > 0) + { + ListViewItem? lvi = lvUserList.SelectedItems[0]; + if(lvi != null) + { + SelectedUser = lvi; + OnUserItemDoubleClicked?.Invoke(this, EventArgs.Empty); + } + } } } } diff --git a/qtcnet-client/Controls/MainTabControl.resx b/qtcnet-client/Controls/MainTabControl.resx index fea561b..00a788a 100644 --- a/qtcnet-client/Controls/MainTabControl.resx +++ b/qtcnet-client/Controls/MainTabControl.resx @@ -125,89 +125,89 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA+hMAAAJNU0Z0AUkBTAIBAQQB - AAHIAQAByAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/ + AAHQAQAB0AEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/ AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AC4AAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B 0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYB BwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekD - YAHoA10B0QNQAZ8DMQFNAwUBBhQAAyABLQNUAasDWwHkA1YB9QMkAfsDPQH+Az0B/gMkAfsDUwH0A2IB - 4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQBTAFaAUwB9QEhAVkBIQH7ARkBWQEZAf4BGQFZARkB/gEhAVkB - IQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAUwCWgH1ASECWQH7ARkCWQH+ARkCWQH+ASEC - WQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAkwBWgH1AiEBWQH7AhkBWQH+AhkBWQH+AiEB - WQH7A1MB9ANiAeEDUQGhAx4BKgwAAxsBJQNYAb0DWgHyA0EB/gMwAf8DOQH/AzwB/wM2Af8DKgH/AyQB - /wNAAf0DXgHwA1YBsgMaASMIAAMbASUDWAG9A1oB8gEZAWEBGQH+AQABVwEAAf8BAAFnAQAB/wEAAWwB - AAH/AQABYQEAAf8BAAFMAQAB/wEAAUABAAH/ATIBQAEyAf0BWwFeAVsB8ANWAbIBGQEaARkBIwgAAxsB - JQNYAb0DWgHyARkCYQH+AQACVwH/AQACZwH/AQACbAH/AQACYQH/AQACTAH/AQACQAH/ATICQAH9AVsC - XgHwA1YBsgEZAhoBIwgAAxsBJQNYAb0DWgHyAhkBYQH+AgABVwH/AgABZwH/AgABbAH/AgABYQH/AgAB - TAH/AgABQAH/AjIBQAH9AlsBXgHwA1YBsgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB - /wN1Af8DcQH/A2QB/wNMAf8DMQH/Az0B/gNiAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFYAW8BWAHzAQAB + YAHoA10B0QNQAZ8DMQFNAwUBBhQAAyABLQNUAasDWwHkA1cB9QMkAfsDPgH+Az4B/gMkAfsDUwH0A2IB + 4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQBTQFaAU0B9QEhAVoBIQH7ARoBWgEaAf4BGgFaARoB/gEhAVoB + IQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAU0CWgH1ASECWgH7ARoCWgH+ARoCWgH+ASEC + WgH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAk0BWgH1AiEBWgH7AhoBWgH+AhoBWgH+AiEB + WgH7A1MB9ANiAeEDUQGhAx4BKgwAAxsBJQNYAb0DWgHyA0IB/gMwAf8DOQH/AzwB/wM2Af8DKgH/AyQB + /wNAAf0DXgHwA1YBsgMaASMIAAMbASUDWAG9A1oB8gEaAWIBGgH+AQABVwEAAf8BAAFnAQAB/wEAAWwB + AAH/AQABYQEAAf8BAAFMAQAB/wEAAUABAAH/ATQBQAE0Af0BXAFeAVwB8ANWAbIBGQEaARkBIwgAAxsB + JQNYAb0DWgHyARoCYgH+AQACVwH/AQACZwH/AQACbAH/AQACYQH/AQACTAH/AQACQAH/ATQCQAH9AVwC + XgHwA1YBsgEZAhoBIwgAAxsBJQNYAb0DWgHyAhoBYgH+AgABVwH/AgABZwH/AgABbAH/AgABYQH/AgAB + TAH/AgABQAH/AjQBQAH9AlwBXgHwA1YBsgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB + /wN1Af8DcQH/A2QB/wNMAf8DMQH/Az4B/gNiAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFaAW8BWgHzAQAB ggEAAf8BAAGZAQAB/wEAAbYBAAH/AQABzAEAAf8BAAHTAQAB/wEAAcsBAAH/AQABswEAAf8BAAGIAQAB - /wEAAVcBAAH/ARkBWQEZAf4BYAFiAWAB7gNQAZoDAwEEAwMBBAFSAlMBpQFYAm8B8wEAAoIB/wEAApkB - /wEAArYB/wEAAswB/wEAAtMB/wEAAssB/wEAArMB/wEAAogB/wEAAlcB/wEZAlkB/gFgAmIB7gNQAZoD - AwEEAwMBBAJSAVMBpQJYAW8B8wIAAYIB/wIAAZkB/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB - /wIAAYgB/wIAAVcB/wIZAVkB/gJgAWIB7gNQAZoDAwEEAy0BRANgAegDfAH+A24B/wN7Af8DhQH/A4oB - /wOMAf8DigH/A4UB/wN2Af8DVwH/AzIB/wNAAf0DXgHdAyoBPwMtAUQBYAFpAWAB6AEZAYIBGQH+AQAB + /wEAAVcBAAH/ARoBWgEaAf4BYQFiAWEB7gNQAZoDAwEEAwMBBAFSAlMBpQFaAm8B8wEAAoIB/wEAApkB + /wEAArYB/wEAAswB/wEAAtMB/wEAAssB/wEAArMB/wEAAogB/wEAAlcB/wEaAloB/gFhAmIB7gNQAZoD + AwEEAwMBBAJSAVMBpQJaAW8B8wIAAYIB/wIAAZkB/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB + /wIAAYgB/wIAAVcB/wIaAVoB/gJhAWIB7gNQAZoDAwEEAy0BRANgAegDfQH+A24B/wN7Af8DhQH/A4oB + /wOMAf8DigH/A4UB/wN2Af8DVwH/AzIB/wNAAf0DXgHdAyoBPwMtAUQBYAFpAWAB6AEaAYABGgH+AQAB xgEAAf8BAAHcAQAB/wEAAe4BAAH/AQAB+AEAAf8BAAH7AQAB/wEAAfkBAAH/AQAB7wEAAf8BAAHUAQAB - /wEAAZwBAAH/AQABWgEAAf8BMgFAATIB/QNeAd0DKgE/Ay0BRAFgAmkB6AEZAoIB/gEAAsYB/wEAAtwB - /wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B/wEAAtQB/wEAApwB/wEAAloB/wEyAkAB/QNeAd0D - KgE/Ay0BRAJgAWkB6AIZAYIB/gIAAcYB/wIAAdwB/wIAAe4B/wIAAfgB/wIAAfsB/wIAAfkB/wIAAe8B - /wIAAdQB/wIAAZwB/wIAAVoB/wIyAUAB/QNeAd0DKgE/A04BlQN3AfgDfwH/A4UB/wOKAf8DjQH/A44B - /wOOAf8DjgH/A40B/wOJAf8DdwH/A00B/wMlAf8DWgHyA0oBiwNOAZUBQwF+AUMB+AEAAeUBAAH/AQAB + /wEAAZwBAAH/AQABWgEAAf8BNAFAATQB/QNeAd0DKgE/Ay0BRAFgAmkB6AEaAoAB/gEAAsYB/wEAAtwB + /wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B/wEAAtQB/wEAApwB/wEAAloB/wE0AkAB/QNeAd0D + KgE/Ay0BRAJgAWkB6AIaAYAB/gIAAcYB/wIAAdwB/wIAAe4B/wIAAfgB/wIAAfsB/wIAAfkB/wIAAe8B + /wIAAdQB/wIAAZwB/wIAAVoB/wI0AUAB/QNeAd0DKgE/A04BlQN3AfgDfwH/A4UB/wOKAf8DjQH/A44B + /wOOAf8DjgH/A40B/wOJAf8DdwH/A00B/wMlAf8DWgHyA0oBiwNOAZUBRAF9AUQB+AEAAeUBAAH/AQAB 7wEAAf8BAAH4AQAB/wEAAf0BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/gEAAf8BAAH2AQAB - /wEAAdUBAAH/AQABiwEAAf8BAAFBAQAB/wNaAfIDSgGLA04BlQFDAn4B+AEAAuUB/wEAAu8B/wEAAvgB + /wEAAdUBAAH/AQABiwEAAf8BAAFBAQAB/wNaAfIDSgGLA04BlQFEAn0B+AEAAuUB/wEAAu8B/wEAAvgB /wEAAv0B/wEAA/8BAAP/AQAD/wEAAv4B/wEAAvYB/wEAAtUB/wEAAosB/wEAAkEB/wNaAfIDSgGLA04B - lQJDAX4B+AIAAeUB/wIAAe8B/wIAAfgB/wIAAf0B/wIAAv8CAAL/AgAC/wIAAf4B/wIAAfYB/wIAAdUB + lQJEAX0B+AIAAeUB/wIAAe8B/wIAAfgB/wIAAf0B/wIAAv8CAAL/AgAC/wIAAf4B/wIAAfYB/wIAAdUB /wIAAYsB/wIAAUEB/wNaAfIDSgGLA18B0wN+AfwDkwH/A44B/wONAf8DjgH/A44B/wOOAf8DjgH/A44B - /wONAf8DhQH/A2cB/wM0Af8DQQH5A1oBxAFbAV8BWwHTASsBrgErAfwBDgH7AQ4B/wEDAf0BAwH/AQAB + /wONAf8DhQH/A2cB/wM0Af8DQQH5A1oBxAFbAV8BWwHTASsBrAErAfwBDgH7AQ4B/wEDAf0BAwH/AQAB /gEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHvAQAB - /wEAAbkBAAH/AQABXQEAAf8DQQH5A1oBxAFbAl8B0wErAq4B/AEOAvsB/wEDAv0B/wEAAv4B/wEAA/8B - AAP/AQAD/wEAA/8BAAP/AQAC/QH/AQAC7wH/AQACuQH/AQACXQH/A0EB+QNaAcQCWwFfAdMCKwGuAfwC + /wEAAbkBAAH/AQABXQEAAf8DQQH5A1oBxAFbAl8B0wErAqwB/AEOAvsB/wEDAv0B/wEAAv4B/wEAA/8B + AAP/AQAD/wEAA/8BAAP/AQAC/QH/AQAC7wH/AQACuQH/AQACXQH/A0EB+QNaAcQCWwFfAdMCKwGsAfwC DgH7Af8CAwH9Af8CAAH+Af8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAf0B/wIAAe8B/wIAAbkB/wIAAV0B /wNBAfkDWgHEA24B9QOAAf4DnwH/A5MB/wOPAf8DjgH/A44B/wOOAf8DjgH/A44B/wOOAf8DiwH/A3cB - /wNIAf8DQAH9A2IB4QFVAXMBVQH1AT0BzQE9Af4BJwH/AScB/wELAf8BCwH/AQEB/wEBAf8BAAH/AQAB + /wNIAf8DQAH9A2IB4QFWAXEBVgH1AT4BywE+Af4BJwH/AScB/wELAf8BCwH/AQEB/wEBAf8BAAH/AQAB /wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH5AQAB/wEAAdYBAAH/AQAB - gQEAAf8BMgFAATIB/QNiAeEBVQJzAfUBPQLNAf4BJwP/AQsD/wEBA/8BAAP/AQAD/wEAA/8BAAP/AQAD - /wEAA/8BAAL5Af8BAALWAf8BAAKBAf8BMgJAAf0DYgHhAlUBcwH1Aj0BzQH+AicC/wILAv8CAQL/AgAC - /wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB+QH/AgAB1gH/AgABgQH/AjIBQAH9A2IB4QNrAfYDgAH+A6sB - /wOZAf8DkAH/A44B/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wN/Af8DVQH/A0AB/QNeAeIBSAF5AUgB - 9gFgAc0BYAH+AUIB/wFCAf8BGQH/ARkB/wEEAf8BBAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB - /wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHkAQAB/wEAAZgBAAH/ATIBQAEyAf0DXgHiAUgC - eQH2AWACzQH+AUID/wEZA/8BBAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC/QH/AQAC5AH/AQAC - mAH/ATICQAH9A14B4gJIAXkB9gJgAc0B/gJCAv8CGQL/AgQC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC - /wIAAf0B/wIAAeQB/wIAAZgB/wIyAUAB/QNeAeIDYQHWA34B/AO4Af8DowH/A5MB/wOOAf8DjgH/A44B - /wOOAf8DjgH/A44B/wONAf8DggH/A1wB/wNNAfoDWgHHAVwBYQFcAdYBZAGyAWQB/AFfAf8BXwH/AS8B + gQEAAf8BNAFAATQB/QNiAeEBVgJxAfUBPgLLAf4BJwP/AQsD/wEBA/8BAAP/AQAD/wEAA/8BAAP/AQAD + /wEAA/8BAAL5Af8BAALWAf8BAAKBAf8BNAJAAf0DYgHhAlYBcQH1Aj4BywH+AicC/wILAv8CAQL/AgAC + /wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB+QH/AgAB1gH/AgABgQH/AjQBQAH9A2IB4QNpAfYDgAH+A6sB + /wOZAf8DkAH/A44B/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wN/Af8DVQH/A0AB/QNeAeIBSAF4AUgB + 9gFhAcsBYQH+AUIB/wFCAf8BGQH/ARkB/wEEAf8BBAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB + /wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHkAQAB/wEAAZgBAAH/ATQBQAE0Af0DXgHiAUgC + eAH2AWECywH+AUID/wEZA/8BBAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC/QH/AQAC5AH/AQAC + mAH/ATQCQAH9A14B4gJIAXgB9gJhAcsB/gJCAv8CGQL/AgQC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC + /wIAAf0B/wIAAeQB/wIAAZgB/wI0AUAB/QNeAeIDYQHWA34B/AO4Af8DowH/A5MB/wOOAf8DjgH/A44B + /wOOAf8DjgH/A44B/wONAf8DggH/A1wB/wNNAfoDWgHHAVwBYQFcAdYBZAGwAWQB/AFfAf8BXwH/AS8B /wEvAf8BDAH/AQwB/wEBAf8BAQH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB - /wEAAf4BAAH/AQAB6gEAAf8BAAGlAQAB/wEtAU0BLQH6A1oBxwFcAmEB1gFkArIB/AFfA/8BLwP/AQwD - /wEBA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAAv4B/wEAAuoB/wEAAqUB/wEtAk0B+gNaAccCXAFhAdYC - ZAGyAfwCXwL/Ai8C/wIMAv8CAQL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH+Af8CAAHqAf8CAAGlAf8C - LQFNAfoDWgHHA1ABmgOHAfkDxQH/A7IB/wOcAf8DkQH/A44B/wOOAf8DjgH/A44B/wOPAf8DjgH/A4MB - /wNgAf8DWgHyA0wBkANQAZoBagGQAWoB+QF8Af8BfAH/AVEB/wFRAf8BHwH/AR8B/wEHAf8BBwH/AQEB + /wEAAf4BAAH/AQAB6gEAAf8BAAGlAQAB/wEuAU0BLgH6A1oBxwFcAmEB1gFkArAB/AFfA/8BLwP/AQwD + /wEBA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAAv4B/wEAAuoB/wEAAqUB/wEuAk0B+gNaAccCXAFhAdYC + ZAGwAfwCXwL/Ai8C/wIMAv8CAQL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH+Af8CAAHqAf8CAAGlAf8C + LgFNAfoDWgHHA1ABmgOGAfkDxQH/A7IB/wOcAf8DkQH/A44B/wOOAf8DjgH/A44B/wOPAf8DjgH/A4MB + /wNgAf8DWgHyA0wBkANQAZoBagGPAWoB+QF8Af8BfAH/AVEB/wFRAf8BHwH/AR8B/wEHAf8BBwH/AQEB /wEBAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAgH/AQIB/wECAf4BAgH/AQAB6wEAAf8BAAGtAQAB - /wFaAWsBWgHyA0wBkANQAZoBagKQAfkBfAP/AVED/wEfA/8BBwP/AQED/wEAA/8BAAP/AQAD/wECA/8B - AgL+Af8BAALrAf8BAAKtAf8BWgJrAfIDTAGQA1ABmgJqAZAB+QJ8Av8CUQL/Ah8C/wIHAv8CAQL/AgAC - /wIAAv8CAAL/AgIC/wICAf4B/wIAAesB/wIAAa0B/wJaAWsB8gNMAZADLwFJA2wB6wOeAf4DxgH/A64B - /wOcAf8DkwH/A5AB/wOPAf8DkAH/A5MB/wOTAf8DhQH/A00B/QNgAeADLQFFAy8BSQNsAesBgAHNAYAB + /wFaAWsBWgHyA0wBkANQAZoBagKPAfkBfAP/AVED/wEfA/8BBwP/AQED/wEAA/8BAAP/AQAD/wECA/8B + AgL+Af8BAALrAf8BAAKtAf8BWgJrAfIDTAGQA1ABmgJqAY8B+QJ8Av8CUQL/Ah8C/wIHAv8CAQL/AgAC + /wIAAv8CAAL/AgIC/wICAf4B/wIAAesB/wIAAa0B/wJaAWsB8gNMAZADLwFJA2wB6wOcAf4DxgH/A64B + /wOcAf8DkwH/A5AB/wOPAf8DkAH/A5MB/wOTAf8DhQH/A0wB/QNgAeADLQFFAy8BSQNsAesBgAHLAYAB /gF/Af8BfwH/AUkB/wFJAf8BHwH/AR8B/wEMAf8BDAH/AQUB/wEFAf8BAwH/AQMB/wEFAf8BBQH/AQoB - /wEKAf8BCgH+AQoB/wEBAe0BAQH/ATIBtgEyAf0BYAFmAWAB4AMtAUUDLwFJA2wB6wGAAs0B/gF/A/8B - SQP/AR8D/wEMA/8BBQP/AQMD/wEFA/8BCgP/AQoC/gH/AQEC7QH/ATICtgH9AWACZgHgAy0BRQMvAUkD - bAHrAoABzQH+An8C/wJJAv8CHwL/AgwC/wIFAv8CAwL/AgUC/wIKAv8CCgH+Af8CAQHtAf8CMgG2Af0C - YAFmAeADLQFFAwMBBANWAa4DbwH1A9kB/wPLAf8DtwH/A6cB/wOdAf8DmgH/A5wB/wOfAf8DmwH/A4kB - /wNoAfADUgGjAwMBBAMDAQQDVgGuAW4BcwFuAfUBqAH/AagB/wGJAf8BiQH/AVwB/wFcAf8BNwH/ATcB - /wEiAf8BIgH/ARsB/wEbAf8BHwH/AR8B/wEmAf8BJgH/AR0B/wEdAf8BBQHzAQUB/wFbAWgBWwHwA1IB - owMDAQQDAwEEA1YBrgFuAnMB9QGoA/8BiQP/AVwD/wE3A/8BIgP/ARsD/wEfA/8BJgP/AR0D/wEFAvMB - /wFbAmgB8ANSAaMDAwEEAwMBBANWAa4CbgFzAfUCqAL/AokC/wJcAv8CNwL/AiIC/wIbAv8CHwL/AiYC - /wIdAv8CBQHzAf8CWwFoAfADUgGjAwMBBAQAAxwBJwNdAccDdgH2A60B/gPXAf8DzAH/A8IB/wO7Af8D - twH/A7EB/wOAAf4DaAH0A1kBvAMbASYIAAMcAScDXQHHAXEBeQFxAfYBhQHNAYUB/gGlAf8BpQH/AYsB - /wGLAf8BdAH/AXQB/wFmAf8BZgH/AVwB/wFcAf8BTgH/AU4B/wFJAc0BSQH+AVMBdgFTAfQBVwFZAVcB - vAMbASYIAAMcAScDXQHHAXECeQH2AYUCzQH+AaUD/wGLA/8BdAP/AWYD/wFcA/8BTgP/AUkCzQH+AVMC - dgH0AVcCWQG8AxsBJggAAxwBJwNdAccCcQF5AfYChQHNAf4CpQL/AosC/wJ0Av8CZgL/AlwC/wJOAv8C - SQHNAf4CUwF2AfQCVwFZAbwDGwEmDAADIQEwA1kBtgNmAe4DkAH6A74B/QPUAf8DzAH/A74B/QODAfkD - bAHrA1UBrAMfASwQAAMhATADWQG2AWQBaAFkAe4BfQGdAX0B+gGuAb4BrgH9AZ8B/wGfAf8BjAH/AYwB - /wFdAb4BXQH9AWgBkAFoAfkBYQFsAWEB6wNVAawDHwEsEAADIQEwA1kBtgFkAmgB7gF9Ap0B+gGuAr4B - /QGfA/8BjAP/AV0CvgH9AWgCkAH5AWECbAHrA1UBrAMfASwQAAMhATADWQG2AmQBaAHuAn0BnQH6Aq4B - vgH9Ap8C/wKMAv8CXQG+Af0CaAGQAfkCYQFsAesDVQGsAx8BLBQAAwYBBwM2AVgDVQGsA2YB5QOdAfwD - kgH7A2UB4gNTAacDMwFRAwYBBxgAAwYBBwM2AVgDVQGsA2YB5QF+AbIBfgH8AWsBnQFrAfsDZQHiA1MB - pwMzAVEDBgEHGAADBgEHAzYBWANVAawDZgHlAX4CsgH8AWsCnQH7A2UB4gNTAacDMwFRAwYBBxgAAwYB - BwM2AVgDVQGsA2YB5QJ+AbIB/AJrAZ0B+wNlAeIDUwGnAzMBUQMGAQcMAAFCAU0BPgcAAT4DAAEoAwAB + /wEKAf8BCgH+AQoB/wEBAe0BAQH/ATQBtgE0Af0BYAFmAWAB4AMtAUUDLwFJA2wB6wGAAssB/gF/A/8B + SQP/AR8D/wEMA/8BBQP/AQMD/wEFA/8BCgP/AQoC/gH/AQEC7QH/ATQCtgH9AWACZgHgAy0BRQMvAUkD + bAHrAoABywH+An8C/wJJAv8CHwL/AgwC/wIFAv8CAwL/AgUC/wIKAv8CCgH+Af8CAQHtAf8CNAG2Af0C + YAFmAeADLQFFAwMBBANWAa4DbgH1A9kB/wPLAf8DtwH/A6cB/wOdAf8DmgH/A5wB/wOfAf8DmwH/A4kB + /wNoAfADUgGjAwMBBAMDAQQDVgGuAW4BcQFuAfUBqAH/AagB/wGJAf8BiQH/AVwB/wFcAf8BNwH/ATcB + /wEiAf8BIgH/ARsB/wEbAf8BHwH/AR8B/wEmAf8BJgH/AR0B/wEdAf8BBQHzAQUB/wFcAWgBXAHwA1IB + owMDAQQDAwEEA1YBrgFuAnEB9QGoA/8BiQP/AVwD/wE3A/8BIgP/ARsD/wEfA/8BJgP/AR0D/wEFAvMB + /wFcAmgB8ANSAaMDAwEEAwMBBANWAa4CbgFxAfUCqAL/AokC/wJcAv8CNwL/AiIC/wIbAv8CHwL/AiYC + /wIdAv8CBQHzAf8CXAFoAfADUgGjAwMBBAQAAxwBJwNdAccDdQH2A6sB/gPXAf8DzAH/A8IB/wO7Af8D + twH/A7EB/wOAAf4DaAH0A1kBvAMbASYIAAMcAScDXQHHAW8BeAFvAfYBgwHLAYMB/gGlAf8BpQH/AYsB + /wGLAf8BdAH/AXQB/wFmAf8BZgH/AVwB/wFcAf8BTgH/AU4B/wFKAcsBSgH+AVMBdQFTAfQBVwFZAVcB + vAMbASYIAAMcAScDXQHHAW8CeAH2AYMCywH+AaUD/wGLA/8BdAP/AWYD/wFcA/8BTgP/AUoCywH+AVMC + dQH0AVcCWQG8AxsBJggAAxwBJwNdAccCbwF4AfYCgwHLAf4CpQL/AosC/wJ0Av8CZgL/AlwC/wJOAv8C + SgHLAf4CUwF1AfQCVwFZAbwDGwEmDAADIQEwA1kBtgNlAe4DjQH6A74B/QPUAf8DzAH/A74B/QOCAfkD + bAHrA1UBrAMfASwQAAMhATADWQG2AWMBZwFjAe4BfQGbAX0B+gGuAb4BrgH9AZ8B/wGfAf8BjAH/AYwB + /wFcAb4BXAH9AWgBjwFoAfkBYQFsAWEB6wNVAawDHwEsEAADIQEwA1kBtgFjAmcB7gF9ApsB+gGuAr4B + /QGfA/8BjAP/AVwCvgH9AWgCjwH5AWECbAHrA1UBrAMfASwQAAMhATADWQG2AmMBZwHuAn0BmwH6Aq4B + vgH9Ap8C/wKMAv8CXAG+Af0CaAGPAfkCYQFsAesDVQGsAx8BLBQAAwYBBwM2AVgDVQGsA2YB5QOaAfwD + kQH7A2UB4gNTAacDMwFRAwYBBxgAAwYBBwM2AVgDVQGsA2YB5QF+AbABfgH8AWkBnAFpAfsDZQHiA1MB + pwMzAVEDBgEHGAADBgEHAzYBWANVAawDZgHlAX4CsAH8AWkCnAH7A2UB4gNTAacDMwFRAwYBBxgAAwYB + BwM2AVgDVQGsA2YB5QJ+AbAB/AJpAZwB+wNlAeIDUwGnAzMBUQMGAQcMAAFCAU0BPgcAAT4DAAEoAwAB QAMAASADAAEBAQABAQYAAQEWAAP/gQAB4AEHAeABBwHgAQcB4AEHAcABAwHAAQMBwAEDAcABAwGAAQEB gAEBAYABAQGAAQFQAAGAAQEBgAEBAYABAQGAAQEBwAEDAcABAwHAAQMBwAEDAeABBwHgAQcB4AEHAeAB Bws= @@ -220,170 +220,170 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu - SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAJiYAAAJNU0Z0AUkBTAIBAQMB - AAE4AQABOAEAASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMAASADAAEBAQABIAYAAUB6 - AAJMAUsB5wEIAQoBAAH/AyoBQAwAAyoBQAM2AVcDPwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8B + SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAECYAAAJNU0Z0AUkBTAIBAQMB + AAFAAQABQAEAASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMAASADAAEBAQABIAYAAUB6 + AAJRAVAB5wEIAQoBAAH/AyoBQAwAAyoBQAM2AVcDPwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8B bAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAjsBOgFiAzMBUQMYASFUAANTAaIDWwHAIAAD VAGmA1kBvPAAAyEBMANGAYAUAAEVAR8BBAH/AQ0BFQEAAf8BCAEKAQAB/wEIAQoBAAH/DAADRAF6A1MB - pwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgB - YQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoB - zwFnAWABWQHOAVoBWQFYAbsCUAFPAZsDKgFAVAADYQHQA20B7iAAA2IB1ANrAenkAANZAb8BCAEKAQAB - /wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wNZAb8DWQG/AUMB - dAEHAf8BRwF3AQwB/wElAUcBAAH/AQ4BGQEAAf8MAAJLAUoBigFdAVoBWAG9AY8BZwFFAeoBjwFnAUUB - 6gGPAWcBRQHqAY8BZwFFAeoBjwFnAUUB6gGPAWcBRQHqAY8BZwFFAeoBjwFnAUUB6gGPAWcBRQHqAY8B - ZwFFAeoBjwFnAUUB6gGPAWcBRQHqAY8BZwFFAeoBjwFnAUUB6gGPAWcBRQHqAYwBagFFAekBagFfAVgB - 0wFWAlUBrwMuAUhUAANhAdADbQHuIAADYgHUA2sB6eAAAQgBCgEAAf8BEAEeAQAB/wEhAUEBAAH/AScB - SwEAAf8BJgFKAQAB/wEhAUEBAAH/ARABHgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BKQFOAQAB - /wFaAZYBEAH/AVoBnAEQAf8BcwG2ASYB/wEYAS4BAAH/DAADSQGGAloBWAG3AYEBZQFQAeMBgQFlAVAB - 4wGBAWUBUAHjAYEBZQFQAeMBiAFqAU4B5gGdAWoBQAHtAbcBbwEsAfQB3AF3AQ4B/AH/AXgBAAL/AXgB - AAH/AbkBbgEpAfUBiAFqAU4B5gGBAWUBUAHjAYEBZQFQAeMBgQFlAVAB4wGAAWUBTwHiAWQBXgFZAc0C - VQFTAaoCLgEtAUZUAANhAdADbQHuIAADYgHUA2sB6dwAAQgBCgEAAf8BPQFxAQIB/wFMAYYBBwH/AVIB - jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFMAX8BDwH/ATsBZwEIAf8BIQE0AQgB - /wFTAY4BCwH/AVoBnAEQAf8BcgGzAScB/wFTAYEBGwH/EAADKwFBAzYBWQJAAT8BbgJAAT8BbgJAAT8B - bgJAAT8BbgNEAXsCUQFQAZ8BYAFdAVoBxQGcAWsBPQHuAf8BeAEAAv8BeAEAAf8BYwFfAVoByQNFAXwC - QAE/AW4CQAE/AW4CQAE/AW4DPwFtAzsBYwMzAVIDGQEiVAADYQHQA20B7iAAA2IB1ANrAenYAAEVASkB - AAH/AUoBhAEEAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8B - UgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BVgGQAQwB/wFaAZoBEAH/AVoBnAEQAf8BcgGpATAB/wEIAQoB - AAH/AQgBCgEAAf8MAAMMARADEQEWAxUBHAMVARwDFQEcAxUBHAMhATACPgE9AWkCUwFSAaUBhwFpAU0B - 5QH/AXgBAAL/AXgBAAH/AlUBUwGqAyIBMQMVARwDFQEcAxUBHAMUARsDEwEZAxABFQMHAQlUAANhAdAD - bQHuIAADYgHUA2sB6dQAARYBJwECAf8BSQGAAQcB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB - CAH/AVIBjAEIAf8BUgGMAQsB/wFSAYwBEAH/AVIBjAEQAf8BWAGSARAB/wFaAZQBEAH/AVoBmwEQAf8B - WgGcARAB/wFcAZ4BEgH/ATsBbQEDAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8IAAMFBAYECAEKAwgB - CgMIAQoDCAEKAxcBHwI5ATgBXQNRAZ4BgQFlAVAB4wH/AXgBAAL/AXgBAAH/A1IBowMYASEDCAEKAwgB - CgMIAQoDCAEKAwcBCQMGAQcDAgEDVAADYQHQA20B7iAAA2IB1ANrAenQAAFUAVYBUAHfAUcBgAEDAf8B - UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwB - EAH/AVIBjAEQAf8BWgGUARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8B - WgGYARAB/wEWASoBAAH/AQgBCgEAAf8BCAEKAQAB/xwAAxIBFwM1AVYDUAGaAXwBZwFTAeEB/wF4AQAC - /wF4AQAB/wJRAVABnwMSARhwAANhAdADbQHuIAADYgHUA2sB6dAAASwBUAEAAf8BSgGMAQAB/wFSAYwB - CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQ4B/wFVAZIBEAH/AVoBnAEQAf8B - WgGcARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQB - GAH/AVgBkgEWAf8BEAEeAQAB/wEIAQoBAAH/HAADEgEXAzUBVgNQAZoBfAFnAVMB4QH/AXgBAAL/AXgB - AAH/AlEBUAGfAxIBGHAAA2EB0ANtAe4gAANiAdQDawHp1AADSwGPATMBXgEAAf8BUgGMAQgB/wFSAYwB - CAH/AVIBjAEIAf8BUgGMARAB/wF/AcABMwH/AV8BngEXAf8BIAE/AQAB/wEIAQoBAAH/AVIBjAEQAf8B - WgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZUBFwH/AVoBlAEYAf8BWgGUARgB/wFaAZQB - GAH/AQgBCgEAAf8BCAEKAQAB/xgAAxIBFwM1AVYDUAGaAXwBZwFTAeEB/wF4AQAC/wF4AQAB/wJRAVAB - nwMSARgUAAQBAwMBBAMGBAcBCQMHAQkDBAEFBAIEARQAAxEBFgMhAS8DIQEvAyEBLwMhAS8DIQEvAyEB - LwMhAS8DIQEvAyEBLwNhAdkDcgHxAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DZgHcA20B - 7QMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMNARG4AAFCAXsBAAH/AVIBjAEIAf8B - ewHGASkB/wMzAVAEAAMMARABOQFrAQAB/wFaAZwBEAH/AVoBnAEQAf8BXQGXARMB/wFWAZQBDAH/AVoB - nAEQAf8BWgGUARgB/wFaAZQBGAH/AWMBnAEYAf8BYwGlARcB/wEpAVABAAH/AQgBCgEAAf8YAAMSARcD - NQFWA1ABmgF8AWcBUwHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYFAAEAgMJAQwDDwEUAxMBGgMSARgD - CgENAwQBBQQBFAADagHoA38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8D - fwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8D - fwH/A38B/wN/Af8DfwH/A2EBz7wAAQgBCgEAAf8MAAETASMBAAH/AVoBlAEQAf8BWgGcARAB/wGUAdYB - SgH/AQ0BEQECAf8BMQFaAQAB/wFaAZQBEgH/AVoBlAEYAf8BWgGUARgB/wFjAZwBGAH/AWMBpQEXAf8B - awGlASEB/wEQAR4BAAH/GAADEgEXAzUBVgNQAZoBfAFnAVMB4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIB - GBQAAwUBBgMdASkDMAFKAjsBPAFlAjsBPAFkAygBPAIVARYBHQMGAQgUAAM8AWQDTAGPA0wBjwNMAY8D - TAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DagHqA3wB+ANMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8D - TAGPA28B7ANvAfUDTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DNQFWqAACUgFQAd8B - CAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8DMwFQAzoBYAFLAYUB - BwH/AVoBlAEQAf8BWgGcARAB/wE5AWsBAAH/AwkBDAEQAR4BAAH/AVQBjgESAf8BWgGUARgB/wFjAZwB - GAH/AWMBnAEYAf8BYwGlARcB/wFzAbQBKQH/ARABHgEAAf8YAAMSARcDNQFWA1ABmgF8AWcBUwHhAf8B - eAEAAv8BeAEAAf8CUQFQAZ8DEgEYFAADCQEMAzMBUAJMAU0BkQJaAWMByQJaAWQBygNEAXoDKQE9AwwB - EDwAA2EB0ANtAe4gAANiAdQDawHpzAABCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB - AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BMwFfAQIB/wFaAZQBEAH/AVoBnAEQAf8B - rQHnAWMB/wEQAR4BAAH/AQgBCgEAAf8BFAEmAQAB/wFUAY4BEgH/AWIBmwEYAf8BYwGcARgB/wFjAaUB - FwH/AWMBpQEXAf8BYwGcASEB/wEYAS4BAAH/GAADEgEXAzUBVgNQAZoBfAFnAVMB4QH/AXgBAAL/AXgB - AAH/AlEBUAGfAxIBGBQAAwkBCwMuAUcDSAGEAlkBYAHDAlgBZAHLA0kBhQMuAUcDDwETPAADYQHQA20B - 7iAAA2IB1ANrAenIAAEIAQoBAAH/ASsBUgEAAf8BQQFyAQUB/wFKAYQBBgH/AUoBhAEGAf8BSgGEAQYB - /wFCAXMBBgH/ASkBUAEAAf8BEAEeAQAB/wEfAToBAAH/AVUBjwELAf8BWgGVARAB/wFaAZwBEAH/AdYB - /wGMAf8BEAEeAQAB/wEYAS4BAAH/AUIBeAEDAf8BWgGUARgB/wFiAZsBGAH/AWMBnAEYAf8BYwGlARcB - /wFjAaUBFwH/AXMBtAEpAf8BEAEeAQAB/xgAAxIBFwM1AVYDUAGaAXwBZwFTAeEB/wF4AQAC/wF4AQAB - /wJRAVABnwMSARgUAAMGAQgDJAE0AzwBZgNTAacCWAFaAbgCRwFIAYMDMQFNAw8BFDwAA2EB0ANtAe4g - AANiAdQDawHpxAABKAFNAQAB/wFOAYgBBwH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B - UgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGcARAB/wFjAaUB - FwH/AUIBewEAAf8BSgGEAQYB/wFSAYwBCAH/AVoBmAEUAf8BWgGUARgB/wFjAZwBGAH/AWMBpQEXAf8B - YwGlARcB/wFjAaUBFwH/AZQByQFNAf8EAAMQARUDGgEkAyEBLwMRARYEAgQBAxIBFwM1AVYDUAGaAXwB - ZwFTAeEB/wF4AQAC/wF4AQAB/wJRAVABnwMSARgUAAMDAQQDEwEZAyUBNgI7ATwBZAJBAUIBcgMzAVED - IQEvAwkBDDwAA2EB0ANtAe4gAANiAdQDawHpwAABKQFOAQIB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB - /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoB - lAEQAf8BWgGVARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB - /wFjAZwBGAH/AWMBnAEYAf8BYwGlARcB/wFjAaUBFwH/AWMBpQEXAf8BZQGgASEB/wQAAx4BKwIxATAB - TAM7AWMDIgExAwcBCQMEAQUDEgEYAzYBVwNQAZoBfAFnAVMB4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIB - GBwAAwcBCQMcAScDIwEyAhkBGgEjAw8BFAMEAQU8AANhAdADbQHuIAADYgHUA2sB6bwAA0YBgAFOAYgB - BwH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B - UgGMARAB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZcBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB - EAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AWMBnAEYAf8BYwGhARgB/wFjAaUBFwH/AWMBpQEXAf8B - eAG6ASwB/wEIAQoBAAH/BAADJAE0A0UBfAJaAVgBtwNOAZQDPwFtAygBOwMfASwDOQFeA1ABmgF8AWcB - UwHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAADEgEXAzwBZgNKAYkDQAFvAy4BRwMOARI8AANhAdAD - bQHuIAADYgHUA2sB6bwAATUBXgEHAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB - CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlAEQAf8B - WgGbARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZYBFgH/AVoBlAEYAf8BXQGXARgB/wFjAZwB - GAH/AWMBpQEXAf8BYwGlARcB/wFwAbMBIAH/ASsBUAEEAf8IAAMnAToCUwFRAaIB2QFqARUB+wGJAWoB - SwHnAV8BXAFaAcQCQwFCAXUDMQFNAkABPwFuAlEBUAGfAYEBZQFQAeMB/wF4AQAC/wF4AQAB/wJRAVAB - nwMSARgcAAMZASIDTgGVAlkBZAHNAlYBVwGyA0QBegMdASkDBgEIBAIEATAAA2EB0ANtAe4gAANiAdQD - awHpvAABSgGEAQYB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BZwGpARcB - /wFSAYwBCAH/AUoBhAEGAf8BSgGEAQYB/wFSAYwBEAH/AVoBlAEQAf8BWgGXARAB/wFaAZwBEAH/AVoB - nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB/wFfAZgBGAH/AWMBngEYAf8BYwGlARcB - /wFrAakBHQH/ASkBUAEAAf8MAAMiATEDTgGYAbEBbwExAfMBpAFqATYB8AGIAWoBTgHmAV4BWgFXAcIC - VQFTAaoDUwGnAlkBVwG8AZcBbAFHAesB/wF4AQAC/wF4AQAB/wJRAVABnwMSARgcAAMUARsCQwFEAXcC - VgFZAbYCWQFkAc0CVgFYAbMDPwFsAyYBOAMMAQ8DAgEDCAADAgEDAw0BEQMNAREDDQERAw0BEQMNARED - DQERAw0BEQMNAREDDQERA18B0wNvAe8DDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0BEQNiAdcD - agHqAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERAwQBBZQAAUoBhAEGAf8BUgGMAQgB - /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFpAaQBHgH/ASwBUAEDAf8BCAEKAQAB/wE3AWEBBwH/AVIB - jAEOAf8BUgGMARAB/wF/AcEBMgH/AVsBXgFYAdMCWgFZAb8BLwFZAQAB/wFEAXoBBQH/AVABigEIAf8B - WgGcAQ4B/wFaAZwBEAH/AVoBnAEQAf8BTwGGARAB/wFEAXQBDAH/AVkBWgFZAb8QAAIaARkBIwNEAXsB - ZAFdAVoBygFzAWMBVwHaAY0BaQFHAegBnwFrAToB7wGWAW0BQwHsAW0BYwFXAdYBbQFiAVYB2AG3AW8B - LAH0Af8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAADDwETAzQBUwNNAZICWgFoAc8CWQFtAdQCUgFUAagC - QQFCAXIDJgE4AxQBGwMGAQgDAgEDA1sBwgN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B + pwFlAWEBWwHPAWUBYQFbAc8BZQFhAVsBzwFlAWEBWwHPAWUBYQFbAc8BZQFhAVsBzwFlAWEBWwHPAWUB + YQFbAc8BZQFhAVsBzwFlAWEBWwHPAWUBYQFbAc8BZQFhAVsBzwFlAWEBWwHPAWUBYQFbAc8BZQFhAVsB + zwFjAWABWwHOA1kBuwJQAU8BmwMqAUBUAANfAdADbAHuIAADYQHUA2oB6eQAA1oBvwEIAQoBAAH/AQgB + CgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/A1oBvwNaAb8BQwF0AQcB + /wFHAXcBDAH/ASUBRwEAAf8BDgEZAQAB/wwAAksBSgGKAVwBWgFYAb0BhwFnAUgB6gGHAWcBSAHqAYcB + ZwFIAeoBhwFnAUgB6gGHAWcBSAHqAYcBZwFIAeoBhwFnAUgB6gGHAWcBSAHqAYcBZwFIAeoBhwFnAUgB + 6gGHAWcBSAHqAYcBZwFIAeoBhwFnAUgB6gGHAWcBSAHqAYcBZwFIAeoBhQFpAUkB6QFnAV8BWgHTA1UB + rwMuAUhUAANfAdADbAHuIAADYQHUA2oB6eAAAQgBCgEAAf8BEAEeAQAB/wEhAUEBAAH/AScBSwEAAf8B + JgFKAQAB/wEhAUEBAAH/ARABHgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BKQFOAQAB/wFaAZYB + EAH/AVoBnAEQAf8BcwG2ASYB/wEYAS4BAAH/DAADSQGGAloBWAG3AXsBZQFTAeMBewFlAVMB4wF7AWUB + UwHjAXsBZQFTAeMBggFqAVEB5gGWAWoBRQHtAa8BbQEwAfQB1wF3ARAB/AH/AXgBAAL/AXgBAAH/AbMB + bgEsAfUBggFqAVEB5gF7AWUBUwHjAXsBZQFTAeMBewFlAVMB4wF5AWUBUgHiAWEBXgFbAc0CVQFTAaoC + LgEtAUZUAANfAdADbAHuIAADYQHUA2oB6dwAAQgBCgEAAf8BPQFxAQIB/wFMAYYBBwH/AVIBjAEIAf8B + UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFMAX8BDwH/ATsBZwEIAf8BIQE0AQgB/wFTAY4B + CwH/AVoBnAEQAf8BcgGzAScB/wFTAYEBGwH/EAADKwFBAzYBWQJAAT8BbgJAAT8BbgJAAT8BbgJAAT8B + bgNEAXsCUQFQAZ8CXQFbAcUBlQFqAUIB7gH/AXgBAAL/AXgBAAH/AWABXwFbAckDRQF8AkABPwFuAkAB + PwFuAkABPwFuAz8BbQM7AWMDMwFSAxkBIlQAA18B0ANsAe4gAANhAdQDagHp2AABFQEpAQAB/wFKAYQB + BAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8B + UgGMARAB/wFaAZQBEAH/AVYBkAEMAf8BWgGaARAB/wFaAZwBEAH/AXIBqQEwAf8BCAEKAQAB/wEIAQoB + AAH/DAADDAEQAxEBFgMVARwDFQEcAxUBHAMVARwDIQEwAj4BPQFpAlMBUgGlAYABZwFRAeUB/wF4AQAC + /wF4AQAB/wJVAVMBqgMiATEDFQEcAxUBHAMVARwDFAEbAxMBGQMQARUDBwEJVAADXwHQA2wB7iAAA2EB + 1ANqAenUAAEWAScBAgH/AUkBgAEHAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB + CAH/AVIBjAELAf8BUgGMARAB/wFSAYwBEAH/AVgBkgEQAf8BWgGUARAB/wFaAZsBEAH/AVoBnAEQAf8B + XAGeARIB/wE7AW0BAwH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/CAADBQQGBAgBCgMIAQoDCAEKAwgB + CgMXAR8COQE4AV0DUQGeAXsBZQFTAeMB/wF4AQAC/wF4AQAB/wNSAaMDGAEhAwgBCgMIAQoDCAEKAwgB + CgMHAQkDBgEHAwIBA1QAA18B0ANsAe4gAANhAdQDagHp0AACVwFUAd8BRwGAAQMB/wFSAYwBCAH/AVIB + jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB + /wFaAZQBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZgBEAH/ARYB + KgEAAf8BCAEKAQAB/wEIAQoBAAH/HAADEgEXAzUBVgNQAZoBdgFmAVYB4QH/AXgBAAL/AXgBAAH/AlEB + UAGfAxIBGHAAA18B0ANsAe4gAANhAdQDagHp0AABLAFQAQAB/wFKAYwBAAH/AVIBjAEIAf8BUgGMAQgB + /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBDgH/AVUBkgEQAf8BWgGcARAB/wFaAZwBEAH/AVoB + lAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWAGSARYB + /wEQAR4BAAH/AQgBCgEAAf8cAAMSARcDNQFWA1ABmgF2AWYBVgHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8D + EgEYcAADXwHQA2wB7iAAA2EB1ANqAenUAANLAY8BMwFeAQAB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB + /wFSAYwBEAH/AX8BwAEzAf8BXwGeARcB/wEgAT8BAAH/AQgBCgEAAf8BUgGMARAB/wFaAZwBEAH/AVoB + nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlQEXAf8BWgGUARgB/wFaAZQBGAH/AVoBlAEYAf8BCAEKAQAB + /wEIAQoBAAH/GAADEgEXAzUBVgNQAZoBdgFmAVYB4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGBQABAED + AwEEAwYEBwEJAwcBCQMEAQUEAgQBFAADEQEWAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8D + IQEvA2EB2QNxAfEDIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwNkAdwDawHtAyEBLwMhAS8D + IQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAw0BEbgAAUIBewEAAf8BUgGMAQgB/wF7AcYBKQH/AzMB + UAQAAwwBEAE5AWsBAAH/AVoBnAEQAf8BWgGcARAB/wFdAZcBEwH/AVYBlAEMAf8BWgGcARAB/wFaAZQB + GAH/AVoBlAEYAf8BYwGcARgB/wFjAaUBFwH/ASkBUAEAAf8BCAEKAQAB/xgAAxIBFwM1AVYDUAGaAXYB + ZgFWAeEB/wF4AQAC/wF4AQAB/wJRAVABnwMSARgUAAQCAwkBDAMPARQDEwEaAxIBGAMKAQ0DBAEFBAEU + AANpAegDfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B /wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B - /wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wNmAdyUAAFKAYwBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB - CAH/AVIBjAEIAf8BZwGdAScB/wEIAQoBAAH/AQoBDwEAAf8BQgF3AQMB/wFSAYwBEAH/AVoBnAEQAf8B - JQFBAQUB/wQAAzoBYAEIAQoBAAH/AQgBCgEAAf8EAANGAYADRgGAA0YBgBwAAwoBDQMiATEDNAFUA0QB - eAJRAVABnwFoAWEBWgHPAZ0BagFAAe0BlgFtAUMB7AGkAWoBNgHwAdkBagEVAfsB/wF4AQAC/wF4AQAB - /wJRAVABnwMSARgcAAMGAQgDGAEhAzEBTQJMAU0BkQJYAV0BvQJZAWcB0QJZAWABwwJRAVMBogM9AWcC - GQEaASMDDAEPA0ABbwNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNsAfADfQH6A1UB - rQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DcgHxA3wB+ANVAa0DVQGtA1UBrQNVAa0DVQGtA1UB - rQNVAa0DVQGtA1UBrQNHAYGUAAE7AW0BAgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B - UwGOARAB/wEPARsBAAH/ASMBQwEAAf8BUgGMARAB/wFSAYwBEAH/AXsBvQEwAf8BCAEKAQAB/wEIAQoB - AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/ygAAwMBBAMJAQsDIgExAzgB - WwJPAU4BlwFkAV8BWwHIAYcBaQFNAeUByAFvASUB9wHqAXEBDgH9Af8BeAEAAv8BeAEAAf8CUQFQAZ8D - EgEYHAAEAQMCAQMDFQEcAzUBVgJLAUwBjwJbAWQByAJQAXcB3wJQAYEB4wJSAVMBpQM0AVMDHAEnKAAD - YQHQA20B7iAAA2IB1ANrAem8AAEIAQoBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B - UgGMAQgB/wFOAYIBDwH/AUoBhAEGAf8BUgGMARAB/wFjAaUBFwH/AQgBCgEAAf8BCAEKAQAB/wETASMB - AAH/AUIBcwEGAf8BIAE/AQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8g - AAQBAwMBBAMMARADGAEgAykBPQM+AWoCVwFWAbUBhwFpAU0B5QHIAW8BJQH3Af8BeAEAAv8BeAEAAf8C - UQFQAZ8DEgEYIAAEAQMHAQkDFAEbAyoBQANDAXYCVQFWAa8CRQGMAekCWAFoAdACUAFRAZ8DMwFRKAAD - YQHQA20B7iAAA2IB1ANrAenAAAFCAXMBBgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B - UgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BSgGEAQYB/wEQAR4BAAH/ATEBWgEAAf8BTQGEAQ0B/wFaAZwB - EAH/AVoBnAEQAf8BUgGMAQgB/wEQAR4BAAH/AQgBCgEAAf8BCAEKAQAB/wNGAYAsAAMCAQMDCwEOAyAB - LgNDAXYBWAFXAVUBsQF9AWYBUgHgAb4BcQElAfYB0wFqARwB+QJRAVABnAMSARcMAAQBAwwBEAMXAR8D - HQEoAx0BKAMMAQ8IAAMPARQCJgEnATkCRwFIAYMCUwF8AeECSwGJAecCWQFpAdICPwFAAW4oAANhAdAD - bQHuIAADYgHUA2sB6cQAAUkBiQEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB - EAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8B - WgGcARAB/wFaAZQBGAH/AUIBcwEGAf8BCgEOAQAB/zAABAEDAwEEAwwBDwMeASoDOgFhAVsBWQFXAbkB - gQFnAUsB5AGcAWsBPQHuAk8BTgGXAxIBFwwAAwIBAwMhAS8DNgFZAkIBQwF1AkEBQgFzAx4BKwgAAwQB - BQMMAQ8DOAFcAlkBZwHOAkMBlgHsAjoBnwHvA0YBfygAA2EB0ANtAe4gAANiAdQDawHpyAABOgFrAQAB - /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZQBEAH/AVoB - nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AWMBpQEXAf8BGQEsAQMB - /zgAAwIBAwMIAQoDIAEtAkEBQAFxAk0BTAGRA1ABmgI7AToBYgMMAQ8MAAMDAQQDKwFBA0QBegNTAacD - VQGtAzcBWgMYASADCQELAwYBBwMNAREDOQFfAlkBZwHRAjoBnwHvAjEBsQHzAkYBRwGBKAADYQHQA20B - 7iAAA2IB1ANrAenMAAEsAVUBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB - /wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/ASEB - QQEAAf9AAAQCAwcBCQMQBBUBHAIWARUBHQMPARMDAgEDDAADAwEEAzADSwFMAY8CWgFkAcoCVAF3Ad4D - TgGUAzQBUwMVARwDDQERAx4BKwJDAUQBdwJQAXcB3wI3AasB8QJFAYwB6QNEAXsoAANhAdADbQHuIAAD - YgHUA2sB6cgAARIBIgEAAf8BTAGGAQYB/wFSAYwBCAH/AVoBnAEQAf8BUAGKAQgB/wFSAYwBEAH/AVoB - lAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEQH/AWkBqwEfAf8BCAEKAQAB - /2wAAwIBAwMhAS8DOgFhA1UBrQJXAXMB2gJZAVwBvwJQAVEBnwNEAXoCQQFCAXIDSQGFAlYBVwGyAkAB - nQHtAlYBdQHbAlUBWAGxAzgBWygAA2EB0ANtAe4gAANiAdQDawHpyAABEAEeAQAB/wFIAX0BBwH/AVkB - kwETAf8BVQGIARgB/wgAASEBQQEAAf8BQgF7AQAB/wFSAYwBCAH/AVUBkQEIAf8BOQFmAQQB/wFAAUUB - OgHveAADBgEIAxcBHwNEAXsCWQFhAcYCSwGBAeQCLAG3AfQCPQGcAe4CPQGcAe4CNwGrAfECJQG+AfYC - DgHcAfwCWQFdAb4DPgFrAyQBNCgAA2EB0ANtAe4gAANiAdQDawHp0AABHgE6AQAB/5wABAIDCQEMAyoD - PwFAAW4DTgGWAlYBWAGzAlkBXgHBAlkBYAHHAlkBYAHHAlcBWwG5AlEBUgGkAkABQQFxAyUBNgMTARko - AANhAdADbQHuIAADYgHUA2sB6f8AeQAEAQMLAQ4DJgE4AzkBXgNGAX0CSgFLAYsDSgGJAz4BawMqAT8D - FwEfAwIBAywAA1MBogNaAb8gAANUAaYDWQG7qAABQgFNAT4HAAE+AwABKAMAAYADAAEgAwABAQEAAQEG - AAECFgAD/wEAA/8BxwIAAQcC/wHPAfMB/wQAAv8BzwGHAgABBwL/Ac8B8wH/BAAB/wH+AQABBwIAAQcC - /wHPAfMB/wQAAf8B/AEAAQcCAAEHAv8BzwHzAf8EAAH/AfgBAAEPAgABBwL/Ac8B8wH/BAAB/wHwAQAB - BwIAAQcC/wHPAfMB/wQAAf8B4AEAAQMCAAEHAv8BzwHzAf8EAAH/AcABAAEBAfwBAwP/Ac8B8wH/BAAB - /wHAAQABAQH8AQMD/wHPAfMB/wQAAf8B4AIAAfwBAwHgAR8IAAH/AfwBIAEAAfwBAwHgAR8IAAH/Af4B - 4AEAAfwBAwHgAR8IAAH/AcACAAH8AQMB4AEfAf8BzwHzAf8EAAH/AYACAAH8AQMB4AEfAf8BzwHzAf8E - AAH/AwAB/AEDAeABHwH/Ac8B8wH/BAAB/gIAAQEBAAEDAeABHwH/Ac8B8wH/BAAB/AIAAQEBAAEDAfgB - HwH/Ac8B8wH/BAAB+AIAAQEBAAEDAfgBHwH/Ac8B8wH/BAAB+AIAAQMBAAEDAfgBAwH/Ac8B8wH/BAAB - +AIAAQcBAAEDAfgBAwgAAfgCAAEPAQABAwH4CQAB+AEAAUQBfwEAAQMB+AkAAfgBAAEBAf8BgAEDAfgB - AAH/Ac8B8wH/BAAB+AIAAX8BgAEDAfwBAAH/Ac8B8wH/BAAB/AIAAX8B8AEDAYEBgAH/Ac8B8wH/BAAB - /gIAAf8B8AEDAYEBgAH/Ac8B8wH/BAAB/wIAAf8B/AEDAYABAAH/Ac8B8wH/BAAB/wGAAQEB/wH+AQMB - gAEAAf8BzwHzAf8EAAH/AQABAwP/AYABAAH/Ac8B8wH/BAAB/wEMAQ8D/wHAAQAB/wHPAfMB/wQAAf8B - 3wT/AcABAAH/Ac8B8wH/BAAG/wHwAQEB/wHPAfMB/wQACw== + /wN/Af8DYQHPvAABCAEKAQAB/wwAARMBIwEAAf8BWgGUARAB/wFaAZwBEAH/AZQB1gFKAf8BDQERAQIB + /wExAVoBAAH/AVoBlAESAf8BWgGUARgB/wFaAZQBGAH/AWMBnAEYAf8BYwGlARcB/wFrAaUBIQH/ARAB + HgEAAf8YAAMSARcDNQFWA1ABmgF2AWYBVgHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYFAADBQEGAx0B + KQMwAUoCOwE8AWUCOwE8AWQDKAE8AhUBFgEdAwYBCBQAAzwBZANMAY8DTAGPA0wBjwNMAY8DTAGPA0wB + jwNMAY8DTAGPA0wBjwNoAeoDfAH4A0wBjwNMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DbgHsA24B + 9QNMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwM1AVaoAAJWAVQB3wEIAQoBAAH/AQgB + CgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wMzAVADOgFgAUsBhQEHAf8BWgGUARAB + /wFaAZwBEAH/ATkBawEAAf8DCQEMARABHgEAAf8BVAGOARIB/wFaAZQBGAH/AWMBnAEYAf8BYwGcARgB + /wFjAaUBFwH/AXMBtAEpAf8BEAEeAQAB/xgAAxIBFwM1AVYDUAGaAXYBZgFWAeEB/wF4AQAC/wF4AQAB + /wJRAVABnwMSARgUAAMJAQwDMwFQAkwBTQGRAlsBYAHJAlsBYQHKA0QBegMpAT0DDAEQPAADXwHQA2wB + 7iAAA2EB1ANqAenMAAEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB + /wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEzAV8BAgH/AVoBlAEQAf8BWgGcARAB/wGtAecBYwH/ARAB + HgEAAf8BCAEKAQAB/wEUASYBAAH/AVQBjgESAf8BYgGbARgB/wFjAZwBGAH/AWMBpQEXAf8BYwGlARcB + /wFjAZwBIQH/ARgBLgEAAf8YAAMSARcDNQFWA1ABmgF2AWYBVgHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8D + EgEYFAADCQELAy4BRwNIAYQCWQFeAcMCWQFiAcsDSQGFAy4BRwMPARM8AANfAdADbAHuIAADYQHUA2oB + 6cgAAQgBCgEAAf8BKwFSAQAB/wFBAXIBBQH/AUoBhAEGAf8BSgGEAQYB/wFKAYQBBgH/AUIBcwEGAf8B + KQFQAQAB/wEQAR4BAAH/AR8BOgEAAf8BVQGPAQsB/wFaAZUBEAH/AVoBnAEQAf8B1gH/AYwB/wEQAR4B + AAH/ARgBLgEAAf8BQgF4AQMB/wFaAZQBGAH/AWIBmwEYAf8BYwGcARgB/wFjAaUBFwH/AWMBpQEXAf8B + cwG0ASkB/wEQAR4BAAH/GAADEgEXAzUBVgNQAZoBdgFmAVYB4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIB + GBQAAwYBCAMkATQDPAFmA1MBpwJYAVkBuAJHAUgBgwMxAU0DDwEUPAADXwHQA2wB7iAAA2EB1ANqAenE + AAEoAU0BAAH/AU4BiAEHAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIB + jAEIAf8BUgGMARAB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZwBEAH/AWMBpQEXAf8BQgF7AQAB + /wFKAYQBBgH/AVIBjAEIAf8BWgGYARQB/wFaAZQBGAH/AWMBnAEYAf8BYwGlARcB/wFjAaUBFwH/AWMB + pQEXAf8BlAHJAU0B/wQAAxABFQMaASQDIQEvAxEBFgQCBAEDEgEXAzUBVgNQAZoBdgFmAVYB4QH/AXgB + AAL/AXgBAAH/AlEBUAGfAxIBGBQAAwMBBAMTARkDJQE2AjsBPAFkAkEBQgFyAzMBUQMhAS8DCQEMPAAD + XwHQA2wB7iAAA2EB1ANqAenAAAEpAU4BAgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B + UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZUB + EAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AWMBnAEYAf8B + YwGcARgB/wFjAaUBFwH/AWMBpQEXAf8BYwGlARcB/wFlAaABIQH/BAADHgErAjEBMAFMAzsBYwMiATED + BwEJAwQBBQMSARgDNgFXA1ABmgF2AWYBVgHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAADBwEJAxwB + JwMjATICGQEaASMDDwEUAwQBBTwAA18B0ANsAe4gAANhAdQDagHpvAADRgGAAU4BiAEHAf8BUgGMAQgB + /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIB + jAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlwEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB + /wFaAZQBGAH/AVoBlAEYAf8BYwGcARgB/wFjAaEBGAH/AWMBpQEXAf8BYwGlARcB/wF4AboBLAH/AQgB + CgEAAf8EAAMkATQDRQF8AloBWAG3A04BlAM/AW0DKAE7Ax8BLAM5AV4DUAGaAXYBZgFWAeEB/wF4AQAC + /wF4AQAB/wJRAVABnwMSARgcAAMSARcDPAFmA0oBiQNAAW8DLgFHAw4BEjwAA18B0ANsAe4gAANhAdQD + agHpvAABNQFeAQcB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB + /wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGUARAB/wFaAZsBEAH/AVoB + nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlgEWAf8BWgGUARgB/wFdAZcBGAH/AWMBnAEYAf8BYwGlARcB + /wFjAaUBFwH/AXABswEgAf8BKwFQAQQB/wgAAycBOgJTAVEBogHWAWgBGAH7AYIBaAFQAecBXQFcAVoB + xAJDAUIBdQMxAU0CQAE/AW4CUQFQAZ8BewFlAVMB4wH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGBwAAxkB + IgNOAZUCWwFhAc0CVgFXAbIDRAF6Ax0BKQMGAQgEAgQBMAADXwHQA2wB7iAAA2EB1ANqAem8AAFKAYQB + BgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFnAakBFwH/AVIBjAEIAf8B + SgGEAQYB/wFKAYQBBgH/AVIBjAEQAf8BWgGUARAB/wFaAZcBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB + EAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AV8BmAEYAf8BYwGeARgB/wFjAaUBFwH/AWsBqQEdAf8B + KQFQAQAB/wwAAyIBMQNOAZgBqwFvATYB8wGbAWkBOwHwAYIBagFRAeYBXQFaAVcBwgJVAVMBqgNTAacC + WQFXAbwBjwFsAUwB6wH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGBwAAxQBGwJDAUQBdwJWAVkBtgJbAWEB + zQJWAVgBswM/AWwDJgE4AwwBDwMCAQMIAAMCAQMDDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0B + EQMNAREDXwHTA20B7wMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERA2IB1wNoAeoDDQERAw0B + EQMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDBAEFlAABSgGEAQYB/wFSAYwBCAH/AVIBjAEIAf8B + UgGMAQgB/wFSAYwBCAH/AWkBpAEeAf8BLAFQAQMB/wEIAQoBAAH/ATcBYQEHAf8BUgGMAQ4B/wFSAYwB + EAH/AX8BwQEyAf8BWwFeAVoB0wNaAb8BLwFZAQAB/wFEAXoBBQH/AVABigEIAf8BWgGcAQ4B/wFaAZwB + EAH/AVoBnAEQAf8BTwGGARAB/wFEAXQBDAH/A1oBvxAAAhoBGQEjA0QBewFhAV0BWwHKAW0BYwFaAdoB + hQFpAUwB6AGXAWkBPgHvAY8BbAFHAewBaQFhAVkB1gFoAWEBWQHYAa8BbQEwAfQB/wF4AQAC/wF4AQAB + /wJRAVABnwMSARgcAAMPARMDNAFTA00BkgJbAWUBzwJbAWoB1AJSAVQBqAJBAUIBcgMmATgDFAEbAwYB + CAMCAQMDWgHCA38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B + /wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B + /wN/Af8DfwH/A2QB3JQAAUoBjAEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFnAZ0B + JwH/AQgBCgEAAf8BCgEPAQAB/wFCAXcBAwH/AVIBjAEQAf8BWgGcARAB/wElAUEBBQH/BAADOgFgAQgB + CgEAAf8BCAEKAQAB/wQAA0YBgANGAYADRgGAHAADCgENAyIBMQM0AVQDRAF4AlEBUAGfAWUBYQFbAc8B + lgFqAUUB7QGPAWwBRwHsAZsBaQE7AfAB1gFoARgB+wH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGBwAAwYB + CAMYASEDMQFNAkwBTQGRAlgBXAG9AlsBZAHRAlkBXgHDAlEBUwGiAz0BZwIZARoBIwMMAQ8DQAFvA1UB + rQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA2sB8AN9AfoDVQGtA1UBrQNVAa0DVQGtA1UB + rQNVAa0DVQGtA1UBrQNxAfEDfAH4A1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA0cB + gZQAATsBbQECAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFTAY4BEAH/AQ8BGwEAAf8B + IwFDAQAB/wFSAYwBEAH/AVIBjAEQAf8BewG9ATAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB + AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/KAADAwEEAwkBCwMiATEDOAFbAk8BTgGXAWEBXwFcAcgB + gAFnAVEB5QHDAW8BKgH3AecBcAEQAf0B/wF4AQAC/wF4AQAB/wJRAVABnwMSARgcAAQBAwIBAwMVARwD + NQFWAksBTAGPAlwBYQHIAlQBcQHfAlMBewHjAlIBUwGlAzQBUwMcAScoAANfAdADbAHuIAADYQHUA2oB + 6bwAAQgBCgEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AU4BggEPAf8B + SgGEAQYB/wFSAYwBEAH/AWMBpQEXAf8BCAEKAQAB/wEIAQoBAAH/ARMBIwEAAf8BQgFzAQYB/wEgAT8B + AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/yAABAEDAwEEAwwBEAMYASAD + KQE9Az4BagJXAVYBtQGAAWcBUQHlAcMBbwEqAfcB/wF4AQAC/wF4AQAB/wJRAVABnwMSARggAAQBAwcB + CQMUARsDKgFAA0MBdgNVAa8CSQGFAekCWwFlAdACUAFRAZ8DMwFRKAADXwHQA2wB7iAAA2EB1ANqAenA + AAFCAXMBBgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIB + jAEQAf8BSgGEAQYB/wEQAR4BAAH/ATEBWgEAAf8BTQGEAQ0B/wFaAZwBEAH/AVoBnAEQAf8BUgGMAQgB + /wEQAR4BAAH/AQgBCgEAAf8BCAEKAQAB/wNGAYAsAAMCAQMDCwEOAyABLgNDAXYCVwFVAbEBdwFmAVUB + 4AG2AW8BKQH2Ac0BagEeAfkCUQFQAZwDEgEXDAAEAQMMARADFwEfAx0BKAMdASgDDAEPCAADDwEUAiYB + JwE5AkcBSAGDAlYBdgHhAlABggHnAloBZQHSAj8BQAFuKAADXwHQA2wB7iAAA2EB1ANqAenEAAFJAYkB + AAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwBEAH/AVIBjAEQAf8B + UgGMARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFCAXMB + BgH/AQoBDgEAAf8wAAQBAwMBBAMMAQ8DHgEqAzoBYQJZAVcBuQF6AWUBTwHkAZUBagFCAe4CTwFOAZcD + EgEXDAADAgEDAyEBLwM2AVkCQgFDAXUCQQFCAXMDHgErCAADBAEFAwwBDwM4AVwCWwFjAc4CRwGPAewC + PgGXAe8DRgF/KAADXwHQA2wB7iAAA2EB1ANqAenIAAE6AWsBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB + CAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8B + WgGcARAB/wFaAZQBGAH/AVoBlAEYAf8BYwGlARcB/wEZASwBAwH/OAADAgEDAwgBCgMgAS0CQQFAAXEC + TQFMAZEDUAGaAjsBOgFiAwwBDwwAAwMBBAMrAUEDRAF6A1MBpwNVAa0DNwFaAxgBIAMJAQsDBgEHAw0B + EQM5AV8CWwFkAdECPgGXAe8CNgGrAfMCRgFHAYEoAANfAdADbAHuIAADYQHUA2oB6cwAASwBVQEAAf8B + UgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwB + EAH/AVoBnAEQAf8BWgGcARAB/wFaAZQBGAH/AVoBlAEYAf8BIQFBAQAB/0AABAIDBwEJAxAEFQEcAhYB + FQEdAw8BEwMCAQMMAAMDAQQDMANLAUwBjwJbAWEBygJWAXIB3gNOAZQDNAFTAxUBHAMNAREDHgErAkMB + RAF3AlQBcQHfAjwBpAHxAkkBhQHpA0QBeygAA18B0ANsAe4gAANhAdQDagHpyAABEgEiAQAB/wFMAYYB + BgH/AVIBjAEIAf8BWgGcARAB/wFQAYoBCAH/AVIBjAEQAf8BWgGUARAB/wFaAZwBEAH/AVoBnAEQAf8B + WgGcARAB/wFaAZwBEAH/AVoBnAERAf8BaQGrAR8B/wEIAQoBAAH/bAADAgEDAyEBLwM6AWEDVQGtAloB + bQHaAloBWwG/AlABUQGfA0QBegJBAUIBcgNJAYUCVgFXAbICRQGWAe0CWQFwAdsCVQFXAbEDOAFbKAAD + XwHQA2wB7iAAA2EB1ANqAenIAAEQAR4BAAH/AUgBfQEHAf8BWQGTARMB/wFVAYgBGAH/CAABIQFBAQAB + /wFCAXsBAAH/AVIBjAEIAf8BVQGRAQgB/wE5AWYBBAH/AUQBSQE+Ae94AAMGAQgDFwEfA0QBewJZAV8B + xgJPAXoB5AIwAa8B9AJCAZUB7gJCAZUB7gI8AaQB8QIpAbYB9gIQAdcB/AJZAVwBvgM+AWsDJAE0KAAD + XwHQA2wB7iAAA2EB1ANqAenQAAEeAToBAAH/nAAEAgMJAQwDKgM/AUABbgNOAZYCVgFYAbMCWQFcAcEC + WgFeAccCWgFeAccCVwFZAbkCUQFSAaQCQAFBAXEDJQE2AxMBGSgAA18B0ANsAe4gAANhAdQDagHp/wB5 + AAQBAwsBDgMmATgDOQFeA0YBfQJKAUsBiwNKAYkDPgFrAyoBPwMXAR8DAgEDLAADUwGiA1oBvyAAA1QB + pgNZAbuoAAFCAU0BPgcAAT4DAAEoAwABgAMAASADAAEBAQABAQYAAQIWAAP/AQAD/wHHAgABBwL/Ac8B + 8wH/BAAC/wHPAYcCAAEHAv8BzwHzAf8EAAH/Af4BAAEHAgABBwL/Ac8B8wH/BAAB/wH8AQABBwIAAQcC + /wHPAfMB/wQAAf8B+AEAAQ8CAAEHAv8BzwHzAf8EAAH/AfABAAEHAgABBwL/Ac8B8wH/BAAB/wHgAQAB + AwIAAQcC/wHPAfMB/wQAAf8BwAEAAQEB/AEDA/8BzwHzAf8EAAH/AcABAAEBAfwBAwP/Ac8B8wH/BAAB + /wHgAgAB/AEDAeABHwgAAf8B/AEgAQAB/AEDAeABHwgAAf8B/gHgAQAB/AEDAeABHwgAAf8BwAIAAfwB + AwHgAR8B/wHPAfMB/wQAAf8BgAIAAfwBAwHgAR8B/wHPAfMB/wQAAf8DAAH8AQMB4AEfAf8BzwHzAf8E + AAH+AgABAQEAAQMB4AEfAf8BzwHzAf8EAAH8AgABAQEAAQMB+AEfAf8BzwHzAf8EAAH4AgABAQEAAQMB + +AEfAf8BzwHzAf8EAAH4AgABAwEAAQMB+AEDAf8BzwHzAf8EAAH4AgABBwEAAQMB+AEDCAAB+AIAAQ8B + AAEDAfgJAAH4AQABRAF/AQABAwH4CQAB+AEAAQEB/wGAAQMB+AEAAf8BzwHzAf8EAAH4AgABfwGAAQMB + /AEAAf8BzwHzAf8EAAH8AgABfwHwAQMBgQGAAf8BzwHzAf8EAAH+AgAB/wHwAQMBgQGAAf8BzwHzAf8E + AAH/AgAB/wH8AQMBgAEAAf8BzwHzAf8EAAH/AYABAQH/Af4BAwGAAQAB/wHPAfMB/wQAAf8BAAEDA/8B + gAEAAf8BzwHzAf8EAAH/AQwBDwP/AcABAAH/Ac8B8wH/BAAB/wHfBP8BwAEAAf8BzwHzAf8EAAb/AfAB + AQH/Ac8B8wH/BAAL @@ -393,13 +393,13 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu - SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAChkAAAJNU0Z0AUkBTAIBAQUB - AAHQAQAB0AEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASAa + SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAABBkAAAJNU0Z0AUkBTAIBAQUB + AAHYAQAB2AEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASAa AAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8DVQGsAzABS8wAAzsB - YgNdAcUBawJoAfQBnwFlATEB/wGXAVMBFwH/AZYBSwEJAf8BkwFGAQEB/wGMAUMBAwH/AX0BQAELAf8B + YgNdAcUBaQJoAfQBnwFlATEB/wGXAVMBFwH/AZYBSwEJAf8BkwFGAQEB/wGMAUMBAwH/AX0BQAELAf8B awFAARoB/wFuAVABNgH/A2gB8ANaAbcDNAFUxAADNQFVA10BxwJuAVoB9QG4AWUBGwH/AbkBWAECAf8B yQFfAQAB/wHYAWUBAAH/AdwBZwEAAf8B1gFkAQAB/wHDAVwBAAH/AaIBTAEAAf8BfAE7AQMB/wFuAUYB - IwH/A2gB8ANaAbcDMAFKwAADXAHEAYQBfAFcAfgB1AFxARgB/wHXAWUBAAH/AeUBbAEAAf8B8gFyAQAB + IwH/A2gB8ANaAbcDMAFKwAADXAHEAYEBfAFcAfgB1AFxARgB/wHXAWUBAAH/AeUBbAEAAf8B8gFyAQAB /wH6AXUBAAH/AfwBdgEAAf8B+gF2AQAB/wHzAXIBAAH/AeIBawEAAf8BvQFZAQAB/wGHAUABAAH/AXEB SAEjAf8DaAHwA1YBq8AAAf4B3QHBAf8B7QGAASAB/wHtAXEBAgH/AfMBcwEAAf8B+gF2AQAB/wH+AXgB AAL/AXsBCAL/AYgBJwL/AaIBUwH/Af4BgQEXAf8B/AF4AQQB/wHsAW8BAAH/AcEBWwEAAf8BhgFBAQMB @@ -415,92 +415,92 @@ ZAEJAf8BYwFhAV0B38AAAf8BzAGfAv8BrAFjAv8BkwEzAv8BgQERAv8BeQECAv8BggEWAv8BmgFLAv8B rgF4Av8BpQFXAv8BgQEXAv8BeQEEAv8BeAEAAv8BeAEAAf8B8AFxAQAB/wHVAXEBFwH/AmMBXQHfwAAB /wHpAdUC/wG8AYEC/wGkAVQC/wGOASoC/wF/AQ0C/wF5AQIC/wF7AQkC/wGCAR0C/wF4AQAC/wF4AQAC - /wF4AQEC/wF6AQQC/wF6AQMB/wHzAXQBAwH/AeIBhAEyAf8DYwHfwAADXgHSAY8BiAF/AfkB/wG7AX0C + /wF4AQEC/wF6AQQC/wF6AQMB/wHzAXQBAwH/AeIBhAEyAf8DYwHfwAADXgHSAY4BhwF9AfkB/wG7AX0C /wGjAVIC/wGQASwC/wGCARMC/wF9AQgC/wF6AQQC/wF5AQIC/wF6AQQC/wF9AQkC/wGAAQ8C/wF/AQ0B - /wH4AYYBIAH/AXQCaAH0A1gBuMAAAzwBZgNjAdUBiwF9AXwB+AH/Ab4BhQL/AaoBXwL/AZkBPgL/AY0B - JwL/AYYBGgL/AYMBFQL/AYUBGQL/AYoBIgL/AY0BKAL/AZMBMwH/AXEBbgFoAfUDXQHFAzYBWcQAA0IB - cgNjAdUBjwGKAYQB+QH/AckBmQL/AbwBfwL/Aa4BZgL/AaQBUwL/AZ8BSgL/AZ8BSwL/AaMBUQL/AacB - WAH/AYsCfAH4A10BxwM7AWLMAAM8AWUDXgHSAf8B7wHgAv8B3AG8Av8BzQGfAv8BwQGKAv8BuwF/Av8B - vwGGAv8BzQGhAv8B6QHWAf8DXAHEAzUBVcgAA2cB7wJnAVkB7wFnAV0BWQHvAWcBWwFZAe8BZwFbAVkB - 7wFnAlkB7wFnAWQBWQHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvOAADMwFRA3AB - 9QMHAQkDKgE/A0UBfANZAbsDYwHfA2gB9AOAAf4DgQH/A4EB/wOBAf8DgAH+A2gB9ANjAd8DWgG6A0QB - egMnAToIAAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8DVQGsAzAB - SwgAA/gB/wG5AZUBPAH/AYMBfQFuAf8BhAF9AWwB/wGqAYQBJwH/AawBewEAAf8BzAG8AZQB/wN+Af8D - fgH/A34B/wN+Af8DfgH/A34B/wN+Af8DfgH/A44B/zgAAxIBGAM/AW0DQwF1A10BzAN8AfgDgQH/A4EB - /wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN8AfgDVAGoBAADOwFiA10BxQFrAmgB - 9AGfAWUBMQH/AZcBUwEXAf8BlgFLAQkB/wGTAUYBAQH/AYwBQwEDAf8BfQFAAQsB/wFrAUABGgH/AW4B - UAE2Af8DaAHwA1oBtwM0AVQEAAT/AZcBiwFtAf8CgQGAAf8BggGBAYAB/wGYAYgBYAH/AcoBkAEAAf8B - 3QHMAZ8B/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A5MB/zQAA18B0wM9AWcEAANqAe0D - fQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wNVAa8D - NQFVA10BxwJuAVoB9QG4AWUBGwH/AbkBWAECAf8ByQFfAQAB/wHYAWUBAAH/AdwBZwEAAf8B1gFkAQAB - /wHDAVwBAAH/AaIBTAEAAf8BfAE7AQMB/wFuAUYBIwH/A2gB8ANaAbcDMAFKBP8BhgGEAX0B/wOBAf8D - gQH/AYcBgwF6Af8BzwGUAQAB/wHeAcwBnwH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D - vAH/NAADWgHCAzQBUwQAA2MB3wNuAfUDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D - gQH/A4EB/wOBAf8DgQH/A1UBrwNcAcQBhAF8AVwB+AHUAXEBGAH/AdcBZQEAAf8B5QFsAQAB/wHyAXIB - AAH/AfoBdQEAAf8B/AF2AQAB/wH6AXYBAAH/AfMBcgEAAf8B4gFrAQAB/wG9AVkBAAH/AYcBQAEAAf8B - cQFIASMB/wNoAfADVgGrBP8BiwGGAXoB/wOBAf8DgQH/AY4BhgFxAf8BzwGUAQAB/wHeAcwBnyH/A8oB - /xAAAw0BEQM/AWwDUwGnAVwCWQG+AVgCVgGzAUgCRwGDAyEBMAQAA28B8wM6AWAIAAM2AVgDWwHAA24B - 9QOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A2gB9ANSAaQB/gHdAcEB - /wHtAYABIAH/Ae0BcQECAf8B8wFzAQAB/wH6AXYBAAH/Af4BeAEAAv8BewEIAv8BiAEnAv8BogFTAf8B - /gGBARcB/wH8AXgBBAH/AewBbwEAAf8BwQFbAQAB/wGGAUEBAwH/AXgBVgE2Af8DYwHfBP8BrAGWAWAB - /wGDAYIBfwH/AYUBggF9Af8BswGTAUQB/wHPAZQBAAH/Ad4BzAGfAf8DsAH/A7AB/wOwAf8DsAH/A7AB - /wOwAf8DsAH/A7AB/wOoAf8IAAMaASQDUgGgAmMBSAH2AaIBcwEAAf8BrgF8AQAB/wGwAX0BAAH/AagB - eAEAAf8BlQFqAQAB/wGAAW4BGgH+AVwCWQHGA1cBtQMWAR4IAAMCAQMDGgEjAzgBXANUAagDYgHXA3AB - 8QOAAf4DgQH/A4EB/wOBAf8DgQH9A2gB8ANhAdQDUwGlAzYBWQMYASAB/wGyAW8B/wH9AYABEQH/AfwB - dwEBAf8B/QF3AQAC/wF4AQAC/wF/AQ8C/wGSATsC/wGzAYMC/wHqAeAC/wGQAT0C/wF7AQoB/wH8AXcB - AAH/AeUBbAEAAf8BsQFUAQAB/wGEAUsBGgH/A2MB3wT/AdkBqgE3Af8BvgGYATgB/wHAAZgBNgH/AdwB - ogEUAf8BzwGUAQAB/wHeAcwBnwH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DkwH/BAAD - IAEtAmMBWgHpAb8BiAEAAf8BzQGVAQoB/wGwAYgBJwH/AXMBZAE/Af8BTQFLAUcB/wFOAUsBQgH/AWYB - VwExAf8BmgF0ARcB/wGkAXYBAwH/AXABTwEAAf8DQwF2BAFEAAH/AZoBQgL/AYMBFQH/Af4BegEEAv8B - eAEAAv8BeAEAAv8BlQE/Av8BygGuAv8B2gHGAv8B7QHlAv8BlgFJAv8BfAENAf8B/gF4AQAB/wH0AXMB - AAH/AdABYgEAAf8BmgFOAQoB/wFjAl0B3wT/AeEBrgExAf8BvQGXATsB/wHAAZgBNQH/AeMBpQEKAf8B - zwGUAQAB/wHeAcwBnwH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DrwH/BAACYwFaAekB - 2QGaAQAB/wHaAaMBHAH/Ao4BjAH/A4oB/wOXAf8DmwH/A5EB/wN0Af8DSAH/AUMBQgE/Af8BtQGDAQcB - /wF6AVcBAAH/AzYBWAwAAwIBAwMIAQoDIQEvAzEBTgM9AWgDQwF2A0QBegNDAXUDPQFnAzEBTQMgAS4D - BwEJBAIEAAH/AZUBNwL/AYkBHwL/AX0BCAL/AXgBAAL/AXgBAAL/AagBXAL/AeABzQL/AaEBZgL/AdgB - xQL/AbkBlAL/AYcBIwL/AXgBAAH/AfsBdgEAAf8B4gFqAQAB/wGvAVQBAwH/AWMCXQHfBP8BuwGdAVMB - /wGIAYQBeQH/AYwBhQF0Af8BxAGZATAB/wHPAZQBAAH/Ad4BzAGfIf8DygH/A0MBdgHpAacBAgH/AekB - qwESAf8B0AHKAbsB/wOsAf8DXQH/A0wB/wNLAf8DRAH/Aw8B/wOzAf8DZgH/AVQBTAE6Af8BrgF9AQQB - /wNdAcwIAAMTARoDOQFdA1kBvANkAdsDagHtA2MB9gNfAfsDgQH9A18B+wNjAfYDZQHsA2MB2gNaAboD - OAFcAxMBGgH/AaABSQL/AZIBMQL/AYEBEQL/AXkBAwL/AXgBAAL/AagBXAL/AeABzQL/AaEBZgL/AdgB - xQL/AcABnwL/AYkBJwL/AXgBAAH/Af4BeAEAAf8B7AFvAQAB/wG/AVoBAgH/AWMCXQHfBP8BlAGKAXMB - /wOBAf8DgQH/AZoBigFjAf8BzwGUAQAB/wHeAcwBnwH/A9AB/wPQAf8D0AH/A9AB/wPQAf8D0AH/A9AB - /wPQAf8DtQH/AmoBYQHmAe0BrQEQAf8B9AHQAXYB/wP6Af8D+gH/A30B/wN/Af8DgAH/A4AB/wN+Af8D - hAH/A7sB/wNqAf8BqAGAARwB/wJjAUgB9gQAAxoBJANWAa4DaAH0A4EB/wOBAf8DgQH/A4EB/wOBAf8D - gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DawHyA1IBoQH/AbMBbwL/AZ4BSAL/AYgBHgL/AXwBBwL/AXgB - AAL/AZgBQwL/Ac4BtAL/AdcBwAL/AeoB4AL/AZ0BVwL/AX4BEQL/AXgBAAL/AXgBAAH/AfABcQEAAf8B - ywFkAQkB/wFjAWEBXQHfBP8BhgGDAX4B/wOBAf8DgQH/AYYBgwF7Af8BzwGUAQAB/wHeAcwBnwH/A4EB - /wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DkwH/AWYBYwFiAe4B7wG0ASEB/wH3AdwBlwn/A5EB - /wOIAf8DhwH/A4cB/wOBAf8DVwH/A+YB/wOjAf8BtgGRATYB/wGBAWoBQQH5BAADVwGyA2UB5wOBAf8D - gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvAf8BzAGfAv8B - rAFjAv8BkwEzAv8BgQERAv8BeQECAv8BggEWAv8BmgFLAv8BrgF4Av8BpQFXAv8BgQEXAv8BeQEEAv8B - eAEAAv8BeAEAAf8B8AFxAQAB/wHVAXEBFwH/AmMBXQHfBP8BiwGGAXkB/wOBAf8DgQH/AY4BhgFxAf8B - zwGUAQAB/wHeAcwBnwH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A0sBjQHwAb4B - PwH/AfQBzQFsIf8D+wH/A9AB/wHXAacBMQH/AmEBXQHRBAADbwHzA18B+wOBAf8DgQH/A4EB/wOBAf8D - gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvAf8B6QHVAv8BvAGBAv8BpAFUAv8B - jgEqAv8BfwENAv8BeQECAv8BewEJAv8BggEdAv8BeAEAAv8BeAEAAv8BeAEBAv8BegEEAv8BegEDAf8B - 8wF0AQMB/wHiAYQBMgH/A2MB3wT/AacBlAFnAf8BgwGCAX8B/wGFAYMBfgH/AbABlAFOAf8B0wGXAQIB - /wHgAc4BnwH/A+cB/wPnAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPnAf8DwAH/AwcBCQFmAWQBYgHuAfEB - vAE7Af8B+gHqAcIB/wPcAf8DdwH/A2gB/wNoAf8DaAH/AzIJ/wHyAd0BqQH/AeoBqQEIAf8DPgFqBAAD - ZAHbA2gB9AOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D - VQGvA14B0gGPAYgBfwH5Af8BuwF9Av8BowFSAv8BkAEsAv8BggETAv8BfQEIAv8BegEEAv8BeQECAv8B - egEEAv8BfQEJAv8BgAEPAv8BfwENAf8B+AGGASAB/wF0AmgB9ANYAbgE/wHXAbEBUgH/AZoBjwF0Af8B - oAGSAW0B/wHgAa8BNwH/AecBqQEQAf8B6wHVAaAB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D - gQH/A5MB/wQAAzMBUQNoAfAB8wHGAVgB/wH6AecBuBb/Af4B+wH/AfkB4gGqAf8B7wG4AS0B/wNOAZYE - AgQAAzwBZANfAckDfQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D - fQH6A1UBqgM8AWYDYwHVAYsBfQF8AfgB/wG+AYUC/wGqAV8C/wGZAT4C/wGNAScC/wGGARoC/wGDARUC - /wGFARkC/wGKASIC/wGNASgC/wGTATMB/wFxAW4BaAH1A10BxQM2AVkE/wH0Ac0BbAH/AfQBywFmAf8B - 9AHLAWUB/wH0AcsBZQH/AfEBwQFJAf8B+QHjAawB/wOJAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOJAf8D - iQH/A5oB/wgAAyIBMQNfAckBmAF+AWcB+gHzAcoBZQH/AfkB4QGmAf8B+wHtAcwB/wH7AewByAH/AfgB - 3QGbAf8BvgGQAWsB/gJlAV4B4gM9AWgEAQgAAwYBCAMxAUwDUAGbA2UB7AN9AfoDgQH/A4EB/wOBAf8D - gQH/A4EB/wOBAf8DgQH/A30B+gNqAe0DUAGbAy8BSQQAA0IBcgNjAdUBjwGKAYQB+QH/AckBmQL/AbwB - fwL/Aa4BZgL/AaQBUwL/AZ8BSgL/AZ8BSwL/AaMBUQL/AacBWAH/AYsCfAH4A10BxwM7AWIEAED/EAAD - DwETA0cBggNkAdsBrAGSAW8B/ANnAeoDVAGoAygBOxwAAwUBBgMSARcDOgFgA1EBnwNfAdMDZwHvA2MB - 9gNiAe4DXgHSA1EBngM5AV8DEQEWAwUBBgwAAzwBZQNeAdIB/wHvAeAC/wHcAbwC/wHNAZ8C/wHBAYoC - /wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB/wNcAcQDNQFVCAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwAB - AQEAAQEGAAEBFgAD/wEAAcABAwYAAYABAWYAAYABAQYAAcABAwgAAf8B/AIAAcABAwIAAf8B/AIAAYAB - AQIAAf8B+QYAAf8B+QYAAfABEwYAAcABAwYAAYABAQL/BAABgAEBAcABAQUAAQEBgAYAAQEHAAEBBwAB - AQcAAQEGAAGAAQEGAAHAAQMCAAGAAQECAAHwAR8BwAEBAcABAws= + /wH4AYYBIAH/AXMCaAH0A1gBuMAAAzwBZgNjAdUBiAJ8AfgB/wG+AYUC/wGqAV8C/wGZAT4C/wGNAScC + /wGGARoC/wGDARUC/wGFARkC/wGKASIC/wGNASgC/wGTATMB/wFwAW4BaAH1A10BxQM2AVnEAANCAXID + YwHVAY4BiQGDAfkB/wHJAZkC/wG8AX8C/wGuAWYC/wGkAVMC/wGfAUoC/wGfAUsC/wGjAVEC/wGnAVgB + /wGIAnwB+ANdAccDOwFizAADPAFlA14B0gH/Ae8B4AL/AdwBvAL/Ac0BnwL/AcEBigL/AbsBfwL/Ab8B + hgL/Ac0BoQL/AekB1gH/A1wBxAM1AVXIAANnAe8CZwFZAe8BZwFdAVkB7wFnAVsBWQHvAWcBWwFZAe8B + ZwJZAe8BZwFkAVkB7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7zgAAzMBUQNvAfUD + BwEJAyoBPwNFAXwDWQG7A2MB3wNoAfQDgAH+A4EB/wOBAf8DgQH/A4AB/gNoAfQDYwHfA1oBugNEAXoD + JwE6CAADNwFaA1gBuANjAd8CYwFdAd8BYgJdAd8DXQHfA10B3wFhAl0B3wNjAd8DYwHfA1UBrAMwAUsI + AAP4Af8BuQGVATwB/wGDAX0BbgH/AYQBfQFsAf8BqgGEAScB/wGsAXsBAAH/AcwBvAGUAf8DfgH/A34B + /wN+Af8DfgH/A34B/wN+Af8DfgH/A34B/wOOAf84AAMSARgDPwFtA0MBdQNdAcwDfAH4A4EB/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DfAH4A1QBqAQAAzsBYgNdAcUBaQJoAfQB + nwFlATEB/wGXAVMBFwH/AZYBSwEJAf8BkwFGAQEB/wGMAUMBAwH/AX0BQAELAf8BawFAARoB/wFuAVAB + NgH/A2gB8ANaAbcDNAFUBAAE/wGXAYsBbQH/AoEBgAH/AYIBgQGAAf8BmAGIAWAB/wHKAZABAAH/Ad0B + zAGfAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOTAf80AANfAdMDPQFnBAADagHtA30B + +gOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvAzUB + VQNdAccCbgFaAfUBuAFlARsB/wG5AVgBAgH/AckBXwEAAf8B2AFlAQAB/wHcAWcBAAH/AdYBZAEAAf8B + wwFcAQAB/wGiAUwBAAH/AXwBOwEDAf8BbgFGASMB/wNoAfADWgG3AzABSgT/AYYBhAF9Af8DgQH/A4EB + /wGHAYMBegH/Ac8BlAEAAf8B3gHMAZ8B/wPgAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D4AH/A7wB + /zQAA1oBwgM0AVMEAANjAd8DbgH1A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB + /wOBAf8DgQH/A4EB/wNVAa8DXAHEAYEBfAFcAfgB1AFxARgB/wHXAWUBAAH/AeUBbAEAAf8B8gFyAQAB + /wH6AXUBAAH/AfwBdgEAAf8B+gF2AQAB/wHzAXIBAAH/AeIBawEAAf8BvQFZAQAB/wGHAUABAAH/AXEB + SAEjAf8DaAHwA1YBqwT/AYsBhgF6Af8DgQH/A4EB/wGOAYYBcQH/Ac8BlAEAAf8B3gHMAZ8h/wPKAf8Q + AAMNAREDPwFsA1MBpwFcAlkBvgFYAlYBswFIAkcBgwMhATAEAANvAfMDOgFgCAADNgFYA1sBwANuAfUD + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wNoAfQDUgGkAf4B3QHBAf8B + 7QGAASAB/wHtAXEBAgH/AfMBcwEAAf8B+gF2AQAB/wH+AXgBAAL/AXsBCAL/AYgBJwL/AaIBUwH/Af4B + gQEXAf8B/AF4AQQB/wHsAW8BAAH/AcEBWwEAAf8BhgFBAQMB/wF4AVYBNgH/A2MB3wT/AawBlgFgAf8B + gwGCAX8B/wGFAYIBfQH/AbMBkwFEAf8BzwGUAQAB/wHeAcwBnwH/A7AB/wOwAf8DsAH/A7AB/wOwAf8D + sAH/A7AB/wOwAf8DqAH/CAADGgEkA1IBoAJjAUgB9gGiAXMBAAH/Aa4BfAEAAf8BsAF9AQAB/wGoAXgB + AAH/AZUBagEAAf8BgAFvARsB/gFcAlkBxgNXAbUDFgEeCAADAgEDAxoBIwM4AVwDVAGoA2IB1wNwAfED + gAH+A4EB/wOBAf8DgQH/A4EB/QNoAfADYQHUA1MBpQM2AVkDGAEgAf8BsgFvAf8B/QGAAREB/wH8AXcB + AQH/Af0BdwEAAv8BeAEAAv8BfwEPAv8BkgE7Av8BswGDAv8B6gHgAv8BkAE9Av8BewEKAf8B/AF3AQAB + /wHlAWwBAAH/AbEBVAEAAf8BhAFLARoB/wNjAd8E/wHZAaoBNwH/Ab4BmAE4Af8BwAGYATYB/wHcAaIB + FAH/Ac8BlAEAAf8B3gHMAZ8B/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A5MB/wQAAyAB + LQJjAVoB6QG/AYgBAAH/Ac0BlQEKAf8BsAGIAScB/wFzAWQBPwH/AU0BSwFHAf8BTgFLAUIB/wFmAVcB + MQH/AZoBdAEXAf8BpAF2AQMB/wFwAU8BAAH/A0MBdgQBRAAB/wGaAUIC/wGDARUB/wH+AXoBBAL/AXgB + AAL/AXgBAAL/AZUBPwL/AcoBrgL/AdoBxgL/Ae0B5QL/AZYBSQL/AXwBDQH/Af4BeAEAAf8B9AFzAQAB + /wHQAWIBAAH/AZoBTgEKAf8BYwJdAd8E/wHhAa4BMQH/Ab0BlwE7Af8BwAGYATUB/wHjAaUBCgH/Ac8B + lAEAAf8B3gHMAZ8B/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A68B/wQAAmMBWgHpAdkB + mgEAAf8B2gGjARwB/wKOAYwB/wOKAf8DlwH/A5sB/wORAf8DdAH/A0gB/wFDAUIBPwH/AbUBgwEHAf8B + egFXAQAB/wM2AVgMAAMCAQMDCAEKAyEBLwMxAU4DPQFoA0MBdgNEAXoDQwF1Az0BZwMxAU0DIAEuAwcB + CQQCBAAB/wGVATcC/wGJAR8C/wF9AQgC/wF4AQAC/wF4AQAC/wGoAVwC/wHgAc0C/wGhAWYC/wHYAcUC + /wG5AZQC/wGHASMC/wF4AQAB/wH7AXYBAAH/AeIBagEAAf8BrwFUAQMB/wFjAl0B3wT/AbsBnQFTAf8B + iAGEAXkB/wGMAYUBdAH/AcQBmQEwAf8BzwGUAQAB/wHeAcwBnyH/A8oB/wNDAXYB6QGnAQIB/wHpAasB + EgH/AdABygG7Af8DrAH/A10B/wNMAf8DSwH/A0QB/wMPAf8DswH/A2YB/wFUAUwBOgH/Aa4BfQEEAf8D + XQHMCAADEwEaAzkBXQNZAbwDZAHbA2oB7QNjAfYDXwH7A4EB/QNfAfsDYwH2A2UB7ANjAdoDWgG6AzgB + XAMTARoB/wGgAUkC/wGSATEC/wGBAREC/wF5AQMC/wF4AQAC/wGoAVwC/wHgAc0C/wGhAWYC/wHYAcUC + /wHAAZ8C/wGJAScC/wF4AQAB/wH+AXgBAAH/AewBbwEAAf8BvwFaAQIB/wFjAl0B3wT/AZQBigFzAf8D + gQH/A4EB/wGaAYoBYwH/Ac8BlAEAAf8B3gHMAZ8B/wPQAf8D0AH/A9AB/wPQAf8D0AH/A9AB/wPQAf8D + 0AH/A7UB/wJqAWEB5gHtAa0BEAH/AfQB0AF2Af8D+gH/A/oB/wN9Af8DfwH/A4AB/wOAAf8DfgH/A4QB + /wO7Af8DagH/AagBgAEcAf8CYwFIAfYEAAMaASQDVgGuA2gB9AOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB + /wOBAf8DgQH/A4EB/wOBAf8DgQH/A2sB8gNSAaEB/wGzAW8C/wGeAUgC/wGIAR4C/wF8AQcC/wF4AQAC + /wGYAUMC/wHOAbQC/wHXAcAC/wHqAeAC/wGdAVcC/wF+AREC/wF4AQAC/wF4AQAB/wHwAXEBAAH/AcsB + ZAEJAf8BYwFhAV0B3wT/AYYBgwF+Af8DgQH/A4EB/wGGAYMBewH/Ac8BlAEAAf8B3gHMAZ8B/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A5MB/wFlAmIB7gHvAbQBIQH/AfcB3AGXCf8DkQH/A4gB + /wOHAf8DhwH/A4EB/wNXAf8D5gH/A6MB/wG2AZEBNgH/AYABagFBAfkEAANXAbIDZQHnA4EB/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wNVAa8B/wHMAZ8C/wGsAWMC + /wGTATMC/wGBAREC/wF5AQIC/wGCARYC/wGaAUsC/wGuAXgC/wGlAVcC/wGBARcC/wF5AQQC/wF4AQAC + /wF4AQAB/wHwAXEBAAH/AdUBcQEXAf8CYwFdAd8E/wGLAYYBeQH/A4EB/wOBAf8BjgGGAXEB/wHPAZQB + AAH/Ad4BzAGfAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DSwGNAfABvgE/Af8B + 9AHNAWwh/wP7Af8D0AH/AdcBpwExAf8CYQFdAdEEAANvAfMDXwH7A4EB/wOBAf8DgQH/A4EB/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wNVAa8B/wHpAdUC/wG8AYEC/wGkAVQC/wGOASoC + /wF/AQ0C/wF5AQIC/wF7AQkC/wGCAR0C/wF4AQAC/wF4AQAC/wF4AQEC/wF6AQQC/wF6AQMB/wHzAXQB + AwH/AeIBhAEyAf8DYwHfBP8BpwGUAWcB/wGDAYIBfwH/AYUBgwF+Af8BsAGUAU4B/wHTAZcBAgH/AeAB + zgGfAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPAAf8DBwEJAWUBYwFiAe4B8QG8ATsB + /wH6AeoBwgH/A9wB/wN3Af8DaAH/A2gB/wNoAf8DMgn/AfIB3QGpAf8B6gGpAQgB/wM+AWoEAANkAdsD + aAH0A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wNVAa8D + XgHSAY4BhwF9AfkB/wG7AX0C/wGjAVIC/wGQASwC/wGCARMC/wF9AQgC/wF6AQQC/wF5AQIC/wF6AQQC + /wF9AQkC/wGAAQ8C/wF/AQ0B/wH4AYYBIAH/AXMCaAH0A1gBuAT/AdcBsQFSAf8BmgGPAXQB/wGgAZIB + bQH/AeABrwE3Af8B5wGpARAB/wHrAdUBoAH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D + kwH/BAADMwFRA2gB8AHzAcYBWAH/AfoB5wG4Fv8B/gH7Af8B+QHiAaoB/wHvAbgBLQH/A04BlgQCBAAD + PAFkA18ByQN9AfoDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN9AfoD + VQGqAzwBZgNjAdUBiAJ8AfgB/wG+AYUC/wGqAV8C/wGZAT4C/wGNAScC/wGGARoC/wGDARUC/wGFARkC + /wGKASIC/wGNASgC/wGTATMB/wFwAW4BaAH1A10BxQM2AVkE/wH0Ac0BbAH/AfQBywFmAf8B9AHLAWUB + /wH0AcsBZQH/AfEBwQFJAf8B+QHjAawB/wOJAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOJAf8DiQH/A5oB + /wgAAyIBMQNfAckBlQF9AWcB+gHzAcoBZQH/AfkB4QGmAf8B+wHtAcwB/wH7AewByAH/AfgB3QGbAf8B + vAGOAWwB/gJlAV4B4gM9AWgEAQgAAwYBCAMxAUwDUAGbA2UB7AN9AfoDgQH/A4EB/wOBAf8DgQH/A4EB + /wOBAf8DgQH/A30B+gNqAe0DUAGbAy8BSQQAA0IBcgNjAdUBjgGJAYMB+QH/AckBmQL/AbwBfwL/Aa4B + ZgL/AaQBUwL/AZ8BSgL/AZ8BSwL/AaMBUQL/AacBWAH/AYgCfAH4A10BxwM7AWIEAED/EAADDwETA0cB + ggNkAdsBqgGPAW8B/ANnAeoDVAGoAygBOxwAAwUBBgMSARcDOgFgA1EBnwNfAdMDZwHvA2MB9gNiAe4D + XgHSA1EBngM5AV8DEQEWAwUBBgwAAzwBZQNeAdIB/wHvAeAC/wHcAbwC/wHNAZ8C/wHBAYoC/wG7AX8C + /wG/AYYC/wHNAaEC/wHpAdYB/wNcAcQDNQFVCAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEG + AAEBFgAD/wEAAcABAwYAAYABAWYAAYABAQYAAcABAwgAAf8B/AIAAcABAwIAAf8B/AIAAYABAQIAAf8B + +QYAAf8B+QYAAfABEwYAAcABAwYAAYABAQL/BAABgAEBAcABAQUAAQEBgAYAAQEHAAEBBwABAQcAAQEG + AAGAAQEGAAHAAQMCAAGAAQECAAHwAR8BwAEBAcABAws= diff --git a/qtcnet-client/Forms/MainForm.cs b/qtcnet-client/Forms/MainForm.cs index 3113949..ebb5d31 100644 --- a/qtcnet-client/Forms/MainForm.cs +++ b/qtcnet-client/Forms/MainForm.cs @@ -1,5 +1,6 @@ using Krypton.Toolkit; using Microsoft.AspNetCore.Mvc.Routing; +using Microsoft.VisualBasic.ApplicationServices; using qtcnet_client.Controls; using qtcnet_client.Forms; using qtcnet_client.Model; @@ -26,6 +27,8 @@ namespace qtcnet_client private readonly List OpenChatRoomForms = []; private readonly List OpenProfileForms = []; + private readonly List UserContactsList = []; + private Size LoggedOutSize = new(615, 702); private Size LoggedInSize = new(419, 715); @@ -278,11 +281,102 @@ namespace qtcnet_client } } - private void MainTabControl_OnContactControlDoubleClicked(object? sender, EventArgs e) + private async void MainTabControl_OnContactControlDoubleClicked(object? sender, EventArgs e) { - if (sender is ContactControl _) + if (sender is ContactControl _contactCtrl) { + var _user = await _apiService.GetUserInformationAsync(_contactCtrl.UserId); + if (_user.Success && _user.Data != null) + { + // create a profile form + ProfileForm _profile = new(_apiService) + { + UserId = _user.Data.Id, + Username = _user.Data.Username, + Bio = _user.Data.Bio, + Status = _user.Data.Status, + }; + // check if user is in contacts list (if profile isn't self) + var _contact = UserContactsList.FirstOrDefault(e => e.OwnerId == _user.Data.Id || e.UserId == _user.Data.Id); + if (_contact != null) + { + // set contact status + if (_contact.UserId == _apiService.CurrentUser?.Id) + _profile.ContactStatus = _contact.UserStatus; + else + _profile.ContactStatus = _contact.OwnerStatus; + } + else + _profile.ContactStatus = Contact.ContactStatus.NoRelation; + + // get profile image + var _pfpBytes = await _apiService.GetUserProfilePic(_contactCtrl.UserId); + if (_pfpBytes.Success && _pfpBytes.Data != null) + { + using var ms = new MemoryStream(_pfpBytes.Data); + Image img = Image.FromStream(ms); + _profile.ProfileImage = img; + } + + _profile.OnClose += ProfileForm_OnClose; + + OpenProfileForms.Add(_profile); + _profile.Show(); + } + } + } + + private async void MainTabControl_OnUserItemDoubleClicked(object? sender, EventArgs e) + { + if(sender is MainTabControl _mtCtrl) + { + if(_mtCtrl.SelectedUser != null) + { + // get the user to open the profile for + if(_mtCtrl.SelectedUser.Tag is string _tagString) + { + var _user = await _apiService.GetUserInformationAsync(_tagString); + if (_user.Success && _user.Data != null) + { + // create a profile form + ProfileForm _profile = new(_apiService) + { + UserId = _user.Data.Id, + Username = _user.Data.Username, + Bio = _user.Data.Bio, + Status = _user.Data.Status, + }; + + // check if user is in contacts list (if profile isn't self) + var _contact = UserContactsList.FirstOrDefault(e => e.OwnerId == _user.Data.Id || e.UserId == _user.Data.Id); + if (_contact != null) + { + // set contact status + if (_contact.OwnerId == _apiService.CurrentUser?.Id) + _profile.ContactStatus = _contact.UserStatus; + else + _profile.ContactStatus = _contact.OwnerStatus; + } + else + _profile.ContactStatus = Contact.ContactStatus.NoRelation; + + // get profile image + var _pfpBytes = await _apiService.GetUserProfilePic(_tagString); + if(_pfpBytes.Success && _pfpBytes.Data != null) + { + using var ms = new MemoryStream(_pfpBytes.Data); + Image img = Image.FromStream(ms); + _profile.ProfileImage = img; + } + + _profile.OnClose += ProfileForm_OnClose; + + OpenProfileForms.Add(_profile); + _profile.Show(); + } + } + } } } @@ -295,9 +389,21 @@ namespace qtcnet_client } } - private void _apiService_OnCurrentUserUpdate(object? sender, EventArgs e) + private async void _apiService_OnCurrentUserUpdate(object? sender, EventArgs e) { - throw new NotImplementedException(); + // set everything in the current user profile + CurrentProfileControl?.Username = _apiService.CurrentUser?.Username ?? "Username"; + CurrentProfileControl?.CurrencyCount = _apiService.CurrentUser?.CurrencyAmount ?? 0; + + var _pfpRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser!.Id); + if (_pfpRes.Success && _pfpRes.Data != null) + { + using var ms = new MemoryStream(_pfpRes.Data); + Image img = Image.FromStream(ms); + CurrentProfileControl?.ProfileImage = img; + } + + CurrentProfileControl?.RefreshInfo(); } private void _gatewayService_OnUserForceLogout(object? sender, EventArgs e) @@ -315,7 +421,16 @@ namespace qtcnet_client // get and set contacts var _currentUserContacts = await _apiService.GetCurrentUserContacts(); if (_currentUserContacts.Success && _currentUserContacts.Data != null) + { + UserContactsList.Clear(); + UserContactsList.AddRange([.. _currentUserContacts.Data.DistinctBy(c => c.Id)]); await SetupContactsUI(_currentUserContacts.Data); + } else + { + // if no contacts are found, just clear the lists + UserContactsList.Clear(); + await SetupContactsUI([]); + } } private async void _gatewayService_OnRefreshRoomListReceived(object? sender, EventArgs e) @@ -457,11 +572,16 @@ namespace qtcnet_client MainTabControl.OnRoomControlDoubleClicked += MainTabControl_OnRoomControlDoubleClicked; MainTabControl.OnContactControlDoubleClicked += MainTabControl_OnContactControlDoubleClicked; + MainTabControl.OnUserItemDoubleClicked += MainTabControl_OnUserItemDoubleClicked; // get and set contacts var _currentUserContacts = await _apiService.GetCurrentUserContacts(); if (_currentUserContacts.Success && _currentUserContacts.Data != null) + { + UserContactsList.Clear(); + UserContactsList.AddRange([.. _currentUserContacts.Data.DistinctBy(c => c.Id)]); await SetupContactsUI(_currentUserContacts.Data); + } // get and set rooms var _roomList = await _apiService.GetAllRoomsAsync(); @@ -602,6 +722,7 @@ namespace qtcnet_client { var ctrl = new ContactControl { + UserId = user.Data.Id, Username = user.Data.Username, TextStatus = "NOT IMPLEMENTED", Status = user.Data.Status, diff --git a/qtcnet-client/Forms/ProfileForm.Designer.cs b/qtcnet-client/Forms/ProfileForm.Designer.cs index 7d7ba8d..73ff5a2 100644 --- a/qtcnet-client/Forms/ProfileForm.Designer.cs +++ b/qtcnet-client/Forms/ProfileForm.Designer.cs @@ -32,10 +32,14 @@ lblStatus = new Label(); rtxtBio = new RichTextBox(); tlpActionButtons = new TableLayoutPanel(); + btnAction1 = new Button(); + btnAction2 = new Button(); tlpUsernameTags = new TableLayoutPanel(); lblUsername = new Label(); tlpTagIcons = new TableLayoutPanel(); + btnSaveProfile = new Button(); ((System.ComponentModel.ISupportInitialize)pbProfileImage).BeginInit(); + tlpActionButtons.SuspendLayout(); tlpUsernameTags.SuspendLayout(); SuspendLayout(); // @@ -48,6 +52,9 @@ pbProfileImage.SizeMode = PictureBoxSizeMode.Zoom; pbProfileImage.TabIndex = 0; pbProfileImage.TabStop = false; + pbProfileImage.Click += pbProfileImage_Click; + pbProfileImage.MouseEnter += pbProfileImage_MouseEnter; + pbProfileImage.MouseLeave += pbProfileImage_MouseLeave; // // lblStatus // @@ -78,6 +85,8 @@ tlpActionButtons.ColumnCount = 2; tlpActionButtons.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); tlpActionButtons.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tlpActionButtons.Controls.Add(btnAction1, 0, 0); + tlpActionButtons.Controls.Add(btnAction2, 1, 0); tlpActionButtons.Location = new Point(296, 415); tlpActionButtons.Name = "tlpActionButtons"; tlpActionButtons.RowCount = 1; @@ -85,6 +94,28 @@ tlpActionButtons.Size = new Size(121, 42); tlpActionButtons.TabIndex = 5; // + // btnAction1 + // + btnAction1.Dock = DockStyle.Fill; + btnAction1.FlatAppearance.BorderSize = 0; + btnAction1.FlatStyle = FlatStyle.Flat; + btnAction1.Location = new Point(3, 3); + btnAction1.Name = "btnAction1"; + btnAction1.Size = new Size(54, 36); + btnAction1.TabIndex = 0; + btnAction1.UseVisualStyleBackColor = true; + // + // btnAction2 + // + btnAction2.Dock = DockStyle.Fill; + btnAction2.FlatAppearance.BorderSize = 0; + btnAction2.FlatStyle = FlatStyle.Flat; + btnAction2.Location = new Point(63, 3); + btnAction2.Name = "btnAction2"; + btnAction2.Size = new Size(55, 36); + btnAction2.TabIndex = 1; + btnAction2.UseVisualStyleBackColor = true; + // // tlpUsernameTags // tlpUsernameTags.AutoSize = true; @@ -112,6 +143,7 @@ lblUsername.TabIndex = 0; lblUsername.Text = "Username"; lblUsername.TextAlign = ContentAlignment.MiddleLeft; + lblUsername.DoubleClick += lblUsername_DoubleClick; // // tlpTagIcons // @@ -128,6 +160,17 @@ tlpTagIcons.Size = new Size(145, 49); tlpTagIcons.TabIndex = 1; // + // btnSaveProfile + // + btnSaveProfile.Location = new Point(12, 434); + btnSaveProfile.Name = "btnSaveProfile"; + btnSaveProfile.Size = new Size(45, 23); + btnSaveProfile.TabIndex = 7; + btnSaveProfile.Text = "Save"; + btnSaveProfile.UseVisualStyleBackColor = true; + btnSaveProfile.Visible = false; + btnSaveProfile.Click += btnSaveProfile_Click; + // // ProfileForm // AutoScaleDimensions = new SizeF(7F, 15F); @@ -135,6 +178,7 @@ AutoSize = true; BackColor = Color.DodgerBlue; ClientSize = new Size(429, 463); + Controls.Add(btnSaveProfile); Controls.Add(tlpUsernameTags); Controls.Add(tlpActionButtons); Controls.Add(rtxtBio); @@ -147,6 +191,7 @@ FormClosed += ProfileForm_FormClosed; Load += ProfileForm_Load; ((System.ComponentModel.ISupportInitialize)pbProfileImage).EndInit(); + tlpActionButtons.ResumeLayout(false); tlpUsernameTags.ResumeLayout(false); tlpUsernameTags.PerformLayout(); ResumeLayout(false); @@ -162,5 +207,8 @@ private TableLayoutPanel tlpUsernameTags; private Label lblUsername; private TableLayoutPanel tlpTagIcons; + private Button btnAction1; + private Button btnAction2; + private Button btnSaveProfile; } } \ No newline at end of file diff --git a/qtcnet-client/Forms/ProfileForm.cs b/qtcnet-client/Forms/ProfileForm.cs index f0766b5..265d9ab 100644 --- a/qtcnet-client/Forms/ProfileForm.cs +++ b/qtcnet-client/Forms/ProfileForm.cs @@ -1,16 +1,22 @@ -using qtcnet_client.Properties; +using Krypton.Toolkit; +using qtcnet_client.Properties; +using QtCNETAPI.Models; +using QtCNETAPI.Services.ApiService; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; +using System.Threading.Tasks; using System.Windows.Forms; namespace qtcnet_client.Forms { public partial class ProfileForm : Form { + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string UserId { get; set; } = string.Empty; [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public string Username { get; set; } = "Username"; [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] @@ -22,13 +28,16 @@ namespace qtcnet_client.Forms [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public string[] Tags { get; set; } = []; [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] - public int ContactStatus { get; set; } = 0; + public Contact.ContactStatus ContactStatus { get; set; } [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public Image ProfileImage { get; set; } = Resources.DefaultPfp; public event EventHandler? OnClose; - public ProfileForm() + + private IApiService _apiService; + public ProfileForm(IApiService apiService) { + _apiService = apiService; InitializeComponent(); } @@ -41,12 +50,249 @@ namespace qtcnet_client.Forms pbProfileImage.Image = ProfileImage; if (Status == 0) lblStatus.Visible = false; + + if (UserId == _apiService.CurrentUser?.Id) + { + btnAction1.Visible = false; + btnAction2.Visible = false; + + btnSaveProfile.Visible = true; + rtxtBio.ReadOnly = false; + } + + switch (ContactStatus) + { + case Contact.ContactStatus.Accepted: + if (Status == 0) btnAction1.Visible = false; + btnAction1.Image = Resources.MessageIcon; + btnAction2.Image = Resources.RemoveContactIcon; + btnAction1.Click += BtnAction1_MessageClick; + btnAction2.Click += BtnAction2_RemoveContactClick; + break; + case Contact.ContactStatus.AwaitingApprovalFromSelf: + btnAction1.Image = Resources.AcceptContactIcon; + btnAction2.Image = Resources.DeclineContactIcon; + btnAction1.Click += BtnAction1_AcceptContactClick; + btnAction2.Click += BtnAction2_DeclineContactClick; + break; + case Contact.ContactStatus.AwaitingApprovalFromOther: + btnAction1.Image = Resources.RequestSentIcon; + btnAction2.Image = Resources.CancelRequestIcon; + btnAction1.Enabled = false; + btnAction2.Click += BtnAction2_CancelContactRequestClick; + break; + case Contact.ContactStatus.NoRelation: + btnAction1.Image = null; + btnAction2.Image = Resources.AddContactIcon; + btnAction1.Enabled = false; + btnAction2.Click += BtnAction2_AddContactClick; + break; + } } - private void ProfileForm_FormClosed(object sender, FormClosedEventArgs e) + private async void BtnAction2_AddContactClick(object? sender, EventArgs e) { - OnClose?.Invoke(this, EventArgs.Empty); - Close(); + // send request to add user as a contact + var _res = await _apiService.AddContactToCurrentUser(UserId); + if (_res.Success && _res.Data != null) + { + if (_res.Data.OwnerId == UserId) + ContactStatus = _res.Data.UserStatus; + else + ContactStatus = _res.Data.OwnerStatus; + } + + ReevaluateContactStatus(); + } + + private async void BtnAction2_CancelContactRequestClick(object? sender, EventArgs e) + { + // remove contact from user + var _res = await _apiService.RemoveContactFromCurrentUser(UserId); + if (_res.Success && _res.Data != null) + ContactStatus = Contact.ContactStatus.NoRelation; + + ReevaluateContactStatus(); + } + + private async void BtnAction1_AcceptContactClick(object? sender, EventArgs e) + { + // accept contact request + var _res = await _apiService.AcceptContactRequest(UserId); + if (_res.Success) + ContactStatus = Contact.ContactStatus.Accepted; + + ReevaluateContactStatus(); + } + + private async void BtnAction2_DeclineContactClick(object? sender, EventArgs e) + { + // remove contact from user + var _res = await _apiService.RemoveContactFromCurrentUser(UserId); + if (_res.Success && _res.Data != null) + ContactStatus = Contact.ContactStatus.NoRelation; + + ReevaluateContactStatus(); + } + + private void BtnAction1_MessageClick(object? sender, EventArgs e) + { + throw new NotImplementedException(); + } + + private async void BtnAction2_RemoveContactClick(object? sender, EventArgs e) + { + // remove contact from user + var _res = await _apiService.RemoveContactFromCurrentUser(UserId); + if (_res.Success && _res.Data != null) + ContactStatus = Contact.ContactStatus.NoRelation; + + ReevaluateContactStatus(); + } + + private void ProfileForm_FormClosed(object sender, FormClosedEventArgs e) => OnClose?.Invoke(this, EventArgs.Empty); + + private void ReevaluateContactStatus() + { + if (UserId != _apiService.CurrentUser?.Id) + { + switch (ContactStatus) + { + case Contact.ContactStatus.Accepted: + if (Status == 0) btnAction1.Visible = false; + btnAction1.Image = Resources.MessageIcon; + btnAction2.Image = Resources.RemoveContactIcon; + btnAction1.Click += BtnAction1_MessageClick; + btnAction2.Click += BtnAction2_RemoveContactClick; + break; + case Contact.ContactStatus.AwaitingApprovalFromSelf: + btnAction1.Image = Resources.AcceptContactIcon; + btnAction2.Image = Resources.DeclineContactIcon; + btnAction1.Click += BtnAction1_AcceptContactClick; + btnAction2.Click += BtnAction2_DeclineContactClick; + break; + case Contact.ContactStatus.AwaitingApprovalFromOther: + btnAction1.Image = Resources.RequestSentIcon; + btnAction2.Image = Resources.CancelRequestIcon; + btnAction1.Enabled = false; + btnAction2.Click += BtnAction2_CancelContactRequestClick; + break; + case Contact.ContactStatus.NoRelation: + btnAction1.Image = null; + btnAction2.Image = Resources.AddContactIcon; + btnAction1.Enabled = false; + btnAction2.Click += BtnAction2_AddContactClick; + break; + } + } + else + { + btnAction1.Enabled = false; + btnAction2.Enabled = false; + } + } + + private void lblUsername_DoubleClick(object sender, EventArgs e) + { + if (UserId == _apiService.CurrentUser?.Id) + { + lblUsername.Visible = false; + + TextBox txtUsernameEdit = new() + { + Text = lblUsername.Text, + Font = lblUsername.Font, + MaxLength = 16, + Dock = lblUsername.Dock, + Location = lblUsername.Location, + Size = lblUsername.Size, + }; + txtUsernameEdit.KeyDown += TxtUsernameEdit_KeyDown; + tlpUsernameTags.Controls.Add(txtUsernameEdit); + txtUsernameEdit.Focus(); + } + } + + private void TxtUsernameEdit_KeyDown(object? sender, KeyEventArgs e) + { + if (sender is TextBox txtUsernameEdit && e.KeyCode == Keys.Enter) + { + lblUsername.Text = txtUsernameEdit.Text; + tlpUsernameTags.Controls.Remove(txtUsernameEdit); + txtUsernameEdit.Dispose(); + lblUsername.Visible = true; + } + } + + private async void btnSaveProfile_Click(object sender, EventArgs e) + { + // update current user profile based on stuff inputted + var _res = await _apiService.UpdateUserInformationAsync(new() + { + Id = _apiService.CurrentUser!.Id, + Username = lblUsername.Text, + Bio = rtxtBio.Text, + DateOfBirth = _apiService.CurrentUser.DateOfBirth, + }); + if (_res.Success && _res.Data != null) + KryptonMessageBox.Show("Profile Updated", "Yipee!"); + else + KryptonMessageBox.Show("Profile Update Failed. Please Try Again Later.", "Oops."); + } + + private void pbProfileImage_Click(object sender, EventArgs e) + { + if(UserId == _apiService.CurrentUser?.Id) + { + Thread _fileDialogThread = new Thread(async () => + { + using OpenFileDialog openFileDialog = new() + { + CheckFileExists = true, + CheckPathExists = true, + InitialDirectory = Environment.CurrentDirectory, + Filter = "Image Files (*.png, *.jpg, *.gif, *.bmp)|*.png;*.jpg;*.gif;*.bmp", + Title = "Select A New Profile Image" + }; + var _res = openFileDialog.ShowDialog(); + if(_res == DialogResult.OK) + { + // update the current users profile image + var _apiRes = await _apiService.UpdateUserProfilePic(openFileDialog.FileName); + if(_apiRes.Success) + { + Image newImg = Image.FromFile(openFileDialog.FileName); + pbProfileImage.Image = newImg; + pbProfileImage.Invalidate(); + } + } + }); + + _fileDialogThread.SetApartmentState(ApartmentState.STA); + _fileDialogThread.Start(); + } + } + + private void pbProfileImage_MouseEnter(object sender, EventArgs e) + { + if(UserId == _apiService.CurrentUser?.Id) + { + Graphics g = pbProfileImage.CreateGraphics(); + Rectangle rect = pbProfileImage.ClientRectangle; + + // draw an opaque dark color onto the client rectangle of the picturebox + using SolidBrush sb = new(Color.FromArgb(50, Color.Black)); + g.FillRectangle(sb, rect); + + pbProfileImage.Cursor = Cursors.Hand; + } + } + + private void pbProfileImage_MouseLeave(object sender, EventArgs e) + { + // redraw the box normally + pbProfileImage.Cursor = Cursors.Default; + pbProfileImage.Invalidate(); } } } diff --git a/qtcnet-client/Properties/Resources.Designer.cs b/qtcnet-client/Properties/Resources.Designer.cs index 90df4f7..b807e49 100644 --- a/qtcnet-client/Properties/Resources.Designer.cs +++ b/qtcnet-client/Properties/Resources.Designer.cs @@ -60,6 +60,36 @@ namespace qtcnet_client.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap AcceptContactIcon { + get { + object obj = ResourceManager.GetObject("AcceptContactIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap AddContactIcon { + get { + object obj = ResourceManager.GetObject("AddContactIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CancelRequestIcon { + get { + object obj = ResourceManager.GetObject("CancelRequestIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -70,6 +100,16 @@ namespace qtcnet_client.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DeclineContactIcon { + get { + object obj = ResourceManager.GetObject("DeclineContactIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -80,6 +120,16 @@ namespace qtcnet_client.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MessageIcon { + get { + object obj = ResourceManager.GetObject("MessageIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -90,6 +140,26 @@ namespace qtcnet_client.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap RemoveContactIcon { + get { + object obj = ResourceManager.GetObject("RemoveContactIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap RequestSentIcon { + get { + object obj = ResourceManager.GetObject("RequestSentIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/qtcnet-client/Properties/Resources.resx b/qtcnet-client/Properties/Resources.resx index 58b64b5..89c5445 100644 --- a/qtcnet-client/Properties/Resources.resx +++ b/qtcnet-client/Properties/Resources.resx @@ -121,8 +121,8 @@ ..\Resources\DefaultPfp.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\QtCNETIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\MessageIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\CurrencyIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -130,7 +130,28 @@ ..\Resources\RoomsChatIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\QtCNETIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\SendIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\RemoveContactIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\AddContactIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\RequestSentIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\CancelRequestIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\AcceptContactIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\DeclineContactIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/qtcnet-client/Resources/AcceptContactIcon.png b/qtcnet-client/Resources/AcceptContactIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..a4fe6d7a62d7efb2f6ef4c3ff77265104b7fca1c GIT binary patch literal 1696 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 BsD=Ol literal 0 HcmV?d00001 diff --git a/qtcnet-client/Resources/RemoveContactIcon.png b/qtcnet-client/Resources/RemoveContactIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..47c2d70c1c64e9daf84bc6b5408045f8ec67ee9a GIT binary patch literal 2333 zcmV+&3F7vNP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ^qe(KCw$-u2&zn+~tcLL~uAkf>dgn*FZY5|%&A?$t$ zM<9Aq+kGM2P1QjD^(NB@1OO4}iCq0x11Sr$B5|Q7NS8khQWFxHZm(prtDZ!^Bg~vi zPnB*Q$MiY)WGZl4!Fu6Ftk^Mt7jOgei0-OP3Ii3Re4Q+9{hauK>$`fflTl(PdEIB( zHFg1QSGry=$pD;yEz%A~mvi++`4ZkV&ci*( zzPV0J#zg9#NKpVXSu{-kX>T#D21yTpZMgXe%SR_*UUQr8v zj^^icDmRyWlZokNW!!%9BsrCpl+BpI;h8h>X*A)HLf$L5o3 zU5Z!$d>Rc03JZDT>8Ck0btWq)@FRC?Tm|~ zWZ^=#KKUdySy{w*y%g@>&$9R5r&=?1Xo55ua`DKoWT0LzBq~o~Eb+ju%^j^qVS$$oM~ysFuKqZK^e;BgF{J!x&I z1@kFzbVeUB*gJF%=w)SPJk{`i_}Mz)hX-D@YSncE;rIKa2AKiq0XtxsF=NIEAPGnY z#z(G6Ks=!NpUiGVP7JZbl{9?iyv9gAF276;5Plum_qpKGjpu~|BjzQ^94|0pW}~<< zV$>UP^b$@CF2DhFUsD;89pJ&8DFquVW-odEz@04Lm&v%fMB~GV?7$%Xj>z0RWE2cz z)#*o=y*4R=;S!TieDdh!pJj8YYRw`M^Hr>tLWZgFfTSEt@c2scaWixZu=kIxT z(Jc#d!s9(U_5N``e?{Zvq1`hO-69nqR5E304(^K%44Fxo51gAY{h_?#S+LkJUV$Mq z34m`us-(vza_h2e)H)UC%Z^XD?cT!TS+IDo(ZQH$Rz7&J28yNJB|9X^?UN*mCEGTW zBpt4kq=L63$=ngvKUX42uarvCnU-*SPq`$uJHmFXI(_o4;#Ea=8mvkyCXbi-`I!i!n%UD!ZF;w%er<)cwT+B1MPO0 zd=l&3e*qM73O3AqAe}`s$HBV0h{+xUuO5WecfrVb2n6AdRIq!%sD&@9VBRFyv>%q= z0khLbj#Mk4=nGgk56-qiUMl2{g)u716KHGeLhR8{ZBcWqQ$t6Gm4DXiSun8&pHHOAp`og-o6l>9ahuV~0doq- zRTnK*4?R8wq|JWd-MOJShu2SccMn@?bk6NbVw^H4VzGF6_UH)b!tvHPQ?r4BbT2g* zRos&%;_nF(D|d6eZW!|?`uMnNIMau_DLJoW zmzjNRuh%k5@eTjBr^R?Wy2+BCLM=A)Uj10Ig)-i2Ok=#Po{BaZiEt&3^e>Aa0`4v#vG} z`yxPw%)QPosjvrSe@<6;*ER;!n-dkRu?0d!00xz;xGTVBgOW9R!B4$k^)e6~uMVuK z6II)hg7wJNE2k)I=@o&5j}RSi^Mc_Z8@$gTSFfC@b*CS4Ya0oQZzEGq%T+snb;6&} zNKo9KsFW4kdfA+*@~^4)t2QIZ^QI`f3n~H$Urm_Sb+PCI1-!#=9jmpOOKZ00000NkvXXu0mjf Du#{0+ literal 0 HcmV?d00001 diff --git a/qtcnet-client/Resources/RequestSentIcon.png b/qtcnet-client/Resources/RequestSentIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..b28a833de504f7403a73acae356caf12cc57fadb GIT binary patch literal 2756 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 KMNUMnLSTYU)k+!w literal 0 HcmV?d00001