From 4c304e11f3388903d560a8490b3c4a48da471bc4 Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Wed, 12 Jan 2022 10:53:48 +0000 Subject: [PATCH 1/6] update version number to 1.77.3 --- mRemoteNG/mRemoteNG.csproj | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mRemoteNG/mRemoteNG.csproj b/mRemoteNG/mRemoteNG.csproj index 2664f824..8e3e71d2 100644 --- a/mRemoteNG/mRemoteNG.csproj +++ b/mRemoteNG/mRemoteNG.csproj @@ -5,7 +5,7 @@ net6.0-windows true Icons\mRemoteNG.ico - 1.77.2 + 1.77.3 Multi-protocol remote connections manager 2020 mRemoteNG Dev Team, 2010-2013 Riley McArdle, 2007-2009 Felix Deimel COPYING.TXT @@ -14,6 +14,7 @@ Debug;Release;Debug Portable;Release Portable;Release Installer false latest + Header_dark.png DEBUG @@ -226,6 +227,10 @@ Always + + True + \ + Always From 86b3cb8d5dd0143eb96b27a03f71670b5d390202 Mon Sep 17 00:00:00 2001 From: tecxx Date: Fri, 14 Jan 2022 11:11:15 +0100 Subject: [PATCH 2/6] update documentation regarding external connectors feature --- mRemoteNGDocumentation/howtos/credvault.rst | 21 ++++++++++++++++++ .../howtos/dynamic_host.rst | 16 +++++++++++++ mRemoteNGDocumentation/images/credvault01.png | Bin 0 -> 2689 bytes mRemoteNGDocumentation/images/credvault02.png | Bin 0 -> 7513 bytes mRemoteNGDocumentation/images/ec2instance.png | Bin 0 -> 20881 bytes mRemoteNGDocumentation/index.rst | 2 ++ 6 files changed, 39 insertions(+) create mode 100644 mRemoteNGDocumentation/howtos/credvault.rst create mode 100644 mRemoteNGDocumentation/howtos/dynamic_host.rst create mode 100644 mRemoteNGDocumentation/images/credvault01.png create mode 100644 mRemoteNGDocumentation/images/credvault02.png create mode 100644 mRemoteNGDocumentation/images/ec2instance.png diff --git a/mRemoteNGDocumentation/howtos/credvault.rst b/mRemoteNGDocumentation/howtos/credvault.rst new file mode 100644 index 00000000..8824c56e --- /dev/null +++ b/mRemoteNGDocumentation/howtos/credvault.rst @@ -0,0 +1,21 @@ +************* +Credential Vault Connector +************* + +.. warning:: + +This feature is currently only developed for Thycotic Secret Server (on-premise installations). It is implemented for RDP and SSH connections. + +mRemote supports fetching credentials from external credential vaults. This allows providing credentials to the connection without storing these to disk, which has numerous benefits (security, auditing, rotating passwords, etc). + +Instead of specifying username/password/domain directly in mRemote, leave these fields empty and just set the secret id: + +.. figure:: /images/credvault01.png + +The secret id is the unique identifier of your secret, you can find it in the URL in your thycotic interface. +e.g. https://cred.domain.local/SecretServer/app/#/secret/3318/general -> the secret id is 3318 + +Before initiating the connection mRemote will access your Secret Server API URL and fetch the data. For this to work the API endpoint URL and access credentials need to be specified. A popup will show up if this information has not yet been set. + +.. figure:: /images/credvault02.png + diff --git a/mRemoteNGDocumentation/howtos/dynamic_host.rst b/mRemoteNGDocumentation/howtos/dynamic_host.rst new file mode 100644 index 00000000..1813601e --- /dev/null +++ b/mRemoteNGDocumentation/howtos/dynamic_host.rst @@ -0,0 +1,16 @@ +************* +Dynamic Host Addresses +************* + +.. warning:: + +This feature is in beta and currently supports Amazon EC2 only + +Some hosts may have dynamic ip addresses or hostnames. For example, Amazon EC2 instances without elastic ips change their public address upon stop and restart events. +mRemote can automatically update the host property when ec2 region and instance-id properties are set: + +.. figure:: /images/ec2instance.png + +Before initiating the connection, mRemote will contact the EC2 API, fetch the current public ipv4 address and write it to the host field. Afterwards the connection is initiated as usual. + +For this to work, a valid EC2 access key needs to be specified. mRemote will ask for it via a popup window if not yet specified. This token is then stored to registry. We strongly recommend to generate **readonly** access keys in the EC2 AMI interface. diff --git a/mRemoteNGDocumentation/images/credvault01.png b/mRemoteNGDocumentation/images/credvault01.png new file mode 100644 index 0000000000000000000000000000000000000000..14d2cad883a5c54d981ba7934fa1c01dc4503419 GIT binary patch literal 2689 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 QXbebMUQMp}q4BH#0+47<4*&oF literal 0 HcmV?d00001 diff --git a/mRemoteNGDocumentation/images/ec2instance.png b/mRemoteNGDocumentation/images/ec2instance.png new file mode 100644 index 0000000000000000000000000000000000000000..44aa6a4f14ab55588d181875a0ab3f21c2c01fed GIT binary patch literal 20881 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 Date: Fri, 14 Jan 2022 17:29:07 +0100 Subject: [PATCH 3/6] Added 2FA OTP support Added support for 2FA OTP token managment and use if refresh token --- .../TSS/SSConnectionForm.Designer.cs | 62 +- ExternalConnectors/TSS/SSConnectionForm.resx | 555 ++++++++++++++++++ .../TSS/SecretServerAuthentication.cs | 27 +- .../TSS/SecretServerInterface.cs | 95 ++- ExternalConnectors/TSS/TSS.ico | Bin 0 -> 32988 bytes .../Installer/Fragments/FilesFragment.wxs | 6 +- 6 files changed, 698 insertions(+), 47 deletions(-) create mode 100644 ExternalConnectors/TSS/TSS.ico diff --git a/ExternalConnectors/TSS/SSConnectionForm.Designer.cs b/ExternalConnectors/TSS/SSConnectionForm.Designer.cs index e4ab4eb7..3297034b 100644 --- a/ExternalConnectors/TSS/SSConnectionForm.Designer.cs +++ b/ExternalConnectors/TSS/SSConnectionForm.Designer.cs @@ -28,6 +28,7 @@ /// private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SSConnectionForm)); this.tbSSURL = new System.Windows.Forms.TextBox(); this.tbUsername = new System.Windows.Forms.TextBox(); this.label3 = new System.Windows.Forms.Label(); @@ -39,6 +40,8 @@ this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.cbUseSSO = new System.Windows.Forms.CheckBox(); + this.label6 = new System.Windows.Forms.Label(); + this.tbOTP = new System.Windows.Forms.TextBox(); this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); this.label4 = new System.Windows.Forms.Label(); this.tableLayoutPanel1.SuspendLayout(); @@ -70,7 +73,7 @@ this.label3.Location = new System.Drawing.Point(4, 62); this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(248, 23); + this.label3.Size = new System.Drawing.Size(248, 31); this.label3.TabIndex = 5; this.label3.Text = "Password"; this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -93,7 +96,7 @@ this.btnOK.Margin = new System.Windows.Forms.Padding(4); this.btnOK.Name = "btnOK"; this.btnOK.Size = new System.Drawing.Size(88, 26); - this.btnOK.TabIndex = 10; + this.btnOK.TabIndex = 6; this.btnOK.Text = "OK"; this.btnOK.UseVisualStyleBackColor = true; // @@ -114,37 +117,37 @@ this.tableLayoutPanel1.ColumnCount = 2; this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 32.06997F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67.93003F)); - this.tableLayoutPanel1.Controls.Add(this.label5, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.label5, 1, 4); this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); this.tableLayoutPanel1.Controls.Add(this.label2, 0, 1); this.tableLayoutPanel1.Controls.Add(this.label3, 0, 2); this.tableLayoutPanel1.Controls.Add(this.tbSSURL, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.cbUseSSO, 0, 4); this.tableLayoutPanel1.Controls.Add(this.tbUsername, 1, 1); this.tableLayoutPanel1.Controls.Add(this.tbPassword, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.cbUseSSO, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.label6, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.tbOTP, 1, 3); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(800, 108); + this.tableLayoutPanel1.RowCount = 5; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(800, 159); this.tableLayoutPanel1.TabIndex = 12; // // label5 // this.label5.AutoSize = true; this.label5.Dock = System.Windows.Forms.DockStyle.Fill; - this.label5.Location = new System.Drawing.Point(260, 85); + this.label5.Location = new System.Drawing.Point(260, 124); this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(536, 23); + this.label5.Size = new System.Drawing.Size(536, 35); this.label5.TabIndex = 15; this.label5.Text = "For SSO to work, additional IIS configuration is required!"; this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -176,7 +179,7 @@ // cbUseSSO // this.cbUseSSO.AutoSize = true; - this.cbUseSSO.Location = new System.Drawing.Point(4, 89); + this.cbUseSSO.Location = new System.Drawing.Point(4, 128); this.cbUseSSO.Margin = new System.Windows.Forms.Padding(4, 4, 4, 0); this.cbUseSSO.Name = "cbUseSSO"; this.cbUseSSO.Size = new System.Drawing.Size(69, 19); @@ -185,6 +188,24 @@ this.cbUseSSO.UseVisualStyleBackColor = true; this.cbUseSSO.CheckedChanged += new System.EventHandler(this.cbUseSSO_CheckedChanged); // + // label6 + // + this.label6.AutoSize = true; + this.label6.Dock = System.Windows.Forms.DockStyle.Fill; + this.label6.Location = new System.Drawing.Point(3, 93); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(250, 31); + this.label6.TabIndex = 15; + this.label6.Text = "2FA OTP (Optional)"; + // + // tbOTP + // + this.tbOTP.Dock = System.Windows.Forms.DockStyle.Fill; + this.tbOTP.Location = new System.Drawing.Point(259, 96); + this.tbOTP.Name = "tbOTP"; + this.tbOTP.Size = new System.Drawing.Size(538, 23); + this.tbOTP.TabIndex = 5; + // // tableLayoutPanel2 // this.tableLayoutPanel2.ColumnCount = 5; @@ -196,7 +217,7 @@ this.tableLayoutPanel2.Controls.Add(this.btnOK, 1, 0); this.tableLayoutPanel2.Controls.Add(this.btnCancel, 3, 0); this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 148); + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 225); this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(4); this.tableLayoutPanel2.Name = "tableLayoutPanel2"; this.tableLayoutPanel2.RowCount = 1; @@ -208,7 +229,7 @@ // this.label4.AutoSize = true; this.label4.Dock = System.Windows.Forms.DockStyle.Fill; - this.label4.Location = new System.Drawing.Point(0, 108); + this.label4.Location = new System.Drawing.Point(0, 159); this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(341, 15); @@ -221,10 +242,11 @@ this.AcceptButton = this.btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 198); + this.ClientSize = new System.Drawing.Size(800, 275); this.Controls.Add(this.label4); this.Controls.Add(this.tableLayoutPanel2); this.Controls.Add(this.tableLayoutPanel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Margin = new System.Windows.Forms.Padding(4); this.Name = "SSConnectionForm"; this.Text = "Secret Server API Login Data"; @@ -252,5 +274,7 @@ public System.Windows.Forms.CheckBox cbUseSSO; private System.Windows.Forms.Label label4; private Label label5; + private Label label6; + public TextBox tbOTP; } } \ No newline at end of file diff --git a/ExternalConnectors/TSS/SSConnectionForm.resx b/ExternalConnectors/TSS/SSConnectionForm.resx index f298a7be..8e9a84b9 100644 --- a/ExternalConnectors/TSS/SSConnectionForm.resx +++ b/ExternalConnectors/TSS/SSConnectionForm.resx @@ -57,4 +57,559 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAABAAQAQEAAAAEAIAAoQAAARgAAACAgAAABACAAKBAAAG5AAAAYGAAAAQAgACgJAACWUAAAEBAAAAEA + IAAoBAAAvlkAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f3e/f397vz9 + /e79/f3u7ezr7p6Xju5XTEHuNScV7i8hCe4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isf + CO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isf + CO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isf + CO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHAjuKx8I7jYoFu5XTUHumJGO7u3r6+79/f3u/f397v39 + /e79/f3e/f399P//////////u7Wy/0M1KP8jEwD/KRgA/ywdBv8tHwj/LiAJ/y4gCf8uIAn/LiAJ/y4g + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4g + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4g + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8sHAT/KRcA/yAR + AP9DNSX/ubOt/////////////f399Pv8/e7/////m5aK/xoMAP8lFAD/LSAI/y0gCv8uIAr/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cv8uIAr/LB4J/ysfCf8uIQj/JBYA/xoLAP+elYz///////z9/O79/f3uvLWw/xsNAP8rHAX/LiAK/y0f + Cf8tHwj/LR8I/y0fCf8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCf8tHwn/LR8J/y4gCv8pGgP/GgsA/7y3sP/9/f3u6unp7kM0 + I/8nFwH/LiEL/yweCP8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAr/LR8J/yIU + AP9DNSL/6+nq7pqUju4fEQD/LiAI/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8uIAf/HxAA/5qTju5YTT7uJRYA/ywgCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/Kx8I/ygXAP9YTkDuOCkV7iweBv8sHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8sHQX/NykW7ioc + CO4uIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8uIAn/Lh8I/yocCO4qHAjuLyEK/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8K/y4gCf8rHAjuKx8I7i4gCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8J/y0fCP8tHwn/LR8J/y0f + CP8tHwn/LR8J/y0fCP8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + CP8tHwj/LR8J/y0fCf8tHwj/LR8J/y0fCf8tHwn/LR8J/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8uIAj/Kx8I7isfCO4uIAn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8I/y8fCP8uHwj/LR8G/yweCP8uHgn/LR4H/yweB/8rHgf/Kx4H/yweCP8sHgj/Kx4I/yse + CP8sHgj/LB4I/yweCP8sHgn/LB4J/yoeCP8qHgj/LB4I/y4fCP8sIQj/LB8H/y0eCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAJ/ysf + CO4rHwjuLiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tIAn/LiAK/y0WAf8sFgH/LRsG/ywbBv8uGwX/MR0B/y8cAv8uGwX/LRkG/ysZ + Bf8qGQX/KhkF/ygaBP8oGgX/JxoF/ycaBf8pGgX/KRkG/ykZBv8nGQT/JxkF/ygZCv8jFAb/IBUG/ywe + Cf8tHwf/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y4gCf8rHwjuKx8I7i4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/Lh0I/y0XA/84Qyf/P31P/0aSXP9KkVv/UpJT/2OV + Sv93mUf/jJ9A/6CjPP+vpjv/rac4/6ilN/+ppDn/qaQ4/62jOP+uozj/sKI2/7KiNv+yojX/s6Az/7Wi + NP+0oDP/mIUs/1pIFv8lFQb/Kh4I/y4gCf8sHgn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/Kx8I7isfCO4uIAn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR4I/ygWA/83b0X/SsOE/0zC + f/9QvHf/Ubp0/1e4b/9YtGz/WrJl/2KwZP96tWD/lL9X/7fNUf/b2E//3NhP/9nWTP/X00v/29NL/9vS + Sv/d0Ur/39FJ/9/RSP/j0Ej/5tBD/+3VRP/r0EX/jHYl/yMUBv8sHwb/LB4I/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAJ/ysfCO4rHwjuLiAJ/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/ysV + AP8zWTb/ScmH/0e8ef9Ltnb/TrRx/1Cyb/9VsGr/Wa1m/1mrYf9dqV3/XqRc/1yfWf9ooVL/g6tQ/7XD + Tf/R0Ur/ys1H/87LR//Oykb/0MlG/9PKRf/Uy0X/18pF/9jJQf/byEH/4MtD/+7VRv9rWxz/HxMC/y8h + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4g + Cf8rHwjuKx8I7i4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/Kx8I/y0cBv8vHQj/QKFs/0fEgP9IuHX/TLZ0/0+0cP9UsW3/Vq9o/1isZP9cqWD/X6hc/2Ok + Wf9loVX/aKBT/2iZUP9um0j/obZJ/87RTP/SzUz/yspI/8zLSP/Qykj/0stH/9XJR//VyUT/2clE/9fH + RP/izkn/vao2/ywdBv8rHAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8uIAn/Kx8I7isfCO4uIAj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tGwX/MCoV/0azfP9Fvnv/Sbh2/0y2c/9PtG//VbFs/1av + Z/9YrGT/XKlg/2KnXP9kpVr/ZaJX/2mhU/9unkz/bZtK/2qVR/+asUj/zdJM/8nOSf/JzUv/zcxJ/8/L + R//Rykf/0cpE/9XKRP/WykX/3c5G/9DBQv86Kw//KRoH/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LiAI/ysfCO4rHwjuLiAJ/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwr/LRoE/ywsGP9Dt3//R7x6/0q3 + dv9OtHL/ULNu/1Wwa/9Xrmb/Watj/12pXv9hplv/ZaRY/2eiVP9qoFH/bp5M/3OcSf9ymUb/b5BC/6m5 + SP/L0k7/yM5M/8vNS//LzEn/z8xJ/87LR//Rykf/08tH/9nNSP/RxkT/PS8R/ygZBv8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8rHwjuKx8I7i4g + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LB8K/y4a + A/8uLRj/RLZ9/0e8ev9LtnX/ULNy/1Gybf9VsGr/Wa5l/1mrYv9dqVz/YKZa/2WkVv9oolL/aqBQ/2+e + S/9zm0n/dJpE/3SUQ/+Dmj7/wMxM/8fPTP/IzUz/yc5L/8zNS//LzEr/z8tK/8/LSP/UzUj/0MZG/z0u + EP8oGgX/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8uIAj/Kx8I7isfCO4uIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/ywfCv8uGgP/Li0Y/0W2fP9Iu3n/TLZ0/1Czcf9Rsm3/VbBq/1muZf9aq2L/Xqlc/2Gm + Wv9lpFb/aKJS/2ugUP9wnkv/c5tI/3WaQ/95l0H/do07/6m6Rf/F007/xM5N/8XOTP/IzUz/yM5L/8zN + S//MzEn/0c9J/83HR/89LhD/KBoG/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LiAJ/ysfCO4rHwjuLiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwr/LRsE/zAsGP9HtHr/S7p3/061cv9Qs2//U7Fr/1Wv + af9arGP/XKlh/2GnW/9lpFn/ZaNV/2igUf9unk7/cpxK/3WbRv91mEH/e5Y//3mPOP+YrEH/wtVT/7/O + Uf/CzlD/xc1Q/8TOTP/IzUz/yc5L/87QTP/HyEn/PS8P/ykZBv8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8rHwjuKx8I7i4gCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8K/y0bBP8wLBj/R7R6/0u6 + d/9OtXL/ULNv/1Oxa/9Vr2n/Wqxj/1ypYf9hp1v/ZaRZ/2WjVf9ooFH/bp5O/3KcSv91m0b/dZhB/3yW + P/97kDj/j6I9/7/VV/+90VH/wNBR/8PPUf/Bz0z/xM5M/8XOS//K0Uz/xclJ/z0vD/8pGQb/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/Kx8I7isf + CO4uIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tGwT/MCwa/0qzef9MuXb/TrRx/1Kybv9Tr2n/V61k/12qYP9fqF3/YKZZ/2SkVv9qoVL/bKBP/26d + TP9ym0b/dJpE/3iWQf98lD7/fY43/42gPf+111v/t9RU/7nSU/+/z1L/vtBQ/8HPUP/Cz03/xtFN/8HJ + TP88MA//KhsF/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LiAJ/ysfCO4rHwjuLiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LRsE/zAsGv9Ks3n/TLl2/060cf9Ssm7/U69p/1etZP9dqmD/X6hd/2Cm + Wf9kpFb/aqFS/2ygT/9unUz/cptG/3SaRP94lkH/fJQ+/36NNv+LpkP/qNxh/6zYWv+v1Ff/ttFV/7zS + Uf/A0VL/wNFP/8TUT//Ayk3/PDAP/yobBP8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8rHwjuKx8I7i4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4cA/8wLBn/SrN2/024dP9Ps3D/VLFs/1eu + Z/9Zq2T/XKlf/2KnXf9jpVj/ZaNV/2qgUf9unk7/cJ1K/3KbRf92mUP/e5U+/3mUPP9/jDP/ibRM/5zi + aP+g2mD/pdhe/6zVW/+01Ff/utNU/7vSUv/D1VH/vctN/zswEf8pGgb/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/Kx8I7isfCO4uIAj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8uHQL/MCwY/0qz + df9NuHP/T7Nv/1Wwa/9arWb/Wqtj/1qpX/9jplz/ZKRY/2WiVf9qoFH/b55N/3CdSf9ym0T/d5hC/3yW + Pf98kjn/g441/4nRZP+N4mv/ld5n/5rcZf+g22D/p9hd/63XWf+y1Fb/utZU/7jMTv86MBH/KBoG/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LiAI/ysf + CO4rHwjuLiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/Lh0D/zAsF/9LsnT/Trdz/1Gybv9WsGr/WK1l/1uqYv9dqV3/YqZb/2WkVv9nolT/aqBQ/2+e + TP9ynEn/c5pD/3aXQf97lT3/gokz/3uvT/986nr/g+Rw/4nibf+O32v/lN5n/5rcY/+h22D/ptdd/6/Y + Wv+xzlX/Oi8R/ygZBv8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y4gCf8rHwjuKx8I7i4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4cBf8wLRb/TbFz/1C2cv9TsWz/V7Bo/1etZP9cqmH/Yahb/2Gl + Wv9mo1T/aKFS/2ugTv9wnUr/dJpI/3WZQ/98kz3/gYo3/3WsUP9s7ID/but8/3fneP995XT/geJy/4fh + bf+O32r/lN5m/5rbZP+j3GL/pdJd/zkvEv8pFwX/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/Kx8I7isfCO4uIAn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHAX/MC0W/02xc/9QtnL/U7Fs/1ev + aP9YrWT/XKpg/1+oW/9hpVr/ZqNV/2mhUv9sn03/cJxJ/3WVRP95kT3/eJZA/2TAYf9Y8Yj/XPOI/2fs + gv9r637/cel7/3bneP995XT/g+Nw/4nibP+P32r/l+Bo/5jXYf85MBL/KhgG/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAJ/ysfCO4rHwjuLiAJ/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/KhsE/zAs + FP9NsXH/UbVv/1awav9arWf/Wqxi/12oXv9jo1v/Y6FU/2mcUP9tm0r/bptI/2+cSv9rp1P/YMNo/1Do + hf9G/ZX/SfaO/1PyjP9b8Ir/X+6F/2btgv9s637/cul6/3fmeP995XT/g+Nw/4vlbv+O22n/NjAU/yca + BP8uHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4g + Cf8rHwjuKx8I7i4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/yobBP8wLBT/TbJy/1G1b/9WsGr/Wq1n/1uoX/9dp13/YKlf/2CvXv9gt2X/XcBq/1XQ + dv9P4YP/SPCO/0T3lP9J85L/R/SR/0n1kf9L9ZD/TfSP/1Tzi/9b8Yj/Yu+E/2ftgP9r637/cel6/3jn + dv+A6XT/geBs/zgxFf8pGwX/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8uIAn/Kx8I7isfCO4uIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y8fCf8rHAL/LisU/02ucv9Vs23/VLBp/1ipYP9XuGr/TtOA/0fg + if9H5Ir/RuqO/0Xukf9G7pL/Ru2Q/0Ttjf9J7I7/R+6N/0nwj/9L8ZD/S/KR/0nzkP9I85D/TPSN/1X0 + if9d8If/Ye6D/2fsf/9s6nz/cux7/3Xic/81MRb/KxkE/ywfCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAJ/ysfCO4rHwjuLiAJ/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8sHwn/Lh0D/y4gCP9PnWP/Vbdx/1eq + ZP9TwXP/RuSM/0fmjv9F4ov/Q+SJ/0bliv9F5or/RuaM/0bojP9G6or/R+uM/0jtjP9J7o3/SO+O/0nw + j/9I8o//RvKP/0f0j/9K947/S/WN/1Tyif9b8YT/YO6D/2n2hP9kz27/KyEM/y4dBv8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8rHwjuKx8I7i4g + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LB8J/y4e + B/8sFgH/PGU2/1i9dP9Utm3/RN6J/0Leif9J3on/SN+K/0Xgif9H4ov/R+KL/0fjjP9I5Yz/R+eL/0jo + jP9I6o3/SeuO/0jsjf9J7Y7/SO+O/0jwjv9J8Y//S/OQ/0r0kf9M9ZD/T/SO/1Pziv9h/5X/SIJE/yoP + Af8sHwf/LR8K/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8uIAn/Kx8I7isfCO4uIAj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwn/LBwH/ywdCf9IfEf/Tsx8/0Ddif9F14X/RduH/0bdiP9E3on/Rd+K/0fl + jf9I6JD/SOqQ/0jsj/9J7ZD/SO6R/0nvkv9H8JD/SPKR/0n0kf9K84//SPCP/0fxkP9J8pH/SvWS/0r3 + lP9M/pn/RKxh/y0YBv8sHAf/LR8J/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LiAI/ysfCO4rHwjuLiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8sGgX/KhUE/0GsbP9E4Y7/QteG/0TZ + h/9F2oj/RdyI/0Teiv9Ez3//RMp7/0XNe/9Eznr/RM97/0TQff9F0H3/Q9J7/0PTfP9E0n3/SNyC/0zq + iv9M6Yr/TeqL/0zsiv9P8Iz/S7Vp/ywWB/8sGgT/LiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8rHwjuKx8I7i4gCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8sHwn/Lh8G/ywR + BP87m2b/ReCR/0PUiP9E1oj/RtiJ/0bZh/9D5o//Nlk1/ywZB/8vJg3/LyYM/y8mDP8vJQ3/LyUN/ywm + DP8sJgz/KhgH/z9sO/9c2Hr/Vslx/1fJcf9YyXL/XdF3/0yRUv8pEwT/LyEJ/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/Kx8I7isf + CO4uIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LB8J/y0eBv8sEwX/PJ1n/0Tej/9D0of/Q9SG/0TWiP9F2Ib/QuWO/zVPLv8sDgD/MBsI/y8b + B/8vGwb/LhsE/y4bBP8sGgb/KxoG/ywKAP87Zjr/U+CD/1HQe/9R0Hv/UtB7/1Pcg/9En17/KxMD/y4g + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LiAJ/ysfCO4rHwjuLiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4fCf8sHwj/LhUD/0CbZP9F2o7/RM+H/0TQhv9F0of/Q9WG/0bk + kf8yVzL/KxEA/y4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tDgD/O3ZF/0zslP9I2ob/SdqG/0na + hv9L5o7/QaNm/ywVAv8uHgf/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8rHwjuKx8I7i4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8sHwj/LiAJ/ywUAf89jlf/Q9qO/0LN + hf9Dz4T/RNCG/0LRg/9H4I//O4dQ/yoOAP8tIAj/LR8J/y0fCf8tHwn/LR8J/y0fCP8tHgj/LBMC/z+n + ZP9H6pH/RN+K/0Tfiv9E34r/RuyT/z2bXv8uEwH/LR8H/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/Kx8I7isfCO4uIAn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LB8J/y0f + Cf8rDwD/NXNF/0PZjP9DyYX/RcuF/0XNhv9EzYT/RdSJ/0TFfv8uKRH/LBYC/ywfCP8tHwn/LR8J/ywf + Cf8sHwj/KBAA/zZAIf9H34n/R+GL/0Xdif9F3Yn/Rd2I/0nvlv86gU3/Kg4A/y0eCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAJ/ysf + CO4rHwjuLiAI/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCf8rHwj/LRMB/zZRLv9H0ov/QsmE/0LKhP9Ey4X/Q8uE/0XMhP9H3I7/Pppj/ysa + Bv8sEQD/Lh0I/y0fB/8tGgX/Kg4A/y0lD/9AuXH/R+qQ/0Lci/9D34n/Rd6J/0PdiP9C65H/M1wx/y8U + Av8uIAf/LR8J/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y4gCP8rHwjuKx8I7i4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LB4I/y4bBv8uJQ//QLV4/0LNh/9Bx4P/Q8iE/0PJ + g/9Ey4P/RMuG/0Xajv9EpGn/MEoo/ysfC/8uFgr/LiUN/zNULf8+vHf/SOWQ/0TYh/9F3Ij/Rt6J/0fe + i/9E44z/Rc9//y0qDv8vGQX/LSAH/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/Kx8I7isfCO4uIAj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCf8tHwn/KxEA/zt2 + Sv9F047/QcOC/0PFg/9Cx4L/RMmD/0PKgv9EzIP/RdaL/0fUif8/t3P/Pqpv/0C+dv9H3I//Rt6O/0HW + hv9E1oj/RdiI/0Tah/9G3In/R+6U/zuET/8sDwD/LR8J/y0fCf8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LiAI/ysfCO4rHwjuLiAJ/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0aBP8wKhH/QLV4/0HKhv9BxIP/QsWB/0LHgv9CyIL/QsmD/0XKg/9FzoT/Q9KH/0LY + iP9G14r/Q9CH/0XRhf9F0oX/RNSI/0LXiP9C14X/ReGM/0XOgv8uKxT/KxgF/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4g + Cf8rHwjuKx8I7i4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwf/LRYA/zRTL/9Dy4v/QcWG/0HCgf9CxIL/QsSC/0PE + g/9CxoP/Q8iC/0TKhP9Dy4T/RsyF/0PNhf9Cz4b/RNCH/0XSiP9H0oj/QtiJ/0jikP8yWjX/KxAA/ywg + B/8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8uIAn/Kx8I7isfCO4uIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LSAH/y8gBv8vEgD/OWlC/0PL + if8+xYP/P8KA/0DCgf9Bw4L/QsaC/0LHgf9DyIL/QsqC/0PLg/9CzIT/Q82F/0TOhf9Fz4X/RdaK/0fg + lf85dkf/KhEA/yseB/8uHwj/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAJ/ysfCO4rHwjuLiAJ/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8vHwn/Kh4I/y8WAP82Yzj/P7+C/0LLiP9CwoL/QMGC/0HFhP9BxIH/Q8WD/0PGhP9Ex4X/RMmE/0bK + hf9DzYT/QtyN/0nTiP86aj3/LRIA/y4eCP8sIAr/Lh8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8rHwjuKx8I7i4g + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8rIAj/KhQA/zU/IP9Bl2X/RseI/0LLiv8/x4b/QMaD/0DF + g/9CxoT/Q8mG/0LOh/9G1o3/RtSK/0WjaP8yQiD/LBEA/y8eCP8sIAn/LR8I/y0fCP8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8uIAn/Kx8I7isfCO4uIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8sHwn/LR4I/y4gCv8sFQD/KxoE/zRJ + Kf9Cg1P/Q6tv/0O6ev9EwoL/QsOC/0a+fv9FsHD/QoZS/zZJJ/8sGgT/KxMB/y4fCf8wIAj/Lh8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LiAJ/ysfCO4rHwjuLiAI/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8J/y0f + Cf8tHwj/LR8J/y0dCP8rEwL/LBQA/zEjCf8yLxP/Njce/zQ3H/8yMBT/MiMJ/y8UAP8rEgD/LB0H/y4g + Cf8tHwn/LB8J/y0fCf8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y4gCP8rHwjuKx8I7i4gCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAI/yseB/8rHQj/LBoF/ysXAv8sGAP/KxsF/ygb + Bv8wHgf/LR8J/y4fCv8uIAr/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/Kx8I7isf + CO4uIAj/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8I/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LB8J/y0fCf8tHwj/LR8I/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LiAJ/ysfCO4rHwjuLyEJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8rHwjuLh8J7i8hCP8tIAj/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwj/LyEJ7jgqFu4sHgX/LR8H/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/LB4G/zUn + FO5YTT7uJhUA/y4gCv8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LSAL/yoZAP9XTD7um5SO7iMRAP8vIAn/LR8J/y0fCf8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwn/LR8I/ywfBv8iEgD/npeO7urq6e5ENSX/JBQA/y0hCP8tIAf/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/Kx0H/y4gCv8lFQD/QzYm/+vr6e79/f3uvLax/xoM + AP8pGwL/LiEI/y0fCf8tHwj/LR8J/y0fCf8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0f + CP8tHwj/LR8I/y0fCP8tHwj/LR8I/y0fCP8tHwj/LR8J/y0fCf8tHwn/LR8J/y4gCf8rHQX/Gw0A/723 + tP/9/f3u+vv87v////+ak4n/GQsA/yQUAP8uHwn/LR8J/y0fCP8uIAn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0eCf8sHgj/LB8J/y4g + B/8mFwD/Gw0A/5qViv//////+/z87v39/fT//////////7q1sP9DNCb/IxEA/ycWAP8rHgX/LiAH/y8h + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4g + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4g + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/zAh + Cv8uHwj/LB0G/yQWAP8fEQD/QzQm/7q0r/////////////39/fT9/f3e/f397vz9/e79/f3u6+rp7puU + ju5YTj/uOCkW7i4fCu4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isf + CO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isf + CO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isfCO4rHwjuKx8I7isf + CO4rHwjuKx8I7isfCO4rHwjuKyAI7jcpFu5YTj7umpOO7uvr6u79/f3u/Pz97v39/e79/f3eKAAAACAA + AABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/dzt6+vtdGte7TQmFu0rHQjtLR8I7S0f + CO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0f + CO0tHwjtLR8I7S0fCO0tHwjtLR8I7SsdBu00Jhbtc2le7e3r6e39/f3c6ubl81ZKOP8dDgD/LB4G/y4g + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4g + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LyAK/ywdBf8dDgD/VUk4/+rn5vN0a13tHg4A/y4g + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8dDQD/dWtd7TQm + Eu0rHQb/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/ywd + Bf80JhLtKx0G7S8gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LiAJ/ysdBu0tHwjtLiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwj/LBcC/ysT + AP8pFAH/JhMC/yISA/8hEQP/IBID/yASA/8gEgT/HxIE/x8RBP8jFgb/LB4I/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8uIAn/LR8I7S0fCO0uIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR4I/ywY + BP81QiP/Olw1/0RbLP9WXSb/bGMj/3RnIP9vZCD/bmIg/3FiIP9yYh7/dWMf/1ZFFv8lFwb/LB4I/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8rFgL/N2c//0vDgf9SwHr/W7pv/2a2Zf9+t13/p8RT/9bYT//g20z/3tZL/+LWSv/p10f/69RF/39r + Iv8iFQT/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAJ/y0fCO0tHwjtLiAJ/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LBwG/y4lD/9Esnb/Sr55/1Kybv9XrWf/Xahe/1+iWP9imlH/faJJ/8DHSv/Pz0r/z8tI/9PK + Rf/f0Uf/z75A/zQmC/8pGwj/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/LR8I7S0fCO0uIAn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8sGgX/Ly0W/0S0ef9NuHb/U7Fs/1itZP9ep1z/ZqNW/2yfTv9slUb/hqFE/8fP + TP/Lzkv/zcxJ/9TOSf/Ow0T/PS4P/ygaB/8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4g + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/ywbBf8wLBX/RrF1/0+4dP9UsGv/Wqxj/2CmWv9molT/b55N/3WZ + RP93kTz/r8BI/8fST//Hzkz/zdFM/8bERv87LQ7/KRoH/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAJ/y0f + CO0tHwjtLiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LBsF/zAsFf9Jr3T/ULdz/1WvaP9dqmD/YqVZ/2mg + Uv9wnEv/dplD/3mOOf+iuEn/wNZV/8HPT//H0k7/v8ZJ/zstDv8pGgf/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8uIAn/LR8I7S0fCO0uIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8sGwX/MCwV/0mvc/9RtnH/Vq1m/16p + Xv9jpFf/bKBQ/3CcSP93mEH/fIw2/5bCU/+q3F//tdNW/8HWUv+7yEv/Oi4O/ykaB/8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/ywbBf8wLRT/S65w/1O1 + bv9ZrGT/YKdc/2ajVv9sn0//cpxG/3uPOf+AmT7/hd5t/5Hhav+e22L/rdtc/6/KUf85LQ//KRoH/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LiAJ/y0fCO0tHwjtLiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LBsG/zAs + E/9NrW7/VrRt/1qrYf9ipFj/aZ5R/3GXR/94kj//dKFI/2bddv9t74H/eeZ2/4Xib/+U4mr/mdFe/zgt + EP8qGQb/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/LR8I7S0fCO0uIAn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8sGwb/LiwU/06ubf9ZsGn/Xahf/2CqXv9jr13/YLtj/1jRdP9K8o7/SvqT/1byi/9j7oP/b+p8/3zq + d/+D22r/NjAS/yoaBv8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/ywcBv8vJw7/Ualp/1e3bP9N0n//R+GJ/0bojf9E75H/RPKR/0jwj/9J8ZD/R/OR/0z1 + jv9W8on/ZfWF/2vhd/8yKg//KxoG/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAJ/y0fCO0tHwjtLiAJ/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8I/ysXAv9CaTr/TNSC/0PijP9F34n/RueP/0n0lv9J95b/SvqY/0n9 + mP9J+5b/R/OR/0j4lP9Q/pb/RI5N/ysTAv8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/LR8I7S0f + CO0uIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LRwG/ywbB/9Aunf/RN6M/0bijf9At3D/OXJC/zp7 + Rf86fEb/NnhD/z+SUv9S3H//U+KD/068bf8sGgj/LRsH/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4g + Cf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHQf/LRwI/0CydP9E2oz/RuWR/zqO + Vv8qAAD/LA8A/ywOAP8pAgD/Mzkb/0/bhP9Q24T/SLRs/y0dCP8tHQf/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LiAJ/y0fCO0tHwjtLiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0eCP8tGQT/PqZp/0TW + jP9F1or/Qbh0/ywbBv8sFQL/LBwG/ykGAP86eEX/Ru6U/0Xpkf9At3H/LRkE/y0eB/8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8uIAn/LR8I7S0fCO0uIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/ysR + AP86fk//RNeP/0TJg/9G14z/PI1Y/y4pEP8tHQn/M1ky/0TWhv9F4Yz/R/CV/zqOU/8sEAD/LR8I/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LBcD/zE5HP9CxoX/QsqF/0PIgv9F1ov/QsR+/0C7d/9F2oz/RNmK/0Xdiv9G34z/MT0d/ywW + A/8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAJ/y0fCO0tHwjtLiAJ/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LBQA/zdmPf9C0Iz/QcmG/0LFgv9DzIX/RNGI/0POhv9F14v/R+WU/zdv + Qv8qEQD/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8uIAn/LR8I7S0fCO0uIAn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHgj/LBUB/zVeNv9Ct3v/Q8+M/0LRjP9E1I7/RteO/0TE + fv84ZDr/LRQB/y0eCP8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4g + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHgj/LBMA/y8qEf84Xjb/O3lM/zt6 + Tf86YDf/MCoR/ysSAP8tHgj/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LiAJ/y0f + CO0tHwjtLiAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LBoF/ysT + AP8sEQD/KxEA/ysSAP8sGgX/LSAJ/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8uIAn/LR8I7SweBu0vIAn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y4gCf8rHQbtNCYT7SwdBv8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LB4G/zQmEu11a17tHQ4A/y4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0gCf8dDgD/dmxe7ern5vNVSTf/Hg4A/ywdBv8uIAn/LiAJ/y4g + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4g + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8rHQX/Hg4A/1ZKOP/q5+fz/f393Ozr6e10aV7tNSYU7Swe + CO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0f + CO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0tHwjtLB4I7TQmFO1zaV7t7evp7f39/dwoAAAAGAAAADAA + AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f393JSPhO00JhbtKx0G7S0fCO0tHwjtLR8I7S0f + CO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0rHQbtMyUW7ZSO + g+39/f3ckouC8yESAP8qHAT/LyAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4g + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8vIAn/KhwE/yERAP+Si4LzMyUR7SocBP8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/yocBP8zJRLtKx0F7S4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0eCP8sGgX/KxoG/yka + B/8oGgf/KBoH/ygaB/8nGgf/KBoH/yweCP8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8rHQXtLR8I7S4g + Cf8tHwn/LR8J/y0fCf8tHwn/LRwH/y0aBf8wLRP/Ni8Q/0ExDv9FMw3/PjAN/z4vDv8/MA3/PS4N/ycZ + B/8qHAj/LR8J/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8tHQf/LB8K/z6E + VP9NsnL/Wapi/3GoVv+bskv/x8VG/87FRP/PwkL/2cZB/6GMLf8tHwj/Kx0I/y0fCf8tHwn/LR8J/y4g + Cf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8sFgH/MkYn/0nIhP9Rt3L/WK9m/16nXf9jnlP/iKlK/8nO + S//T0Er/2M9H/+jYSv9XSRf/IxUF/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0f + Cf8sFQH/M0os/0vBfv9Tsm3/Wqxi/2OlWP9sn07/bJJD/5uuRP/M0k3/y81L/9nWTP9cTxv/IhQF/y0f + Cf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8rFQH/NEkq/02+e/9UsGr/Xalg/2Wj + Vv9unkz/dJRB/4ufPv+/01P/xM9O/8/XT/9YThr/IxQE/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4g + Cf8tHwn/LR8J/y0fCf8rFgH/NUkp/068ef9Xrmf/X6dc/2iiVP9wnUn/eI86/4ilRP+k3mL/tNVX/8ba + U/9WTxv/JBQE/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8rFgH/Nkgo/1K7 + dv9ZrWT/YqRZ/2ycTf93kj//epU+/3bVa/+D53T/lN5n/63hYv9RTx//JRMD/y0fCf8tHwn/LR8J/y4g + Cf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8qFQL/NUop/1a6c/9cqWH/Yatd/2SwW/9gv2b/UeeE/1L4 + kP9k7oL/dOh5/4vvdf9JViX/JxIC/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0f + Cf8rFwP/NT4e/1a5cP9N0H3/R+GI/0fwkv9F+5n/SPuY/0j7lv9J95H/VfaM/2f6iP88SyH/KhQC/y0f + Cf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8tHgj/LBUC/z6ETv9E6JL/Rd+L/0LG + ef9DwHP/QsR1/0LHdP9L4oX/T/aS/0KaV/8rFgT/LR4I/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4g + Cf8tHwn/LR8J/y0fCf8tHwn/Kw8A/zVgOv9F4pL/Rd+N/zJGJP8tEAD/LRoF/ywaBv9Lum3/VOeL/zle + M/8qDwD/LR8J/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8tHwn/KxMA/zVX + Mf9F2I7/RtuO/zl3R/8qBQD/KQQA/zJDIv9F4Iv/RvCW/zVfNf8rEQD/LR8J/y0fCf8tHwn/LR8J/y4g + Cf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8tHwn/LBoF/zAtE/9Cv3//RNCJ/0TNhf86g1D/N29C/0LF + fP9G6JH/RNeF/y8wFP8sGQT/LR8J/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/ywTAP82Yzv/QtKN/0PPif9F2I3/Rd2Q/0XekP9H5ZP/N2w//ysRAP8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0eCP8sFQH/NVs1/0Cu + dP9CxoT/RMqG/0O3dv83YTj/LBQB/y0eCP8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8tHwjtLR8I7S4g + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHgj/LBMA/y4iC/8zPB7/Mj0e/y8hCv8rEgD/LR4I/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4gCf8tHwjtKx0F7S4gCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/ywcB/8sFwP/LBcD/ywcB/8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y4g + Cf8rHQbtNCUS7SocBP8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0f + Cf8tHwn/LR8J/y0fCf8tHwn/LR8J/y0fCf8tHwn/LR8J/yocBP80JhLtkouD8yERAP8qHAT/LyAJ/y4g + Cf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4gCf8uIAn/LiAJ/y4g + Cf8vIAn/KhwE/yERAP+VjITz/f393JSOhO00JhbtKx0G7S0fCO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0f + CO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0rHQbtMyUW7ZSOg+39/f3cKAAAABAA + AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL65stw/MR/tKBkF7S0fCO0tHwjtLR8I7S0f + CO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0oGQXtPzEf7b65stw8MR3zJxgA/y8gCf8uIAn/LiAJ/y4g + Cf8uHwn/Lh8J/y4fCf8uHwn/LiAJ/y4gCf8uIAn/LyAJ/ycYAP88MR3zKBoE7S8gCf8tHwn/LSAJ/ywa + Bf8rFAH/LBcD/ysXBP8kFQT/IxUF/yATBP8oGgf/LiAJ/y0fCf8vIQn/KBkE7S0fCO0uIAn/LR8J/ywa + Bf8wMxj/QYNR/1OFSP94iTr/npg0/6aYM/+hji7/RDQP/ycaB/8tHwn/LiAJ/y0fCO0tHwjtLiAJ/y0f + Cf8rEQD/OW9F/1LNhP9dtGj/aahY/5u2TP/Z2U3/7+ZP/4V2KP8eEAT/LR8J/y4gCf8tHwjtLR8I7S4g + Cf8tHwn/KxIA/ztvRf9Tv3f/Xqhd/2ufT/91kj7/tMNK/9fgU/+AeSr/IBAD/y0fCf8uIAn/LR8I7S0f + CO0uIAn/LR8J/ysTAP89bUL/Vrxz/2OjWP9ylkX/fZQ7/5XTX/+952D/d3ot/yEQA/8tHwn/LiAJ/y0f + CO0tHwjtLiAJ/y0fCf8qEwD/P29C/1y6bv9iqlv/Z7Fa/1zad/9l8oX/ifZ6/2OGPP8lDgH/LR8J/y4g + Cf8tHwjtLR8I7S4gCf8tHwn/KhQB/zxULf9P0oD/SOSL/0b1lf9F/Jn/SPaS/1j7kP9DbTb/KRAB/y0f + Cf8uIAn/LR8I7S0fCO0uIAn/LR8J/y0cB/8uIwz/QcuC/0HCef8zRSL/MD0e/0SmYP9M0n7/LSMN/ywc + Bv8tHwn/LiAJ/y0fCO0tHwjtLiAJ/y0fCf8tHQj/LRsG/0Cxc/9Ez4b/MDca/yweCf9Cxnr/Qsd6/y0b + Bv8tHQj/LR8J/y4gCf8tHwjtLR8I7S4gCf8tHwn/LR8J/ywUAf81XTf/RNiR/0TTiv9E1In/R+2Y/zZn + Ov8rEgH/LR8J/y0fCf8uIAn/LR8I7S0fCO0uIAn/LR8J/y0fCf8tHgj/LBcC/zRWMv8+nWb/P6Jo/zZb + NP8sFgL/LR4I/y0fCf8tHwn/LiAJ/y0fCO0oGgTtLyEJ/y0fCf8tHwn/LR8J/y0fCP8sFAH/LBYC/ywW + Av8rEwD/LR4I/y0fCf8tHwn/LR8J/y8hCf8oGQTtPTEd8ycYAP8vIAn/LiAJ/y4gCf8uIAn/LiAJ/y4f + CP8uHwn/LiAJ/y4gCf8uIAn/LiAJ/y8gCf8nGAD/PTEd87u5stw/MR/tKBkF7S0fCO0tHwjtLR8I7S0f + CO0tHwjtLR8I7S0fCO0tHwjtLR8I7S0fCO0oGQXtPzEf7b65stwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + \ No newline at end of file diff --git a/ExternalConnectors/TSS/SecretServerAuthentication.cs b/ExternalConnectors/TSS/SecretServerAuthentication.cs index cad1844b..c4192222 100644 --- a/ExternalConnectors/TSS/SecretServerAuthentication.cs +++ b/ExternalConnectors/TSS/SecretServerAuthentication.cs @@ -58,9 +58,9 @@ namespace SecretServerAuthentication.TSS /// The refresh token. Required when refreshing a token. /// Successful retrieval of an access token /// A server side error occurred. - public System.Threading.Tasks.Task AuthorizeAsync(Grant_type grant_type, string username, string password, string refresh_token) + public System.Threading.Tasks.Task AuthorizeAsync(Grant_type grant_type, string username, string password, string refresh_token, string OTP) { - return AuthorizeAsync(grant_type, username, password, refresh_token, System.Threading.CancellationToken.None); + return AuthorizeAsync(grant_type, username, password, refresh_token, System.Threading.CancellationToken.None, OTP); } /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. @@ -71,7 +71,7 @@ namespace SecretServerAuthentication.TSS /// The refresh token. Required when refreshing a token. /// Successful retrieval of an access token /// A server side error occurred. - public async System.Threading.Tasks.Task AuthorizeAsync(Grant_type grant_type, string username, string password, string refresh_token, System.Threading.CancellationToken cancellationToken) + public async System.Threading.Tasks.Task AuthorizeAsync(Grant_type grant_type, string username, string password, string refresh_token, System.Threading.CancellationToken cancellationToken, string OTP) { var urlBuilder_ = new System.Text.StringBuilder(); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/oauth2/token"); @@ -93,6 +93,9 @@ namespace SecretServerAuthentication.TSS keyValues_.Add(new System.Collections.Generic.KeyValuePair("password", ConvertToString(password, System.Globalization.CultureInfo.InvariantCulture))); if (refresh_token != null) keyValues_.Add(new System.Collections.Generic.KeyValuePair("refresh_token", ConvertToString(refresh_token, System.Globalization.CultureInfo.InvariantCulture))); + if (OTP != null) + request_.Headers.Add("OTP", ConvertToString(OTP, System.Globalization.CultureInfo.InvariantCulture)); + request_.Content = new System.Net.Http.FormUrlEncodedContent(keyValues_); request_.Method = new System.Net.Http.HttpMethod("POST"); request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); @@ -125,6 +128,7 @@ namespace SecretServerAuthentication.TSS { throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); } + return objectResponse_.Object; } else @@ -275,10 +279,25 @@ namespace SecretServerAuthentication.TSS [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] public TokenResponseToken_type Token_type { get; set; } + + private string _Expires_in; /// Authentication token expiration time, in seconds [Newtonsoft.Json.JsonProperty("expires_in", Required = Newtonsoft.Json.Required.Always)] [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)] - public string Expires_in { get; set; } + // public string Expires_in { get; set; } + + public string Expires_in + { + get { return _Expires_in; } + set + { + _Expires_in = value; + Expires_on = DateTime.UtcNow.AddSeconds(Double.Parse(value) - 60); + } + } + + /// Authentication token expiration time in UTC + public DateTime Expires_on { get; set; } /// Refresh token. This is only provided when the server is set to allow refresh tokens for web services and when the session timeout duration is not set to Unlimited. [Newtonsoft.Json.JsonProperty("refresh_token", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] diff --git a/ExternalConnectors/TSS/SecretServerInterface.cs b/ExternalConnectors/TSS/SecretServerInterface.cs index c2b1380f..e43473ab 100644 --- a/ExternalConnectors/TSS/SecretServerInterface.cs +++ b/ExternalConnectors/TSS/SecretServerInterface.cs @@ -11,10 +11,15 @@ namespace ExternalConnectors.TSS public static string ssUsername = ""; public static string ssPassword = ""; public static string ssUrl = ""; + public static string ssOTP = ""; public static bool ssSSO = false; - public static bool initdone = false; + //token + public static string ssTokenBearer = ""; + public static DateTime ssTokenExpiresOn = DateTime.UtcNow; + public static string ssTokenRefresh = ""; + public static void Init() { if (ssPassword != "" || initdone == true) @@ -44,7 +49,7 @@ namespace ExternalConnectors.TSS f.cbUseSSO.Checked = ssSSO; // show dialog - while(true) + while (true) { _ = f.ShowDialog(); @@ -56,7 +61,7 @@ namespace ExternalConnectors.TSS ssPassword = f.tbPassword.Text; ssUrl = f.tbSSURL.Text; ssSSO = f.cbUseSSO.Checked; - + ssOTP = f.tbOTP.Text; // check connection first try { @@ -65,7 +70,7 @@ namespace ExternalConnectors.TSS } catch (Exception) { - MessageBox.Show("TestCredentials failed - please check your credentials"); + MessageBox.Show("Test Credentials failed - please check your credentials"); } } @@ -89,10 +94,6 @@ namespace ExternalConnectors.TSS private static bool TestCredentials() { - string authUsername = SSConnectionData.ssUsername; - string authPassword = SSConnectionData.ssPassword; - string baseURL = SSConnectionData.ssUrl; - if (SSConnectionData.ssSSO) { // checking creds doesn't really make sense here, as we can't modify them anyway if something is wrong @@ -100,22 +101,20 @@ namespace ExternalConnectors.TSS } else { - using (var httpClient = new HttpClient()) + + if (!String.IsNullOrEmpty(GetToken())) { - // Authenticate: - var tokenClient = new OAuth2ServiceClient(baseURL, httpClient); - // call below will throw an exception if the creds are invalid - var token = tokenClient.AuthorizeAsync(Grant_type.Password, authUsername, authPassword, null).Result; - // here we can be sure the creds are ok - return success state return true; } + else + { + return false; + } } } private static void FetchSecret(int secretID, out string secretUsername, out string secretPassword, out string secretDomain) { - string authUsername = SSConnectionData.ssUsername; - string authPassword = SSConnectionData.ssPassword; string baseURL = SSConnectionData.ssUrl; SecretModel secret; @@ -134,13 +133,10 @@ namespace ExternalConnectors.TSS { using (var httpClient = new HttpClient()) { - // Authenticate: - var tokenClient = new OAuth2ServiceClient(baseURL, httpClient); - var token = tokenClient.AuthorizeAsync(Grant_type.Password, authUsername, authPassword, null).Result; - var tokenResult = token.Access_token; + var token = GetToken(); // Set credentials (token): - httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", tokenResult); + httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token); // Call REST API: var client = new SecretsServiceClient($"{baseURL}/api", httpClient); @@ -166,6 +162,63 @@ namespace ExternalConnectors.TSS } + private static string GetToken() + { + + string authUsername = SSConnectionData.ssUsername; + string authPassword = SSConnectionData.ssPassword; + string baseURL = SSConnectionData.ssUrl; + string OTP = SSConnectionData.ssOTP; + string Bearer = SSConnectionData.ssTokenBearer; + string Refresh = SSConnectionData.ssTokenRefresh; + DateTime ExpiresOn = SSConnectionData.ssTokenExpiresOn; + + + //Check if current token is valid + if (!String.IsNullOrEmpty(Bearer)) + { + if (ExpiresOn >= DateTime.UtcNow) + { + return Bearer; + } + else + { + //try using refresh token + using (var httpClient = new HttpClient()) + { + var tokenClient = new OAuth2ServiceClient(baseURL, httpClient); + var token = tokenClient.AuthorizeAsync(Grant_type.Refresh_token, null, null, Refresh, null).Result; + var tokenResult = token.Access_token; + + SSConnectionData.ssTokenBearer = tokenResult; + return tokenResult; + } + } + + } + else + { + using (var httpClient = new HttpClient()) + { + // Authenticate: + var tokenClient = new OAuth2ServiceClient(baseURL, httpClient); + // call below will throw an exception if the creds are invalid + var token = tokenClient.AuthorizeAsync(Grant_type.Password, authUsername, authPassword, null, OTP).Result; + // here we can be sure the creds are ok - return success state + var tokenResult = token.Access_token; + + SSConnectionData.ssTokenBearer = tokenResult; + SSConnectionData.ssTokenRefresh = token.Refresh_token; + SSConnectionData.ssTokenExpiresOn = token.Expires_on; + return tokenResult; + + + } + } + } + + + // input must be in form "SSAPI:xxxx" where xxx is the secret id to fetch public static void FetchSecretFromServer(string input, out string username, out string password, out string domain) { diff --git a/ExternalConnectors/TSS/TSS.ico b/ExternalConnectors/TSS/TSS.ico new file mode 100644 index 0000000000000000000000000000000000000000..e2b2e903b932b48a6f9964fbfbcdf27e771c6e80 GIT binary patch literal 32988 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 B<0Jq8 literal 0 HcmV?d00001 diff --git a/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs b/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs index 1252dae8..3b0a34b3 100644 --- a/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs +++ b/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs @@ -81,6 +81,9 @@ + + + @@ -99,9 +102,6 @@ - - - From a023409fe9ccc806e14f43ed98a2beac2c97bf45 Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Fri, 14 Jan 2022 17:20:10 +0000 Subject: [PATCH 4/6] update change log --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3387ea3..da5c468d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.77.3] +### Added +- # #2123: Thycotic Secret Server - Added 2FA OTP support -## [Unreleased] +## [1.77.2] ### Added - #2086: Replace WebClient with async HttpClient for updater. - #1850: Minify config xml From c0cf316c169bc5dcead6bbe7fd01e31dd7f428e7 Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Fri, 14 Jan 2022 17:44:10 +0000 Subject: [PATCH 5/6] update readme --- README.MD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.MD b/README.MD index 9188a0b0..e6200768 100644 --- a/README.MD +++ b/README.MD @@ -2,7 +2,7 @@

- +

@@ -141,5 +141,5 @@ Check out the [Wiki page](https://github.com/mRemoteNG/mRemoteNG/wiki) on how to

- Developed with ReSharper + Developed with ReSharper

From 39968c7c6eee8a04962be25d237c087dffca8cba Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Tue, 18 Jan 2022 10:16:42 +0000 Subject: [PATCH 6/6] update changes --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index da5c468d..310c0f9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + ## [1.77.3] ### Added - # #2123: Thycotic Secret Server - Added 2FA OTP support @@ -37,6 +38,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - #1325: Language resource files cleanup - #xxxx: Secret Server connector via new field "API User ID" instead of SSAPI: prefix ### Fixed +- #2125: Fixed string parsing logic for Quick Connect toolbar. +- #2122: Fix to avoid throwing exception incase if not able decrypt connections and ask to open another one or create a new. +- #2117: Fix of broken Links due migration to .NET 6 and branch renaming - #2098: Fix failed BinaryFileTest - #2097: Fix failed tests related to mRemoteNGTests.UI.Window.ConfigWindowTests - #2096: Corrected encryption code of LegacyRijndaelCryptographyProvider