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
This commit is contained in:
Kim 2019-11-10 22:51:14 +11:00 committed by brianga
parent 859ac87c17
commit 82fb8da574
8 changed files with 347 additions and 242 deletions

View File

@ -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,7 +104,8 @@
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 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.
@ -121,5 +125,16 @@
StartInfo.Arguments = Arguments
StartInfo.WindowStyle = ProcessWindowStyle.Hidden
Process.Start(StartInfo)
Else
MessageBox.Show("RDPSign executable not found:" & vbNewLine & vbNewLine & Command, My.Application.Info.AssemblyName, MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
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

View File

@ -48,6 +48,7 @@
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Security" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />

View File

@ -67,6 +67,15 @@
<setting name="SavedDisableFTA" serializeAs="String">
<value>False</value>
</setting>
<setting name="SavedSignRDP" serializeAs="String">
<value>False</value>
</setting>
<setting name="SavedSignedAndUnsigned" serializeAs="String">
<value>False</value>
</setting>
<setting name="SavedCertSelected" serializeAs="String">
<value>0</value>
</setting>
</RemoteApp_Tool.My.MySettings>
</userSettings>
</configuration>

View File

@ -15,7 +15,7 @@ Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0"), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
@ -29,7 +29,7 @@ Namespace My
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
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
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property SavedSignRDP() As Boolean
Get
Return CType(Me("SavedSignRDP"),Boolean)
End Get
Set
Me("SavedSignRDP") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property SavedSignedAndUnsigned() As Boolean
Get
Return CType(Me("SavedSignedAndUnsigned"),Boolean)
End Get
Set
Me("SavedSignedAndUnsigned") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("0")> _
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

View File

@ -59,5 +59,14 @@
<Setting Name="SavedDisableFTA" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SavedSignRDP" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SavedSignedAndUnsigned" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SavedCertSelected" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@ -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

View File

@ -124,152 +124,152 @@
<value>
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
</value>
</data>
<metadata name="FileSaveRDP.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">

View File

@ -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)
End If
Me.Close()
End If
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