From 82fb8da574f705902752d7f94206e20234a8fe2d Mon Sep 17 00:00:00 2001 From: Kim Date: Sun, 10 Nov 2019 22:51:14 +1100 Subject: [PATCH] Fixes issue 4 Fixes issue 4 Rebased off of host master to reduce the chance of a merge conflict * rdpsign.vb: updated to dynamically determine the path to rdpsign.exe * rdpsign.vb: updated to show an error if rdpsign.exe cannot be found (now imports system.windows.forms for MessageBox) * Create Client Connection window: Made some visual + text changes * Create Client Connection window: Disable the signing section if rdpsign.exe not detected or if no certificates are found * Create Client Connection window: Change "Disabled" checkbox text to "Sign RDP file" and reverse its logic (so that checked = sign rdp file) * Create Client Connection window: "Create Signed and Unsigned" checkbox is disabled + unticked if generating an MSI * Create Client Connection window: Certificate ComboBox defaults to the first certificate rather than blank * Create Client Connection window: Updated the save/reset settings to include the new signing section * Create Client Connection window: Updated the Tab-Order --- RDPSign/RDPSign.vb | 51 +-- RDPSign/RDPSign.vbproj | 1 + remoteapp-tool/App.config | 9 + .../My Project/Settings.Designer.vb | 40 ++- remoteapp-tool/My Project/Settings.settings | 9 + ...emoteAppCreateClientConnection.Designer.vb | 114 ++++--- .../RemoteAppCreateClientConnection.resx | 290 +++++++++--------- .../RemoteAppCreateClientConnection.vb | 75 +++-- 8 files changed, 347 insertions(+), 242 deletions(-) diff --git a/RDPSign/RDPSign.vb b/RDPSign/RDPSign.vb index 490e31f..303149b 100644 --- a/RDPSign/RDPSign.vb +++ b/RDPSign/RDPSign.vb @@ -1,6 +1,9 @@ -Public Class RDPSign +Imports System.Windows.Forms + +Public Class RDPSign Public ErrorNumber As Integer = 0 Public ErrorString As String = "" + Sub main() End Sub @@ -101,25 +104,37 @@ End If 'If we get here, we should be good to run the command to sign the RDP file. - Dim Command As String = "C:\Windows\System32\rdpsign.exe" - Dim Arguments As String - Dim FileVersionInfo As FileVersionInfo = FileVersionInfo.GetVersionInfo(Command) - ' On my windows 10 computer, the argument is /sha256 instead of /sha1. /sha1 doesn't work. - ' On my windows 10 computer, the Product parts come in at 10.0.18362.1 - ' On a Windows Server 2008 R2 server I have access to, the argument is /sha1. - ' On a Windows Server 2008 R2 server I have access to, the Product parts come in at 6.1.7601.17514 which is lower than the windows 10 ones. - ' I do not have other versions of windows to test, so will need external testing for this. - ' Not sure where the version number switches over, but also not sure how to determine which method to use otherwise - If (FileVersionInfo.ProductMajorPart >= 10) Then - Arguments = " /sha256 " & Thumbprint & " """ & RDPFileLocation & """" + Dim Command As String = GetSysDir() & "\rdpsign.exe" + If My.Computer.FileSystem.FileExists(Command) Then + Dim Arguments As String + Dim FileVersionInfo As FileVersionInfo = FileVersionInfo.GetVersionInfo(Command) + ' On my windows 10 computer, the argument is /sha256 instead of /sha1. /sha1 doesn't work. + ' On my windows 10 computer, the Product parts come in at 10.0.18362.1 + ' On a Windows Server 2008 R2 server I have access to, the argument is /sha1. + ' On a Windows Server 2008 R2 server I have access to, the Product parts come in at 6.1.7601.17514 which is lower than the windows 10 ones. + ' I do not have other versions of windows to test, so will need external testing for this. + ' Not sure where the version number switches over, but also not sure how to determine which method to use otherwise + If (FileVersionInfo.ProductMajorPart >= 10) Then + Arguments = " /sha256 " & Thumbprint & " """ & RDPFileLocation & """" + Else + Arguments = " /sha1 " & Thumbprint & " """ & RDPFileLocation & """" + End If + Dim StartInfo As New ProcessStartInfo + StartInfo.FileName = Command + StartInfo.Arguments = Arguments + StartInfo.WindowStyle = ProcessWindowStyle.Hidden + Process.Start(StartInfo) Else - Arguments = " /sha1 " & Thumbprint & " """ & RDPFileLocation & """" + MessageBox.Show("RDPSign executable not found:" & vbNewLine & vbNewLine & Command, My.Application.Info.AssemblyName, MessageBoxButtons.OK, MessageBoxIcon.Error) End If - Dim StartInfo As New ProcessStartInfo - StartInfo.FileName = Command - StartInfo.Arguments = Arguments - StartInfo.WindowStyle = ProcessWindowStyle.Hidden - Process.Start(StartInfo) + End Sub + + Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long + + Function GetSysDir() As String + Return Environment.SystemDirectory.ToString + End Function + End Class diff --git a/RDPSign/RDPSign.vbproj b/RDPSign/RDPSign.vbproj index 0c6503e..0733cbf 100644 --- a/RDPSign/RDPSign.vbproj +++ b/RDPSign/RDPSign.vbproj @@ -48,6 +48,7 @@ + diff --git a/remoteapp-tool/App.config b/remoteapp-tool/App.config index 947e0e1..1fc2692 100644 --- a/remoteapp-tool/App.config +++ b/remoteapp-tool/App.config @@ -67,6 +67,15 @@ False + + False + + + False + + + 0 + diff --git a/remoteapp-tool/My Project/Settings.Designer.vb b/remoteapp-tool/My Project/Settings.Designer.vb index b5bc9fb..f815b00 100644 --- a/remoteapp-tool/My Project/Settings.Designer.vb +++ b/remoteapp-tool/My Project/Settings.Designer.vb @@ -15,7 +15,7 @@ Option Explicit On Namespace My _ Partial Friend NotInheritable Class MySettings Inherits Global.System.Configuration.ApplicationSettingsBase @@ -29,7 +29,7 @@ Namespace My Private Shared addedHandlerLockObject As New Object _ - Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) If My.Application.SaveMySettingsOnExit Then My.Settings.Save() End If @@ -281,6 +281,42 @@ Namespace My Me("SavedDisableFTA") = value End Set End Property + + _ + Public Property SavedSignRDP() As Boolean + Get + Return CType(Me("SavedSignRDP"),Boolean) + End Get + Set + Me("SavedSignRDP") = value + End Set + End Property + + _ + Public Property SavedSignedAndUnsigned() As Boolean + Get + Return CType(Me("SavedSignedAndUnsigned"),Boolean) + End Get + Set + Me("SavedSignedAndUnsigned") = value + End Set + End Property + + _ + Public Property SavedCertSelected() As Integer + Get + Return CType(Me("SavedCertSelected"),Integer) + End Get + Set + Me("SavedCertSelected") = value + End Set + End Property End Class End Namespace diff --git a/remoteapp-tool/My Project/Settings.settings b/remoteapp-tool/My Project/Settings.settings index ecf7582..84933ab 100644 --- a/remoteapp-tool/My Project/Settings.settings +++ b/remoteapp-tool/My Project/Settings.settings @@ -59,5 +59,14 @@ False + + False + + + False + + + 0 + \ No newline at end of file diff --git a/remoteapp-tool/RemoteAppCreateClientConnection.Designer.vb b/remoteapp-tool/RemoteAppCreateClientConnection.Designer.vb index 6fcae72..b7198b8 100644 --- a/remoteapp-tool/RemoteAppCreateClientConnection.Designer.vb +++ b/remoteapp-tool/RemoteAppCreateClientConnection.Designer.vb @@ -68,10 +68,10 @@ Partial Class RemoteAppCreateClientConnection Me.FTACountLabel = New System.Windows.Forms.Label() Me.DisabledFTACheckBox = New System.Windows.Forms.CheckBox() Me.GroupBoxSignRDP = New System.Windows.Forms.GroupBox() + Me.CheckBoxCreateSignedAndUnsigned = New System.Windows.Forms.CheckBox() Me.CertificateComboBox = New System.Windows.Forms.ComboBox() Me.CertificateLabel = New System.Windows.Forms.Label() - Me.CheckBoxSignRDPDisabled = New System.Windows.Forms.CheckBox() - Me.CheckBoxCreateSignedAndUnsigned = New System.Windows.Forms.CheckBox() + Me.CheckBoxSignRDPEnabled = New System.Windows.Forms.CheckBox() Me.ServerGroupBox.SuspendLayout() Me.RDGWGroupBox.SuspendLayout() Me.ClientConnectionGroupBox.SuspendLayout() @@ -83,6 +83,7 @@ Partial Class RemoteAppCreateClientConnection ' 'EditAfterSave ' + Me.EditAfterSave.BackColor = System.Drawing.Color.Transparent Me.EditAfterSave.ImageIndex = 2 Me.EditAfterSave.ImageList = Me.SmallerIcons Me.EditAfterSave.Location = New System.Drawing.Point(313, 13) @@ -91,7 +92,7 @@ Partial Class RemoteAppCreateClientConnection Me.EditAfterSave.TabIndex = 2 Me.EditAfterSave.Text = "Manually edit RDP file" Me.EditAfterSave.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage - Me.EditAfterSave.UseVisualStyleBackColor = True + Me.EditAfterSave.UseVisualStyleBackColor = False ' 'SmallerIcons ' @@ -113,10 +114,10 @@ Partial Class RemoteAppCreateClientConnection Me.CreateButton.Font = New System.Drawing.Font("Segoe UI", 9.0!) Me.CreateButton.ImageIndex = 6 Me.CreateButton.ImageList = Me.SmallerIcons - Me.CreateButton.Location = New System.Drawing.Point(416, 546) + Me.CreateButton.Location = New System.Drawing.Point(416, 555) Me.CreateButton.Name = "CreateButton" Me.CreateButton.Size = New System.Drawing.Size(80, 29) - Me.CreateButton.TabIndex = 8 + Me.CreateButton.TabIndex = 9 Me.CreateButton.Text = "Create..." Me.CreateButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText Me.CreateButton.UseVisualStyleBackColor = False @@ -134,10 +135,10 @@ Partial Class RemoteAppCreateClientConnection Me.CancelEditButton.Font = New System.Drawing.Font("Segoe UI", 9.0!) Me.CancelEditButton.ImageIndex = 4 Me.CancelEditButton.ImageList = Me.SmallerIcons - Me.CancelEditButton.Location = New System.Drawing.Point(343, 546) + Me.CancelEditButton.Location = New System.Drawing.Point(343, 555) Me.CancelEditButton.Name = "CancelEditButton" Me.CancelEditButton.Size = New System.Drawing.Size(67, 29) - Me.CancelEditButton.TabIndex = 7 + Me.CancelEditButton.TabIndex = 8 Me.CancelEditButton.Text = "Cancel" Me.CancelEditButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText Me.CancelEditButton.UseVisualStyleBackColor = False @@ -164,7 +165,7 @@ Partial Class RemoteAppCreateClientConnection Me.Label13.Location = New System.Drawing.Point(7, 54) Me.Label13.Name = "Label13" Me.Label13.Size = New System.Drawing.Size(101, 15) - Me.Label13.TabIndex = 104 + Me.Label13.TabIndex = 4 Me.Label13.Text = "Alternative server:" ' 'Label14 @@ -173,7 +174,7 @@ Partial Class RemoteAppCreateClientConnection Me.Label14.Location = New System.Drawing.Point(382, 25) Me.Label14.Name = "Label14" Me.Label14.Size = New System.Drawing.Size(32, 15) - Me.Label14.TabIndex = 105 + Me.Label14.TabIndex = 2 Me.Label14.Text = "Port:" ' 'Label12 @@ -182,7 +183,7 @@ Partial Class RemoteAppCreateClientConnection Me.Label12.Location = New System.Drawing.Point(7, 25) Me.Label12.Name = "Label12" Me.Label12.Size = New System.Drawing.Size(85, 15) - Me.Label12.TabIndex = 106 + Me.Label12.TabIndex = 0 Me.Label12.Text = "Server address:" ' 'ServerPort @@ -190,7 +191,7 @@ Partial Class RemoteAppCreateClientConnection Me.ServerPort.Location = New System.Drawing.Point(420, 22) Me.ServerPort.Name = "ServerPort" Me.ServerPort.Size = New System.Drawing.Size(53, 23) - Me.ServerPort.TabIndex = 1 + Me.ServerPort.TabIndex = 3 Me.ServerPort.Text = "3389" ' 'AltServerAddress @@ -198,14 +199,14 @@ Partial Class RemoteAppCreateClientConnection Me.AltServerAddress.Location = New System.Drawing.Point(121, 51) Me.AltServerAddress.Name = "AltServerAddress" Me.AltServerAddress.Size = New System.Drawing.Size(352, 23) - Me.AltServerAddress.TabIndex = 2 + Me.AltServerAddress.TabIndex = 5 ' 'ServerAddress ' Me.ServerAddress.Location = New System.Drawing.Point(121, 22) Me.ServerAddress.Name = "ServerAddress" Me.ServerAddress.Size = New System.Drawing.Size(255, 23) - Me.ServerAddress.TabIndex = 0 + Me.ServerAddress.TabIndex = 1 ' 'RDGWGroupBox ' @@ -228,7 +229,7 @@ Partial Class RemoteAppCreateClientConnection Me.AttemptDirectCheckBox.Location = New System.Drawing.Point(10, 76) Me.AttemptDirectCheckBox.Name = "AttemptDirectCheckBox" Me.AttemptDirectCheckBox.Size = New System.Drawing.Size(326, 19) - Me.AttemptDirectCheckBox.TabIndex = 2 + Me.AttemptDirectCheckBox.TabIndex = 3 Me.AttemptDirectCheckBox.Text = "Only use RD Gateway if direct connection is unsuccessful" Me.AttemptDirectCheckBox.UseVisualStyleBackColor = True ' @@ -249,7 +250,7 @@ Partial Class RemoteAppCreateClientConnection Me.RDGWLabel.Location = New System.Drawing.Point(7, 50) Me.RDGWLabel.Name = "RDGWLabel" Me.RDGWLabel.Size = New System.Drawing.Size(116, 15) - Me.RDGWLabel.TabIndex = 110 + Me.RDGWLabel.TabIndex = 1 Me.RDGWLabel.Text = "RD Gateway address:" ' 'GatewayAddress @@ -258,7 +259,7 @@ Partial Class RemoteAppCreateClientConnection Me.GatewayAddress.Location = New System.Drawing.Point(145, 47) Me.GatewayAddress.Name = "GatewayAddress" Me.GatewayAddress.Size = New System.Drawing.Size(328, 23) - Me.GatewayAddress.TabIndex = 1 + Me.GatewayAddress.TabIndex = 2 ' 'ClientConnectionGroupBox ' @@ -299,6 +300,7 @@ Partial Class RemoteAppCreateClientConnection ' 'CreateRAWebIcon ' + Me.CreateRAWebIcon.BackColor = System.Drawing.Color.Transparent Me.CreateRAWebIcon.ImageIndex = 5 Me.CreateRAWebIcon.ImageList = Me.SmallerIcons Me.CreateRAWebIcon.Location = New System.Drawing.Point(313, 36) @@ -307,7 +309,7 @@ Partial Class RemoteAppCreateClientConnection Me.CreateRAWebIcon.TabIndex = 3 Me.CreateRAWebIcon.Text = "Create icon files" Me.CreateRAWebIcon.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage - Me.CreateRAWebIcon.UseVisualStyleBackColor = True + Me.CreateRAWebIcon.UseVisualStyleBackColor = False ' 'FTAButton ' @@ -317,7 +319,7 @@ Partial Class RemoteAppCreateClientConnection Me.FTAButton.Location = New System.Drawing.Point(301, 22) Me.FTAButton.Name = "FTAButton" Me.FTAButton.Size = New System.Drawing.Size(172, 29) - Me.FTAButton.TabIndex = 1 + Me.FTAButton.TabIndex = 2 Me.FTAButton.Text = "File type associations..." Me.FTAButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText Me.FTAButton.UseVisualStyleBackColor = False @@ -373,7 +375,7 @@ Partial Class RemoteAppCreateClientConnection Me.Panel1.Location = New System.Drawing.Point(89, 76) Me.Panel1.Name = "Panel1" Me.Panel1.Size = New System.Drawing.Size(200, 26) - Me.Panel1.TabIndex = 112 + Me.Panel1.TabIndex = 9 ' 'PerMachineRadioButton ' @@ -403,7 +405,7 @@ Partial Class RemoteAppCreateClientConnection Me.TopLevelRadioButton.AutoSize = True Me.TopLevelRadioButton.Location = New System.Drawing.Point(366, 17) Me.TopLevelRadioButton.Name = "TopLevelRadioButton" - Me.TopLevelRadioButton.Size = New System.Drawing.Size(71, 19) + Me.TopLevelRadioButton.Size = New System.Drawing.Size(72, 19) Me.TopLevelRadioButton.TabIndex = 4 Me.TopLevelRadioButton.Text = "Top level" Me.TopLevelRadioButton.UseVisualStyleBackColor = True @@ -495,10 +497,10 @@ Partial Class RemoteAppCreateClientConnection Me.ResetButton.Font = New System.Drawing.Font("Segoe UI", 9.0!) Me.ResetButton.ImageIndex = 3 Me.ResetButton.ImageList = Me.SmallerIcons - Me.ResetButton.Location = New System.Drawing.Point(126, 546) + Me.ResetButton.Location = New System.Drawing.Point(126, 555) Me.ResetButton.Name = "ResetButton" Me.ResetButton.Size = New System.Drawing.Size(121, 29) - Me.ResetButton.TabIndex = 6 + Me.ResetButton.TabIndex = 7 Me.ResetButton.Text = "Reset to default" Me.ResetButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText Me.ResetButton.UseVisualStyleBackColor = False @@ -510,10 +512,10 @@ Partial Class RemoteAppCreateClientConnection Me.SaveButton.Font = New System.Drawing.Font("Segoe UI", 9.0!) Me.SaveButton.ImageIndex = 0 Me.SaveButton.ImageList = Me.SmallerIcons - Me.SaveButton.Location = New System.Drawing.Point(12, 546) + Me.SaveButton.Location = New System.Drawing.Point(12, 555) Me.SaveButton.Name = "SaveButton" Me.SaveButton.Size = New System.Drawing.Size(108, 29) - Me.SaveButton.TabIndex = 5 + Me.SaveButton.TabIndex = 6 Me.SaveButton.Text = "Save settings" Me.SaveButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText Me.SaveButton.UseVisualStyleBackColor = False @@ -536,7 +538,7 @@ Partial Class RemoteAppCreateClientConnection Me.FTACountLabel.Location = New System.Drawing.Point(154, 29) Me.FTACountLabel.Name = "FTACountLabel" Me.FTACountLabel.Size = New System.Drawing.Size(52, 15) - Me.FTACountLabel.TabIndex = 2 + Me.FTACountLabel.TabIndex = 1 Me.FTACountLabel.Text = "Count: 0" ' 'DisabledFTACheckBox @@ -554,58 +556,52 @@ Partial Class RemoteAppCreateClientConnection Me.GroupBoxSignRDP.Controls.Add(Me.CheckBoxCreateSignedAndUnsigned) Me.GroupBoxSignRDP.Controls.Add(Me.CertificateComboBox) Me.GroupBoxSignRDP.Controls.Add(Me.CertificateLabel) - Me.GroupBoxSignRDP.Controls.Add(Me.CheckBoxSignRDPDisabled) + Me.GroupBoxSignRDP.Controls.Add(Me.CheckBoxSignRDPEnabled) Me.GroupBoxSignRDP.Location = New System.Drawing.Point(12, 477) Me.GroupBoxSignRDP.Name = "GroupBoxSignRDP" - Me.GroupBoxSignRDP.Size = New System.Drawing.Size(482, 63) - Me.GroupBoxSignRDP.TabIndex = 4 + Me.GroupBoxSignRDP.Size = New System.Drawing.Size(482, 68) + Me.GroupBoxSignRDP.TabIndex = 5 Me.GroupBoxSignRDP.TabStop = False - Me.GroupBoxSignRDP.Text = "Sign RDP" + Me.GroupBoxSignRDP.Text = "Digital Signing" + ' + 'CheckBoxCreateSignedAndUnsigned + ' + Me.CheckBoxCreateSignedAndUnsigned.AutoSize = True + Me.CheckBoxCreateSignedAndUnsigned.Location = New System.Drawing.Point(10, 41) + Me.CheckBoxCreateSignedAndUnsigned.Name = "CheckBoxCreateSignedAndUnsigned" + Me.CheckBoxCreateSignedAndUnsigned.Size = New System.Drawing.Size(175, 19) + Me.CheckBoxCreateSignedAndUnsigned.TabIndex = 1 + Me.CheckBoxCreateSignedAndUnsigned.Text = "Create Signed and Unsigned" + Me.CheckBoxCreateSignedAndUnsigned.UseVisualStyleBackColor = True ' 'CertificateComboBox ' Me.CertificateComboBox.BackColor = System.Drawing.Color.WhiteSmoke Me.CertificateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.CertificateComboBox.Enabled = False Me.CertificateComboBox.FormattingEnabled = True - Me.CertificateComboBox.Location = New System.Drawing.Point(268, 25) + Me.CertificateComboBox.Location = New System.Drawing.Point(282, 25) Me.CertificateComboBox.Name = "CertificateComboBox" Me.CertificateComboBox.Size = New System.Drawing.Size(191, 23) - Me.CertificateComboBox.TabIndex = 24 + Me.CertificateComboBox.TabIndex = 3 ' 'CertificateLabel ' Me.CertificateLabel.AutoSize = True - Me.CertificateLabel.Location = New System.Drawing.Point(205, 28) + Me.CertificateLabel.Location = New System.Drawing.Point(212, 28) Me.CertificateLabel.Name = "CertificateLabel" Me.CertificateLabel.Size = New System.Drawing.Size(64, 15) - Me.CertificateLabel.TabIndex = 23 + Me.CertificateLabel.TabIndex = 2 Me.CertificateLabel.Text = "Certificate:" ' - 'CheckBoxSignRDPDisabled + 'CheckBoxSignRDPEnabled ' - Me.CheckBoxSignRDPDisabled.AutoSize = True - Me.CheckBoxSignRDPDisabled.Checked = True - Me.CheckBoxSignRDPDisabled.CheckState = System.Windows.Forms.CheckState.Checked - Me.CheckBoxSignRDPDisabled.Location = New System.Drawing.Point(10, 22) - Me.CheckBoxSignRDPDisabled.Name = "CheckBoxSignRDPDisabled" - Me.CheckBoxSignRDPDisabled.Size = New System.Drawing.Size(71, 19) - Me.CheckBoxSignRDPDisabled.TabIndex = 0 - Me.CheckBoxSignRDPDisabled.Text = "Disabled" - Me.CheckBoxSignRDPDisabled.UseVisualStyleBackColor = True - ' - 'CheckBoxCreateSignedAndUnsigned - ' - Me.CheckBoxCreateSignedAndUnsigned.AutoSize = True - Me.CheckBoxCreateSignedAndUnsigned.Checked = True - Me.CheckBoxCreateSignedAndUnsigned.CheckState = System.Windows.Forms.CheckState.Checked - Me.CheckBoxCreateSignedAndUnsigned.Enabled = False - Me.CheckBoxCreateSignedAndUnsigned.Location = New System.Drawing.Point(10, 38) - Me.CheckBoxCreateSignedAndUnsigned.Name = "CheckBoxCreateSignedAndUnsigned" - Me.CheckBoxCreateSignedAndUnsigned.Size = New System.Drawing.Size(175, 19) - Me.CheckBoxCreateSignedAndUnsigned.TabIndex = 25 - Me.CheckBoxCreateSignedAndUnsigned.Text = "Create Signed and Unsigned" - Me.CheckBoxCreateSignedAndUnsigned.UseVisualStyleBackColor = True + Me.CheckBoxSignRDPEnabled.AutoSize = True + Me.CheckBoxSignRDPEnabled.Location = New System.Drawing.Point(10, 22) + Me.CheckBoxSignRDPEnabled.Name = "CheckBoxSignRDPEnabled" + Me.CheckBoxSignRDPEnabled.Size = New System.Drawing.Size(93, 19) + Me.CheckBoxSignRDPEnabled.TabIndex = 0 + Me.CheckBoxSignRDPEnabled.Text = "Sign RDP file" + Me.CheckBoxSignRDPEnabled.UseVisualStyleBackColor = True ' 'RemoteAppCreateClientConnection ' @@ -614,7 +610,7 @@ Partial Class RemoteAppCreateClientConnection Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.BackColor = System.Drawing.Color.White Me.CancelButton = Me.CancelEditButton - Me.ClientSize = New System.Drawing.Size(507, 587) + Me.ClientSize = New System.Drawing.Size(507, 596) Me.Controls.Add(Me.GroupBoxSignRDP) Me.Controls.Add(Me.FileTypesGroupBox) Me.Controls.Add(Me.MSIGroupBox) @@ -693,7 +689,7 @@ Partial Class RemoteAppCreateClientConnection Friend WithEvents DisabledFTACheckBox As System.Windows.Forms.CheckBox Friend WithEvents FTACountLabel As System.Windows.Forms.Label Friend WithEvents GroupBoxSignRDP As GroupBox - Friend WithEvents CheckBoxSignRDPDisabled As CheckBox + Friend WithEvents CheckBoxSignRDPEnabled As CheckBox Friend WithEvents CertificateComboBox As ComboBox Friend WithEvents CertificateLabel As Label Friend WithEvents CheckBoxCreateSignedAndUnsigned As CheckBox diff --git a/remoteapp-tool/RemoteAppCreateClientConnection.resx b/remoteapp-tool/RemoteAppCreateClientConnection.resx index a2a3999..e7ffc8f 100644 --- a/remoteapp-tool/RemoteAppCreateClientConnection.resx +++ b/remoteapp-tool/RemoteAppCreateClientConnection.resx @@ -124,152 +124,152 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADy - IQAAAk1TRnQBSQFMAgEBBwEAAeABAQHgAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADW + IQAAAk1TRnQBSQFMAgEBBwEAAQgBAgEIAQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA AwABIAMAAQEBAAEgBgABIF4AAyABLwMjATMDIwEzAyMBMwMjATMDIwEzAyMBMwMjATMDIwEzAxkBIysA - AQEDQgF0A1gBwQNYAe8DWAHvA1gBwQNCAXQDAAEBUAADKgFBAwYBCBgAAwYBCAMqAUEUAAMIAQsBaAFd - AVQB8AG2AYQBPAH/AbUBgwE4Af8BtgGCATcB/wG2AYIBNwH/AbYBggE3Af8BtgGCATcB/wG1AYMBOAH/ - AbYBhAE8Af8CWgFYAcAnAAEBA1oBwAOLAf8BuQK6Af8D3AH/A9kB/wO1Af8BhgKHAf8DWgHAAwABAUgA - AyoBQQE+ATsB8gH/AkABvQH9AwYBCBAAAwYBCAIrAbEB/AEgAR4B6gH/AyoBQRAAAykBPwG2AYQBPCH/ - AbYBhAE8Af8YAAG5Ar8B/wG5Ar8B/wGyArcB/wGLAY0BjgH/AY0BjgGNAf8BxQHgAcsB/wHOAeMB0gH/ - Ae4C7wH/AewB7QHsAf8B6gLpAf8D5wH/A4cB/wNCAXREAAMqAUEBRwFFAfUB/wFSAVAB+gH/AUcBRAH2 - Af8BMAEvAbUB/AMGAQgIAAMGAQgCKwGyAfwBMAEuAfEB/wE7ATkB9gH/ASABHgHqAf8DKgFBDAADJwE7 - AbUBgwE4Bf8BAAEvAfIB/wEBAVUB8wH/ARQBmgH2Af8BGAGmAfgB/wEHAWQB9AH/AQABKgHyBf8BtQGD - ATgB/xgAA0cBggPYAf8BzQHUAdUB/wFtAW4BbwH/A8MB/wFbAbkBagH/AQABjgESAf8B3QHrAeAB/wPx - Af8B1wHlAdoB/wHfAecB4QH/ArcBuAH/A1gBwUQAAx4BKwFKAUcB9gH/AVQBUQH6Af8BYAFfAv8BSAFF - AfYB/wEwAS8BtQH8AwYBCAMGAQgCKwGzAfwBNgE0AfIB/wFSAVEC/wE5ATcB9AH/AR4BHAHpAf8DHgEr - DAADJAE2AbYBgwE4Bf8BGgFBAfIB/wEkAWgB8gH/AR0BkwH0Af8BIQGaAfQB/wEUAWYB8QH/AQABLQHw - Bf8BtgGDATcB/wMjATMDIwEzAxkBIxAAAyQBNgNHAYIDTwH/A+wB/wP7Af8BEQGYAScB/wFGAbABVwH/ - A/UB/wEAAZABFgH/AU4BsQFeAf8B3gHfAd4B/wNYAe9IAAMeASsBSgFIAfYB/wFVAVIB+gH/AWMBYAL/ - AUkBRwH2Af8BMQEwAbUB/AJAAb0B/QE/ATwB9AH/AVcBVgL/AT8BPQH1Af8BJQEjAesB/wMeASsIAAMZ - BCMBMwMxAU8BtgGDATgD/wH8Af8BDgEuAfAB/wFAAW4B8gH/AUEBkwH0Af8BJgGDAfIB/wEKAUwB8AH/ - AQABIgHwA/8B+wH/AbUBgAE0Af8BtQGDATsB/wG2AYQBPQH/AloBWAHAA0gBhgG+AsQB/wG8AsEB/wG5 - Ab0BvgH/AbcBugG7Af8BtAK4Af8DUAH/A+4B/wFgAb0BbgH/AQcBlAEeAf8B5QHxAeYB/wEAAZABFQH/ - ARUBmgErAf8B6QHvAeoB/wPiAf8DWAHvTAADHgErAUsBSQH2Af8BVgFTAfoB/wFjAWEC/wFiAV8C/wFf - AV0C/wFdAVsC/wFGAUQB9wH/AS4BLAHuAf8DHgErDAACWgFYAcABtQGFAT4B/wG1AYQBPQH/AbUBggE1 - A/8B+wH/AQABEwHuAf8BLwFRAfAB/wFMAYUB8wH/AWMBlQH0Af8BgwGaAfYB/wGAAY0B+QP/AfkB/wG1 - AWsBLwn/AbYBhAE8Af8BygHSAdMB/wHJAdIB0wH/AckB0AHTAf8ByAHRAdIB/wHHAdAB0QH/AcYB0AHR - Af8BbQJwAf8DxgH/Ac8B6QHUAf8B5gH0AekB/wH9Av4B/wHLAeYBzwH/AQABjQEQAf8BUgG1AWIB/wHA - AcEBwAH/A1gBwVAAAx4BKwFMAUoB9wH/AWgBZQL/AUgBRQL/AUYBQwL/AWEBXwL/ATcBNQHwAf8DHgEr - EAABtQGEAT0F/wH2AfAB6QH/AbIBbgEyA/8B/QH/AgAB7AH/ARwBLwHtAf8BOAFPAfAB/wFLAWIB8gH/ - AVsBagH0Af8BYQFkAfYD/wH8Af8BvAFrAS8B/wEAAa4BgAX/AbYBggE6Af8BygHSAdQB/wGsAq8B/wGG - AgAB/wGLAgAB/wGHAgAB/wGLAgAB/wGGAhsB/wOQAf8B8gH5AfMJ/wH+Af8B/gH/AcsB5wHRAf8BqwHR - AbIB/wOPAf8DQgF0UAADBgEIAUgBRwHEAf0BbAFoAv8BTQFKAv8BSgFHAv8BZQFjAv8CQAG+Af0DBgEI - EAABtAGCAToF/wHnAZsBJAH/AbEBbgE1Bf8CAAHtAf8CAAHuAf8BFgEdAfAB/wEsATQB8gH/AT8BQQH1 - Af8BTQFMAfcF/wHAAWwBMgH/AQABrQGBBf8BtgGCAToB/wHMAdMB1QH/AaoBrAGtAf8BmwEaARAB/wGc - AR4BEgH/AZsBBgEAAf8BqAEGAQAB/wGyAQgBAAH/AZwBcAFrAf8DkAH/A8YB/wPuAf8D7gH/A8YB/wOQ - Af8DWgHAAwABAUwAAwYBCAFVAU8BuQH8AV8BXAH7Af8BgAFtAv8BbQFqAv8BawFoAv8BaAFmAv8BTQFL - AfcB/wEzATEBtQH8AwYBCAwAAbMBggE7Bf8B5gGeAS0B/wGvAYABOwP/AfYD/wHtA/8B6wP/AeoD/wHq - A/8B6gP/AewD/wHzAf8BwgFsATMB/wEAAasBbQX/AbYBggE6Af8BzAHTAdUB/wGoAqoB/wGlATIBKAH/ - AZ8BHQESAf8BowEFAQAB/wGyAQgBAAH/AcABDgEAAf8B3wFoAVYB/wG3AYoBggH/AYgBZAFgAf8BVgFQ - AU8B/wFVAU8BTQH/AW8CcgH/AY8CkAH/AwABAUwAAwYBCAFdAVoBuwH8AWYBYwH9Af8BhgGCAv8BZQFi - AfwB/wFTAVEB+AH/AU8BTAH3Af8BXAFZAfoB/wFqAWgC/wFPAUwB9wH/ATMBMgG1AfwDBgEICAABswGC - ATsF/wHyAaEBIAH/Ab0BiwFEAf8BrwGAAT0B/wGvAW4BNwH/AbABbQE1Af8BrwFsATMB/wGxAWwBMQH/ - AbcBbgE0Af8BvQFuATQB/wHBAW0BNAH/AaYBnwFhAf8BZAHTAb0F/wG1AYIBOgH/Ac4B1AHVAf8BogKk - Af8BrAE5ATAB/wGhARABAwH/Aa0BBAEAAf8BvgELAQAB/wHPARsBAQH/AfABmgGLAf8B9wG0AagB/wH5 - Aa4BngH/Af4BtQGnAf8B+AGlAZIB/wHCAc4BzwH/AaoCrAH/TAADBgEIAVQBUgHMAf0BbAFpAf4B/wGK - AYcC/wFrAWgB/QH/AVsBWAH7Af8DHgErAx4BKwFQAU0B+AH/AV0BWwH6Af8BbAFpAv8BUAFOAfcB/wE0 - ATIBtgH8AwQBBQQAAbMBggE7Bf8B8QGXAQsB/wH4AbIBQQH/Af0BwQFhAf8B/gHKAYIB/wH+Ac4BigH/ - Af0BywGFBf8BvAFuATcB/wEcAcABoAH/ATwByAGqAf8BUgHJAa8B/wFaAcoBsAX/AbUBgQE5Af8BzQHU - AdYB/wGhAqMB/wGoASABFgH/AasBCAEAAf8BwgEOAQAB/wHVAQ0BAAH/AeoBNQEYAf8B/gHBAbQC/wHK - Ab0C/wHJAbgC/wHPAcAB/wH8Ab8BqwH/AcMBzgHPAf8BrAGuAa8B/0wAAxYBHwFpAWYC/wGBAW0C/wGB - AW0B/gH/AWMBYAH9Af8DHgErCAADHgErAVEBTgH4Af8BXgFcAfsB/wFtAWsC/wFRAU4B+AH/A0ABbwMB - AQIBswGDATsF/wHsAYoBAAH/AfEBoQElAf8B9QGxAUQB/wH2AbkBVQH/AfcBvwFhAf8B9gG/AWEF/wG6 - AWsBMwH/AQMBrwGLAf8BIwG2AZMB/wE4AboBnQH/AUgBwQGlBf8BtQGCAToB/wHOAdQB1gH/AaACoQH/ - AagBAwEAAf8BuQEHAQAB/wHQARYBAAH/AeIBDAEAAf8B+AFfAUoC/wHmAeAC/wHgAdgC/wHlAdwC/wHr - AeIB/wH9AdUByAH/AcQBzgHQAf8BrwKyAf9QAAMWAR8BaQFmAv8BaAFlAf4B/wMeASsQAAMeASsBUwFQ - AfgB/wFZAVcB+QH/AVMBUgFTAagDHQEpBAABtAGDATwF/wHpAWwBAAH/Ae0BjwEAAf8B7wGeARsB/wHx - AagBMQH/AfMBrwFAAf8B9AG1AU0F/wG0AWsBMwP/AfsD/wH2A/8B8wP/AfID/wH4Af8BtQGEAT4B/wHO - AdQB1gH/AaACoQH/Aa0CAAH/AcQBAQEAAf8B2gEEAQAB/wHyAQgBAAL/AYgBXgL/AdQBvgL/AcYBqgL/ - AcQBpgL/AcABnwH/AfsBrwGNAf8BxQHOAdAB/wGxAbQBtQH/VAADFgEfAx4BKxgAAx4BKwNAAW8DKQE+ - CAABtQGFAT8D/wH8A/8B/Qf/Af4D/wH8A/8B+gP/AfcD/wH5Af8BtAGCAToB/wG2AYQBPQH/AbYBgwE7 - Af8BtQGCATsB/wG1AYMBOwH/AbUBhAE+Af8DVQGwAc4B1AHWAf8BoAKhAf8BoAKhAf8BoAKhAf8BoQGi - AaMB/wGjAqUB/wGlAqcB/wGsAq8B/wGvArEB/wGxAbQBtQH/AbQCuAH/AbYBuwG8Af8BxQHPAdEB/wGz - AbcBuAH/eAADBwEKDAABZQFiAVgB7wG1AYUBPwH/AbMBgwE9Af8BswGDAT0B/wGzAYMBPQH/AbMBgwE8 - Af8BswGDATwB/wGzAYMBPAH/AbUBhAE+Af8CZAFcAecYAANDAXgBzgHUAdYB/wHOAdQB1gH/Ac4B1AHW - Af8BzQHUAdYB/wHNAdMB1QH/Ac0B0wHVAf8BygHSAdQB/wHKAdIB0wH/AckB0QHTAf8ByAHRAdIB/wHH - AdAB0QH/AcYBzwHRAf8DTgGVTAADHwEtAzABSwMvAUoDLwFKAy8BSQMyAVEDNgFZAzYBWQM2AVkDNgFZ - AzYBWQM1AVcDMQFOAyYBOQsAAf8DAAH/AwAB/wsAAf8DAAH/AwAB/wMAAf8DAAH/GAADFAEcAyABLgMg - AS4DIAEuASABIwEvAf8DWQHHA0IBdAM3AVsDNQFYAzMBUgMvAUoDKwFCAyABLgMUARxIAANSAaQE/wH1 - AfQB8wH/AfYB9QH0Bf8BQgFBAUMB/wEZARgBGwX/AfsC+gH/AvsB+gH/AfsC+gX/ApYBlwH/A1oB2AgA - A4YB/wPAAf8DAAH/AwAB/wOGCf8DwAH/AQAD/wEAAf8BAAH/AwAB/xgAAeIBuAGZAf8B4gG5AZgB/wHi - AbgBmQH/AU0BXAGdAf8BRQFVAZIB/wFBAVABkgH/ATABUwGeAf8BygGsAZgB/wHiAbgBmAH/AeIBuQGZ - Af8B4gG5AZgB/wHiAbgBmAH/GAADDAEQA0QBewJdAVoBygFeAVkBQgH1AWIBXgE4AfYCXAFZAcwDRQF9 - Aw0BERQAA1ABngH7AfoB+QH/Ae4C7QH/AfAB7wHuAf8B/gH9AfwB/wFBAUABQgH/ARgBFwEZAf8C8AHv - Af8C6AHnAf8C6AHnAf8C6AHnAf8B9QH0AfMB/wGPAY4BjwH/A1oB5AgAA4YB/wPAAf8DAAH/A4YB/wPA - Af8DwAX/A8AB/wEAAf8BAAH/A8AB/wPAAf8DAAH/FAAB4wG7AZsB/wH4AeABvgH/AfgB4AG+Af8BmwGf - Aa4B/wFZAWsBqQH/AUcBYwGgAf8BAAFaAbAB/wEAAWMBvwH/AfgB4QG+Af8B+AHgAb8B/wH4AeEBvgH/ - AeMBugGaAf8UAAM0AVQCXQFOAfABgAFUAQAB/wGAAVQBAAH/AYABVAEAAf8BgAFUAQAB/wGAAVQBAAH/ - AWABXwFMAfMCWAFWAcEDIQEwEAADUAGeAfsC+gH/Ae8B7gHtAf8C8AHvAf8B/gH9AfwB/wGGAYQBhQH/ - ASUBJAElAf8C9QH0Af8C7QHsAf8C7QHsAf8B7gHtAewB/wL6AfkB/wGUAZMBlAH/A1sB4QgAA4YB/wPA - Af8DAAH/A4YB/wPAAf8DwAH/A8AB/wMAAf8BAAH/AQAD/wEAA/8BAAH/AwAB/xQAAeQBvQGcAf8B+AHh - Ab8B/wHzAdYBsgH/AcIBuAGuAf8BRgFmAawB/wEYAcAB+AH/AQABlwHXAf8BAAFlAdQB/wEAAWUBwQH/ - AfMB1gGyAf8B+AHhAb8B/wHkAb0BnQH/EAADNAFUAYQBVwEAAf8BhwFaAQEB/wGHAVoBAQH/AYcBWgEB - Af8BhwFaAQEB/wF/AWsBEgH+Al0BTgHwAloBVwHFA0sBjgI1ATQBVQMKAQ0MAANQAZ4B/QH8AfsB/wLw - Ae8B/wHyAvEB/wH+Av0B/wGSAZABkQH/ARcBFQEWAf8BrAGrAaoB/wGsAasBqgH/AawBqwGqAf8BqgKp - Af8BrQGsAasB/wEvAS0BLgH/A1sB4QgAA4YB/wPAAf8DAAH/A4YB/wPAAf8DwAP/AQAB/wMAAf8DAAH/ - A8AB/wPAAf8DAAH/FAAB5gHAAZ8B/wH4AeIBwQH/AdkBvgGdAf8B2QG+AZ4B/wGWAacBqwH/AQABYQHE - Af8BEwHTAv8BAAGzAe4B/wEAAWUB1AH/AQABZwHCAf8B+AHhAcAB/wHmAcABnwH/DAADDQESAl0BTgHw - AZABYQEEAf8BkAFhAQQB/wGQAWEBBAH/AZkBaAEEAf8BlgFmAQIB/wFjAWABWQHrAlkBVgG+A0gBhgIx - ATABTQMUARwDAQECDAADUAGeAf4C/QH/AfIB8QHwAf8C8wHyAv8C/gH/AZ0CnAH/AQ4CDAH/ARsBGQEY - Af8BHQEaARkB/wEdAhoB/wEaAhgB/wESAhAB/wEEAQIBBAH/A1sB4QgAA4YF/wMAAf8DhgP/AQAB/wPA - A/8BAAH/AQAH/wPAAf8DwAH/AwAB/wMAAf8DAAH/DAAB5wHDAaIB/wH4AeMBwgH/AfYB3QG6Af8B+AHj - AcMB/wH4AeMBwgH/AbYBxQHDAf8BAAFhAcQB/wETAdMC/wEUAcYB9gH/AQABZQHUAf8BAAFrAcoB/wHo - AcMBogH/AwABAQgAA0UBfQGZAWgBBQH/AZkBaQEGAf8BmgFpAQYB/wFrAWQBUwHxAzsBYwMNAREDCgEN - AyQBNQMrAUIDEAEWAwABARAAA1ABngL/Af4B/wHzAvIB/wL0AfMD/wH+Af8BowKiAf8BGQEWARUB/wFB - AT8BPQH/Ac8BzgHNAf8BxwHFAcQB/wGpAacBpgH/AZ0BmwGaAf8BiwGJAYoB/wNbAeEIAAOGBf8DAAH/ - A8AB/wOGA/8BAAP/AQAB/wEAC/8DAAH/A8AB/wPAAf8DwAH/AwAB/wgAAeoBxgGkAf8B+AHkAcQB/wHc - AcIBpAH/AdwBxAGmAf8B3AHEAaYB/wHcAcUBpgH/AaEBrgGvAf8BAAFhAcQB/wGYAewC/wEUAcYB9gH/ - AQABZQHUAf8CbQFkAf8DKAE8CAACXAFaAc0BowGCAQkB/wGjAYIBCQH/AaUBgwEIAf8DOwFjEAADBAEF - GAADUAGeBP8B9ALzAf8D9QX/AagBpgGlAf8BEQIOAf8BMwIyAf8B5gLlAf8B8QLwAf8BpwGmAaUB/wE7 - ATgBNwH/AZoCmAH/A1wB5wgAA4YF/wMAAf8DwAH/A8AB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A4YB/wOG - Af8DhgH/A8AB/wMAAf8IAAHsAcoBqAH/AfgB5QHGAf8B+QHkAcYB/wH5AeUBxQH/AfkB5AHGAf8B+AHk - AcYB/wH3AeMBxQH/AbwByAHGAf8BAAFhAcQB/wGWAeoB/gH/ArcBrAH/AV0BXgFQAf8CbQFkAf8IAAFr - AV4BQgH1Aa4BiwELAf8BrgGLAQsB/wGfAW0BBgH/Aw0BESwAA1ABngT/AvUB9AH/AvcB9gX/AawCqgH/ - ARYBFAETAf8BNAEyATMB/wHPAc0BzAH/AdQB0gHRAf8BtAKyAf8BqgGnAaYB/wNqAfkDVwG9CAADhgH/ - A4YB/wMAAf8DwAH/A8AB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A8AB/wMAAf8IAAHu - Ac0BqwH/AfgB5gHHAf8B3wHIAaoB/wHeAcgBqgH/Ad8ByAGrAf8B3wHHAasB/wHbAcMBpgH/AdoBwgGk - Af8BqwGwAasB/wGOAY8BhAH/AeAB4gHTAf8CiQFuAf8BBgFUAd4B/wFVAVwBZAHqBAABbQFgAUIB9QG5 - AZQBDgH/AbkBlAEOAf8BpwGEAQgB/wMNAREIAANMAZIBqQGGAQgB/wGjAYIBBwH/AaMBggEHAf8BowGC - AQcB/wGjAYIBBwH/AWsBXwFMAfMIAANQAZ4E/wH3AvYB/wP4Af8D+gH/A/AB/wHqAukB/wPwAf8D9wH/ - A/YB/wL6AfkB/wNYAbkDFwEgAwcBCQQAA4YJ/wOGAf8DwAH/A8AB/wOGAf8DwAH/A8AB/wPAAf8DwAH/ - A8AB/wPAAf8DwAH/A4YB/wMAAf8IAAHwAdABrQH/AfkB5gHJAf8B+AHmAckB/wH5AeYByQH/AfkB5gHJ - Af8B9wHlAckB/wHwAdkBvQH/AekBzwGzAf8B6AHOAbIB/wHMAbkBrwH/AokBbgH/AUMBlgHqAf8BMQGF - AeAB/wFaAl0B0wQAAlwBWgHNAcMBnAEQAf8BwwGcARAB/wG/AZgBDwH/AzsBYwgAAwwBEAJbAVgCywGi - ARIB/wHDAZwBEAH/AcMBnAEQAf8BwwGcARAB/wGpAYYBCAH/CAADUAGeBP8C+AH3Af8D+QH/A/oB/wL+ - Af0V/wNWAasQAAOGAf8DhgH/A4YB/wOGAf8DwAH/A4YB/wHMAjwC/wHMATwB/wHMAZkBCQH/AcwBmQEA - Av8BPAEJAf8BzAE8AQkF/wOGAf8DAAH/CAAB8QHTAbEB/wH5AecBywH/AeIBzAGwAf8B4gHLAa8B/wHh - AcwBrwH/AeEBygGvAf8B1wG+AaEB/wHVAboBnAH/AdQBuQGdAf8B1AG5AZ0B/wG2Aa8BtAH/AWMBkgHE - Af8DSAGGCAACRgFFAX4B0gGoARMB/wHNAaQBEwH/Ac0BpAETAf8BbwFnAVMB8QM7AWMDDQERAw0BEQNB - AXIBvwGYAQ4B/wHNAaQBEwH/Ac0BpAETAf8BzQGkARMB/wGwAYwBCgH/CAADUAGeBP8C+QH4Af8D+gH/ - A/wB/wP9Af8D/gX/AfwC/QH/AfQC9QH/A/oB/wNWAbMYAAOGCf8DhgH/AcwCPAP/ATwC/wHMATwB/wHM - AZkBCQH/AcwBmQEAAv8BPAEJBf8DhgH/AwAB/wgAAfMB1wG0Af8B+QHnAcwB/wH4AecBzAH/AfkB6AHM - Af8B+QHoAcwB/wH3AeUBygH/AecBzwG1Af8B8gHeAcYB/wHzAeAByAH/AfcB6AHTAf8DWgHFAe8B0AGu - Af8DAQECAwABAQQAAw8BFAFoAWMBTgHwAdgBrQEVAf8B1wGsARUB/wHXAawBFQH/AdEBpwETAf8BvQGX - AQ0B/wG9AZcBDQH/AdEBpwETAf8B1wGsARUB/wHXAawBFQH/AdcBrAEVAf8B1wGsARUB/wG2AZEBCwH/ - CAADUAGeBP8D+gH/A/wB/wP9Af8D/gX/Af4B/wH+Af8D6gH/AtcB2AH/Ad0C3gH/AzsBZBwAA4YB/wOG - Af8DhgH/AcwCPAP/ATwD/wE8Av8BzAE8Af8BzAGZAQkB/wHMAZkBAAX/A4YB/wMAAf8IAAH0AdkBtQH/ - AfkB6AHNAf8B5AHPAbQB/wHkAc8BtAH/AeQBzwG0Af8B4wHOAbMB/wHdAcYBqQH/AfkB6AHOAf8B+QHo - Ac4B/wNcAcwB8QHTAbEB/wMmATgQAAI1ATQBVQHbAbEBFQH/Ad8BswEXAf8B3gGzARcB/wHeAbMBFwH/ - Ad4BswEXAf8B3gGzARcB/wHeAbMBFwH/Ad4BswEXAf8B3wGzARcB/wHcAbIBFQH/AeYBugEZAf8BuwGV - AQ0B/wgAA1ABngT/A/wB/wP9Cf8D/QH/AvoB+wH/AesC7AH/AvoB+wH/A0IBcygAA4YB/wHMAjwC/wHM - ATwD/wE8A/8BPAL/AcwBPAH/AcwBmQEJBf8DhgH/AwAB/wgAAfYB2wG4Af8B+QHpAc8B/wH5AekBzgH/ - AfkB6AHOAf8B+AHoAc4B/wH2AeUBzAH/Ae4B2gG/Af8B+QHoAc4B/wNgAd4B9AHZAbUB/wMmATgYAAI1 - ATQBVQFpAWYBTgHwAe0BwgEbAf8B5gG5ARkB/wHmAbgBGQH/AeYBuAEZAf8B5gG5ARkB/wHtAcIBGwH/ - AXIBbQFTAfECOgE5AWACWwFYAcsBxwGgARAB/wgAA1QBphz/AesC7AH/A0IBcywAA4YB/wHMAjwB/wHM - ATwBCQH/AcwBPAEJAf8BzAE8AQkB/wHMATwBCQH/AcwBPAEJBf8DhgH/AwAB/wgAAfcB3QG6Af8B+QHp - Ac8B/wH5AekBzwH/AfkB6QHPAf8B+QHpAc8B/wH3AeYBzQH/Ae0B2AG9Af8B+QHoAc4B/wH3Ad0BuAH/ - AyYBOCAAAwwBEANFAX0CXAFZAcwBjQF+AT4B+AGNAYYBPwH5Al4BXAHOAkYBRQF+Aw0BEgQAAwwBEANM - AZIIAAMmBDgBXAM4AVwDOAFcAzgBXAM4AVwDOAFcAzgBXAMpAT8wAAOGAf8D1wH/A9cB/wPXAf8D1wH/ - A9cB/wPXAf8D1wH/A4YB/wMAAf8IAAH4Ad8BuwH/AfgB3wG7Af8B+AHfAbsB/wH4Ad8BuwH/AfgB3wG7 - Af8B+AHfAbsB/wH4Ad8BuwH/AfgB3wG7Af8DJgE4VAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEA - AQEGAAEBFgAD/wEAAv8B4AEHAf4BAQIAAucBwAEHAfwDAALDAcABBwHgAwACgQHAAQcB4AMAAYABAQHA - AQAB8AMAAcABAwYAAeABBwYAAfABDwYAAfABDwYAAeABBwMAAQECAAHAAQMDAAEDAgABgAEBAwABAwIA - AYEBgAMAAQMCAAHDAcEDAAEDAgAB5wHjAwABAwIAAf8B9wEAAT8BAAEDAgABgAEBAYwBHwGAAQEC/wGA - AQEBgAEPAcABAwHwAQ8BgAEBAYABBwHAAQMB4AEHAYABAQGAAQcBwAEDAcABAwGAAQEBgAEHAcABAwGA - AQMBgAEBAYABAQHAAQEBgAEHAYABAQGAAQABwAEBAYMB3wGAAQEBgAEAAcABAQGDAf8BgAEBAYABAAHA - AQABgwEBAYABAQIAAcABAAGDAQEBgAEHAYABAAHAAQEBgAEBAYABBwHgAQABwAEAAYABAQGAAQcB8AEA - AcABAwHAAQEBgAEPAfwBAAHAAQcB4AEBAYABHwH8AQABwAEPAfABCQGAAT8B/AEAAcABHwL/Cw== + AQEDQgF0A1gBwQNYAe8DWAHvA1gBwQNCAXQDAAEBUAADKgFBAwYBCBgAAwYBCAMqAUEUAAMIAQsBYQFd + AVQB8AG2AYQBNwH/AbUBgwEzAf8BtgGCATIB/wG2AYIBMgH/AbYBggEyAf8BtgGCATIB/wG1AYMBMwH/ + AbYBhAE3Af8CWgFYAcAnAAEBA1oBwAOLAf8BuQK6Af8D3AH/A9kB/wO1Af8BhgKHAf8DWgHAAwABAUgA + AyoBQQE5ATYB8gH/AkABuAH9AwYBCBAAAwYBCAIrAaYB/AEbARkB6gH/AyoBQRAAAykBPwG2AYQBNyH/ + AbYBhAE3Af8YAAG5Ar8B/wG5Ar8B/wGyArcB/wGLAY0BjgH/AY0BjgGNAf8BxQHgAcsB/wHOAeMB0gH/ + Ae4C7wH/AewB7QHsAf8B6gLpAf8D5wH/A4cB/wNCAXREAAMqAUEBQgFAAfUB/wFNAUsB+gH/AUIBPwH2 + Af8CKwGrAfwDBgEICAADBgEIAisBpwH8ASsBKQHxAf8BNgE0AfYB/wEbARkB6gH/AyoBQQwAAycBOwG1 + AYMBMwX/AQABKgHyAf8BAAFQAfMB/wEPAZoB9gH/ARMBpgH4Af8BAgFfAfQB/wEAASUB8gX/AbUBgwEz + Af8YAANHAYID2AH/Ac0B1AHVAf8BaAFpAWoB/wPDAf8BVgG5AWUB/wEAAY4BDQH/Ad0B6wHgAf8D8QH/ + AdcB5QHaAf8B3wHnAeEB/wK3AbgB/wNYAcFEAAMeASsBRQFCAfYB/wFPAUwB+gH/AVsBWgL/AUMBQAH2 + Af8CKwGrAfwDBgEIAwYBCAIrAakB/AExAS8B8gH/AU0BTAL/ATQBMgH0Af8BGQEXAekB/wMeASsMAAMk + ATYBtgGDATMF/wEVATwB8gH/AR8BYwHyAf8BGAGTAfQB/wEcAZoB9AH/AQ8BYQHxAf8BAAEoAfAF/wG2 + AYMBMgH/AyMBMwMjATMDGQEjEAADJAE2A0cBggNKAf8D7AH/A/sB/wEMAZgBIgH/AUEBsAFSAf8D9QH/ + AQABkAERAf8BSQGxAVkB/wHeAd8B3gH/A1gB70gAAx4BKwFFAUMB9gH/AVABTQH6Af8BXgFbAv8BRAFC + AfYB/wEsASsBqwH8AkABuAH9AToBNwH0Af8BUgFRAv8BOgE4AfUB/wEgAR4B6wH/Ax4BKwgAAxkEIwEz + AzEBTwG2AYMBMwP/AfwB/wEJASkB8AH/ATsBaQHyAf8BPAGTAfQB/wEhAYMB8gH/AQUBRwHwAf8BAAEd + AfAD/wH7Af8BtQGAAS8B/wG1AYMBNgH/AbYBhAE4Af8CWgFYAcADSAGGAb4CxAH/AbwCwQH/AbkBvQG+ + Af8BtwG6AbsB/wG0ArgB/wNLAf8D7gH/AVsBvQFpAf8BAgGUARkB/wHlAfEB5gH/AQABkAEQAf8BEAGa + ASYB/wHpAe8B6gH/A+IB/wNYAe9MAAMeASsBRgFEAfYB/wFRAU4B+gH/AV4BXAL/AV0BWgL/AVoBWAL/ + AVgBVgL/AUEBPwH3Af8BKQEnAe4B/wMeASsMAAJaAVgBwAG1AYUBOQH/AbUBhAE4Af8BtQGCATAD/wH7 + Af8BAAEOAe4B/wEqAUwB8AH/AUcBhQHzAf8BXgGVAfQB/wGDAZoB9gH/AYABjQH5A/8B+QH/AbUBZgEq + Cf8BtgGEATcB/wHKAdIB0wH/AckB0gHTAf8ByQHQAdMB/wHIAdEB0gH/AccB0AHRAf8BxgHQAdEB/wFo + AmsB/wPGAf8BzwHpAdQB/wHmAfQB6QH/Af0C/gH/AcsB5gHPAf8BAAGNAQsB/wFNAbUBXQH/AcABwQHA + Af8DWAHBUAADHgErAUcBRQH3Af8BYwFgAv8BQwFAAv8BQQE+Av8BXAFaAv8BMgEwAfAB/wMeASsQAAG1 + AYQBOAX/AfYB8AHpAf8BsgFpAS0D/wH9Af8CAAHsAf8BFwEqAe0B/wEzAUoB8AH/AUYBXQHyAf8BVgFl + AfQB/wFcAV8B9gP/AfwB/wG8AWYBKgH/AQABrgGABf8BtgGCATUB/wHKAdIB1AH/AawCrwH/AYYCAAH/ + AYsCAAH/AYcCAAH/AYsCAAH/AYYCFgH/A5AB/wHyAfkB8wn/Af4B/wH+Af8BywHnAdEB/wGrAdEBsgH/ + A48B/wNCAXRQAAMGAQgBQwFCAbsB/QFnAWMC/wFIAUUC/wFFAUIC/wFgAV4C/wJAAbkB/QMGAQgQAAG0 + AYIBNQX/AecBmwEfAf8BsQFpATAF/wIAAe0B/wIAAe4B/wERARgB8AH/AScBLwHyAf8BOgE8AfUB/wFI + AUcB9wX/AcABZwEtAf8BAAGtAYEF/wG2AYIBNQH/AcwB0wHVAf8BqgGsAa0B/wGbARUBCwH/AZwBGQEN + Af8BmwEBAQAB/wGoAQEBAAH/AbIBAwEAAf8BnAFrAWYB/wOQAf8DxgH/A+4B/wPuAf8DxgH/A5AB/wNa + AcADAAEBTAADBgEIAUsBRQGvAfwBWgFXAfsB/wGAAWgC/wFoAWUC/wFmAWMC/wFjAWEC/wFIAUYB9wH/ + AS4BLAGrAfwDBgEIDAABswGCATYF/wHmAZ4BKAH/Aa8BgAE2A/8B9gP/Ae0D/wHrA/8B6gP/AeoD/wHq + A/8B7AP/AfMB/wHCAWcBLgH/AQABqwFoBf8BtgGCATUB/wHMAdMB1QH/AagCqgH/AaUBLQEjAf8BnwEY + AQ0B/wGjAgAB/wGyAQMBAAH/AcABCQEAAf8B3wFjAVEB/wG3AYoBggH/AYgBXwFbAf8BUQFLAUoB/wFQ + AUoBSAH/AWoCbQH/AY8CkAH/AwABAUwAAwYBCAFYAVUBsQH8AWEBXgH9Af8BhgGCAv8BYAFdAfwB/wFO + AUwB+AH/AUoBRwH3Af8BVwFUAfoB/wFlAWMC/wFKAUcB9wH/AS4BLQGrAfwDBgEICAABswGCATYF/wHy + AaEBGwH/Ab0BiwE/Af8BrwGAATgB/wGvAWkBMgH/AbABaAEwAf8BrwFnAS4B/wGxAWcBLAH/AbcBaQEv + Af8BvQFpAS8B/wHBAWgBLwH/AaYBnwFcAf8BXwHTAb0F/wG1AYIBNQH/Ac4B1AHVAf8BogKkAf8BrAE0 + ASsB/wGhAQsBAAH/Aa0CAAH/Ab4BBgEAAf8BzwEWAQAB/wHwAZoBiwH/AfcBtAGoAf8B+QGuAZ4B/wH+ + AbUBpwH/AfgBpQGSAf8BwgHOAc8B/wGqAqwB/0wAAwYBCAFPAU0BvgH9AWcBZAH+Af8BigGHAv8BZgFj + Af0B/wFWAVMB+wH/Ax4BKwMeASsBSwFIAfgB/wFYAVYB+gH/AWcBZAL/AUsBSQH3Af8BLwEtAawB/AME + AQUEAAGzAYIBNgX/AfEBlwEGAf8B+AGyATwB/wH9AcEBXAH/Af4BygGCAf8B/gHOAYoB/wH9AcsBhQX/ + AbwBaQEyAf8BFwHAAaAB/wE3AcgBqgH/AU0ByQGvAf8BVQHKAbAF/wG1AYEBNAH/Ac0B1AHWAf8BoQKj + Af8BqAEbAREB/wGrAQMBAAH/AcIBCQEAAf8B1QEIAQAB/wHqATABEwH/Af4BwQG0Av8BygG9Av8ByQG4 + Av8BzwHAAf8B/AG/AasB/wHDAc4BzwH/AawBrgGvAf9MAAMWAR8BZAFhAv8BgQFoAv8BgQFoAf4B/wFe + AVsB/QH/Ax4BKwgAAx4BKwFMAUkB+AH/AVkBVwH7Af8BaAFmAv8BTAFJAfgB/wNAAW8DAQECAbMBgwE2 + Bf8B7AGKAQAB/wHxAaEBIAH/AfUBsQE/Af8B9gG5AVAB/wH3Ab8BXAH/AfYBvwFcBf8BugFmAS4B/wEA + Aa8BiwH/AR4BtgGTAf8BMwG6AZ0B/wFDAcEBpQX/AbUBggE1Af8BzgHUAdYB/wGgAqEB/wGoAgAB/wG5 + AQIBAAH/AdABEQEAAf8B4gEHAQAB/wH4AVoBRQL/AeYB4AL/AeAB2AL/AeUB3AL/AesB4gH/Af0B1QHI + Af8BxAHOAdAB/wGvArIB/1AAAxYBHwFkAWEC/wFjAWAB/gH/Ax4BKxAAAx4BKwFOAUsB+AH/AVQBUgH5 + Af8BUwFSAVMBqAMdASkEAAG0AYMBNwX/AekBZwEAAf8B7QGPAQAB/wHvAZ4BFgH/AfEBqAEsAf8B8wGv + ATsB/wH0AbUBSAX/AbQBZgEuA/8B+wP/AfYD/wHzA/8B8gP/AfgB/wG1AYQBOQH/Ac4B1AHWAf8BoAKh + Af8BrQIAAf8BxAIAAf8B2gIAAf8B8gEDAQAC/wGIAVkC/wHUAb4C/wHGAaoC/wHEAaYC/wHAAZ8B/wH7 + Aa8BjQH/AcUBzgHQAf8BsQG0AbUB/1QAAxYBHwMeASsYAAMeASsDQAFvAykBPggAAbUBhQE6A/8B/AP/ + Af0H/wH+A/8B/AP/AfoD/wH3A/8B+QH/AbQBggE1Af8BtgGEATgB/wG2AYMBNgH/AbUBggE2Af8BtQGD + ATYB/wG1AYQBOQH/A1UBsAHOAdQB1gH/AaACoQH/AaACoQH/AaACoQH/AaEBogGjAf8BowKlAf8BpQKn + Af8BrAKvAf8BrwKxAf8BsQG0AbUB/wG0ArgB/wG2AbsBvAH/AcUBzwHRAf8BswG3AbgB/3gAAwcBCgwA + AmIBWAHvAbUBhQE6Af8BswGDATgB/wGzAYMBOAH/AbMBgwE4Af8BswGDATcB/wGzAYMBNwH/AbMBgwE3 + Af8BtQGEATkB/wJkAVwB5xgAA0MBeAHOAdQB1gH/Ac4B1AHWAf8BzgHUAdYB/wHNAdQB1gH/Ac0B0wHV + Af8BzQHTAdUB/wHKAdIB1AH/AcoB0gHTAf8ByQHRAdMB/wHIAdEB0gH/AccB0AHRAf8BxgHPAdEB/wNO + AZVMAAMfAS0DMAFLAy8BSgMvAUoDLwFJAzIBUQM2AVkDNgFZAzYBWQM2AVkDNgFZAzUBVwMxAU4DJgE5 + CwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/AwAB/wMAAf8YAAMUARwDIAEuAyABLgMgAS4BGwEeASoB/wNZ + AccDQgF0AzcBWwM1AVgDMwFSAy8BSgMrAUIDIAEuAxQBHEgAA1IBpAT/AfUB9AHzAf8B9gH1AfQF/wE9 + ATwBPgH/ARQBEwEWBf8B+wL6Af8C+wH6Af8B+wL6Bf8ClgGXAf8DWgHYCAADhgH/A8AB/wMAAf8DAAH/ + A4YJ/wPAAf8BAAP/AQAB/wEAAf8DAAH/GAAB4gG4AZkB/wHiAbkBmAH/AeIBuAGZAf8BSAFXAZ0B/wFA + AVABkgH/ATwBSwGSAf8BKwFOAZ4B/wHKAawBmAH/AeIBuAGYAf8B4gG5AZkB/wHiAbkBmAH/AeIBuAGY + Af8YAAMMARADRAF7Al0BWgHKAlkBQgH1AWIBXgFBAfYCXAFZAcwDRQF9Aw0BERQAA1ABngH7AfoB+QH/ + Ae4C7QH/AfAB7wHuAf8B/gH9AfwB/wE8ATsBPQH/ARMBEgEUAf8C8AHvAf8C6AHnAf8C6AHnAf8C6AHn + Af8B9QH0AfMB/wGPAY4BjwH/A1oB5AgAA4YB/wPAAf8DAAH/A4YB/wPAAf8DwAX/A8AB/wEAAf8BAAH/ + A8AB/wPAAf8DAAH/FAAB4wG7AZsB/wH4AeABvgH/AfgB4AG+Af8BmwGfAa4B/wFUAWYBqQH/AUIBXgGg + Af8BAAFVAbAB/wEAAV4BvwH/AfgB4QG+Af8B+AHgAb8B/wH4AeEBvgH/AeMBugGaAf8UAAM0AVQCXQFO + AfABgAFPAQAB/wGAAU8BAAH/AYABTwEAAf8BgAFPAQAB/wGAAU8BAAH/Al8BTAHzAlgBVgHBAyEBMBAA + A1ABngH7AvoB/wHvAe4B7QH/AvAB7wH/Af4B/QH8Af8BhgGEAYUB/wEgAR8BIAH/AvUB9AH/Au0B7AH/ + Au0B7AH/Ae4B7QHsAf8C+gH5Af8BlAGTAZQB/wNbAeEIAAOGAf8DwAH/AwAB/wOGAf8DwAH/A8AB/wPA + Af8DAAH/AQAB/wEAA/8BAAP/AQAB/wMAAf8UAAHkAb0BnAH/AfgB4QG/Af8B8wHWAbIB/wHCAbgBrgH/ + AUEBYQGsAf8BEwHAAfgB/wEAAZcB1wH/AQABYAHUAf8BAAFgAcEB/wHzAdYBsgH/AfgB4QG/Af8B5AG9 + AZ0B/xAAAzQBVAGEAVIBAAH/AYcBVQEAAf8BhwFVAQAB/wGHAVUBAAH/AYcBVQEAAf8BfwFrARIB/gJd + AU4B8AJaAVcBxQNLAY4CNQE0AVUDCgENDAADUAGeAf0B/AH7Af8C8AHvAf8B8gLxAf8B/gL9Af8BkgGQ + AZEB/wESARABEQH/AawBqwGqAf8BrAGrAaoB/wGsAasBqgH/AaoCqQH/Aa0BrAGrAf8BKgEoASkB/wNb + AeEIAAOGAf8DwAH/AwAB/wOGAf8DwAH/A8AD/wEAAf8DAAH/AwAB/wPAAf8DwAH/AwAB/xQAAeYBwAGf + Af8B+AHiAcEB/wHZAb4BnQH/AdkBvgGeAf8BlgGnAasB/wEAAVwBxAH/AQ4B0wL/AQABswHuAf8BAAFg + AdQB/wEAAWIBwgH/AfgB4QHAAf8B5gHAAZ8B/wwAAw0BEgJdAU4B8AGQAVwBAAH/AZABXAEAAf8BkAFc + AQAB/wGZAWMBAAH/AZYBYQEAAf8CYAFZAesCWQFWAb4DSAGGAjEBMAFNAxQBHAMBAQIMAANQAZ4B/gL9 + Af8B8gHxAfAB/wLzAfIC/wL+Af8BnQKcAf8BCQIHAf8BFgEUARMB/wEYARUBFAH/ARgCFQH/ARUCEwH/ + AQ0CCwH/AwAB/wNbAeEIAAOGBf8DAAH/A4YD/wEAAf8DwAP/AQAB/wEAB/8DwAH/A8AB/wMAAf8DAAH/ + AwAB/wwAAecBwwGiAf8B+AHjAcIB/wH2Ad0BugH/AfgB4wHDAf8B+AHjAcIB/wG2AcUBwwH/AQABXAHE + Af8BDgHTAv8BDwHGAfYB/wEAAWAB1AH/AQABZgHKAf8B6AHDAaIB/wMAAQEIAANFAX0BmQFjAQAB/wGZ + AWQBAQH/AZoBZAEBAf8CZAFTAfEDOwFjAw0BEQMKAQ0DJAE1AysBQgMQARYDAAEBEAADUAGeAv8B/gH/ + AfMC8gH/AvQB8wP/Af4B/wGjAqIB/wEUAREBEAH/ATwBOgE4Af8BzwHOAc0B/wHHAcUBxAH/AakBpwGm + Af8BnQGbAZoB/wGLAYkBigH/A1sB4QgAA4YF/wMAAf8DwAH/A4YD/wEAA/8BAAH/AQAL/wMAAf8DwAH/ + A8AB/wPAAf8DAAH/CAAB6gHGAaQB/wH4AeQBxAH/AdwBwgGkAf8B3AHEAaYB/wHcAcQBpgH/AdwBxQGm + Af8BoQGuAa8B/wEAAVwBxAH/AZgB7AL/AQ8BxgH2Af8BAAFgAdQB/wJoAV8B/wMoATwIAAJcAVoBzQGj + AYIBBAH/AaMBggEEAf8BpQGDAQMB/wM7AWMQAAMEAQUYAANQAZ4E/wH0AvMB/wP1Bf8BqAGmAaUB/wEM + AgkB/wEuAi0B/wHmAuUB/wHxAvAB/wGnAaYBpQH/ATYBMwEyAf8BmgKYAf8DXAHnCAADhgX/AwAB/wPA + Af8DwAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DhgH/A4YB/wOGAf8DwAH/AwAB/wgAAewBygGoAf8B+AHl + AcYB/wH5AeQBxgH/AfkB5QHFAf8B+QHkAcYB/wH4AeQBxgH/AfcB4wHFAf8BvAHIAcYB/wEAAVwBxAH/ + AZYB6gH+Af8CtwGsAf8BWAFZAUsB/wJoAV8B/wgAAWYBWQFCAfUBrgGLAQYB/wGuAYsBBgH/AZ8BaAEB + Af8DDQERLAADUAGeBP8C9QH0Af8C9wH2Bf8BrAKqAf8BEQEPAQ4B/wEvAS0BLgH/Ac8BzQHMAf8B1AHS + AdEB/wG0ArIB/wGqAacBpgH/A2oB+QNXAb0IAAOGAf8DhgH/AwAB/wPAAf8DwAH/A4YB/wOGAf8DhgH/ + A4YB/wOGAf8DhgH/A4YB/wOGAf8DwAH/AwAB/wgAAe4BzQGrAf8B+AHmAccB/wHfAcgBqgH/Ad4ByAGq + Af8B3wHIAasB/wHfAccBqwH/AdsBwwGmAf8B2gHCAaQB/wGrAbABqwH/AY4BjwGEAf8B4AHiAdMB/wKJ + AWkB/wEBAU8B3gH/AVUBXAFeAeoEAAFoAVkBQgH1AbkBlAEJAf8BuQGUAQkB/wGnAYQBAwH/Aw0BEQgA + A0wBkgGpAYYBAwH/AaMBggECAf8BowGCAQIB/wGjAYIBAgH/AaMBggECAf8BYgFfAUwB8wgAA1ABngT/ + AfcC9gH/A/gB/wP6Af8D8AH/AeoC6QH/A/AB/wP3Af8D9gH/AvoB+QH/A1gBuQMXASADBwEJBAADhgn/ + A4YB/wPAAf8DwAH/A4YB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DhgH/AwAB/wgAAfAB0AGt + Af8B+QHmAckB/wH4AeYByQH/AfkB5gHJAf8B+QHmAckB/wH3AeUByQH/AfAB2QG9Af8B6QHPAbMB/wHo + Ac4BsgH/AcwBuQGvAf8CiQFpAf8BPgGWAeoB/wEsAYUB4AH/AVoCXQHTBAACXAFaAc0BwwGcAQsB/wHD + AZwBCwH/Ab8BmAEKAf8DOwFjCAADDAEQAlsBWALLAaIBDQH/AcMBnAELAf8BwwGcAQsB/wHDAZwBCwH/ + AakBhgEDAf8IAANQAZ4E/wL4AfcB/wP5Af8D+gH/Av4B/RX/A1YBqxAAA4YB/wOGAf8DhgH/A4YB/wPA + Af8DhgH/AcwCNwL/AcwBNwH/AcwBmQEEAf8BzAGZAQAC/wE3AQQB/wHMATcBBAX/A4YB/wMAAf8IAAHx + AdMBsQH/AfkB5wHLAf8B4gHMAbAB/wHiAcsBrwH/AeEBzAGvAf8B4QHKAa8B/wHXAb4BoQH/AdUBugGc + Af8B1AG5AZ0B/wHUAbkBnQH/AbYBrwG0Af8BXgGSAcQB/wNIAYYIAAJGAUUBfgHSAagBDgH/Ac0BpAEO + Af8BzQGkAQ4B/wFnAWQBUwHxAzsBYwMNAREDDQERA0EBcgG/AZgBCQH/Ac0BpAEOAf8BzQGkAQ4B/wHN + AaQBDgH/AbABjAEFAf8IAANQAZ4E/wL5AfgB/wP6Af8D/AH/A/0B/wP+Bf8B/AL9Af8B9AL1Af8D+gH/ + A1YBsxgAA4YJ/wOGAf8BzAI3A/8BNwL/AcwBNwH/AcwBmQEEAf8BzAGZAQAC/wE3AQQF/wOGAf8DAAH/ + CAAB8wHXAbQB/wH5AecBzAH/AfgB5wHMAf8B+QHoAcwB/wH5AegBzAH/AfcB5QHKAf8B5wHPAbUB/wHy + Ad4BxgH/AfMB4AHIAf8B9wHoAdMB/wNaAcUB7wHQAa4B/wMBAQIDAAEBBAADDwEUAWEBXQFOAfAB2AGt + ARAB/wHXAawBEAH/AdcBrAEQAf8B0QGnAQ4B/wG9AZcBCAH/Ab0BlwEIAf8B0QGnAQ4B/wHXAawBEAH/ + AdcBrAEQAf8B1wGsARAB/wHXAawBEAH/AbYBkQEGAf8IAANQAZ4E/wP6Af8D/AH/A/0B/wP+Bf8B/gH/ + Af4B/wPqAf8C1wHYAf8B3QLeAf8DOwFkHAADhgH/A4YB/wOGAf8BzAI3A/8BNwP/ATcC/wHMATcB/wHM + AZkBBAH/AcwBmQEABf8DhgH/AwAB/wgAAfQB2QG1Af8B+QHoAc0B/wHkAc8BtAH/AeQBzwG0Af8B5AHP + AbQB/wHjAc4BswH/Ad0BxgGpAf8B+QHoAc4B/wH5AegBzgH/A1wBzAHxAdMBsQH/AyYBOBAAAjUBNAFV + AdsBsQEQAf8B3wGzARIB/wHeAbMBEgH/Ad4BswESAf8B3gGzARIB/wHeAbMBEgH/Ad4BswESAf8B3gGz + ARIB/wHfAbMBEgH/AdwBsgEQAf8B5gG6ARQB/wG7AZUBCAH/CAADUAGeBP8D/AH/A/0J/wP9Af8C+gH7 + Af8B6wLsAf8C+gH7Af8DQgFzKAADhgH/AcwCNwL/AcwBNwP/ATcD/wE3Av8BzAE3Af8BzAGZAQQF/wOG + Af8DAAH/CAAB9gHbAbgB/wH5AekBzwH/AfkB6QHOAf8B+QHoAc4B/wH4AegBzgH/AfYB5QHMAf8B7gHa + Ab8B/wH5AegBzgH/A2AB3gH0AdkBtQH/AyYBOBgAAjUBNAFVAWMBXQFOAfAB7QHCARYB/wHmAbkBFAH/ + AeYBuAEUAf8B5gG4ARQB/wHmAbkBFAH/Ae0BwgEWAf8BawFkAVMB8QI6ATkBYAJbAVgBywHHAaABCwH/ + CAADVAGmHP8B6wLsAf8DQgFzLAADhgH/AcwCNwH/AcwBNwEEAf8BzAE3AQQB/wHMATcBBAH/AcwBNwEE + Af8BzAE3AQQF/wOGAf8DAAH/CAAB9wHdAboB/wH5AekBzwH/AfkB6QHPAf8B+QHpAc8B/wH5AekBzwH/ + AfcB5gHNAf8B7QHYAb0B/wH5AegBzgH/AfcB3QG4Af8DJgE4IAADDAEQA0UBfQJcAVkBzAF+AXkBPgH4 + AYgBgQFBAfkCXgFcAc4CRgFFAX4DDQESBAADDAEQA0wBkggAAyYEOAFcAzgBXAM4AVwDOAFcAzgBXAM4 + AVwDOAFcAykBPzAAA4YB/wPXAf8D1wH/A9cB/wPXAf8D1wH/A9cB/wPXAf8DhgH/AwAB/wgAAfgB3wG7 + Af8B+AHfAbsB/wH4Ad8BuwH/AfgB3wG7Af8B+AHfAbsB/wH4Ad8BuwH/AfgB3wG7Af8B+AHfAbsB/wMm + AThUAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQABAQYAAQEWAAP/AQAC/wHgAQcB/gEBAgAC5wHA + AQcB/AMAAsMBwAEHAeADAAKBAcABBwHgAwABgAEBAcABAAHwAwABwAEDBgAB4AEHBgAB8AEPBgAB8AEP + BgAB4AEHAwABAQIAAcABAwMAAQMCAAGAAQEDAAEDAgABgQGAAwABAwIAAcMBwQMAAQMCAAHnAeMDAAED + AgAB/wH3AQABPwEAAQMCAAGAAQEBjAEfAYABAQL/AYABAQGAAQ8BwAEDAfABDwGAAQEBgAEHAcABAwHg + AQcBgAEBAYABBwHAAQMBwAEDAYABAQGAAQcBwAEDAYABAwGAAQEBgAEBAcABAQGAAQcBgAEBAYABAAHA + AQEBgwHfAYABAQGAAQABwAEBAYMB/wGAAQEBgAEAAcABAAGDAQEBgAEBAgABwAEAAYMBAQGAAQcBgAEA + AcABAQGAAQEBgAEHAeABAAHAAQABgAEBAYABBwHwAQABwAEDAcABAQGAAQ8B/AEAAcABBwHgAQEBgAEf + AfwBAAHAAQ8B8AEJAYABPwH8AQABwAEfAv8L diff --git a/remoteapp-tool/RemoteAppCreateClientConnection.vb b/remoteapp-tool/RemoteAppCreateClientConnection.vb index cba640f..f0999ca 100644 --- a/remoteapp-tool/RemoteAppCreateClientConnection.vb +++ b/remoteapp-tool/RemoteAppCreateClientConnection.vb @@ -12,6 +12,8 @@ Public Class RemoteAppCreateClientConnection Dim RemoteAppShortName = RemoteApp.Name Me.Text = "Create Client Connection for " & RemoteAppShortName + CertificateComboBox.Items.AddRange(rdpSign.GetCertificateFriendlyName) + SetCCWindowSettings() If Me.ServerAddress.Text = "" Then Me.ServerAddress.Text = System.Net.Dns.GetHostName @@ -32,11 +34,15 @@ Public Class RemoteAppCreateClientConnection MSIRadioButton.Text = "MSI installer (requires WiX Toolset)" End If + If Not My.Computer.FileSystem.FileExists(GetSysDir() & "\rdpsign.exe") Then + GroupBoxSignRDP.Enabled = False + GroupBoxSignRDP.Text += " (requires rdpsign.exe)" + GroupBoxSignRDP.Tag = "noexe" + End If + If Not RemoteApp.FileTypeAssociations Is Nothing Then _ FTACountLabel.Text = "Count: " & RemoteApp.FileTypeAssociations.Count - CertificateComboBox.Items.AddRange(rdpSign.GetCertificateFriendlyName) - Me.RDPRadioButton.Focus() HelpSystem.SetupTips(Me) Me.ShowDialog() @@ -62,6 +68,9 @@ Public Class RemoteAppCreateClientConnection My.Settings.SavedCreateRAWebIcon = False My.Settings.SavedMSIPerUser = False My.Settings.SavedDisableFTA = False + My.Settings.SavedSignRDP = False + My.Settings.SavedSignedAndUnsigned = False + My.Settings.SavedCertSelected = 0 End Sub Sub SaveCCWindowSettings() @@ -81,6 +90,9 @@ Public Class RemoteAppCreateClientConnection My.Settings.SavedCreateRAWebIcon = CreateRAWebIcon.Checked My.Settings.SavedMSIPerUser = PerUserRadioButton.Checked My.Settings.SavedDisableFTA = DisabledFTACheckBox.Checked + My.Settings.SavedSignRDP = CheckBoxSignRDPEnabled.Checked + My.Settings.SavedSignedAndUnsigned = CheckBoxCreateSignedAndUnsigned.Checked + My.Settings.SavedCertSelected = CertificateComboBox.SelectedIndex End Sub Sub SetCCWindowSettings() @@ -119,6 +131,20 @@ Public Class RemoteAppCreateClientConnection PerMachineRadioButton.Checked = False PerUserRadioButton.Checked = True End If + + CheckBoxSignRDPEnabled.Checked = My.Settings.SavedSignRDP + CertificateComboBox.Enabled = My.Settings.SavedSignRDP + CheckBoxCreateSignedAndUnsigned.Checked = My.Settings.SavedSignedAndUnsigned + + If CertificateComboBox.Items.Count >= (My.Settings.SavedCertSelected + 1) Then + CertificateComboBox.SelectedIndex() = My.Settings.SavedCertSelected + ElseIf CertificateComboBox.Items.Count > 0 Then + CertificateComboBox.SelectedIndex() = 0 + ElseIf Not GroupBoxSignRDP.Tag = "noexe" Then + GroupBoxSignRDP.Text += " (No certificates found)" + GroupBoxSignRDP.Enabled = False + End If + End Sub Private Sub UseRDGatewayCheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles UseRDGatewayCheckBox.CheckedChanged @@ -140,8 +166,11 @@ Public Class RemoteAppCreateClientConnection If RDPRadioButton.Checked Then CreateButton.ImageIndex = 6 + CheckBoxCreateSignedAndUnsigned.Enabled = True Else CreateButton.ImageIndex = 1 + CheckBoxCreateSignedAndUnsigned.Enabled = False + CheckBoxCreateSignedAndUnsigned.Checked = False End If End Sub @@ -150,15 +179,20 @@ Public Class RemoteAppCreateClientConnection Dim MSIPath = "" Dim TempMSIPath = "" + If CheckBoxSignRDPEnabled.Checked And CertificateComboBox.SelectedItem = "" Then + MessageBox.Show("You must select a certificate to sign the RDP file.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + Return + End If + If DisabledFTACheckBox.Checked And Not RemoteApp.FileTypeAssociations Is Nothing Then RemoteApp.FileTypeAssociations.Clear() If RDPRadioButton.Checked Then FileSaveRDP.FileName = RemoteApp.Name - If Not FileSaveRDP.ShowDialog() = Windows.Forms.DialogResult.OK Then Exit Sub + If Not FileSaveRDP.ShowDialog() = Windows.Forms.DialogResult.OK Then Return RDPPath = FileSaveRDP.FileName Else FileSaveMSI.FileName = RemoteApp.Name - If Not FileSaveMSI.ShowDialog() = Windows.Forms.DialogResult.OK Then Exit Sub + If Not FileSaveMSI.ShowDialog() = Windows.Forms.DialogResult.OK Then Return MSIPath = FileSaveMSI.FileName RDPPath = Environment.GetEnvironmentVariable("TEMP") & "\" & RemoteApp.Name & ".rdp" TempMSIPath = Environment.GetEnvironmentVariable("TEMP") & "\" & RemoteApp.Name & ".msi" @@ -189,6 +223,7 @@ Public Class RemoteAppCreateClientConnection ExtractFTIcon(ProductFileName, FTA) Next End If + Me.Close() Else '!!!!!!! If it's an MSI Dim RDP As New RDP2MSIlib.RDP @@ -225,9 +260,8 @@ Public Class RemoteAppCreateClientConnection RDP.CreateMSI(MSIPath) DeleteFiles(FilesToDelete) - + Me.Close() End If - Me.Close() End Sub Private Sub ExtractFTIcon(ProductFileName As String, FTA As RemoteAppLib.FileTypeAssociation) @@ -288,7 +322,7 @@ Public Class RemoteAppCreateClientConnection RDPfile.SaveRDPfile(RDPPath) - If Not CheckBoxSignRDPDisabled.Checked Then + If CheckBoxSignRDPEnabled.Checked Then Dim rdpSign As New RDPSign.RDPSign Dim Thumbprint As String = rdpSign.GetThumbprint(CertificateComboBox.Text) rdpSign.SignRDP(Thumbprint, RDPPath, CheckBoxCreateSignedAndUnsigned.Checked) @@ -315,7 +349,7 @@ Public Class RemoteAppCreateClientConnection End Function Private Sub FTAButton_Click(sender As Object, e As EventArgs) Handles FTAButton.Click - MessageBox.Show(Me, "Changes made here to File Type Associations are for this client connection only and will not be saved for next time." & vbCrLf & vbCrLf & _ + MessageBox.Show(Me, "Changes made here to File Type Associations are for this client connection only and will not be saved for next time." & vbCrLf & vbCrLf & "To make permanent changes to the File Type Associations for this RemoteApp, edit the RemoteApp.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information) RemoteApp = RemoteAppFileTypeAssociation.EditFileTypes(RemoteApp) If Not RemoteApp.FileTypeAssociations Is Nothing Then _ @@ -363,26 +397,31 @@ Public Class RemoteAppCreateClientConnection End If End Sub - Private Sub CheckBoxSignRDPDisabled_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBoxSignRDPDisabled.CheckedChanged - CertificateComboBox.Enabled = Not CheckBoxSignRDPDisabled.Checked - CheckBoxCreateSignedAndUnsigned.Enabled = Not CheckBoxSignRDPDisabled.Checked - If (EditAfterSave.Checked And Not CheckBoxSignRDPDisabled.Checked) Then - If MessageBox.Show("Cannot edit after save and sign the RDP file. Do you want the RDP file to be signed?", "Sign RDP", MessageBoxButtons.YesNo) = DialogResult.Yes Then - EditAfterSave.Checked = False + Private Sub CheckBoxSignRDPEnabled_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBoxSignRDPEnabled.CheckedChanged + CertificateComboBox.Enabled = CheckBoxSignRDPEnabled.Checked + If (EditAfterSave.Checked And CheckBoxSignRDPEnabled.Checked) Then + If MessageBox.Show("You have selected ""Sign RDP file"" and ""Manually edit RDP file""." & vbCrLf & vbCrLf & "If you save any changes to a signed RDP file it will stop working." & vbCrLf & vbCrLf & "Are you sure you want the RDP file to be signed?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.Yes Then + CheckBoxSignRDPEnabled.Checked = True Else - CheckBoxSignRDPDisabled.Checked = True + CheckBoxSignRDPEnabled.Checked = False End If End If End Sub Private Sub EditAfterSave_CheckedChanged(sender As Object, e As EventArgs) Handles EditAfterSave.CheckedChanged - If (EditAfterSave.Checked And Not CheckBoxSignRDPDisabled.Checked) Then - If MessageBox.Show("Cannot edit after save and sign the RDP file. Do you want to edit after saving?", "Edit After Save", MessageBoxButtons.YesNo) = DialogResult.Yes Then - CheckBoxSignRDPDisabled.Checked = True + If (EditAfterSave.Checked And CheckBoxSignRDPEnabled.Checked) Then + If MessageBox.Show("You have selected ""Sign RDP file"" and ""Manually edit RDP file""." & vbCrLf & vbCrLf & "If you save any changes to a signed RDP file it will stop working." & vbCrLf & vbCrLf & "Are you sure you want to edit after saving?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.Yes Then + EditAfterSave.Checked = True Else EditAfterSave.Checked = False End If End If End Sub + + Private Sub CheckBoxCreateSignedAndUnsigned_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBoxCreateSignedAndUnsigned.CheckedChanged + If CheckBoxCreateSignedAndUnsigned.Checked = True Then + CheckBoxSignRDPEnabled.Checked = True + End If + End Sub End Class \ No newline at end of file