Slight UI Adjustments

Add Profile Image Click Event
Reimplement Chat Rooms
This commit is contained in:
Alan Moon 2025-12-08 19:06:21 -08:00
parent 65bd759549
commit 066686205c
14 changed files with 744 additions and 588 deletions

View File

@ -9,6 +9,7 @@ namespace QtCNETAPI.Events
{ {
public class RoomListEventArgs : EventArgs public class RoomListEventArgs : EventArgs
{ {
public required Room Room { get; set; }
public required List<User> UserList { get; set; } public required List<User> UserList { get; set; }
} }
} }

View File

@ -1,13 +1,11 @@
using System; using QtCNETAPI.Models;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace QtCNETAPI.Events namespace QtCNETAPI.Events
{ {
public class ServerMessageEventArgs : EventArgs public class ServerMessageEventArgs : EventArgs
{ {
public required User User { get; set; }
public required Room Room { get; set; }
public required string Message { get; set; } public required string Message { get; set; }
} }
} }

View File

@ -63,14 +63,14 @@ namespace QtCNETAPI.Services.GatewayService
HubConnection = gwConBuilder.Build(); HubConnection = gwConBuilder.Build();
// register events // register events
HubConnection.On<string>("RoomMessage", (serverMessage) => OnRoomMessageReceived?.Invoke(this, new ServerMessageEventArgs { Message = serverMessage })); HubConnection.On<User, string, Room>("RoomMessage", (user, msg, room) => OnRoomMessageReceived?.Invoke(this, new ServerMessageEventArgs { User = user, Room = room, Message = msg }));
HubConnection.On<string>("cf", (function) => OnClientFunctionReceived?.Invoke(this, new ClientFunctionEventArgs { Function = function })); HubConnection.On<string>("cf", (function) => OnClientFunctionReceived?.Invoke(this, new ClientFunctionEventArgs { Function = function }));
HubConnection.On<Message, UserInformationDto>("ReceiveDirectMessage", (message, user) => OnDirectMessageReceived?.Invoke(this, new DirectMessageEventArgs { Message = message, User = user })); HubConnection.On<Message, UserInformationDto>("ReceiveDirectMessage", (message, user) => OnDirectMessageReceived?.Invoke(this, new DirectMessageEventArgs { Message = message, User = user }));
HubConnection.On("RefreshUserLists", () => OnRefreshUserListsReceived?.Invoke(this, EventArgs.Empty)); HubConnection.On("RefreshUserLists", () => OnRefreshUserListsReceived?.Invoke(this, EventArgs.Empty));
HubConnection.On("RefreshRoomList", () => OnRefreshRoomListReceived?.Invoke(this, EventArgs.Empty)); HubConnection.On("RefreshRoomList", () => OnRefreshRoomListReceived?.Invoke(this, EventArgs.Empty));
HubConnection.On("RefreshContactsList", () => OnRefreshContactsListReceived?.Invoke(this, EventArgs.Empty)); HubConnection.On("RefreshContactsList", () => OnRefreshContactsListReceived?.Invoke(this, EventArgs.Empty));
HubConnection.On<ServerConfig>("ReceiveServerConfig", (serverConfig) => OnServerConfigReceived?.Invoke(this, new ServerConfigEventArgs { ServerConfig = serverConfig })); HubConnection.On<ServerConfig>("ReceiveServerConfig", (serverConfig) => OnServerConfigReceived?.Invoke(this, new ServerConfigEventArgs { ServerConfig = serverConfig }));
HubConnection.On<List<User>>("RoomUserList", (userList) => OnRoomUserListReceived?.Invoke(this, new RoomListEventArgs { UserList = userList })); HubConnection.On<Room, List<User>>("RoomUserList", (room, userList) => OnRoomUserListReceived?.Invoke(this, new RoomListEventArgs { Room = room, UserList = userList }));
HubConnection.On<string>("GuestJoin", (username) => OnGuestUserJoin?.Invoke(this, new GuestUserJoinEventArgs { Username = username })); HubConnection.On<string>("GuestJoin", (username) => OnGuestUserJoin?.Invoke(this, new GuestUserJoinEventArgs { Username = username }));
HubConnection.On("RoomDeleted", () => OnRoomDeleted?.Invoke(this, EventArgs.Empty)); HubConnection.On("RoomDeleted", () => OnRoomDeleted?.Invoke(this, EventArgs.Empty));
HubConnection.On("ForceSignOut", () => OnUserForceLogout?.Invoke(this, EventArgs.Empty)); HubConnection.On("ForceSignOut", () => OnUserForceLogout?.Invoke(this, EventArgs.Empty));

View File

@ -40,6 +40,7 @@
// //
// pbCurrentProfilePic // pbCurrentProfilePic
// //
pbCurrentProfilePic.Cursor = Cursors.Hand;
pbCurrentProfilePic.Image = Properties.Resources.DefaultPfp; pbCurrentProfilePic.Image = Properties.Resources.DefaultPfp;
pbCurrentProfilePic.Location = new Point(3, 3); pbCurrentProfilePic.Location = new Point(3, 3);
pbCurrentProfilePic.Name = "pbCurrentProfilePic"; pbCurrentProfilePic.Name = "pbCurrentProfilePic";
@ -47,6 +48,7 @@
pbCurrentProfilePic.SizeMode = PictureBoxSizeMode.Zoom; pbCurrentProfilePic.SizeMode = PictureBoxSizeMode.Zoom;
pbCurrentProfilePic.TabIndex = 0; pbCurrentProfilePic.TabIndex = 0;
pbCurrentProfilePic.TabStop = false; pbCurrentProfilePic.TabStop = false;
pbCurrentProfilePic.Click += pbCurrentProfilePic_Click;
// //
// llblSignOut // llblSignOut
// //

View File

@ -18,6 +18,8 @@ namespace qtcnet_client.Controls
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public Image ProfileImage { get; set; } = Resources.DefaultPfp; public Image ProfileImage { get; set; } = Resources.DefaultPfp;
public event EventHandler? OnProfileImageClicked;
public CurrentProfileControl() public CurrentProfileControl()
{ {
InitializeComponent(); InitializeComponent();
@ -29,5 +31,7 @@ namespace qtcnet_client.Controls
lblCurrencyAmount.Text = CurrencyCount.ToString(); lblCurrencyAmount.Text = CurrencyCount.ToString();
pbCurrentProfilePic.Image = ProfileImage; pbCurrentProfilePic.Image = ProfileImage;
} }
private void pbCurrentProfilePic_Click(object sender, EventArgs e) => OnProfileImageClicked?.Invoke(this, EventArgs.Empty);
} }
} }

View File

@ -89,6 +89,7 @@
// //
// tlpContactsList // tlpContactsList
// //
tlpContactsList.BackColor = Color.White;
tlpContactsList.ColumnCount = 1; tlpContactsList.ColumnCount = 1;
tlpContactsList.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); tlpContactsList.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
tlpContactsList.Dock = DockStyle.Fill; tlpContactsList.Dock = DockStyle.Fill;
@ -117,6 +118,7 @@
// //
// tlpRoomsList // tlpRoomsList
// //
tlpRoomsList.BackColor = Color.White;
tlpRoomsList.ColumnCount = 1; tlpRoomsList.ColumnCount = 1;
tlpRoomsList.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); tlpRoomsList.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
tlpRoomsList.Dock = DockStyle.Fill; tlpRoomsList.Dock = DockStyle.Fill;
@ -143,7 +145,7 @@
// //
// lvUserList // lvUserList
// //
lvUserList.BorderStyle = BorderStyle.FixedSingle; lvUserList.BorderStyle = BorderStyle.None;
lvUserList.Location = new Point(3, 3); lvUserList.Location = new Point(3, 3);
lvUserList.MultiSelect = false; lvUserList.MultiSelect = false;
lvUserList.Name = "lvUserList"; lvUserList.Name = "lvUserList";
@ -151,7 +153,7 @@
lvUserList.SmallImageList = ilStatusIcons; lvUserList.SmallImageList = ilStatusIcons;
lvUserList.TabIndex = 0; lvUserList.TabIndex = 0;
lvUserList.UseCompatibleStateImageBehavior = false; lvUserList.UseCompatibleStateImageBehavior = false;
lvUserList.View = View.List; lvUserList.View = View.SmallIcon;
// //
// ilStatusIcons // ilStatusIcons
// //
@ -179,6 +181,7 @@
// //
// lvGameList // lvGameList
// //
lvGameList.BorderStyle = BorderStyle.None;
lvGameList.Dock = DockStyle.Fill; lvGameList.Dock = DockStyle.Fill;
lvGameList.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point, 0); lvGameList.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point, 0);
listViewItem1.ToolTipText = "Stock Market"; listViewItem1.ToolTipText = "Stock Market";
@ -219,6 +222,7 @@
// //
// listView1 // listView1
// //
listView1.BorderStyle = BorderStyle.None;
listView1.Dock = DockStyle.Fill; listView1.Dock = DockStyle.Fill;
listView1.Location = new Point(3, 3); listView1.Location = new Point(3, 3);
listView1.MultiSelect = false; listView1.MultiSelect = false;

View File

@ -124,93 +124,93 @@
<value> <value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAAhQAAAJNU0Z0AUkBTAIBAQQB SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA+hMAAAJNU0Z0AUkBTAIBAQQB
AAGoAQABqAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/ AAHIAQAByAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AC4AAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AC4AAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B
0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYB 0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYB
BwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekD BwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekD
YAHoA10B0QNQAZ8DMQFNAwUBBhQAAyABLQNUAasDWwHkA08B9QMkAfsDOQH+AzkB/gMkAfsDUwH0A2IB YAHoA10B0QNQAZ8DMQFNAwUBBhQAAyABLQNUAasDWwHkA1YB9QMkAfsDPQH+Az0B/gMkAfsDUwH0A2IB
4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQBSAFaAUgB9QEhAVUBIQH7ARUBVQEVAf4BFQFVARUB/gEhAVUB 4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQBTAFaAUwB9QEhAVkBIQH7ARkBWQEZAf4BGQFZARkB/gEhAVkB
IQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAUgCWgH1ASECVQH7ARUCVQH+ARUCVQH+ASEC IQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAUwCWgH1ASECWQH7ARkCWQH+ARkCWQH+ASEC
VQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAkgBWgH1AiEBVQH7AhUBVQH+AhUBVQH+AiEB WQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAkwBWgH1AiEBWQH7AhkBWQH+AhkBWQH+AiEB
VQH7A1MB9ANiAeEDUQGhAx4BKgwAAxsBJQNYAb0DWgHyAz0B/gMwAf8DOQH/AzwB/wM2Af8DKgH/AyQB WQH7A1MB9ANiAeEDUQGhAx4BKgwAAxsBJQNYAb0DWgHyA0EB/gMwAf8DOQH/AzwB/wM2Af8DKgH/AyQB
/wNAAf0DWwHwA1YBsgMaASMIAAMbASUDWAG9A1oB8gEVAV0BFQH+AQABVwEAAf8BAAFnAQAB/wEAAWwB /wNAAf0DXgHwA1YBsgMaASMIAAMbASUDWAG9A1oB8gEZAWEBGQH+AQABVwEAAf8BAAFnAQAB/wEAAWwB
AAH/AQABYQEAAf8BAAFMAQAB/wEAAUABAAH/ASoBQAEqAf0BVwFeAVcB8ANWAbIBGQEaARkBIwgAAxsB AAH/AQABYQEAAf8BAAFMAQAB/wEAAUABAAH/ATIBQAEyAf0BWwFeAVsB8ANWAbIBGQEaARkBIwgAAxsB
JQNYAb0DWgHyARUCXQH+AQACVwH/AQACZwH/AQACbAH/AQACYQH/AQACTAH/AQACQAH/ASoCQAH9AVcC JQNYAb0DWgHyARkCYQH+AQACVwH/AQACZwH/AQACbAH/AQACYQH/AQACTAH/AQACQAH/ATICQAH9AVsC
XgHwA1YBsgEZAhoBIwgAAxsBJQNYAb0DWgHyAhUBXQH+AgABVwH/AgABZwH/AgABbAH/AgABYQH/AgAB XgHwA1YBsgEZAhoBIwgAAxsBJQNYAb0DWgHyAhkBYQH+AgABVwH/AgABZwH/AgABbAH/AgABYQH/AgAB
TAH/AgABQAH/AioBQAH9AlcBXgHwA1YBsgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB TAH/AgABQAH/AjIBQAH9AlsBXgHwA1YBsgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB
/wN1Af8DcQH/A2QB/wNMAf8DMQH/AzkB/gNfAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFTAW8BUwHzAQAB /wN1Af8DcQH/A2QB/wNMAf8DMQH/Az0B/gNiAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFYAW8BWAHzAQAB
ggEAAf8BAAGZAQAB/wEAAbYBAAH/AQABzAEAAf8BAAHTAQAB/wEAAcsBAAH/AQABswEAAf8BAAGIAQAB ggEAAf8BAAGZAQAB/wEAAbYBAAH/AQABzAEAAf8BAAHTAQAB/wEAAcsBAAH/AQABswEAAf8BAAGIAQAB
/wEAAVcBAAH/ARUBVQEVAf4BXAFiAVwB7gNQAZoDAwEEAwMBBAFSAlMBpQFTAm8B8wEAAoIB/wEAApkB /wEAAVcBAAH/ARkBWQEZAf4BYAFiAWAB7gNQAZoDAwEEAwMBBAFSAlMBpQFYAm8B8wEAAoIB/wEAApkB
/wEAArYB/wEAAswB/wEAAtMB/wEAAssB/wEAArMB/wEAAogB/wEAAlcB/wEVAlUB/gFcAmIB7gNQAZoD /wEAArYB/wEAAswB/wEAAtMB/wEAAssB/wEAArMB/wEAAogB/wEAAlcB/wEZAlkB/gFgAmIB7gNQAZoD
AwEEAwMBBAJSAVMBpQJTAW8B8wIAAYIB/wIAAZkB/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB AwEEAwMBBAJSAVMBpQJYAW8B8wIAAYIB/wIAAZkB/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB
/wIAAYgB/wIAAVcB/wIVAVUB/gJcAWIB7gNQAZoDAwEEAy0BRANgAegDeAH+A24B/wN7Af8DhQH/A4oB /wIAAYgB/wIAAVcB/wIZAVkB/gJgAWIB7gNQAZoDAwEEAy0BRANgAegDfAH+A24B/wN7Af8DhQH/A4oB
/wOMAf8DigH/A4UB/wN2Af8DVwH/AzIB/wNAAf0DXgHdAyoBPwMtAUQBYAFpAWAB6AEVAYoBFQH+AQAB /wOMAf8DigH/A4UB/wN2Af8DVwH/AzIB/wNAAf0DXgHdAyoBPwMtAUQBYAFpAWAB6AEZAYIBGQH+AQAB
xgEAAf8BAAHcAQAB/wEAAe4BAAH/AQAB+AEAAf8BAAH7AQAB/wEAAfkBAAH/AQAB7wEAAf8BAAHUAQAB xgEAAf8BAAHcAQAB/wEAAe4BAAH/AQAB+AEAAf8BAAH7AQAB/wEAAfkBAAH/AQAB7wEAAf8BAAHUAQAB
/wEAAZwBAAH/AQABWgEAAf8BKgFAASoB/QNeAd0DKgE/Ay0BRAFgAmkB6AEVAooB/gEAAsYB/wEAAtwB /wEAAZwBAAH/AQABWgEAAf8BMgFAATIB/QNeAd0DKgE/Ay0BRAFgAmkB6AEZAoIB/gEAAsYB/wEAAtwB
/wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B/wEAAtQB/wEAApwB/wEAAloB/wEqAkAB/QNeAd0D /wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B/wEAAtQB/wEAApwB/wEAAloB/wEyAkAB/QNeAd0D
KgE/Ay0BRAJgAWkB6AIVAYoB/gIAAcYB/wIAAdwB/wIAAe4B/wIAAfgB/wIAAfsB/wIAAfkB/wIAAe8B KgE/Ay0BRAJgAWkB6AIZAYIB/gIAAcYB/wIAAdwB/wIAAe4B/wIAAfgB/wIAAfsB/wIAAfkB/wIAAe8B
/wIAAdQB/wIAAZwB/wIAAVoB/wIqAUAB/QNeAd0DKgE/A04BlQN3AfgDfwH/A4UB/wOKAf8DjQH/A44B /wIAAdQB/wIAAZwB/wIAAVoB/wIyAUAB/QNeAd0DKgE/A04BlQN3AfgDfwH/A4UB/wOKAf8DjQH/A44B
/wOOAf8DjgH/A40B/wOJAf8DdwH/A00B/wMlAf8DWgHyA0oBiwNOAZUBPwGKAT8B+AEAAeUBAAH/AQAB /wOOAf8DjgH/A40B/wOJAf8DdwH/A00B/wMlAf8DWgHyA0oBiwNOAZUBQwF+AUMB+AEAAeUBAAH/AQAB
7wEAAf8BAAH4AQAB/wEAAf0BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/gEAAf8BAAH2AQAB 7wEAAf8BAAH4AQAB/wEAAf0BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/gEAAf8BAAH2AQAB
/wEAAdUBAAH/AQABiwEAAf8BAAFBAQAB/wNaAfIDSgGLA04BlQE/AooB+AEAAuUB/wEAAu8B/wEAAvgB /wEAAdUBAAH/AQABiwEAAf8BAAFBAQAB/wNaAfIDSgGLA04BlQFDAn4B+AEAAuUB/wEAAu8B/wEAAvgB
/wEAAv0B/wEAA/8BAAP/AQAD/wEAAv4B/wEAAvYB/wEAAtUB/wEAAosB/wEAAkEB/wNaAfIDSgGLA04B /wEAAv0B/wEAA/8BAAP/AQAD/wEAAv4B/wEAAvYB/wEAAtUB/wEAAosB/wEAAkEB/wNaAfIDSgGLA04B
lQI/AYoB+AIAAeUB/wIAAe8B/wIAAfgB/wIAAf0B/wIAAv8CAAL/AgAC/wIAAf4B/wIAAfYB/wIAAdUB lQJDAX4B+AIAAeUB/wIAAe8B/wIAAfgB/wIAAf0B/wIAAv8CAAL/AgAC/wIAAf4B/wIAAfYB/wIAAdUB
/wIAAYsB/wIAAUEB/wNaAfIDSgGLA18B0wN+AfwDkwH/A44B/wONAf8DjgH/A44B/wOOAf8DjgH/A44B /wIAAYsB/wIAAUEB/wNaAfIDSgGLA18B0wN+AfwDkwH/A44B/wONAf8DjgH/A44B/wOOAf8DjgH/A44B
/wONAf8DhQH/A2cB/wM0Af8DQQH5A1oBxAFbAV8BWwHTASsBtgErAfwBDgH7AQ4B/wEDAf0BAwH/AQAB /wONAf8DhQH/A2cB/wM0Af8DQQH5A1oBxAFbAV8BWwHTASsBrgErAfwBDgH7AQ4B/wEDAf0BAwH/AQAB
/gEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHvAQAB /gEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHvAQAB
/wEAAbkBAAH/AQABXQEAAf8BPgFBAT4B+QNaAcQBWwJfAdMBKwK2AfwBDgL7Af8BAwL9Af8BAAL+Af8B /wEAAbkBAAH/AQABXQEAAf8DQQH5A1oBxAFbAl8B0wErAq4B/AEOAvsB/wEDAv0B/wEAAv4B/wEAA/8B
AAP/AQAD/wEAA/8BAAP/AQAD/wEAAv0B/wEAAu8B/wEAArkB/wEAAl0B/wE+AkEB+QNaAcQCWwFfAdMC AAP/AQAD/wEAA/8BAAP/AQAC/QH/AQAC7wH/AQACuQH/AQACXQH/A0EB+QNaAcQCWwFfAdMCKwGuAfwC
KwG2AfwCDgH7Af8CAwH9Af8CAAH+Af8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAf0B/wIAAe8B/wIAAbkB DgH7Af8CAwH9Af8CAAH+Af8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAf0B/wIAAe8B/wIAAbkB/wIAAV0B
/wIAAV0B/wI+AUEB+QNaAcQDbgH1A4AB/gOfAf8DkwH/A48B/wOOAf8DjgH/A44B/wOOAf8DjgH/A44B /wNBAfkDWgHEA24B9QOAAf4DnwH/A5MB/wOPAf8DjgH/A44B/wOOAf8DjgH/A44B/wOOAf8DiwH/A3cB
/wOLAf8DdwH/A0gB/wNAAf0DYgHhAU0BfwFNAfUBOQHVATkB/gEnAf8BJwH/AQsB/wELAf8BAQH/AQEB /wNIAf8DQAH9A2IB4QFVAXMBVQH1AT0BzQE9Af4BJwH/AScB/wELAf8BCwH/AQEB/wEBAf8BAAH/AQAB
/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAfkBAAH/AQAB /wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH5AQAB/wEAAdYBAAH/AQAB
1gEAAf8BAAGBAQAB/wEqAUABKgH9A2IB4QFNAn8B9QE5AtUB/gEnA/8BCwP/AQED/wEAA/8BAAP/AQAD gQEAAf8BMgFAATIB/QNiAeEBVQJzAfUBPQLNAf4BJwP/AQsD/wEBA/8BAAP/AQAD/wEAA/8BAAP/AQAD
/wEAA/8BAAP/AQAD/wEAAvkB/wEAAtYB/wEAAoEB/wEqAkAB/QNiAeECTQF/AfUCOQHVAf4CJwL/AgsC /wEAA/8BAAL5Af8BAALWAf8BAAKBAf8BMgJAAf0DYgHhAlUBcwH1Aj0BzQH+AicC/wILAv8CAQL/AgAC
/wIBAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH5Af8CAAHWAf8CAAGBAf8CKgFAAf0DYgHhA3IB /wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB+QH/AgAB1gH/AgABgQH/AjIBQAH9A2IB4QNrAfYDgAH+A6sB
9gOEAf4DqwH/A5kB/wOQAf8DjgH/A44B/wOOAf8DjgH/A44B/wOOAf8DjQH/A38B/wNVAf8DQAH9A14B /wOZAf8DkAH/A44B/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wN/Af8DVQH/A0AB/QNeAeIBSAF5AUgB
4gFIAX8BSAH2AVwB1QFcAf4BQgH/AUIB/wEZAf8BGQH/AQQB/wEEAf8BAAH/AQAB/wEAAf8BAAH/AQAB 9gFgAc0BYAH+AUIB/wFCAf8BGQH/ARkB/wEEAf8BBAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH9AQAB/wEAAeQBAAH/AQABmAEAAf8BKgFAASoB /wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHkAQAB/wEAAZgBAAH/ATIBQAEyAf0DXgHiAUgC
/QNeAeIBSAJ/AfYBXALVAf4BQgP/ARkD/wEEA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL9Af8B eQH2AWACzQH+AUID/wEZA/8BBAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC/QH/AQAC5AH/AQAC
AALkAf8BAAKYAf8BKgJAAf0DXgHiAkgBfwH2AlwB1QH+AkIC/wIZAv8CBAL/AgAC/wIAAv8CAAL/AgAC mAH/ATICQAH9A14B4gJIAXkB9gJgAc0B/gJCAv8CGQL/AgQC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC
/wIAAv8CAAL/AgAB/QH/AgAB5AH/AgABmAH/AioBQAH9A14B4gNhAdYDgwH8A7gB/wOjAf8DkwH/A44B /wIAAf0B/wIAAeQB/wIAAZgB/wIyAUAB/QNeAeIDYQHWA34B/AO4Af8DowH/A5MB/wOOAf8DjgH/A44B
/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wOCAf8DXAH/A00B+gNaAccBXAFhAVwB1gFkAboBZAH8AV8B /wOOAf8DjgH/A44B/wONAf8DggH/A1wB/wNNAfoDWgHHAVwBYQFcAdYBZAGyAWQB/AFfAf8BXwH/AS8B
/wFfAf8BLwH/AS8B/wEMAf8BDAH/AQEB/wEBAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB /wEvAf8BDAH/AQwB/wEBAf8BAQH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
/wEAAf8BAAH/AQAB/gEAAf8BAAHqAQAB/wEAAaUBAAH/ASkBTQEpAfoDWgHHAVwCYQHWAWQCugH8AV8D /wEAAf4BAAH/AQAB6gEAAf8BAAGlAQAB/wEtAU0BLQH6A1oBxwFcAmEB1gFkArIB/AFfA/8BLwP/AQwD
/wEvA/8BDAP/AQED/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC/gH/AQAC6gH/AQACpQH/ASkCTQH6A1oB /wEBA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAAv4B/wEAAuoB/wEAAqUB/wEtAk0B+gNaAccCXAFhAdYC
xwJcAWEB1gJkAboB/AJfAv8CLwL/AgwC/wIBAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAf4B/wIAAeoB ZAGyAfwCXwL/Ai8C/wIMAv8CAQL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH+Af8CAAHqAf8CAAGlAf8C
/wIAAaUB/wIpAU0B+gNaAccDUAGaA4sB+QPFAf8DsgH/A5wB/wORAf8DjgH/A44B/wOOAf8DjgH/A48B LQFNAfoDWgHHA1ABmgOHAfkDxQH/A7IB/wOcAf8DkQH/A44B/wOOAf8DjgH/A44B/wOPAf8DjgH/A4MB
/wOOAf8DgwH/A2AB/wNaAfIDTAGQA1ABmgFqAZkBagH5AXwB/wF8Af8BUQH/AVEB/wEfAf8BHwH/AQcB /wNgAf8DWgHyA0wBkANQAZoBagGQAWoB+QF8Af8BfAH/AVEB/wFRAf8BHwH/AR8B/wEHAf8BBwH/AQEB
/wEHAf8BAQH/AQEB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wECAf8BAgH/AQIB/gECAf8BAAHrAQAB /wEBAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAgH/AQIB/wECAf4BAgH/AQAB6wEAAf8BAAGtAQAB
/wEAAa0BAAH/AVoBawFaAfIDTAGQA1ABmgFqApkB+QF8A/8BUQP/AR8D/wEHA/8BAQP/AQAD/wEAA/8B /wFaAWsBWgHyA0wBkANQAZoBagKQAfkBfAP/AVED/wEfA/8BBwP/AQED/wEAA/8BAAP/AQAD/wECA/8B
AAP/AQID/wECAv4B/wEAAusB/wEAAq0B/wFaAmsB8gNMAZADUAGaAmoBmQH5AnwC/wJRAv8CHwL/AgcC AgL+Af8BAALrAf8BAAKtAf8BWgJrAfIDTAGQA1ABmgJqAZAB+QJ8Av8CUQL/Ah8C/wIHAv8CAQL/AgAC
/wIBAv8CAAL/AgAC/wIAAv8CAgL/AgIB/gH/AgAB6wH/AgABrQH/AloBawHyA0wBkAMvAUkDbAHrA6YB /wIAAv8CAAL/AgIC/wICAf4B/wIAAesB/wIAAa0B/wJaAWsB8gNMAZADLwFJA2wB6wOeAf4DxgH/A64B
/gPGAf8DrgH/A5wB/wOTAf8DkAH/A48B/wOQAf8DkwH/A5MB/wOFAf8DUQH9A2AB4AMtAUUDLwFJA2wB /wOcAf8DkwH/A5AB/wOPAf8DkAH/A5MB/wOTAf8DhQH/A00B/QNgAeADLQFFAy8BSQNsAesBgAHNAYAB
6wGAAdUBgAH+AX8B/wF/Af8BSQH/AUkB/wEfAf8BHwH/AQwB/wEMAf8BBQH/AQUB/wEDAf8BAwH/AQUB /gF/Af8BfwH/AUkB/wFJAf8BHwH/AR8B/wEMAf8BDAH/AQUB/wEFAf8BAwH/AQMB/wEFAf8BBQH/AQoB
/wEFAf8BCgH/AQoB/wEKAf4BCgH/AQEB7QEBAf8BKgG2ASoB/QFgAWYBYAHgAy0BRQMvAUkDbAHrAYAC /wEKAf8BCgH+AQoB/wEBAe0BAQH/ATIBtgEyAf0BYAFmAWAB4AMtAUUDLwFJA2wB6wGAAs0B/gF/A/8B
1QH+AX8D/wFJA/8BHwP/AQwD/wEFA/8BAwP/AQUD/wEKA/8BCgL+Af8BAQLtAf8BKgK2Af0BYAJmAeAD SQP/AR8D/wEMA/8BBQP/AQMD/wEFA/8BCgP/AQoC/gH/AQEC7QH/ATICtgH9AWACZgHgAy0BRQMvAUkD
LQFFAy8BSQNsAesCgAHVAf4CfwL/AkkC/wIfAv8CDAL/AgUC/wIDAv8CBQL/AgoC/wIKAf4B/wIBAe0B bAHrAoABzQH+An8C/wJJAv8CHwL/AgwC/wIFAv8CAwL/AgUC/wIKAv8CCgH+Af8CAQHtAf8CMgG2Af0C
/wIqAbYB/QJgAWYB4AMtAUUDAwEEA1YBrgN2AfUD2QH/A8sB/wO3Af8DpwH/A50B/wOaAf8DnAH/A58B YAFmAeADLQFFAwMBBANWAa4DbwH1A9kB/wPLAf8DtwH/A6cB/wOdAf8DmgH/A5wB/wOfAf8DmwH/A4kB
/wObAf8DiQH/A2gB8ANSAaMDAwEEAwMBBANWAa4BbgF/AW4B9QGoAf8BqAH/AYkB/wGJAf8BXAH/AVwB /wNoAfADUgGjAwMBBAMDAQQDVgGuAW4BcwFuAfUBqAH/AagB/wGJAf8BiQH/AVwB/wFcAf8BNwH/ATcB
/wE3Af8BNwH/ASIB/wEiAf8BGwH/ARsB/wEfAf8BHwH/ASYB/wEmAf8BHQH/AR0B/wEFAfMBBQH/AVcB /wEiAf8BIgH/ARsB/wEbAf8BHwH/AR8B/wEmAf8BJgH/AR0B/wEdAf8BBQHzAQUB/wFbAWgBWwHwA1IB
aQFXAfADUgGjAwMBBAMDAQQDVgGuAW4CfwH1AagD/wGJA/8BXAP/ATcD/wEiA/8BGwP/AR8D/wEmA/8B owMDAQQDAwEEA1YBrgFuAnMB9QGoA/8BiQP/AVwD/wE3A/8BIgP/ARsD/wEfA/8BJgP/AR0D/wEFAvMB
HQP/AQUC8wH/AVcCaQHwA1IBowMDAQQDAwEEA1YBrgJuAX8B9QKoAv8CiQL/AlwC/wI3Av8CIgL/AhsC /wFbAmgB8ANSAaMDAwEEAwMBBANWAa4CbgFzAfUCqAL/AokC/wJcAv8CNwL/AiIC/wIbAv8CHwL/AiYC
/wIfAv8CJgL/Ah0C/wIFAfMB/wJXAWkB8ANSAaMDAwEEBAADHAEnA10BxwN6AfYDtQH+A9cB/wPMAf8D /wIdAv8CBQHzAf8CWwFoAfADUgGjAwMBBAQAAxwBJwNdAccDdgH2A60B/gPXAf8DzAH/A8IB/wO7Af8D
wgH/A7sB/wO3Af8DsQH/A4AB/gNoAfQDWQG8AxsBJggAAxwBJwNdAccBdQF/AXUB9gGNAdUBjQH+AaUB twH/A7EB/wOAAf4DaAH0A1kBvAMbASYIAAMcAScDXQHHAXEBeQFxAfYBhQHNAYUB/gGlAf8BpQH/AYsB
/wGlAf8BiwH/AYsB/wF0Af8BdAH/AWYB/wFmAf8BXAH/AVwB/wFOAf8BTgH/AUUB1QFFAf4BUwF6AVMB /wGLAf8BdAH/AXQB/wFmAf8BZgH/AVwB/wFcAf8BTgH/AU4B/wFJAc0BSQH+AVMBdgFTAfQBVwFZAVcB
9AFXAVkBVwG8AxsBJggAAxwBJwNdAccBdQJ/AfYBjQLVAf4BpQP/AYsD/wF0A/8BZgP/AVwD/wFOA/8B vAMbASYIAAMcAScDXQHHAXECeQH2AYUCzQH+AaUD/wGLA/8BdAP/AWYD/wFcA/8BTgP/AUkCzQH+AVMC
RQLVAf4BUwJ6AfQBVwJZAbwDGwEmCAADHAEnA10BxwJ1AX8B9gKNAdUB/gKlAv8CiwL/AnQC/wJmAv8C dgH0AVcCWQG8AxsBJggAAxwBJwNdAccCcQF5AfYChQHNAf4CpQL/AosC/wJ0Av8CZgL/AlwC/wJOAv8C
XAL/Ak4C/wJFAdUB/gJTAXoB9AJXAVkBvAMbASYMAAMhATADWQG2A2oB7gObAfoDvgH9A9QB/wPMAf8D SQHNAf4CUwF2AfQCVwFZAbwDGwEmDAADIQEwA1kBtgNmAe4DkAH6A74B/QPUAf8DzAH/A74B/QODAfkD
vgH9A4cB+QNsAesDVQGsAx8BLBAAAyEBMANZAbYBaAFsAWgB7gGBAaUBgQH6Aa4BwAGuAf0BnwH/AZ8B bAHrA1UBrAMfASwQAAMhATADWQG2AWQBaAFkAe4BfQGdAX0B+gGuAb4BrgH9AZ8B/wGfAf8BjAH/AYwB
/wGMAf8BjAH/AWEBwAFhAf0BaAGZAWgB+QFhAWwBYQHrA1UBrAMfASwQAAMhATADWQG2AWgCbAHuAYEC /wFdAb4BXQH9AWgBkAFoAfkBYQFsAWEB6wNVAawDHwEsEAADIQEwA1kBtgFkAmgB7gF9Ap0B+gGuAr4B
pQH6Aa4CwAH9AZ8D/wGMA/8BYQLAAf0BaAKZAfkBYQJsAesDVQGsAx8BLBAAAyEBMANZAbYCaAFsAe4C /QGfA/8BjAP/AV0CvgH9AWgCkAH5AWECbAHrA1UBrAMfASwQAAMhATADWQG2AmQBaAHuAn0BnQH6Aq4B
gQGlAfoCrgHAAf0CnwL/AowC/wJhAcAB/QJoAZkB+QJhAWwB6wNVAawDHwEsFAADBgEHAzYBWANVAawD vgH9Ap8C/wKMAv8CXQG+Af0CaAGQAfkCYQFsAesDVQGsAx8BLBQAAwYBBwM2AVgDVQGsA2YB5QOdAfwD
ZgHlA6kB/AOWAfsDZQHiA1MBpwMzAVEDBgEHGAADBgEHAzYBWANVAawDZgHlAX4BugF+AfwBcwGqAXMB kgH7A2UB4gNTAacDMwFRAwYBBxgAAwYBBwM2AVgDVQGsA2YB5QF+AbIBfgH8AWsBnQFrAfsDZQHiA1MB
+wNlAeIDUwGnAzMBUQMGAQcYAAMGAQcDNgFYA1UBrANmAeUBfgK6AfwBcwKqAfsDZQHiA1MBpwMzAVED pwMzAVEDBgEHGAADBgEHAzYBWANVAawDZgHlAX4CsgH8AWsCnQH7A2UB4gNTAacDMwFRAwYBBxgAAwYB
BgEHGAADBgEHAzYBWANVAawDZgHlAn4BugH8AnMBqgH7A2UB4gNTAacDMwFRAwYBBwwAAUIBTQE+BwAB BwM2AVgDVQGsA2YB5QJ+AbIB/AJrAZ0B+wNlAeIDUwGnAzMBUQMGAQcMAAFCAU0BPgcAAT4DAAEoAwAB
PgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/+BAAHgAQcB4AEHAeABBwHgAQcBwAEDAcABAwHAAQMB QAMAASADAAEBAQABAQYAAQEWAAP/gQAB4AEHAeABBwHgAQcB4AEHAcABAwHAAQMBwAEDAcABAwGAAQEB
wAEDAYABAQGAAQEBgAEBAYABAVAAAYABAQGAAQEBgAEBAYABAQHAAQMBwAEDAcABAwHAAQMB4AEHAeAB gAEBAYABAQGAAQFQAAGAAQEBgAEBAYABAQGAAQEBwAEDAcABAwHAAQMBwAEDAeABBwHgAQcB4AEHAeAB
BwHgAQcB4AEHCw== Bws=
</value> </value>
</data> </data>
<metadata name="ilGameIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="ilGameIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@ -220,176 +220,170 @@
<value> <value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAiicAAAJNU0Z0AUkBTAIBAQMB SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAJiYAAAJNU0Z0AUkBTAIBAQMB
AAEYAQABGAEAASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMAASADAAEBAQABIAYAAUB6 AAE4AQABOAEAASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMAASADAAEBAQABIAYAAUB6
AAIxASwB5wEIAQoBAAH/AyoBQAwAAyoBQAM2AVcCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwC AAJMAUsB5wEIAQoBAAH/AyoBQAwAAyoBQAM2AVcDPwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8B
QAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwC bAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAjsBOgFiAzMBUQMYASFUAANTAaIDWwHAIAAD
QAE/AWwCOwE6AWIDMwFRAxgBIVQAA1UBogNhAcAgAANXAaYDXwG88AADIQEwAkYBRQGAFAABFQEfAQQB VAGmA1kBvPAAAyEBMANGAYAUAAEVAR8BBAH/AQ0BFQEAAf8BCAEKAQAB/wEIAQoBAAH/DAADRAF6A1MB
/wENARUBAAH/AQgBCgEAAf8BCAEKAQAB/wwAAUYBRQFDAXoBYQFWAU0BpwGMAWUBRAHPAYwBZQFEAc8B pwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgB
jAFlAUQBzwGMAWUBRAHPAYwBZQFEAc8BjAFlAUQBzwGMAWUBRAHPAYwBZQFEAc8BjAFlAUQBzwGMAWUB YQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoB
RAHPAYwBZQFEAc8BjAFlAUQBzwGMAWUBRAHPAYwBZQFEAc8BjAFlAUQBzwGMAWcBRQHOAXIBXAFKAbsB zwFnAWABWQHOAVoBWQFYAbsCUAFPAZsDKgFAVAADYQHQA20B7iAAA2IB1ANrAenkAANZAb8BCAEKAQAB
WQFSAUwBmwMqAUBUAANoAdADdQHuIAADagHUA3MB6eQAAkwBSgG/AQgBCgEAAf8BCAEKAQAB/wEIAQoB /wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wNZAb8DWQG/AUMB
AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8CTAFKAb8CTAFKAb8BQwF0AQcB/wFHAXcB dAEHAf8BRwF3AQwB/wElAUcBAAH/AQ4BGQEAAf8MAAJLAUoBigFdAVoBWAG9AY8BZwFFAeoBjwFnAUUB
DAH/ASUBRwEAAf8BDgEZAQAB/wwAAU8BSwFJAYoBdAFfAUwBvQG+AW8BKAHqAb4BbwEoAeoBvgFvASgB 6gGPAWcBRQHqAY8BZwFFAeoBjwFnAUUB6gGPAWcBRQHqAY8BZwFFAeoBjwFnAUUB6gGPAWcBRQHqAY8B
6gG+AW8BKAHqAb4BbwEoAeoBvgFvASgB6gG+AW8BKAHqAb4BbwEoAeoBvgFvASgB6gG+AW8BKAHqAb4B ZwFFAeoBjwFnAUUB6gGPAWcBRQHqAY8BZwFFAeoBjwFnAUUB6gGPAWcBRQHqAYwBagFFAekBagFfAVgB
bwEoAeoBvgFvASgB6gG+AW8BKAHqAb4BbwEoAeoBvgFvASgB6gG7AW8BKAHpAZIBZwFAAdMBZwFZAU0B 0wFWAlUBrwMuAUhUAANhAdADbQHuIAADYgHUA2sB6eAAAQgBCgEAAf8BEAEeAQAB/wEhAUEBAAH/AScB
rwEvAi4BSFQAA2gB0AN1Ae4gAANqAdQDcwHp4AABCAEKAQAB/wEQAR4BAAH/ASEBQQEAAf8BJwFLAQAB SwEAAf8BJgFKAQAB/wEhAUEBAAH/ARABHgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BKQFOAQAB
/wEmAUoBAAH/ASEBQQEAAf8BEAEeAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEpAU4BAAH/AVoB /wFaAZYBEAH/AVoBnAEQAf8BcwG2ASYB/wEYAS4BAAH/DAADSQGGAloBWAG3AYEBZQFQAeMBgQFlAVAB
lgEQAf8BWgGcARAB/wFzAbYBJgH/ARgBLgEAAf8MAAFMAUoBRwGGAW8BXQFNAbcBrwFtATIB4wGvAW0B 4wGBAWUBUAHjAYEBZQFQAeMBiAFqAU4B5gGdAWoBQAHtAbcBbwEsAfQB3AF3AQ4B/AH/AXgBAAL/AXgB
MgHjAa8BbQEyAeMBrwFtATIB4wG2AW8BLgHmAckBcQEiAe0B2gF1ARcB9AHwAXcBBgH8Af8BeAEAAv8B AAH/AbkBbgEpAfUBiAFqAU4B5gGBAWUBUAHjAYEBZQFQAeMBgQFlAVAB4wGAAWUBTwHiAWQBXgFZAc0C
eAEAAf8B3gFxARQB9QG2AW8BLgHmAa8BbQEyAeMBrwFtATIB4wGvAW0BMgHjAa8BawEzAeIBiQFkAUQB VQFTAaoCLgEtAUZUAANhAdADbQHuIAADYgHUA2sB6dwAAQgBCgEAAf8BPQFxAQIB/wFMAYYBBwH/AVIB
zQFjAVcBTQGqAi4BLQFGVAADaAHQA3UB7iAAA2oB1ANzAencAAEIAQoBAAH/AT0BcQECAf8BTAGGAQcB jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFMAX8BDwH/ATsBZwEIAf8BIQE0AQgB
/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BTAF/AQ8B/wE7AWcBCAH/ASEB /wFTAY4BCwH/AVoBnAEQAf8BcgGzAScB/wFTAYEBGwH/EAADKwFBAzYBWQJAAT8BbgJAAT8BbgJAAT8B
NAEIAf8BUwGOAQsB/wFaAZwBEAH/AXIBswEnAf8BUwGBARsB/xAAAysBQQE3AjYBWQFBAUABPwFuAUEB bgJAAT8BbgNEAXsCUQFQAZ8BYAFdAVoBxQGcAWsBPQHuAf8BeAEAAv8BeAEAAf8BYwFfAVoByQNFAXwC
QAE/AW4BQQFAAT8BbgFBAUABPwFuAUcBRQFEAXsBWwFTAUsBnwF9AWEBSQHFAcoBbwEhAe4B/wF4AQAC QAE/AW4CQAE/AW4CQAE/AW4DPwFtAzsBYwMzAVIDGQEiVAADYQHQA20B7iAAA2IB1ANrAenYAAEVASkB
/wF4AQAB/wGDAWQBSAHJAUcBRgFEAXwBQQFAAT8BbgFBAUABPwFuAUEBQAE/AW4BQQFAAT8BbQE8AjsB AAH/AUoBhAEEAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8B
YwMzAVIDGQEiVAADaAHQA3UB7iAAA2oB1ANzAenYAAEVASkBAAH/AUoBhAEEAf8BUgGMAQgB/wFSAYwB UgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BVgGQAQwB/wFaAZoBEAH/AVoBnAEQAf8BcgGpATAB/wEIAQoB
CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8B AAH/AQgBCgEAAf8MAAMMARADEQEWAxUBHAMVARwDFQEcAxUBHAMhATACPgE9AWkCUwFSAaUBhwFpAU0B
VgGQAQwB/wFaAZoBEAH/AVoBnAEQAf8BcgGpATAB/wEIAQoBAAH/AQgBCgEAAf8MAAMMARADEQEWAxUB 5QH/AXgBAAL/AXgBAAH/AlUBUwGqAyIBMQMVARwDFQEcAxUBHAMUARsDEwEZAxABFQMHAQlUAANhAdAD
HAMVARwDFQEcAxUBHAMhATABPwE+AT0BaQFeAVUBTAGlAbUBbgEwAeUB/wF4AQAC/wF4AQAB/wFjAVcB bQHuIAADYgHUA2sB6dQAARYBJwECAf8BSQGAAQcB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB
TQGqAyIBMQMVARwDFQEcAxUBHAMUARsDEwEZAxABFQMHAQlUAANoAdADdQHuIAADagHUA3MB6dQAARYB CAH/AVIBjAEIAf8BUgGMAQsB/wFSAYwBEAH/AVIBjAEQAf8BWAGSARAB/wFaAZQBEAH/AVoBmwEQAf8B
JwECAf8BSQGAAQcB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQsB WgGcARAB/wFcAZ4BEgH/ATsBbQEDAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8IAAMFBAYECAEKAwgB
/wFSAYwBEAH/AVIBjAEQAf8BWAGSARAB/wFaAZQBEAH/AVoBmwEQAf8BWgGcARAB/wFcAZ4BEgH/ATsB CgMIAQoDCAEKAxcBHwI5ATgBXQNRAZ4BgQFlAVAB4wH/AXgBAAL/AXgBAAH/A1IBowMYASEDCAEKAwgB
bQEDAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8IAAMFBAYECAEKAwgBCgMIAQoDCAEKAxcBHwI5ATgB CgMIAQoDCAEKAwcBCQMGAQcDAgEDVAADYQHQA20B7iAAA2IB1ANrAenQAAFUAVYBUAHfAUcBgAEDAf8B
XQFZAVIBTAGeAa8BbQEyAeMB/wF4AQAC/wF4AQAB/wFeAVUBTAGjAxgBIQMIAQoDCAEKAwgBCgMIAQoD UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwB
BwEJAwYBBwMCAQNUAANoAdADdQHuIAADagHUA3MB6dAAAT0BQgE0Ad8BRwGAAQMB/wFSAYwBCAH/AVIB EAH/AVIBjAEQAf8BWgGUARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8B
jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB WgGYARAB/wEWASoBAAH/AQgBCgEAAf8BCAEKAQAB/xwAAxIBFwM1AVYDUAGaAXwBZwFTAeEB/wF4AQAC
/wFaAZQBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZgBEAH/ARYB /wF4AQAB/wJRAVABnwMSARhwAANhAdADbQHuIAADYgHUA2sB6dAAASwBUAEAAf8BSgGMAQAB/wFSAYwB
KgEAAf8BCAEKAQAB/wEIAQoBAAH/HAADEgEXATYCNQFWAVgBUgFMAZoBqwFtATQB4QH/AXgBAAL/AXgB CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQ4B/wFVAZIBEAH/AVoBnAEQAf8B
AAH/AVsBUwFLAZ8DEgEYcAADaAHQA3UB7iAAA2oB1ANzAenQAAEsAVABAAH/AUoBjAEAAf8BUgGMAQgB WgGcARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQB
/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEOAf8BVQGSARAB/wFaAZwBEAH/AVoB GAH/AVgBkgEWAf8BEAEeAQAB/wEIAQoBAAH/HAADEgEXAzUBVgNQAZoBfAFnAVMB4QH/AXgBAAL/AXgB
nAEQAf8BWgGUARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB AAH/AlEBUAGfAxIBGHAAA2EB0ANtAe4gAANiAdQDawHp1AADSwGPATMBXgEAAf8BUgGMAQgB/wFSAYwB
/wFYAZIBFgH/ARABHgEAAf8BCAEKAQAB/xwAAxIBFwE2AjUBVgFYAVIBTAGaAasBbQE0AeEB/wF4AQAC CAH/AVIBjAEIAf8BUgGMARAB/wF/AcABMwH/AV8BngEXAf8BIAE/AQAB/wEIAQoBAAH/AVIBjAEQAf8B
/wF4AQAB/wFbAVMBSwGfAxIBGHAAA2gB0AN1Ae4gAANqAdQDcwHp1AACSgFJAY8BMwFeAQAB/wFSAYwB WgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZUBFwH/AVoBlAEYAf8BWgGUARgB/wFaAZQB
CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AX8BwAEzAf8BXwGeARcB/wEgAT8BAAH/AQgBCgEAAf8B GAH/AQgBCgEAAf8BCAEKAQAB/xgAAxIBFwM1AVYDUAGaAXwBZwFTAeEB/wF4AQAC/wF4AQAB/wJRAVAB
UgGMARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlQEXAf8BWgGUARgB/wFaAZQB nwMSARgUAAQBAwMBBAMGBAcBCQMHAQkDBAEFBAIEARQAAxEBFgMhAS8DIQEvAyEBLwMhAS8DIQEvAyEB
GAH/AVoBlAEYAf8BCAEKAQAB/wEIAQoBAAH/GAADEgEXATYCNQFWAVgBUgFMAZoBqwFtATQB4QH/AXgB LwMhAS8DIQEvAyEBLwNhAdkDcgHxAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DZgHcA20B
AAL/AXgBAAH/AVsBUwFLAZ8DEgEYFAAEAQMDAQQDBgQHAQkDBwEJAwQBBQQCBAEUAAMRARYDIQEvAyEB 7QMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMNARG4AAFCAXsBAAH/AVIBjAEIAf8B
LwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DagHZA3YB8QMhAS8DIQEvAyEBLwMhAS8DIQEvAyEB ewHGASkB/wMzAVAEAAMMARABOQFrAQAB/wFaAZwBEAH/AVoBnAEQAf8BXQGXARMB/wFWAZQBDAH/AVoB
LwMhAS8DIQEvA20B3AN1Ae0DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DDQERuAAB nAEQAf8BWgGUARgB/wFaAZQBGAH/AWMBnAEYAf8BYwGlARcB/wEpAVABAAH/AQgBCgEAAf8YAAMSARcD
QgF7AQAB/wFSAYwBCAH/AXsBxgEpAf8DMwFQBAADDAEQATkBawEAAf8BWgGcARAB/wFaAZwBEAH/AV0B NQFWA1ABmgF8AWcBUwHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYFAAEAgMJAQwDDwEUAxMBGgMSARgD
lwETAf8BVgGUAQwB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB/wFjAZwBGAH/AWMBpQEXAf8BKQFQAQAB CgENAwQBBQQBFAADagHoA38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8D
/wEIAQoBAAH/GAADEgEXATYCNQFWAVgBUgFMAZoBqwFtATQB4QH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8D
EgEYFAAEAgMJAQwDDwEUAxMBGgMSARgDCgENAwQBBQQBFAADcwHoA38B/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/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8D
fwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A2gBz7wAAQgBCgEAAf8MAAETASMB fwH/A38B/wN/Af8DfwH/A2EBz7wAAQgBCgEAAf8MAAETASMBAAH/AVoBlAEQAf8BWgGcARAB/wGUAdYB
AAH/AVoBlAEQAf8BWgGcARAB/wGUAdYBSgH/AQ0BEQECAf8BMQFaAQAB/wFaAZQBEgH/AVoBlAEYAf8B SgH/AQ0BEQECAf8BMQFaAQAB/wFaAZQBEgH/AVoBlAEYAf8BWgGUARgB/wFjAZwBGAH/AWMBpQEXAf8B
WgGUARgB/wFjAZwBGAH/AWMBpQEXAf8BawGlASEB/wEQAR4BAAH/GAADEgEXATYCNQFWAVgBUgFMAZoB awGlASEB/wEQAR4BAAH/GAADEgEXAzUBVgNQAZoBfAFnAVMB4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIB
qwFtATQB4QH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8DEgEYFAADBQEGAx0BKQMwAUoCOwE9AWUCOwE8AWQD GBQAAwUBBgMdASkDMAFKAjsBPAFlAjsBPAFkAygBPAIVARYBHQMGAQgUAAM8AWQDTAGPA0wBjwNMAY8D
KAE8AhUBFgEdAwYBCBQAAzwBZANNAY8DTQGPA00BjwNNAY8DTQGPA00BjwNNAY8DTQGPA00BjwNyAeoD TAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DagHqA3wB+ANMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8D
fAH4A00BjwNNAY8DTQGPA00BjwNNAY8DTQGPA00BjwNNAY8DdQHsA3YB9QNNAY8DTQGPA00BjwNNAY8D TAGPA28B7ANvAfUDTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DNQFWqAACUgFQAd8B
TQGPA00BjwNNAY8DTQGPA00BjwM1AVaoAAI4ATQB3wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB CAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8DMwFQAzoBYAFLAYUB
AAH/AQgBCgEAAf8BCAEKAQAB/wMzAVADOgFgAUsBhQEHAf8BWgGUARAB/wFaAZwBEAH/ATkBawEAAf8D BwH/AVoBlAEQAf8BWgGcARAB/wE5AWsBAAH/AwkBDAEQAR4BAAH/AVQBjgESAf8BWgGUARgB/wFjAZwB
CQEMARABHgEAAf8BVAGOARIB/wFaAZQBGAH/AWMBnAEYAf8BYwGcARgB/wFjAaUBFwH/AXMBtAEpAf8B GAH/AWMBnAEYAf8BYwGlARcB/wFzAbQBKQH/ARABHgEAAf8YAAMSARcDNQFWA1ABmgF8AWcBUwHhAf8B
EAEeAQAB/xgAAxIBFwE2AjUBVgFYAVIBTAGaAasBbQE0AeEB/wF4AQAC/wF4AQAB/wFbAVMBSwGfAxIB eAEAAv8BeAEAAf8CUQFQAZ8DEgEYFAADCQEMAzMBUAJMAU0BkQJaAWMByQJaAWQBygNEAXoDKQE9AwwB
GBQAAwkBDAMzAVACSgFSAZECSAGDAckCRgGFAcoCQwFGAXoDKQE9AwwBEDwAA2gB0AN1Ae4gAANqAdQD EDwAA2EB0ANtAe4gAANiAdQDawHpzAABCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB
cwHpzAABCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BMwFfAQIB/wFaAZQBEAH/AVoBnAEQAf8B
/wEIAQoBAAH/AQgBCgEAAf8BMwFfAQIB/wFaAZQBEAH/AVoBnAEQAf8BrQHnAWMB/wEQAR4BAAH/AQgB rQHnAWMB/wEQAR4BAAH/AQgBCgEAAf8BFAEmAQAB/wFUAY4BEgH/AWIBmwEYAf8BYwGcARgB/wFjAaUB
CgEAAf8BFAEmAQAB/wFUAY4BEgH/AWIBmwEYAf8BYwGcARgB/wFjAaUBFwH/AWMBpQEXAf8BYwGcASEB FwH/AWMBpQEXAf8BYwGcASEB/wEYAS4BAAH/GAADEgEXAzUBVgNQAZoBfAFnAVMB4QH/AXgBAAL/AXgB
/wEYAS4BAAH/GAADEgEXATYCNQFWAVgBUgFMAZoBqwFtATQB4QH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8D AAH/AlEBUAGfAxIBGBQAAwkBCwMuAUcDSAGEAlkBYAHDAlgBZAHLA0kBhQMuAUcDDwETPAADYQHQA20B
EgEYFAADCQELAy4DRwFLAYQCSQF8AcMCRQGGAcsCRwFMAYUDLgFHAw8BEzwAA2gB0AN1Ae4gAANqAdQD 7iAAA2IB1ANrAenIAAEIAQoBAAH/ASsBUgEAAf8BQQFyAQUB/wFKAYQBBgH/AUoBhAEGAf8BSgGEAQYB
cwHpyAABCAEKAQAB/wErAVIBAAH/AUEBcgEFAf8BSgGEAQYB/wFKAYQBBgH/AUoBhAEGAf8BQgFzAQYB /wFCAXMBBgH/ASkBUAEAAf8BEAEeAQAB/wEfAToBAAH/AVUBjwELAf8BWgGVARAB/wFaAZwBEAH/AdYB
/wEpAVABAAH/ARABHgEAAf8BHwE6AQAB/wFVAY8BCwH/AVoBlQEQAf8BWgGcARAB/wHWAf8BjAH/ARAB /wGMAf8BEAEeAQAB/wEYAS4BAAH/AUIBeAEDAf8BWgGUARgB/wFiAZsBGAH/AWMBnAEYAf8BYwGlARcB
HgEAAf8BGAEuAQAB/wFCAXgBAwH/AVoBlAEYAf8BYgGbARgB/wFjAZwBGAH/AWMBpQEXAf8BYwGlARcB /wFjAaUBFwH/AXMBtAEpAf8BEAEeAQAB/xgAAxIBFwM1AVYDUAGaAXwBZwFTAeEB/wF4AQAC/wF4AQAB
/wFzAbQBKQH/ARABHgEAAf8YAAMSARcBNgI1AVYBWAFSAUwBmgGrAW0BNAHhAf8BeAEAAv8BeAEAAf8B /wJRAVABnwMSARgUAAMGAQgDJAE0AzwBZgNTAacCWAFaAbgCRwFIAYMDMQFNAw8BFDwAA2EB0ANtAe4g
WwFTAUsBnwMSARgUAAMGAQgDJAE0AjwBPQFmAk0BYQGnAksBcAG4AkYBTAGDAzEBTQMPARQ8AANoAdAD AANiAdQDawHpxAABKAFNAQAB/wFOAYgBBwH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B
dQHuIAADagHUA3MB6cQAASgBTQEAAf8BTgGIAQcB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB UgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGcARAB/wFjAaUB
CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBnAEQAf8B FwH/AUIBewEAAf8BSgGEAQYB/wFSAYwBCAH/AVoBmAEUAf8BWgGUARgB/wFjAZwBGAH/AWMBpQEXAf8B
YwGlARcB/wFCAXsBAAH/AUoBhAEGAf8BUgGMAQgB/wFaAZgBFAH/AVoBlAEYAf8BYwGcARgB/wFjAaUB YwGlARcB/wFjAaUBFwH/AZQByQFNAf8EAAMQARUDGgEkAyEBLwMRARYEAgQBAxIBFwM1AVYDUAGaAXwB
FwH/AWMBpQEXAf8BYwGlARcB/wGUAckBTQH/BAADEAEVAxoBJAMhAS8DEQEWBAIEAQMSARcBNgI1AVYB ZwFTAeEB/wF4AQAC/wF4AQAB/wJRAVABnwMSARgUAAMDAQQDEwEZAyUBNgI7ATwBZAJBAUIBcgMzAVED
WAFSAUwBmgGrAW0BNAHhAf8BeAEAAv8BeAEAAf8BWwFTAUsBnwMSARgUAAMDAQQDEwEZAyUBNgI7ATwB IQEvAwkBDDwAA2EB0ANtAe4gAANiAdQDawHpwAABKQFOAQIB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB
ZAJBAUMBcgMzAVEDIQEvAwkBDDwAA2gB0AN1Ae4gAANqAdQDcwHpwAABKQFOAQIB/wFSAYwBCAH/AVIB /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoB
jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB lAEQAf8BWgGVARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB
/wFSAYwBEAH/AVoBlAEQAf8BWgGVARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoB /wFjAZwBGAH/AWMBnAEYAf8BYwGlARcB/wFjAaUBFwH/AWMBpQEXAf8BZQGgASEB/wQAAx4BKwIxATAB
lAEYAf8BWgGUARgB/wFjAZwBGAH/AWMBnAEYAf8BYwGlARcB/wFjAaUBFwH/AWMBpQEXAf8BZQGgASEB TAM7AWMDIgExAwcBCQMEAQUDEgEYAzYBVwNQAZoBfAFnAVMB4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIB
/wQAAx4BKwIxATABTAE8AjsBYwMiATEDBwEJAwQBBQMSARgDNgFXAVgBUgFMAZoBqwFtATQB4QH/AXgB GBwAAwcBCQMcAScDIwEyAhkBGgEjAw8BFAMEAQU8AANhAdADbQHuIAADYgHUA2sB6bwAA0YBgAFOAYgB
AAL/AXgBAAH/AVsBUwFLAZ8DEgEYHAADBwEJAxwBJwMjATICGQEaASMDDwEUAwQBBTwAA2gB0AN1Ae4g BwH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B
AANqAdQDcwHpvAACRgFFAYABTgGIAQcB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIB UgGMARAB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZcBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB
jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGXARAB EAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AWMBnAEYAf8BYwGhARgB/wFjAaUBFwH/AWMBpQEXAf8B
/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB/wFjAZwBGAH/AWMB eAG6ASwB/wEIAQoBAAH/BAADJAE0A0UBfAJaAVgBtwNOAZQDPwFtAygBOwMfASwDOQFeA1ABmgF8AWcB
oQEYAf8BYwGlARcB/wFjAaUBFwH/AXgBugEsAf8BCAEKAQAB/wQAAyQBNAFHAUYBRAF8AW8BXQFNAbcB UwHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAADEgEXAzwBZgNKAYkDQAFvAy4BRwMOARI8AANhAdAD
VQFQAUoBlAFBAUABPwFtAygBOwMfASwDOQFeAVgBUgFMAZoBqwFtATQB4QH/AXgBAAL/AXgBAAH/AVsB bQHuIAADYgHUA2sB6bwAATUBXgEHAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB
UwFLAZ8DEgEYHAADEgEXAjwBPQFmAkkBTgGJAkABQQFvAy4BRwMOARI8AANoAdADdQHuIAADagHUA3MB CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlAEQAf8B
6bwAATUBXgEHAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B WgGbARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZYBFgH/AVoBlAEYAf8BXQGXARgB/wFjAZwB
UgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlAEQAf8BWgGbARAB/wFaAZwB GAH/AWMBpQEXAf8BYwGlARcB/wFwAbMBIAH/ASsBUAEEAf8IAAMnAToCUwFRAaIB2QFqARUB+wGJAWoB
EAH/AVoBnAEQAf8BWgGcARAB/wFaAZYBFgH/AVoBlAEYAf8BXQGXARgB/wFjAZwBGAH/AWMBpQEXAf8B SwHnAV8BXAFaAcQCQwFCAXUDMQFNAkABPwFuAlEBUAGfAYEBZQFQAeMB/wF4AQAC/wF4AQAB/wJRAVAB
YwGlARcB/wFwAbMBIAH/ASsBUAEEAf8IAAMnAToBXQFUAUwBogHtAXIBCQH7AboBbgEsAecBfgFiAUgB nwMSARgcAAMZASIDTgGVAlkBZAHNAlYBVwGyA0QBegMdASkDBgEIBAIEATAAA2EB0ANtAe4gAANiAdQD
xAFEAUMBQgF1AzEBTQFBAUABPwFuAVsBUwFLAZ8BrwFtATIB4wH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8D awHpvAABSgGEAQYB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BZwGpARcB
EgEYHAADGQEiAksBVQGVAkQBiQHNAkwBagGyAkMBRgF6Ax0BKQMGAQgEAgQBMAADaAHQA3UB7iAAA2oB /wFSAYwBCAH/AUoBhAEGAf8BSgGEAQYB/wFSAYwBEAH/AVoBlAEQAf8BWgGXARAB/wFaAZwBEAH/AVoB
1ANzAem8AAFKAYQBBgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFnAakB nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB/wFfAZgBGAH/AWMBngEYAf8BYwGlARcB
FwH/AVIBjAEIAf8BSgGEAQYB/wFKAYQBBgH/AVIBjAEQAf8BWgGUARAB/wFaAZcBEAH/AVoBnAEQAf8B /wFrAakBHQH/ASkBUAEAAf8MAAMiATEDTgGYAbEBbwExAfMBpAFqATYB8AGIAWoBTgHmAV4BWgFXAcIC
WgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AV8BmAEYAf8BYwGeARgB/wFjAaUB VQFTAaoDUwGnAlkBVwG8AZcBbAFHAesB/wF4AQAC/wF4AQAB/wJRAVABnwMSARgcAAMUARsCQwFEAXcC
FwH/AWsBqQEdAf8BKQFQAQAB/wwAAyIBMQFWAVABSwGYAdcBcgEaAfMBzQFwAR0B8AG2AW8BLgHmAXoB VgFZAbYCWQFkAc0CVgFYAbMDPwFsAyYBOAMMAQ8DAgEDCAADAgEDAw0BEQMNAREDDQERAw0BEQMNARED
XwFJAcIBYwFXAU0BqgFhAVYBTQGnAXIBXgFKAbwBwgFyASkB6wH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8D DQERAw0BEQMNAREDDQERA18B0wNvAe8DDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0BEQNiAdcD
EgEYHAADFAEbAkMBRQF3AkwBbQG2AkQBiQHNAk0BawGzAj8BQAFsAyYBOAMMAQ8DAgEDCAADAgEDAw0B agHqAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERAwQBBZQAAUoBhAEGAf8BUgGMAQgB
EQMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERA2cB0wN1Ae8DDQERAw0BEQMNAREDDQERAw0B /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFpAaQBHgH/ASwBUAEDAf8BCAEKAQAB/wE3AWEBBwH/AVIB
EQMNAREDDQERAw0BEQNqAdcDcwHqAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERAwQB jAEOAf8BUgGMARAB/wF/AcEBMgH/AVsBXgFYAdMCWgFZAb8BLwFZAQAB/wFEAXoBBQH/AVABigEIAf8B
BZQAAUoBhAEGAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFpAaQBHgH/ASwBUAEDAf8B WgGcAQ4B/wFaAZwBEAH/AVoBnAEQAf8BTwGGARAB/wFEAXQBDAH/AVkBWgFZAb8QAAIaARkBIwNEAXsB
CAEKAQAB/wE3AWEBBwH/AVIBjAEOAf8BUgGMARAB/wF/AcEBMgH/AU8BXgFBAdMBWAFhAUoBvwEvAVkB ZAFdAVoBygFzAWMBVwHaAY0BaQFHAegBnwFrAToB7wGWAW0BQwHsAW0BYwFXAdYBbQFiAVYB2AG3AW8B
AAH/AUQBegEFAf8BUAGKAQgB/wFaAZwBDgH/AVoBnAEQAf8BWgGcARAB/wFPAYYBEAH/AUQBdAEMAf8B LAH0Af8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAADDwETAzQBUwNNAZICWgFoAc8CWQFtAdQCUgFUAagC
TwFSAUoBvxAAAhoBGQEjAUcBRQFEAXsBhQFkAUYBygGeAWkBOwHaAbsBcAEqAegBygFxASAB7wHFAXEB QQFCAXIDJgE4AxQBGwMGAQgDAgEDA1sBwgN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B
JwHsAZgBaQE9AdYBmAFoAT0B2AHaAXUBFwH0Af8BeAEAAv8BeAEAAf8BWwFTAUsBnwMSARgcAAMPARMD
NAFTAkoBUwGSAkQBjAHPAkEBkwHUAk0BYgGoAkEBQwFyAyYBOAMUARsDBgEIAwIBAwNhAcIDfwH/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/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DbgHclAAB /wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wNmAdyUAAFKAYwBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB
SgGMAQAB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AWcBnQEnAf8BCAEKAQAB/wEKAQ8B CAH/AVIBjAEIAf8BZwGdAScB/wEIAQoBAAH/AQoBDwEAAf8BQgF3AQMB/wFSAYwBEAH/AVoBnAEQAf8B
AAH/AUIBdwEDAf8BUgGMARAB/wFaAZwBEAH/ASUBQQEFAf8EAAM6AWABCAEKAQAB/wEIAQoBAAH/BAAC JQFBAQUB/wQAAzoBYAEIAQoBAAH/AQgBCgEAAf8EAANGAYADRgGAA0YBgBwAAwoBDQMiATEDNAFUA0QB
RgFFAYACRgFFAYACRgFFAYAcAAMKAQ0DIgExAzQBVAFGAUQBQwF4AVsBUwFLAZ8BjAFlAUQBzwHJAXIB eAJRAVABnwFoAWEBWgHPAZ0BagFAAe0BlgFtAUMB7AGkAWoBNgHwAdkBagEVAfsB/wF4AQAC/wF4AQAB
IgHtAcUBcQEnAewBzQFwAR0B8AHtAXIBCQH7Af8BeAEAAv8BeAEAAf8BWwFTAUsBnwMSARgcAAMGAQgD /wJRAVABnwMSARgcAAMGAQgDGAEhAzEBTQJMAU0BkQJYAV0BvQJZAWcB0QJZAWABwwJRAVMBogM9AWcC
GAEhAzEBTQJKAVIBkQJMAXQBvQJCAY8B0QJJAXwBwwJMAV0BogI9AT4BZwIZARoBIwMMAQ8DQAFvA1oB GQEaASMDDAEPA0ABbwNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNsAfADfQH6A1UB
rQNaAa0DWgGtA1oBrQNaAa0DWgGtA1oBrQNaAa0DWgGtA3YB8AN9AfoDWgGtA1oBrQNaAa0DWgGtA1oB rQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DcgHxA3wB+ANVAa0DVQGtA1UBrQNVAa0DVQGtA1UB
rQNaAa0DWgGtA1oBrQN2AfEDfAH4A1oBrQNaAa0DWgGtA1oBrQNaAa0DWgGtA1oBrQNaAa0DWgGtA0cB rQNVAa0DVQGtA1UBrQNHAYGUAAE7AW0BAgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B
gZQAATsBbQECAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFTAY4BEAH/AQ8BGwEAAf8B UwGOARAB/wEPARsBAAH/ASMBQwEAAf8BUgGMARAB/wFSAYwBEAH/AXsBvQEwAf8BCAEKAQAB/wEIAQoB
IwFDAQAB/wFSAYwBEAH/AVIBjAEQAf8BewG9ATAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/ygAAwMBBAMJAQsDIgExAzgB
AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/KAADAwEEAwkBCwMiATEDOAFbAVYBUAFLAZcBhAFkAUcB WwJPAU4BlwFkAV8BWwHIAYcBaQFNAeUByAFvASUB9wHqAXEBDgH9Af8BeAEAAv8BeAEAAf8CUQFQAZ8D
yAG1AW4BMAHlAeQBcgEUAfcB9gF1AQYB/QH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8DEgEYHAAEAQMCAQMD EgEYHAAEAQMCAQMDFQEcAzUBVgJLAUwBjwJbAWQByAJQAXcB3wJQAYEB4wJSAVMBpQM0AVMDHAEnKAAD
FQEcAjUBNgFWAkkBUQGPAkcBhAHIAjQBpgHfAjIBrwHjAkwBXgGlAzQBUwMcAScoAANoAdADdQHuIAAD YQHQA20B7iAAA2IB1ANrAem8AAEIAQoBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B
agHUA3MB6bwAAQgBCgEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AU4B UgGMAQgB/wFOAYIBDwH/AUoBhAEGAf8BUgGMARAB/wFjAaUBFwH/AQgBCgEAAf8BCAEKAQAB/wETASMB
ggEPAf8BSgGEAQYB/wFSAYwBEAH/AWMBpQEXAf8BCAEKAQAB/wEIAQoBAAH/ARMBIwEAAf8BQgFzAQYB AAH/AUIBcwEGAf8BIAE/AQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8g
/wEgAT8BAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/yAABAEDAwEEAwwB AAQBAwMBBAMMARADGAEgAykBPQM+AWoCVwFWAbUBhwFpAU0B5QHIAW8BJQH3Af8BeAEAAv8BeAEAAf8C
EAMYASADKQE9AT8CPgFqAW0BWwFLArUBbgEwAeUB5AFyARQB9wH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8D UQFQAZ8DEgEYIAAEAQMHAQkDFAEbAyoBQANDAXYCVQFWAa8CRQGMAekCWAFoAdACUAFRAZ8DMwFRKAAD
EgEYIAAEAQMHAQkDFAEbAyoBQAJCAUQBdgJNAWcBrwIoAbsB6QJCAY4B0AJLAVsBnwMzAVEoAANoAdAD YQHQA20B7iAAA2IB1ANrAenAAAFCAXMBBgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B
dQHuIAADagHUA3MB6cAAAUIBcwEGAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB UgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BSgGEAQYB/wEQAR4BAAH/ATEBWgEAAf8BTQGEAQ0B/wFaAZwB
CAH/AVIBjAEQAf8BUgGMARAB/wFKAYQBBgH/ARABHgEAAf8BMQFaAQAB/wFNAYQBDQH/AVoBnAEQAf8B EAH/AVoBnAEQAf8BUgGMAQgB/wEQAR4BAAH/AQgBCgEAAf8BCAEKAQAB/wNGAYAsAAMCAQMDCwEOAyAB
WgGcARAB/wFSAYwBCAH/ARABHgEAAf8BCAEKAQAB/wEIAQoBAAH/AkYBRQGALAADAgEDAwsBDgMgAS4B LgNDAXYBWAFXAVUBsQF9AWYBUgHgAb4BcQElAfYB0wFqARwB+QJRAVABnAMSARcMAAQBAwwBEAMXAR8D
RAFDAUIBdgFqAVoBTgGxAaoBbQE1AeAB3wF1ARQB9gHnAXIBDwH5AVkBUwFMAZwDEgEXDAAEAQMMARAD HQEoAx0BKAMMAQ8IAAMPARQCJgEnATkCRwFIAYMCUwF8AeECSwGJAecCWQFpAdICPwFAAW4oAANhAdAD
FwEfAx0BKAMdASgDDAEPCAADDwEUAiYBJwE5AkYBTAGDAjQBqwHhAiwBugHnAkABkAHSAj8BQQFuKAAD bQHuIAADYgHUA2sB6cQAAUkBiQEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB
aAHQA3UB7iAAA2oB1ANzAenEAAFJAYkBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B EAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8B
UgGMARAB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB WgGcARAB/wFaAZQBGAH/AUIBcwEGAf8BCgEOAQAB/zAABAEDAwEEAwwBDwMeASoDOgFhAVsBWQFXAbkB
EAH/AVoBnAEQAf8BWgGUARgB/wFCAXMBBgH/AQoBDgEAAf8wAAQBAwMBBAMMAQ8DHgEqATsCOgFhAXEB gQFnAUsB5AGcAWsBPQHuAk8BTgGXAxIBFwwAAwIBAwMhAS8DNgFZAkIBQwF1AkEBQgFzAx4BKwgAAwQB
XQFLAbkBsAFrAS8B5AHKAW8BIQHuAVYBUAFLAZcDEgEXDAADAgEDAyEBLwI2ATcBWQJCAUQBdQJBAUMB BQMMAQ8DOAFcAlkBZwHOAkMBlgHsAjoBnwHvA0YBfygAA2EB0ANtAe4gAANiAdQDawHpyAABOgFrAQAB
cwMeASsIAAMEAQUDDAEPAjgBOQFcAkUBjAHOAicBxQHsAiABygHvAkUBSQF/KAADaAHQA3UB7iAAA2oB /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZQBEAH/AVoB
1ANzAenIAAE6AWsBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQB nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AWMBpQEXAf8BGQEsAQMB
EAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQBGAH/AVoBlAEYAf8B /zgAAwIBAwMIAQoDIAEtAkEBQAFxAk0BTAGRA1ABmgI7AToBYgMMAQ8MAAMDAQQDKwFBA0QBegNTAacD
YwGlARcB/wEZASwBAwH/OAADAgEDAwgBCgMgAS0BQgFBAUABcQFSAU0BSgGRAVgBUgFMAZoCOwE6AWID VQGtAzcBWgMYASADCQELAwYBBwMNAREDOQFfAlkBZwHRAjoBnwHvAjEBsQHzAkYBRwGBKAADYQHQA20B
DAEPDAADAwEEAysBQQJDAUYBegJNAWEBpwJNAWUBrQM3AVoDGAEgAwkBCwMGAQcDDQERAjkBOgFfAkIB 7iAAA2IB1ANrAenMAAEsAVUBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB
jwHRAiABygHvAhoB1wHzAkUBSQGBKAADaAHQA3UB7iAAA2oB1ANzAenMAAEsAVUBAAH/AVIBjAEIAf8B /wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/ASEB
UgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB QQEAAf9AAAQCAwcBCQMQBBUBHAIWARUBHQMPARMDAgEDDAADAwEEAzADSwFMAY8CWgFkAcoCVAF3Ad4D
EAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/ASEBQQEAAf9AAAQCAwcBCQMQBBUBHAIWARUBHQMPARMD TgGUAzQBUwMVARwDDQERAx4BKwJDAUQBdwJQAXcB3wI3AasB8QJFAYwB6QNEAXsoAANhAdADbQHuIAAD
AgEDDAADAwEEAzABSwJJAVEBjwJGAYUBygI4AaUB3gJKAVUBlAM0AVMDFQEcAw0BEQMeASsCQwFFAXcC YgHUA2sB6cgAARIBIgEAAf8BTAGGAQYB/wFSAYwBCAH/AVoBnAEQAf8BUAGKAQgB/wFSAYwBEAH/AVoB
NAGmAd8CHQHUAfECKAG7AekCRAFHAXsoAANoAdADdQHuIAADagHUA3MB6cgAARIBIgEAAf8BTAGGAQYB lAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEQH/AWkBqwEfAf8BCAEKAQAB
/wFSAYwBCAH/AVoBnAEQAf8BUAGKAQgB/wFSAYwBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoB /2wAAwIBAwMhAS8DOgFhA1UBrQJXAXMB2gJZAVwBvwJQAVEBnwNEAXoCQQFCAXIDSQGFAlYBVwGyAkAB
nAEQAf8BWgGcARAB/wFaAZwBEQH/AWkBqwEfAf8BCAEKAQAB/2wAAwIBAwMhAS8COgE7AWECTQFlAa0C nQHtAlYBdQHbAlUBWAGxAzgBWygAA2EB0ANtAe4gAANiAdQDawHpyAABEAEeAQAB/wFIAX0BBwH/AVkB
OwGeAdoCSgF3Ab8CSwFbAZ8CQwFGAXoCQQFDAXICRwFMAYUCTAFqAbICIgHJAe0COgGgAdsCTgFqAbED kwETAf8BVQGIARgB/wgAASEBQQEAAf8BQgF7AQAB/wFSAYwBCAH/AVUBkQEIAf8BOQFmAQQB/wFAAUUB
OAFbKAADaAHQA3UB7iAAA2oB1ANzAenIAAEQAR4BAAH/AUgBfQEHAf8BWQGTARMB/wFVAYgBGAH/CAAB OgHveAADBgEIAxcBHwNEAXsCWQFhAcYCSwGBAeQCLAG3AfQCPQGcAe4CPQGcAe4CNwGrAfECJQG+AfYC
IQFBAQAB/wFCAXsBAAH/AVIBjAEIAf8BVQGRAQgB/wE5AWYBBAH/ASoBMwEgAe94AAMGAQgDFwEfAkQB DgHcAfwCWQFdAb4DPgFrAyQBNCgAA2EB0ANtAe4gAANiAdQDawHp0AABHgE6AQAB/5wABAIDCQEMAyoD
RwF7AkcBfwHGAi8BsAHkAhcB2gH0AiEBygHuAiEBygHuAh0B1AHxAhQB3wH2AgYB8AH8AksBdgG+Aj4B PwFAAW4DTgGWAlYBWAGzAlkBXgHBAlkBYAHHAlkBYAHHAlcBWwG5AlEBUgGkAkABQQFxAyUBNgMTARko
PwFrAyQBNCgAA2gB0AN1Ae4gAANqAdQDcwHp0AABHgE6AQAB/5wABAIDCQEMAyoDPwFBAW4CSgFVAZYC AANhAdADbQHuIAADYgHUA2sB6f8AeQAEAQMLAQ4DJgE4AzkBXgNGAX0CSgFLAYsDSgGJAz4BawMqAT8D
TQFrAbMCSQF5AcECRgGAAccCRgGAAccCSwFxAbkCTQFeAaQCQAFCAXEDJQE2AxMBGSgAA2gB0AN1Ae4g FwEfAwIBAywAA1MBogNaAb8gAANUAaYDWQG7qAABQgFNAT4HAAE+AwABKAMAAYADAAEgAwABAQEAAQEG
AANqAdQDcwHp/wB5AAQBAwsBDgMmATgDOQFeAkUBSAF9AkkBTwGLAkkBTgGJAj4BPwFrAyoBPwMXAR8D AAECFgAD/wEAA/8BxwIAAQcC/wHPAfMB/wQAAv8BzwGHAgABBwL/Ac8B8wH/BAAB/wH+AQABBwIAAQcC
AgEDLAADVQGiA2EBvyAAA1cBpgNfAbuoAAFCAU0BPgcAAT4DAAEoAwABgAMAASADAAEBAQABAQYAAQIW /wHPAfMB/wQAAf8B/AEAAQcCAAEHAv8BzwHzAf8EAAH/AfgBAAEPAgABBwL/Ac8B8wH/BAAB/wHwAQAB
AAP/AQAD/wHHAgABBwL/Ac8B8wH/BAAC/wHPAYcCAAEHAv8BzwHzAf8EAAH/Af4BAAEHAgABBwL/Ac8B BwIAAQcC/wHPAfMB/wQAAf8B4AEAAQMCAAEHAv8BzwHzAf8EAAH/AcABAAEBAfwBAwP/Ac8B8wH/BAAB
8wH/BAAB/wH8AQABBwIAAQcC/wHPAfMB/wQAAf8B+AEAAQ8CAAEHAv8BzwHzAf8EAAH/AfABAAEHAgAB /wHAAQABAQH8AQMD/wHPAfMB/wQAAf8B4AIAAfwBAwHgAR8IAAH/AfwBIAEAAfwBAwHgAR8IAAH/Af4B
BwL/Ac8B8wH/BAAB/wHgAQABAwIAAQcC/wHPAfMB/wQAAf8BwAEAAQEB/AEDA/8BzwHzAf8EAAH/AcAB 4AEAAfwBAwHgAR8IAAH/AcACAAH8AQMB4AEfAf8BzwHzAf8EAAH/AYACAAH8AQMB4AEfAf8BzwHzAf8E
AAEBAfwBAwP/Ac8B8wH/BAAB/wHgAgAB/AEDAeABHwgAAf8B/AEgAQAB/AEDAeABHwgAAf8B/gHgAQAB AAH/AwAB/AEDAeABHwH/Ac8B8wH/BAAB/gIAAQEBAAEDAeABHwH/Ac8B8wH/BAAB/AIAAQEBAAEDAfgB
/AEDAeABHwgAAf8BwAIAAfwBAwHgAR8B/wHPAfMB/wQAAf8BgAIAAfwBAwHgAR8B/wHPAfMB/wQAAf8D HwH/Ac8B8wH/BAAB+AIAAQEBAAEDAfgBHwH/Ac8B8wH/BAAB+AIAAQMBAAEDAfgBAwH/Ac8B8wH/BAAB
AAH8AQMB4AEfAf8BzwHzAf8EAAH+AgABAQEAAQMB4AEfAf8BzwHzAf8EAAH8AgABAQEAAQMB+AEfAf8B +AIAAQcBAAEDAfgBAwgAAfgCAAEPAQABAwH4CQAB+AEAAUQBfwEAAQMB+AkAAfgBAAEBAf8BgAEDAfgB
zwHzAf8EAAH4AgABAQEAAQMB+AEfAf8BzwHzAf8EAAH4AgABAwEAAQMB+AEDAf8BzwHzAf8EAAH4AgAB AAH/Ac8B8wH/BAAB+AIAAX8BgAEDAfwBAAH/Ac8B8wH/BAAB/AIAAX8B8AEDAYEBgAH/Ac8B8wH/BAAB
BwEAAQMB+AEDCAAB+AIAAQ8BAAEDAfgJAAH4AQABRAF/AQABAwH4CQAB+AEAAQEB/wGAAQMB+AEAAf8B /gIAAf8B8AEDAYEBgAH/Ac8B8wH/BAAB/wIAAf8B/AEDAYABAAH/Ac8B8wH/BAAB/wGAAQEB/wH+AQMB
zwHzAf8EAAH4AgABfwGAAQMB/AEAAf8BzwHzAf8EAAH8AgABfwHwAQMBgQGAAf8BzwHzAf8EAAH+AgAB gAEAAf8BzwHzAf8EAAH/AQABAwP/AYABAAH/Ac8B8wH/BAAB/wEMAQ8D/wHAAQAB/wHPAfMB/wQAAf8B
/wHwAQMBgQGAAf8BzwHzAf8EAAH/AgAB/wH8AQMBgAEAAf8BzwHzAf8EAAH/AYABAQH/Af4BAwGAAQAB 3wT/AcABAAH/Ac8B8wH/BAAG/wHwAQEB/wHPAfMB/wQACw==
/wHPAfMB/wQAAf8BAAEDA/8BgAEAAf8BzwHzAf8EAAH/AQwBDwP/AcABAAH/Ac8B8wH/BAAB/wHfBP8B
wAEAAf8BzwHzAf8EAAb/AfABAQH/Ac8B8wH/BAAL
</value> </value>
</data> </data>
<metadata name="ilTabIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="ilTabIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@ -399,114 +393,114 @@
<value> <value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAHBkAAAJNU0Z0AUkBTAIBAQUB SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAChkAAAJNU0Z0AUkBTAIBAQUB
AAGwAQABsAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASAa AAHQAQAB0AEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASAa
AAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8DVQGsAzABS8wAAzsB AAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8DVQGsAzABS8wAAzsB
YgNdAcUBcwJoAfQBnwFlATEB/wGXAVMBFwH/AZYBSwEJAf8BkwFGAQEB/wGMAUMBAwH/AX0BQAELAf8B YgNdAcUBawJoAfQBnwFlATEB/wGXAVMBFwH/AZYBSwEJAf8BkwFGAQEB/wGMAUMBAwH/AX0BQAELAf8B
awFAARoB/wFuAVABNgH/A2gB8ANaAbcDNAFUxAADNQFVA10BxwFxAW4BWgH1AbgBZQEbAf8BuQFYAQIB awFAARoB/wFuAVABNgH/A2gB8ANaAbcDNAFUxAADNQFVA10BxwJuAVoB9QG4AWUBGwH/AbkBWAECAf8B
/wHJAV8BAAH/AdgBZQEAAf8B3AFnAQAB/wHWAWQBAAH/AcMBXAEAAf8BogFMAQAB/wF8ATsBAwH/AW4B yQFfAQAB/wHYAWUBAAH/AdwBZwEAAf8B1gFkAQAB/wHDAVwBAAH/AaIBTAEAAf8BfAE7AQMB/wFuAUYB
RgEjAf8DaAHwA1oBtwMwAUrAAANcAcQBkAF8AVwB+AHUAXEBGAH/AdcBZQEAAf8B5QFsAQAB/wHyAXIB IwH/A2gB8ANaAbcDMAFKwAADXAHEAYQBfAFcAfgB1AFxARgB/wHXAWUBAAH/AeUBbAEAAf8B8gFyAQAB
/wH6AXUBAAH/AfwBdgEAAf8B+gF2AQAB/wHzAXIBAAH/AeIBawEAAf8BvQFZAQAB/wGHAUABAAH/AXEB
SAEjAf8DaAHwA1YBq8AAAf4B3QHBAf8B7QGAASAB/wHtAXEBAgH/AfMBcwEAAf8B+gF2AQAB/wH+AXgB
AAL/AXsBCAL/AYgBJwL/AaIBUwH/Af4BgQEXAf8B/AF4AQQB/wHsAW8BAAH/AcEBWwEAAf8BhgFBAQMB
/wF4AVYBNgH/A2MB38AAAf8BsgFvAf8B/QGAAREB/wH8AXcBAQH/Af0BdwEAAv8BeAEAAv8BfwEPAv8B
kgE7Av8BswGDAv8B6gHgAv8BkAE9Av8BewEKAf8B/AF3AQAB/wHlAWwBAAH/AbEBVAEAAf8BhAFLARoB
/wNjAd/AAAH/AZoBQgL/AYMBFQH/Af4BegEEAv8BeAEAAv8BeAEAAv8BlQE/Av8BygGuAv8B2gHGAv8B
7QHlAv8BlgFJAv8BfAENAf8B/gF4AQAB/wH0AXMBAAH/AdABYgEAAf8BmgFOAQoB/wFjAl0B38AAAf8B
lQE3Av8BiQEfAv8BfQEIAv8BeAEAAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B2AHFAv8BuQGUAv8B
hwEjAv8BeAEAAf8B+wF2AQAB/wHiAWoBAAH/Aa8BVAEDAf8BYwJdAd/AAAH/AaABSQL/AZIBMQL/AYEB
EQL/AXkBAwL/AXgBAAL/AagBXAL/AeABzQL/AaEBZgL/AdgBxQL/AcABnwL/AYkBJwL/AXgBAAH/Af4B
eAEAAf8B7AFvAQAB/wG/AVoBAgH/AWMCXQHfwAAB/wGzAW8C/wGeAUgC/wGIAR4C/wF8AQcC/wF4AQAC
/wGYAUMC/wHOAbQC/wHXAcAC/wHqAeAC/wGdAVcC/wF+AREC/wF4AQAC/wF4AQAB/wHwAXEBAAH/AcsB
ZAEJAf8BYwFhAV0B38AAAf8BzAGfAv8BrAFjAv8BkwEzAv8BgQERAv8BeQECAv8BggEWAv8BmgFLAv8B
rgF4Av8BpQFXAv8BgQEXAv8BeQEEAv8BeAEAAv8BeAEAAf8B8AFxAQAB/wHVAXEBFwH/AmMBXQHfwAAB
/wHpAdUC/wG8AYEC/wGkAVQC/wGOASoC/wF/AQ0C/wF5AQIC/wF7AQkC/wGCAR0C/wF4AQAC/wF4AQAC
/wF4AQEC/wF6AQQC/wF6AQMB/wHzAXQBAwH/AeIBhAEyAf8DYwHfwAADXgHSAY8BiAF/AfkB/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 AAH/AfoBdQEAAf8B/AF2AQAB/wH6AXYBAAH/AfMBcgEAAf8B4gFrAQAB/wG9AVkBAAH/AYcBQAEAAf8B
cQFIASMB/wNoAfADVgGrwAAB/gHdAcEB/wHtAYABIAH/Ae0BcQECAf8B8wFzAQAB/wH6AXYBAAH/Af4B cQFIASMB/wNoAfADVgGrBP8BiwGGAXoB/wOBAf8DgQH/AY4BhgFxAf8BzwGUAQAB/wHeAcwBnyH/A8oB
eAEAAv8BewEIAv8BiAEnAv8BogFTAf8B/gGBARcB/wH8AXgBBAH/AewBbwEAAf8BwQFbAQAB/wGGAUEB /xAAAw0BEQM/AWwDUwGnAVwCWQG+AVgCVgGzAUgCRwGDAyEBMAQAA28B8wM6AWAIAAM2AVgDWwHAA24B
AwH/AXgBVgE2Af8DYwHfwAAB/wGyAW8B/wH9AYABEQH/AfwBdwEBAf8B/QF3AQAC/wF4AQAC/wF/AQ8C 9QOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A2gB9ANSAaQB/gHdAcEB
/wGSATsC/wGzAYMC/wHqAeAC/wGQAT0C/wF7AQoB/wH8AXcBAAH/AeUBbAEAAf8BsQFUAQAB/wGEAUsB /wHtAYABIAH/Ae0BcQECAf8B8wFzAQAB/wH6AXYBAAH/Af4BeAEAAv8BewEIAv8BiAEnAv8BogFTAf8B
GgH/A2MB38AAAf8BmgFCAv8BgwEVAf8B/gF6AQQC/wF4AQAC/wF4AQAC/wGVAT8C/wHKAa4C/wHaAcYC /gGBARcB/wH8AXgBBAH/AewBbwEAAf8BwQFbAQAB/wGGAUEBAwH/AXgBVgE2Af8DYwHfBP8BrAGWAWAB
/wHtAeUC/wGWAUkC/wF8AQ0B/wH+AXgBAAH/AfQBcwEAAf8B0AFiAQAB/wGaAU4BCgH/AWMCXQHfwAAB /wGDAYIBfwH/AYUBggF9Af8BswGTAUQB/wHPAZQBAAH/Ad4BzAGfAf8DsAH/A7AB/wOwAf8DsAH/A7AB
/wGVATcC/wGJAR8C/wF9AQgC/wF4AQAC/wF4AQAC/wGoAVwC/wHgAc0C/wGhAWYC/wHYAcUC/wG5AZQC /wOwAf8DsAH/A7AB/wOoAf8IAAMaASQDUgGgAmMBSAH2AaIBcwEAAf8BrgF8AQAB/wGwAX0BAAH/AagB
/wGHASMC/wF4AQAB/wH7AXYBAAH/AeIBagEAAf8BrwFUAQMB/wFjAl0B38AAAf8BoAFJAv8BkgExAv8B eAEAAf8BlQFqAQAB/wGAAW4BGgH+AVwCWQHGA1cBtQMWAR4IAAMCAQMDGgEjAzgBXANUAagDYgHXA3AB
gQERAv8BeQEDAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B2AHFAv8BwAGfAv8BiQEnAv8BeAEAAf8B 8QOAAf4DgQH/A4EB/wOBAf8DgQH9A2gB8ANhAdQDUwGlAzYBWQMYASAB/wGyAW8B/wH9AYABEQH/AfwB
/gF4AQAB/wHsAW8BAAH/Ab8BWgECAf8BYwJdAd/AAAH/AbMBbwL/AZ4BSAL/AYgBHgL/AXwBBwL/AXgB 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 AAL/AZgBQwL/Ac4BtAL/AdcBwAL/AeoB4AL/AZ0BVwL/AX4BEQL/AXgBAAL/AXgBAAH/AfABcQEAAf8B
ywFkAQkB/wFjAWEBXQHfwAAB/wHMAZ8C/wGsAWMC/wGTATMC/wGBAREC/wF5AQIC/wGCARYC/wGaAUsC ywFkAQkB/wFjAWEBXQHfBP8BhgGDAX4B/wOBAf8DgQH/AYYBgwF7Af8BzwGUAQAB/wHeAcwBnwH/A4EB
/wGuAXgC/wGlAVcC/wGBARcC/wF5AQQC/wF4AQAC/wF4AQAB/wHwAXEBAAH/AdUBcQEXAf8CYwFdAd/A /wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DkwH/AWYBYwFiAe4B7wG0ASEB/wH3AdwBlwn/A5EB
AAH/AekB1QL/AbwBgQL/AaQBVAL/AY4BKgL/AX8BDQL/AXkBAgL/AXsBCQL/AYIBHQL/AXgBAAL/AXgB /wOIAf8DhwH/A4cB/wOBAf8DVwH/A+YB/wOjAf8BtgGRATYB/wGBAWoBQQH5BAADVwGyA2UB5wOBAf8D
AAL/AXgBAQL/AXoBBAL/AXoBAwH/AfMBdAEDAf8B4gGEATIB/wNjAd/AAANeAdIBlQGMAYMB+QH/AbsB gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvAf8BzAGfAv8B
fQL/AaMBUgL/AZABLAL/AYIBEwL/AX0BCAL/AXoBBAL/AXkBAgL/AXoBBAL/AX0BCQL/AYABDwL/AX8B rAFjAv8BkwEzAv8BgQERAv8BeQECAv8BggEWAv8BmgFLAv8BrgF4Av8BpQFXAv8BgQEXAv8BeQEEAv8B
DQH/AfgBhgEgAf8BeAFtAWgB9ANYAbjAAAM8AWYDYwHVAZUBhwF8AfgB/wG+AYUC/wGqAV8C/wGZAT4C eAEAAv8BeAEAAf8B8AFxAQAB/wHVAXEBFwH/AmMBXQHfBP8BiwGGAXkB/wOBAf8DgQH/AY4BhgFxAf8B
/wGNAScC/wGGARoC/wGDARUC/wGFARkC/wGKASIC/wGNASgC/wGTATMB/wF8AW4BaAH1A10BxQM2AVnE zwGUAQAB/wHeAcwBnwH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A0sBjQHwAb4B
AANCAXIDYwHVAZUBjgGIAfkB/wHJAZkC/wG8AX8C/wGuAWYC/wGkAVMC/wGfAUoC/wGfAUsC/wGjAVEC PwH/AfQBzQFsIf8D+wH/A9AB/wHXAacBMQH/AmEBXQHRBAADbwHzA18B+wOBAf8DgQH/A4EB/wOBAf8D
/wGnAVgB/wGVAX4BfAH4A10BxwM7AWLMAAM8AWUDXgHSAf8B7wHgAv8B3AG8Av8BzQGfAv8BwQGKAv8B gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvAf8B6QHVAv8BvAGBAv8BpAFUAv8B
uwF/Av8BvwGGAv8BzQGhAv8B6QHWAf8DXAHEAzUBVcgAA2cB7wJnAVkB7wFnAV0BWQHvAWcBWwFZAe8B jgEqAv8BfwENAv8BeQECAv8BewEJAv8BggEdAv8BeAEAAv8BeAEAAv8BeAEBAv8BegEEAv8BegEDAf8B
ZwFbAVkB7wFnAlkB7wFnAWQBWQHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvOAAD 8wF0AQMB/wHiAYQBMgH/A2MB3wT/AacBlAFnAf8BgwGCAX8B/wGFAYMBfgH/AbABlAFOAf8B0wGXAQIB
MwFRA3kB9QMHAQkDKgE/A0UBfANZAbsDYwHfA2gB9AOAAf4DgQH/A4EB/wOBAf8DgAH+A2gB9ANjAd8D /wHgAc4BnwH/A+cB/wPnAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPnAf8DwAH/AwcBCQFmAWQBYgHuAfEB
WgG6A0QBegMnAToIAAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8D vAE7Af8B+gHqAcIB/wPcAf8DdwH/A2gB/wNoAf8DaAH/AzIJ/wHyAd0BqQH/AeoBqQEIAf8DPgFqBAAD
VQGsAzABSwgAA/gB/wG5AZUBPAH/AYMBfQFuAf8BhAF9AWwB/wGqAYQBJwH/AawBewEAAf8BzAG8AZQB ZAHbA2gB9AOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
/wN+Af8DfgH/A34B/wN+Af8DfgH/A34B/wN+Af8DfgH/A44B/zgAAxIBGAM/AW0DQwF1A10BzAN8AfgD VQGvA14B0gGPAYgBfwH5Af8BuwF9Av8BowFSAv8BkAEsAv8BggETAv8BfQEIAv8BegEEAv8BeQECAv8B
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN8AfgDVAGoBAADOwFiA10B egEEAv8BfQEJAv8BgAEPAv8BfwENAf8B+AGGASAB/wF0AmgB9ANYAbgE/wHXAbEBUgH/AZoBjwF0Af8B
xQFzAmgB9AGfAWUBMQH/AZcBUwEXAf8BlgFLAQkB/wGTAUYBAQH/AYwBQwEDAf8BfQFAAQsB/wFrAUAB oAGSAW0B/wHgAa8BNwH/AecBqQEQAf8B6wHVAaAB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
GgH/AW4BUAE2Af8DaAHwA1oBtwM0AVQEAAT/AZcBiwFtAf8CgQGAAf8BggGBAYAB/wGYAYgBYAH/AcoB gQH/A5MB/wQAAzMBUQNoAfAB8wHGAVgB/wH6AecBuBb/Af4B+wH/AfkB4gGqAf8B7wG4AS0B/wNOAZYE
kAEAAf8B3QHMAZ8B/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A5MB/zQAA18B0wM9AWcE AgQAAzwBZANfAckDfQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
AANqAe0DfQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB fQH6A1UBqgM8AWYDYwHVAYsBfQF8AfgB/wG+AYUC/wGqAV8C/wGZAT4C/wGNAScC/wGGARoC/wGDARUC
/wNVAa8DNQFVA10BxwFxAW4BWgH1AbgBZQEbAf8BuQFYAQIB/wHJAV8BAAH/AdgBZQEAAf8B3AFnAQAB /wGFARkC/wGKASIC/wGNASgC/wGTATMB/wFxAW4BaAH1A10BxQM2AVkE/wH0Ac0BbAH/AfQBywFmAf8B
/wHWAWQBAAH/AcMBXAEAAf8BogFMAQAB/wF8ATsBAwH/AW4BRgEjAf8DaAHwA1oBtwMwAUoE/wGGAYQB 9AHLAWUB/wH0AcsBZQH/AfEBwQFJAf8B+QHjAawB/wOJAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOJAf8D
fQH/A4EB/wOBAf8BhwGDAXoB/wHPAZQBAAH/Ad4BzAGfAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D iQH/A5oB/wgAAyIBMQNfAckBmAF+AWcB+gHzAcoBZQH/AfkB4QGmAf8B+wHtAcwB/wH7AewByAH/AfgB
4AH/A+AB/wO8Af80AANaAcIDNAFTBAADYwHfA24B9QOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D 3QGbAf8BvgGQAWsB/gJlAV4B4gM9AWgEAQgAAwYBCAMxAUwDUAGbA2UB7AN9AfoDgQH/A4EB/wOBAf8D
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvA1wBxAGQAXwBXAH4AdQBcQEYAf8B1wFlAQAB/wHlAWwB gQH/A4EB/wOBAf8DgQH/A30B+gNqAe0DUAGbAy8BSQQAA0IBcgNjAdUBjwGKAYQB+QH/AckBmQL/AbwB
AAH/AfIBcgEAAf8B+gF1AQAB/wH8AXYBAAH/AfoBdgEAAf8B8wFyAQAB/wHiAWsBAAH/Ab0BWQEAAf8B fwL/Aa4BZgL/AaQBUwL/AZ8BSgL/AZ8BSwL/AaMBUQL/AacBWAH/AYsCfAH4A10BxwM7AWIEAED/EAAD
hwFAAQAB/wFxAUgBIwH/A2gB8ANWAasE/wGLAYYBegH/A4EB/wOBAf8BjgGGAXEB/wHPAZQBAAH/Ad4B DwETA0cBggNkAdsBrAGSAW8B/ANnAeoDVAGoAygBOxwAAwUBBgMSARcDOgFgA1EBnwNfAdMDZwHvA2MB
zAGfIf8DygH/EAADDQERAz8BbANTAacBXAJZAb4BWAJWAbMBSAJHAYMDIQEwBAADcwHzAzoBYAgAAzYB 9gNiAe4DXgHSA1EBngM5AV8DEQEWAwUBBgwAAzwBZQNeAdIB/wHvAeAC/wHcAbwC/wHNAZ8C/wHBAYoC
WANbAcADbgH1A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DaAH0A1IB /wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB/wNcAcQDNQFVCAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwAB
pAH+Ad0BwQH/Ae0BgAEgAf8B7QFxAQIB/wHzAXMBAAH/AfoBdgEAAf8B/gF4AQAC/wF7AQgC/wGIAScC AQEAAQEGAAEBFgAD/wEAAcABAwYAAYABAWYAAYABAQYAAcABAwgAAf8B/AIAAcABAwIAAf8B/AIAAYAB
/wGiAVMB/wH+AYEBFwH/AfwBeAEEAf8B7AFvAQAB/wHBAVsBAAH/AYYBQQEDAf8BeAFWATYB/wNjAd8E AQIAAf8B+QYAAf8B+QYAAfABEwYAAcABAwYAAYABAQL/BAABgAEBAcABAQUAAQEBgAYAAQEHAAEBBwAB
/wGsAZYBYAH/AYMBggF/Af8BhQGCAX0B/wGzAZMBRAH/Ac8BlAEAAf8B3gHMAZ8B/wOwAf8DsAH/A7AB AQcAAQEGAAGAAQEGAAHAAQMCAAGAAQECAAHwAR8BwAEBAcABAws=
/wOwAf8DsAH/A7AB/wOwAf8DsAH/A6gB/wgAAxoBJANSAaABZwFjAUgB9gGiAXMBAAH/Aa4BfAEAAf8B
sAF9AQAB/wGoAXgBAAH/AZUBagEAAf8BgAFqARYB/gFcAlkBxgNXAbUDFgEeCAADAgEDAxoBIwM4AVwD
VAGoA2IB1wNwAfEDgAH+A4EB/wOBAf8DgQH/A4EB/QNoAfADYQHUA1MBpQM2AVkDGAEgAf8BsgFvAf8B
/QGAAREB/wH8AXcBAQH/Af0BdwEAAv8BeAEAAv8BfwEPAv8BkgE7Av8BswGDAv8B6gHgAv8BkAE9Av8B
ewEKAf8B/AF3AQAB/wHlAWwBAAH/AbEBVAEAAf8BhAFLARoB/wNjAd8E/wHZAaoBNwH/Ab4BmAE4Af8B
wAGYATYB/wHcAaIBFAH/Ac8BlAEAAf8B3gHMAZ8B/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
gQH/A5MB/wQAAyABLQJjAVoB6QG/AYgBAAH/Ac0BlQEKAf8BsAGIAScB/wFzAWQBPwH/AU0BSwFHAf8B
TgFLAUIB/wFmAVcBMQH/AZoBdAEXAf8BpAF2AQMB/wFwAU8BAAH/A0MBdgQBRAAB/wGaAUIC/wGDARUB
/wH+AXoBBAL/AXgBAAL/AXgBAAL/AZUBPwL/AcoBrgL/AdoBxgL/Ae0B5QL/AZYBSQL/AXwBDQH/Af4B
eAEAAf8B9AFzAQAB/wHQAWIBAAH/AZoBTgEKAf8BYwJdAd8E/wHhAa4BMQH/Ab0BlwE7Af8BwAGYATUB
/wHjAaUBCgH/Ac8BlAEAAf8B3gHMAZ8B/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A68B
/wQAAmMBWgHpAdkBmgEAAf8B2gGjARwB/wKOAYwB/wOKAf8DlwH/A5sB/wORAf8DdAH/A0gB/wFDAUIB
PwH/AbUBgwEHAf8BegFXAQAB/wM2AVgMAAMCAQMDCAEKAyEBLwMxAU4DPQFoA0MBdgNEAXoDQwF1Az0B
ZwMxAU0DIAEuAwcBCQQCBAAB/wGVATcC/wGJAR8C/wF9AQgC/wF4AQAC/wF4AQAC/wGoAVwC/wHgAc0C
/wGhAWYC/wHYAcUC/wG5AZQC/wGHASMC/wF4AQAB/wH7AXYBAAH/AeIBagEAAf8BrwFUAQMB/wFjAl0B
3wT/AbsBnQFTAf8BiAGEAXkB/wGMAYUBdAH/AcQBmQEwAf8BzwGUAQAB/wHeAcwBnyH/A8oB/wNDAXYB
6QGnAQIB/wHpAasBEgH/AdABygG7Af8DrAH/A10B/wNMAf8DSwH/A0QB/wMPAf8DswH/A2YB/wFUAUwB
OgH/Aa4BfQEEAf8DXQHMCAADEwEaAzkBXQNZAbwDZAHbA2oB7QNjAfYDXwH7A4EB/QNfAfsDYwH2A2UB
7ANjAdoDWgG6AzgBXAMTARoB/wGgAUkC/wGSATEC/wGBAREC/wF5AQMC/wF4AQAC/wGoAVwC/wHgAc0C
/wGhAWYC/wHYAcUC/wHAAZ8C/wGJAScC/wF4AQAB/wH+AXgBAAH/AewBbwEAAf8BvwFaAQIB/wFjAl0B
3wT/AZQBigFzAf8DgQH/A4EB/wGaAYoBYwH/Ac8BlAEAAf8B3gHMAZ8B/wPQAf8D0AH/A9AB/wPQAf8D
0AH/A9AB/wPQAf8D0AH/A7UB/wJqAWEB5gHtAa0BEAH/AfQB0AF2Af8D+gH/A/oB/wN9Af8DfwH/A4AB
/wOAAf8DfgH/A4QB/wO7Af8DagH/AagBgAEcAf8BaQFjAUgB9gQAAxoBJANWAa4DaAH0A4EB/wOBAf8D
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DawHyA1IBoQH/AbMBbwL/AZ4BSAL/AYgB
HgL/AXwBBwL/AXgBAAL/AZgBQwL/Ac4BtAL/AdcBwAL/AeoB4AL/AZ0BVwL/AX4BEQL/AXgBAAL/AXgB
AAH/AfABcQEAAf8BywFkAQkB/wFjAWEBXQHfBP8BhgGDAX4B/wOBAf8DgQH/AYYBgwF7Af8BzwGUAQAB
/wHeAcwBnwH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DkwH/AWoBZwFiAe4B7wG0ASEB
/wH3AdwBlwn/A5EB/wOIAf8DhwH/A4cB/wOBAf8DVwH/A+YB/wOjAf8BtgGRATYB/wGFAWoBQAH5BAAD
VwGyA2UB5wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
VQGvAf8BzAGfAv8BrAFjAv8BkwEzAv8BgQERAv8BeQECAv8BggEWAv8BmgFLAv8BrgF4Av8BpQFXAv8B
gQEXAv8BeQEEAv8BeAEAAv8BeAEAAf8B8AFxAQAB/wHVAXEBFwH/AmMBXQHfBP8BiwGGAXkB/wOBAf8D
gQH/AY4BhgFxAf8BzwGUAQAB/wHeAcwBnwH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8D
oQH/A0sBjQHwAb4BPwH/AfQBzQFsIf8D+wH/A9AB/wHXAacBMQH/AmEBXQHRBAADbwHzA18B+wOBAf8D
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvAf8B6QHVAv8B
vAGBAv8BpAFUAv8BjgEqAv8BfwENAv8BeQECAv8BewEJAv8BggEdAv8BeAEAAv8BeAEAAv8BeAEBAv8B
egEEAv8BegEDAf8B8wF0AQMB/wHiAYQBMgH/A2MB3wT/AacBlAFnAf8BgwGCAX8B/wGFAYMBfgH/AbAB
lAFOAf8B0wGXAQIB/wHgAc4BnwH/A+cB/wPnAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPnAf8DwAH/AwcB
CQFqAWgBYgHuAfEBvAE7Af8B+gHqAcIB/wPcAf8DdwH/A2gB/wNoAf8DaAH/AzIJ/wHyAd0BqQH/AeoB
qQEIAf8DPgFqBAADZAHbA2gB9AOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
gQH/A4EB/wOBAf8DVQGvA14B0gGVAYwBgwH5Af8BuwF9Av8BowFSAv8BkAEsAv8BggETAv8BfQEIAv8B
egEEAv8BeQECAv8BegEEAv8BfQEJAv8BgAEPAv8BfwENAf8B+AGGASAB/wF4AW0BaAH0A1gBuAT/AdcB
sQFSAf8BmgGPAXQB/wGgAZIBbQH/AeABrwE3Af8B5wGpARAB/wHrAdUBoAH/A4EB/wOBAf8DgQH/A4EB
/wOBAf8DgQH/A4EB/wOBAf8DkwH/BAADMwFRAWoCaAHwAfMBxgFYAf8B+gHnAbgW/wH+AfsB/wH5AeIB
qgH/Ae8BuAEtAf8DTgGWBAIEAAM8AWQDXwHJA30B+gOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
gQH/A4EB/wOBAf8DgQH/A30B+gNVAaoDPAFmA2MB1QGVAYcBfAH4Af8BvgGFAv8BqgFfAv8BmQE+Av8B
jQEnAv8BhgEaAv8BgwEVAv8BhQEZAv8BigEiAv8BjQEoAv8BkwEzAf8BfAFuAWgB9QNdAcUDNgFZBP8B
9AHNAWwB/wH0AcsBZgH/AfQBywFlAf8B9AHLAWUB/wHxAcEBSQH/AfkB4wGsAf8DiQH/A4kB/wOJAf8D
iQH/A4kB/wOJAf8DiQH/A4kB/wOaAf8IAAMiATEDXwHJAaABigFnAfoB8wHKAWUB/wH5AeEBpgH/AfsB
7QHMAf8B+wHsAcgB/wH4Ad0BmwH/AcYBmAFnAf4CZQFeAeIDPQFoBAEIAAMGAQgDMQFMA1ABmwNlAewD
fQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN9AfoDagHtA1ABmwMvAUkEAANCAXIDYwHVAZUB
jgGIAfkB/wHJAZkC/wG8AX8C/wGuAWYC/wGkAVMC/wGfAUoC/wGfAUsC/wGjAVEC/wGnAVgB/wGVAX4B
fAH4A10BxwM7AWIEAED/EAADDwETA0cBggNkAdsBtAGeAW8B/ANnAeoDVAGoAygBOxwAAwUBBgMSARcD
OgFgA1EBnwNfAdMDZwHvA2MB9gNiAe4DXgHSA1EBngM5AV8DEQEWAwUBBgwAAzwBZQNeAdIB/wHvAeAC
/wHcAbwC/wHNAZ8C/wHBAYoC/wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB/wNcAcQDNQFVCAABQgFNAT4H
AAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAcABAwYAAYABAWYAAYABAQYAAcABAwgAAf8B
/AIAAcABAwIAAf8B/AIAAYABAQIAAf8B+QYAAf8B+QYAAfABEwYAAcABAwYAAYABAQL/BAABgAEBAcAB
AQUAAQEBgAYAAQEHAAEBBwABAQcAAQEGAAGAAQEGAAHAAQMCAAGAAQECAAHwAR8BwAEBAcABAws=
</value> </value>
</data> </data>
<metadata name="ilStoreIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="ilStoreIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">

View File

@ -33,5 +33,7 @@ namespace qtcnet_client.Controls
Height = Math.Max(bottom, pbProfileImage.Bottom + 4); Height = Math.Max(bottom, pbProfileImage.Bottom + 4);
} }
public void ReloadProfileImage() => pbProfileImage.Image = ProfileImage;
} }
} }

View File

@ -42,7 +42,7 @@ namespace qtcnet_client.Controls
{ {
if (!_isHovering) if (!_isHovering)
{ {
lblRoomName.ForeColor = Color.White; lblRoomName.ForeColor = Color.LightGray;
_isHovering = true; _isHovering = true;
} }
} }

View File

@ -1,6 +1,12 @@
using qtcnet_client.Controls; using qtcnet_client.Controls;
using QtCNETAPI.Dtos.User; using QtCNETAPI.Dtos.User;
using QtCNETAPI.Events;
using QtCNETAPI.Models;
using QtCNETAPI.Services.ApiService;
using QtCNETAPI.Services.GatewayService;
using System.ComponentModel; using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
namespace qtcnet_client.Forms namespace qtcnet_client.Forms
{ {
public partial class ChatRoomForm : Form public partial class ChatRoomForm : Form
@ -9,13 +15,20 @@ namespace qtcnet_client.Forms
public string RoomId { get; set; } = string.Empty; public string RoomId { get; set; } = string.Empty;
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public string RoomName { get; set; } = "Room"; public string RoomName { get; set; } = "Room";
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public Dictionary<string, Image> UserProfileImages { get; set; } = [];
public string SentMessage { get; private set; } = string.Empty; public string SentMessage { get; private set; } = string.Empty;
public event EventHandler? OnSend; public event EventHandler? OnSend;
public event EventHandler? OnClose; public event EventHandler? OnClose;
public ChatRoomForm() private readonly IGatewayService _gatewayService;
private readonly IApiService _apiService;
public ChatRoomForm(IGatewayService gatewayService, IApiService apiService)
{ {
_gatewayService = gatewayService;
_apiService = apiService;
InitializeComponent(); InitializeComponent();
} }
@ -51,17 +64,20 @@ namespace qtcnet_client.Forms
private void ChatRoomForm_FormClosed(object sender, FormClosedEventArgs e) private void ChatRoomForm_FormClosed(object sender, FormClosedEventArgs e)
{ {
OnClose?.Invoke(this, EventArgs.Empty); OnClose?.Invoke(this, EventArgs.Empty);
Close();
} }
public void AddUsersToRoomList(List<UserInformationDto> users) public void AddUsersToRoomList(List<User> users)
{
if(lvUsers.InvokeRequired)
{
lvUsers.Invoke(() =>
{ {
lvUsers.SuspendLayout(); lvUsers.SuspendLayout();
lvUsers.Items.Clear(); lvUsers.Items.Clear();
List<ListViewItem> lvis = []; List<ListViewItem> lvis = [];
foreach (UserInformationDto user in users) foreach (User user in users)
{ {
lvis.Add(new ListViewItem lvis.Add(new ListViewItem
{ {
@ -74,6 +90,29 @@ namespace qtcnet_client.Forms
lvUsers.Items.AddRange([.. lvis.DistinctBy(u => u.Tag)]); lvUsers.Items.AddRange([.. lvis.DistinctBy(u => u.Tag)]);
lvUsers.ResumeLayout(true); lvUsers.ResumeLayout(true);
});
}
else
{
lvUsers.SuspendLayout();
lvUsers.Items.Clear();
List<ListViewItem> lvis = [];
foreach (User user in users)
{
lvis.Add(new ListViewItem
{
Tag = user.Id,
Text = user.Username,
ImageIndex = user.Status
});
}
lvUsers.Items.AddRange([.. lvis.DistinctBy(u => u.Tag)]);
lvUsers.ResumeLayout(true);
}
} }
public void AddUserToRoomList(UserInformationDto user) public void AddUserToRoomList(UserInformationDto user)
@ -88,13 +127,65 @@ namespace qtcnet_client.Forms
lvUsers.Items.Add(lvi); lvUsers.Items.Add(lvi);
} }
public async Task LoadProfileImage(MessageControl ctrl, string userId)
{
_ = Task.Run(async () =>
{
var img = await AddUserProfileImageToDictionary(userId);
if (img == null || ctrl.IsDisposed)
return;
if (ctrl.InvokeRequired)
ctrl.Invoke(() =>
{
ctrl.ProfileImage = img;
ctrl.ReloadProfileImage();
});
else
{
ctrl.ProfileImage = img;
ctrl.ReloadProfileImage();
}
});
}
private async Task<Image?> AddUserProfileImageToDictionary(string userId)
{
if(UserProfileImages.TryGetValue(userId, out var image))
return image;
else
{
var _res = await _apiService.GetUserProfilePic(userId);
if (_res.Success && _res.Data != null)
{
using var ms = new MemoryStream(_res.Data);
Image img = Image.FromStream(ms);
UserProfileImages.Add(userId, img);
return UserProfileImages[userId];
}
else
return default;
}
}
public void AddMessage(MessageControl messageCtrl) public void AddMessage(MessageControl messageCtrl)
{ {
messageCtrl.Width = flpMessages.ClientSize.Width - 10; messageCtrl.Width = flpMessages.ClientSize.Width - 10;
messageCtrl.Margin = new Padding(0, 0, 0, 6); messageCtrl.Margin = new Padding(0, 0, 0, 6);
if(flpMessages.InvokeRequired)
{
Invoke(() =>
{
flpMessages.Controls.Add(messageCtrl); flpMessages.Controls.Add(messageCtrl);
flpMessages.ScrollControlIntoView(messageCtrl); flpMessages.ScrollControlIntoView(messageCtrl);
});
} else
{
flpMessages.Controls.Add(messageCtrl);
flpMessages.ScrollControlIntoView(messageCtrl);
}
} }
private bool ValidateChatBox() private bool ValidateChatBox()

View File

@ -34,6 +34,7 @@
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
BackColor = Color.White;
ClientSize = new Size(403, 672); ClientSize = new Size(403, 672);
DoubleBuffered = true; DoubleBuffered = true;
FormBorderStyle = FormBorderStyle.FixedSingle; FormBorderStyle = FormBorderStyle.FixedSingle;

View File

@ -1,14 +1,17 @@
using Krypton.Toolkit; using Krypton.Toolkit;
using Microsoft.AspNetCore.Mvc.Routing;
using qtcnet_client.Controls; using qtcnet_client.Controls;
using qtcnet_client.Forms; using qtcnet_client.Forms;
using qtcnet_client.Model; using qtcnet_client.Model;
using qtcnet_client.Properties;
using QtCNETAPI.Dtos.User; using QtCNETAPI.Dtos.User;
using QtCNETAPI.Events;
using QtCNETAPI.Models; using QtCNETAPI.Models;
using QtCNETAPI.Services; using QtCNETAPI.Services;
using QtCNETAPI.Services.ApiService; using QtCNETAPI.Services.ApiService;
using QtCNETAPI.Services.GatewayService; using QtCNETAPI.Services.GatewayService;
using System.Diagnostics;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using System.Threading.Tasks;
namespace qtcnet_client namespace qtcnet_client
{ {
@ -93,9 +96,7 @@ namespace qtcnet_client
if (_token != null) if (_token != null)
{ {
// try it // try it
var _refreshRes = await _apiService.RefreshLogin(_token); await LoginAsync();
if (_refreshRes.Success)
OnSuccessfulLoginRefresh();
} }
else else
LoginControl.ToggleControls(true); LoginControl.ToggleControls(true);
@ -211,99 +212,67 @@ namespace qtcnet_client
{ {
if (sender is LoginControl _senderCtrl) if (sender is LoginControl _senderCtrl)
{ {
// login using function // login using info
var _loginRes = await OnSuccessfulLogin(new() { Email = _senderCtrl.Email, Password = _senderCtrl.Password, RememberMe = _senderCtrl.RememberMe }); await LoginAsync(new() { Email = _senderCtrl.Email, Password = _senderCtrl.Password, RememberMe = _senderCtrl.RememberMe });
if(_loginRes) }
{
// pause ui
SuspendLayout();
// remove and dispose login and branding controls
Controls.Remove(LoginControl);
Controls.Remove(BrandingControl);
LoginControl?.Dispose();
LoginControl = null;
BrandingControl?.Dispose();
BrandingControl = null;
// set size to logged in size
Size = LoggedInSize;
// start gateway connection
var _gwRes = await SetupGatewayConnection();
if(_gwRes)
{
// setup current profile control based on current user
CurrentProfileControl = new()
{
Username = _apiService.CurrentUser!.Username,
CurrencyCount = _apiService.CurrentUser.CurrencyAmount,
Location = new(12, 12),
};
// get profile image for the current user
var _currentProfileImageRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id);
if (_currentProfileImageRes.Success && _currentProfileImageRes.Data != null)
{
using MemoryStream ms = new(_currentProfileImageRes.Data);
Image img = Image.FromStream(ms);
CurrentProfileControl.ProfileImage = img;
} }
// setup main tab control private async void MainTabControl_OnRoomControlDoubleClicked(object? sender, EventArgs e)
MainTabControl = new()
{ {
Location = new(12, 91) if (sender is RoomControl _roomCtrl)
}; {
if(OpenChatRoomForms.Count > 0)
// get and set contacts {
var _currentUserContacts = await _apiService.GetCurrentUserContacts(); KryptonMessageBox.Show("Joining Multiple Rooms Is Currently Unsupported.", ":(");
if (_currentUserContacts.Success && _currentUserContacts.Data != null) return;
await SetupContactsUI(_currentUserContacts.Data);
// get and set user directory
var _currentUserDirectory = await _apiService.GetAllUsersAsync();
if (_currentUserDirectory.Success && _currentUserDirectory.Data != null)
await SetupDirectoryUI(_currentUserDirectory.Data);
// add controls to current form
Controls.Add(CurrentProfileControl);
Controls.Add(MainTabControl);
ResumeLayout(true);
} }
// open the room form
ChatRoomForm _chatRoom = new(_gatewayService, _apiService)
{
RoomId = _roomCtrl.RoomId,
RoomName = _roomCtrl.RoomName,
};
OpenChatRoomForms.Add(_chatRoom);
_chatRoom.OnSend += Chat_OnSend;
_chatRoom.OnClose += Chat_OnClose;
_chatRoom.Show();
if (_roomCtrl.RoomId == "LOBBY")
await _gatewayService.JoinRoomAsync();
else else
{ {
ResumeLayout(true); // join the user to the room
KryptonMessageBox.Show("An Error Occured Trying To Connect To The Gateway. Please Try Again Later.", "Uh Oh.", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error); await _gatewayService.JoinRoomAsync(new() // TODO - refactor this server side (its so bad)
Application.Exit();
}
}
}
}
private void MainTabControl_OnRoomControlDoubleClicked(object? sender, EventArgs e)
{ {
if (sender is RoomControl _) Id = _roomCtrl.RoomId,
Name = _roomCtrl.Name,
});
}
}
}
private async void Chat_OnSend(object? sender, EventArgs e)
{ {
if (sender is ChatRoomForm _chatRoom)
}
}
private void Chat_OnSend(object? sender, EventArgs e)
{ {
if (sender is ChatRoomForm _) // send the message
await _gatewayService.PostMessageAsync(new()
{ {
Content = _chatRoom.SentMessage
});
} }
} }
private void Chat_OnClose(object? sender, EventArgs e) private async void Chat_OnClose(object? sender, EventArgs e)
{ {
if (sender is ChatRoomForm chatRoom) if (sender is ChatRoomForm chatRoom)
{ {
// leave whatever room the user is in
await _gatewayService.LeaveRoomAsync();
OpenChatRoomForms.Remove(chatRoom); OpenChatRoomForms.Remove(chatRoom);
chatRoom.Dispose(); chatRoom.Dispose();
} }
@ -331,33 +300,6 @@ namespace qtcnet_client
throw new NotImplementedException(); throw new NotImplementedException();
} }
private async Task<bool> PingAPI()
{
// ping it
var res = await _apiService.PingServerAsync();
// return result
return res.Success;
}
private async Task<bool> SetupGatewayConnection()
{
// subscribe to gateway events
//_gatewayService.OnServerReconnecting += _gatewayService_OnServerReconnecting;
//_gatewayService.OnServerReconnected += _gatewayService_OnServerReconnected;
//_gatewayService.OnServerDisconnect += _gatewayService_OnServerDisconnect;
//_gatewayService.OnDirectMessageReceived += _gatewayService_OnDirectMessageReceived;
_gatewayService.OnRefreshUserListsReceived += _gatewayService_OnRefreshUserListReceived;
//_gatewayService.OnRefreshRoomListReceived += _gatewayService_OnRefreshRoomListReceived;
_gatewayService.OnRefreshContactsListReceived += _gatewayService_OnRefreshContactsListReceived;
//_gatewayService.OnServerConfigReceived += _gatewayService_OnServerConfigReceived;
//_gatewayService.OnUserForceLogout += _gatewayService_OnUserForceLogout;
// start connection
await _gatewayService.StartAsync();
return _gatewayService.HubConnection != null && _gatewayService.HubConnection.State == Microsoft.AspNetCore.SignalR.Client.HubConnectionState.Connected;
}
private void _gatewayService_OnUserForceLogout(object? sender, EventArgs e) private void _gatewayService_OnUserForceLogout(object? sender, EventArgs e)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@ -369,31 +311,28 @@ namespace qtcnet_client
} }
private async void _gatewayService_OnRefreshContactsListReceived(object? sender, EventArgs e) private async void _gatewayService_OnRefreshContactsListReceived(object? sender, EventArgs e)
{
if(MainTabControl != null)
{ {
// get and set contacts // get and set contacts
var _currentUserContacts = await _apiService.GetCurrentUserContacts(); var _currentUserContacts = await _apiService.GetCurrentUserContacts();
if (_currentUserContacts.Success && _currentUserContacts.Data != null) if (_currentUserContacts.Success && _currentUserContacts.Data != null)
await SetupContactsUI(_currentUserContacts.Data); await SetupContactsUI(_currentUserContacts.Data);
} }
}
private void _gatewayService_OnRefreshRoomListReceived(object? sender, EventArgs e) private async void _gatewayService_OnRefreshRoomListReceived(object? sender, EventArgs e)
{ {
throw new NotImplementedException(); // get and set rooms
var _roomList = await _apiService.GetAllRoomsAsync();
if (_roomList.Success && _roomList.Data != null)
await SetupRoomsUI(_roomList.Data);
} }
private async void _gatewayService_OnRefreshUserListReceived(object? sender, EventArgs e) private async void _gatewayService_OnRefreshUserListReceived(object? sender, EventArgs e)
{
if(MainTabControl != null)
{ {
// get and set user directory // get and set user directory
var _currentUserDirectory = await _apiService.GetAllUsersAsync(); var _currentUserDirectory = await _apiService.GetAllUsersAsync();
if (_currentUserDirectory.Success && _currentUserDirectory.Data != null) if (_currentUserDirectory.Success && _currentUserDirectory.Data != null)
await SetupDirectoryUI(_currentUserDirectory.Data); await SetupDirectoryUI(_currentUserDirectory.Data);
} }
}
private void _gatewayService_OnServerDisconnect(object? sender, EventArgs e) private void _gatewayService_OnServerDisconnect(object? sender, EventArgs e)
{ {
@ -415,6 +354,178 @@ namespace qtcnet_client
throw new NotImplementedException(); throw new NotImplementedException();
} }
private async Task<bool> PingAPI()
{
// ping it
var res = await _apiService.PingServerAsync();
// return result
return res.Success;
}
private async Task LoginAsync(UserLoginDto? dto = null)
{
if (dto != null)
{
// attempt login using dto
var res = await _apiService.LoginAsync(dto);
if (res.Success && res.Data != null && _apiService.CurrentUser != null) // "CurrentUser" should not be null on successful login but checking anyways
{
// store refresh token in credential store
_credentialService.SaveAccessToken(_apiService.CurrentUser.Username, res.Message);
}
else
{
KryptonMessageBox.Show(res.Message, "Login Error", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error);
}
}
else
{
// use refresh token
var _token = _credentialService.GetAccessToken();
if (_token != null)
{
var _res = await _apiService.RefreshLogin(_token);
if (!_res.Success)
LoginControl?.ToggleControls(true);
}
}
if (_apiService.CurrentUser != null)
{
// sub to currentuser updates
_apiService.OnCurrentUserUpdate += _apiService_OnCurrentUserUpdate;
// pause ui
SuspendLayout();
// remove and dispose login and branding controls
Controls.Remove(LoginControl);
Controls.Remove(BrandingControl);
LoginControl?.Dispose();
LoginControl = null;
BrandingControl?.Dispose();
BrandingControl = null;
// set size to logged in size
Size = LoggedInSize;
// subscribe to gateway events
//_gatewayService.OnServerReconnecting += _gatewayService_OnServerReconnecting;
//_gatewayService.OnServerReconnected += _gatewayService_OnServerReconnected;
//_gatewayService.OnServerDisconnect += _gatewayService_OnServerDisconnect;
//_gatewayService.OnDirectMessageReceived += _gatewayService_OnDirectMessageReceived;
_gatewayService.OnRoomMessageReceived += _gatewayService_OnRoomMessageReceived;
_gatewayService.OnRoomUserListReceived += _gatewayService_OnRoomUserListReceived;
_gatewayService.OnRefreshUserListsReceived += _gatewayService_OnRefreshUserListReceived;
//_gatewayService.OnRefreshRoomListReceived += _gatewayService_OnRefreshRoomListReceived;
_gatewayService.OnRefreshContactsListReceived += _gatewayService_OnRefreshContactsListReceived;
//_gatewayService.OnServerConfigReceived += _gatewayService_OnServerConfigReceived;
//_gatewayService.OnUserForceLogout += _gatewayService_OnUserForceLogout;
// start connection
await _gatewayService.StartAsync();
var _res = _gatewayService.HubConnection != null && _gatewayService.HubConnection.State == Microsoft.AspNetCore.SignalR.Client.HubConnectionState.Connected;
if (_res)
{
// setup current profile control based on current user
CurrentProfileControl = new()
{
Username = _apiService.CurrentUser.Username,
CurrencyCount = _apiService.CurrentUser.CurrencyAmount,
Location = new(12, 12),
};
// get profile image for the current user
var _currentProfileImageRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id);
if (_currentProfileImageRes.Success && _currentProfileImageRes.Data != null)
{
using MemoryStream ms = new(_currentProfileImageRes.Data);
Image img = Image.FromStream(ms);
CurrentProfileControl.ProfileImage = img;
}
// setup main tab control
MainTabControl = new()
{
Location = new(12, 91)
};
MainTabControl.OnRoomControlDoubleClicked += MainTabControl_OnRoomControlDoubleClicked;
MainTabControl.OnContactControlDoubleClicked += MainTabControl_OnContactControlDoubleClicked;
// get and set contacts
var _currentUserContacts = await _apiService.GetCurrentUserContacts();
if (_currentUserContacts.Success && _currentUserContacts.Data != null)
await SetupContactsUI(_currentUserContacts.Data);
// get and set rooms
var _roomList = await _apiService.GetAllRoomsAsync();
if (_roomList.Success && _roomList.Data != null)
await SetupRoomsUI(_roomList.Data);
// get and set user directory
var _currentUserDirectory = await _apiService.GetAllUsersAsync();
if (_currentUserDirectory.Success && _currentUserDirectory.Data != null)
await SetupDirectoryUI(_currentUserDirectory.Data);
// add controls to current form
Controls.Add(CurrentProfileControl);
Controls.Add(MainTabControl);
ResumeLayout(true);
}
else
{
ResumeLayout(true);
KryptonMessageBox.Show("An Error Occured Trying To Connect To The Gateway. Please Try Again Later.", "Uh Oh.", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error);
Application.Exit();
}
}
}
private void _gatewayService_OnRoomUserListReceived(object? sender, EventArgs e)
{
if(e is RoomListEventArgs _args)
{
// get the open chat room form
var _chatRoom = OpenChatRoomForms.FirstOrDefault(e => e.RoomId == _args.Room.Id);
if(_chatRoom != null)
{
// the users to the list
_chatRoom.AddUsersToRoomList(_args.UserList);
}
}
}
private async void _gatewayService_OnRoomMessageReceived(object? sender, EventArgs e)
{
if (e is ServerMessageEventArgs _args)
{
// get the open chat room form
var _chatRoom = OpenChatRoomForms.FirstOrDefault(e => e.RoomId == _args.Room.Id);
if(_chatRoom != null)
{
// build message control
MessageControl _msg = new()
{
Message = _args.Message,
Username = _args.User.Username
};
// add message
_chatRoom.AddMessage(_msg);
if(_args.User.Id != "0")
await _chatRoom.LoadProfileImage(_msg, _args.User.Id);
}
}
}
private async Task SetupContactsUI(List<Contact> data) private async Task SetupContactsUI(List<Contact> data)
{ {
// build ctrl list // build ctrl list
@ -430,6 +541,34 @@ namespace qtcnet_client
MainTabControl?.AddContacts(_contactCtrls); MainTabControl?.AddContacts(_contactCtrls);
} }
private async Task SetupRoomsUI(List<Room> data)
{
List<RoomControl> _roomCtrls = [];
// before adding db rooms, add lobby
_roomCtrls.Add(new()
{
RoomId = "LOBBY",
RoomName = "Lobby",
IsUserCountVisible = false,
});
// build roomcontrol list
foreach (var room in data)
{
RoomControl _ctrl = new()
{
RoomId = room.Id,
RoomName = room.Name,
UserCount = room.UserCount,
};
_roomCtrls.Add(_ctrl);
}
// add to control
MainTabControl?.AddRooms(_roomCtrls);
}
private async Task SetupDirectoryUI(List<UserInformationDto> data) private async Task SetupDirectoryUI(List<UserInformationDto> data)
{ {
// build listviewitem list // build listviewitem list
@ -509,90 +648,5 @@ namespace qtcnet_client
return default; return default;
} }
private async Task<bool> OnSuccessfulLogin(UserLoginDto dto)
{
// attempt login
var res = await _apiService.LoginAsync(dto);
if (res.Success && res.Data != null && _apiService.CurrentUser != null) // "CurrentUser" should not be null on successful login but checking anyways
{
// store refresh token in credential store
_credentialService.SaveAccessToken(_apiService.CurrentUser.Username, res.Message);
// sub to currentuser updates
_apiService.OnCurrentUserUpdate += _apiService_OnCurrentUserUpdate;
return true;
}
else
{
KryptonMessageBox.Show(res.Message, "Login Error", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error);
return false;
}
}
private async void OnSuccessfulLoginRefresh()
{
if (_apiService.CurrentUser != null)
{
// remove and dispose login and branding controls
Controls.Remove(LoginControl);
Controls.Remove(BrandingControl);
LoginControl?.Dispose();
LoginControl = null;
BrandingControl?.Dispose();
BrandingControl = null;
// set size to logged in size
Size = LoggedInSize;
// start gateway connection
var _gwRes = await SetupGatewayConnection();
if (_gwRes)
{
// setup current profile control based on current user
CurrentProfileControl = new()
{
Username = _apiService.CurrentUser!.Username,
CurrencyCount = _apiService.CurrentUser.CurrencyAmount,
Location = new(12, 12),
};
// get profile image for the current user
var _currentProfileImageRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id);
if (_currentProfileImageRes.Success && _currentProfileImageRes.Data != null)
{
using MemoryStream ms = new(_currentProfileImageRes.Data);
Image img = Image.FromStream(ms);
CurrentProfileControl.ProfileImage = img;
}
// setup main tab control
MainTabControl = new()
{
Location = new(12, 91)
};
// add controls to current form
Controls.Add(CurrentProfileControl);
Controls.Add(MainTabControl);
// get and set contacts
var _currentUserContacts = await _apiService.GetCurrentUserContacts();
if (_currentUserContacts.Success && _currentUserContacts.Data != null)
await SetupContactsUI(_currentUserContacts.Data);
// get and set user directory
var _currentUserDirectory = await _apiService.GetAllUsersAsync();
if (_currentUserDirectory.Success && _currentUserDirectory.Data != null)
await SetupDirectoryUI(_currentUserDirectory.Data);
ResumeLayout(true);
}
}
}
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -7,8 +7,13 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms> <UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<ApplicationIcon>QtCNETAppIconV2.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Content Include="QtCNETAppIconV2.ico" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Krypton.Toolkit" Version="100.25.11.328" /> <PackageReference Include="Krypton.Toolkit" Version="100.25.11.328" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" />