SEBWIN-414: Implemented home functionality for browser.

This commit is contained in:
Damian Büchel 2020-10-05 23:37:23 +02:00
parent ae7dcc0b0b
commit d1f0e012d5
25 changed files with 355 additions and 190 deletions

View file

@ -19,6 +19,7 @@ using SafeExamBrowser.Browser.Contracts;
using SafeExamBrowser.Browser.Contracts.Events;
using SafeExamBrowser.Browser.Events;
using SafeExamBrowser.Configuration.Contracts;
using SafeExamBrowser.Configuration.Contracts.Cryptography;
using SafeExamBrowser.I18n.Contracts;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Settings.Browser;
@ -39,6 +40,7 @@ namespace SafeExamBrowser.Browser
private AppConfig appConfig;
private List<BrowserApplicationInstance> instances;
private IFileSystemDialog fileSystemDialog;
private IHashAlgorithm hashAlgorithm;
private INativeMethods nativeMethods;
private IMessageBox messageBox;
private IModuleLogger logger;
@ -61,6 +63,7 @@ namespace SafeExamBrowser.Browser
AppConfig appConfig,
BrowserSettings settings,
IFileSystemDialog fileSystemDialog,
IHashAlgorithm hashAlgorithm,
INativeMethods nativeMethods,
IMessageBox messageBox,
IModuleLogger logger,
@ -69,6 +72,7 @@ namespace SafeExamBrowser.Browser
{
this.appConfig = appConfig;
this.fileSystemDialog = fileSystemDialog;
this.hashAlgorithm = hashAlgorithm;
this.nativeMethods = nativeMethods;
this.instances = new List<BrowserApplicationInstance>();
this.logger = logger;
@ -147,7 +151,7 @@ namespace SafeExamBrowser.Browser
var isMainInstance = instances.Count == 0;
var instanceLogger = logger.CloneFor($"Browser Instance #{id}");
var startUrl = url ?? GenerateStartUrl();
var instance = new BrowserApplicationInstance(appConfig, settings, id, isMainInstance, fileSystemDialog, messageBox, instanceLogger, text, uiFactory, startUrl);
var instance = new BrowserApplicationInstance(appConfig, settings, id, isMainInstance, fileSystemDialog, hashAlgorithm, messageBox, instanceLogger, text, uiFactory, startUrl);
instance.ConfigurationDownloadRequested += (fileName, args) => ConfigurationDownloadRequested?.Invoke(fileName, args);
instance.PopupRequested += Instance_PopupRequested;

View file

@ -19,6 +19,7 @@ using SafeExamBrowser.Browser.Events;
using SafeExamBrowser.Browser.Filters;
using SafeExamBrowser.Browser.Handlers;
using SafeExamBrowser.Configuration.Contracts;
using SafeExamBrowser.Configuration.Contracts.Cryptography;
using SafeExamBrowser.I18n.Contracts;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Settings.Browser;
@ -46,6 +47,7 @@ namespace SafeExamBrowser.Browser
private HttpClient httpClient;
private bool isMainInstance;
private IFileSystemDialog fileSystemDialog;
private IHashAlgorithm hashAlgorithm;
private IMessageBox messageBox;
private IModuleLogger logger;
private BrowserSettings settings;
@ -81,6 +83,7 @@ namespace SafeExamBrowser.Browser
int id,
bool isMainInstance,
IFileSystemDialog fileSystemDialog,
IHashAlgorithm hashAlgorithm,
IMessageBox messageBox,
IModuleLogger logger,
IText text,
@ -92,6 +95,7 @@ namespace SafeExamBrowser.Browser
this.httpClient = new HttpClient();
this.isMainInstance = isMainInstance;
this.fileSystemDialog = fileSystemDialog;
this.hashAlgorithm = hashAlgorithm;
this.messageBox = messageBox;
this.logger = logger;
this.settings = settings;
@ -139,6 +143,7 @@ namespace SafeExamBrowser.Browser
downloadHandler.ConfigurationDownloadRequested += DownloadHandler_ConfigurationDownloadRequested;
downloadHandler.DownloadUpdated += DownloadHandler_DownloadUpdated;
keyboardHandler.FindRequested += KeyboardHandler_FindRequested;
keyboardHandler.HomeNavigationRequested += HomeNavigationRequested;
keyboardHandler.ReloadRequested += ReloadRequested;
keyboardHandler.ZoomInRequested += ZoomInRequested;
keyboardHandler.ZoomOutRequested += ZoomOutRequested;
@ -205,6 +210,7 @@ namespace SafeExamBrowser.Browser
window.DeveloperConsoleRequested += Window_DeveloperConsoleRequested;
window.FindRequested += Window_FindRequested;
window.ForwardNavigationRequested += Window_ForwardNavigationRequested;
window.HomeNavigationRequested += HomeNavigationRequested;
window.ReloadRequested += ReloadRequested;
window.ZoomInRequested += ZoomInRequested;
window.ZoomOutRequested += ZoomOutRequested;
@ -366,6 +372,50 @@ namespace SafeExamBrowser.Browser
window.UpdateDownloadState(state);
}
private void HomeNavigationRequested()
{
if (isMainInstance && (settings.UseStartUrlAsHomeUrl || !string.IsNullOrWhiteSpace(settings.HomeUrl)))
{
var navigate = false;
var url = settings.UseStartUrlAsHomeUrl ? settings.StartUrl : settings.HomeUrl;
if (settings.HomeNavigationRequiresPassword && !string.IsNullOrWhiteSpace(settings.HomePasswordHash))
{
var message = text.Get(TextKey.PasswordDialog_BrowserHomePasswordRequired);
var title = !string.IsNullOrWhiteSpace(settings.HomeNavigationMessage) ? settings.HomeNavigationMessage : text.Get(TextKey.PasswordDialog_BrowserHomePasswordRequiredTitle);
var dialog = uiFactory.CreatePasswordDialog(message, title);
var result = dialog.Show(window);
if (result.Success)
{
var passwordHash = hashAlgorithm.GenerateHashFor(result.Password);
if (settings.HomePasswordHash.Equals(passwordHash, StringComparison.OrdinalIgnoreCase))
{
navigate = true;
}
else
{
messageBox.Show(TextKey.MessageBox_InvalidHomePassword, TextKey.MessageBox_InvalidHomePasswordTitle, icon: MessageBoxIcon.Warning, parent: window);
}
}
}
else
{
var message = text.Get(TextKey.MessageBox_BrowserHomeQuestion);
var title = !string.IsNullOrWhiteSpace(settings.HomeNavigationMessage) ? settings.HomeNavigationMessage : text.Get(TextKey.MessageBox_BrowserHomeQuestionTitle);
var result = messageBox.Show(message, title, MessageBoxAction.YesNo, MessageBoxIcon.Question, window);
navigate = result == MessageBoxResult.Yes;
}
if (navigate)
{
control.NavigateTo(url);
}
}
}
private void KeyboardHandler_FindRequested()
{
if (settings.AllowFind)

View file

@ -15,6 +15,7 @@ namespace SafeExamBrowser.Browser.Handlers
internal class KeyboardHandler : IKeyboardHandler
{
internal event ActionRequestedEventHandler FindRequested;
internal event ActionRequestedEventHandler HomeNavigationRequested;
internal event ActionRequestedEventHandler ReloadRequested;
internal event ActionRequestedEventHandler ZoomInRequested;
internal event ActionRequestedEventHandler ZoomOutRequested;
@ -25,24 +26,32 @@ namespace SafeExamBrowser.Browser.Handlers
var ctrl = modifiers.HasFlag(CefEventFlags.ControlDown);
var shift = modifiers.HasFlag(CefEventFlags.ShiftDown);
if (type == KeyType.KeyUp && ctrl && (keyCode == (int) Keys.F))
if (type == KeyType.KeyUp)
{
FindRequested?.Invoke();
}
if (ctrl && keyCode == (int) Keys.F)
{
FindRequested?.Invoke();
}
if (type == KeyType.KeyUp && ((keyCode == (int) Keys.Add && ctrl) || (keyCode == (int) Keys.D1 && ctrl && shift)))
{
ZoomInRequested?.Invoke();
}
if (keyCode == (int) Keys.Home)
{
HomeNavigationRequested?.Invoke();
}
if (type == KeyType.KeyUp && (keyCode == (int) Keys.Subtract || keyCode == (int) Keys.OemMinus) && ctrl)
{
ZoomOutRequested?.Invoke();
}
if ((ctrl && keyCode == (int) Keys.Add) || (ctrl && shift && keyCode == (int) Keys.D1))
{
ZoomInRequested?.Invoke();
}
if (type == KeyType.KeyUp && (keyCode == (int) Keys.D0 || keyCode == (int) Keys.NumPad0) && ctrl)
{
ZoomResetRequested?.Invoke();
if (ctrl && (keyCode == (int) Keys.Subtract || keyCode == (int) Keys.OemMinus))
{
ZoomOutRequested?.Invoke();
}
if (ctrl && (keyCode == (int) Keys.D0 || keyCode == (int) Keys.NumPad0))
{
ZoomResetRequested?.Invoke();
}
}
return false;

View file

@ -202,7 +202,7 @@ namespace SafeExamBrowser.Client
{
var fileSystemDialog = BuildFileSystemDialog();
var moduleLogger = ModuleLogger(nameof(BrowserApplication));
var browser = new BrowserApplication(context.AppConfig, context.Settings.Browser, fileSystemDialog, nativeMethods, messageBox, moduleLogger, text, uiFactory);
var browser = new BrowserApplication(context.AppConfig, context.Settings.Browser, fileSystemDialog, new HashAlgorithm(), nativeMethods, messageBox, moduleLogger, text, uiFactory);
var operation = new BrowserOperation(actionCenter, context, logger, taskbar, taskview, uiFactory);
context.Browser = browser;

View file

@ -93,6 +93,18 @@ namespace SafeExamBrowser.Configuration.ConfigurationData.DataMapping
case Keys.Browser.Filter.FilterRules:
MapFilterRules(settings, value);
break;
case Keys.Browser.HomeButtonMessage:
MapHomeButtonMessage(settings, value);
break;
case Keys.Browser.HomeButtonRequiresPassword:
MapHomeButtonRequiresPassword(settings, value);
break;
case Keys.Browser.HomeButtonUrl:
MapHomeButtonUrl(settings, value);
break;
case Keys.Browser.HomeButtonUseStartUrl:
MapHomeButtonUseStartUrl(settings, value);
break;
case Keys.Browser.MainWindow.AllowAddressBar:
MapAllowAddressBar(settings, value);
break;
@ -332,6 +344,38 @@ namespace SafeExamBrowser.Configuration.ConfigurationData.DataMapping
}
}
private void MapHomeButtonMessage(AppSettings settings, object value)
{
if (value is string message)
{
settings.Browser.HomeNavigationMessage = message;
}
}
private void MapHomeButtonRequiresPassword(AppSettings settings, object value)
{
if (value is bool requires)
{
settings.Browser.HomeNavigationRequiresPassword = requires;
}
}
private void MapHomeButtonUrl(AppSettings settings, object value)
{
if (value is string url)
{
settings.Browser.HomeUrl = url;
}
}
private void MapHomeButtonUseStartUrl(AppSettings settings, object value)
{
if (value is bool use)
{
settings.Browser.UseStartUrlAsHomeUrl = use;
}
}
private void MapMainWindowMode(AppSettings settings, object value)
{
const int FULLSCREEN = 1;

View file

@ -21,6 +21,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
{
AllowBrowserToolbarForReloading(rawData, settings);
CalculateConfigurationKey(rawData, settings);
HandleBrowserHomeFunctionality(settings);
RemoveLegacyBrowsers(settings);
}
@ -57,6 +58,12 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
}
}
private void HandleBrowserHomeFunctionality(AppSettings settings)
{
settings.Browser.MainWindow.ShowHomeButton = settings.Browser.UseStartUrlAsHomeUrl || !string.IsNullOrWhiteSpace(settings.Browser.HomeUrl);
settings.Browser.HomePasswordHash = settings.Security.QuitPasswordHash;
}
private void RemoveLegacyBrowsers(AppSettings settings)
{
var legacyBrowsers = new List<WhitelistApplication>();

View file

@ -112,6 +112,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
settings.Browser.AdditionalWindow.Position = WindowPosition.Right;
settings.Browser.AdditionalWindow.RelativeHeight = 100;
settings.Browser.AdditionalWindow.RelativeWidth = 50;
settings.Browser.AdditionalWindow.ShowHomeButton = false;
settings.Browser.AdditionalWindow.ShowReloadWarning = false;
settings.Browser.AdditionalWindow.ShowToolbar = false;
settings.Browser.AdditionalWindow.UrlPolicy = UrlPolicy.Never;
@ -135,6 +136,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
settings.Browser.MainWindow.FullScreenMode = false;
settings.Browser.MainWindow.RelativeHeight = 100;
settings.Browser.MainWindow.RelativeWidth = 100;
settings.Browser.MainWindow.ShowHomeButton = false;
settings.Browser.MainWindow.ShowReloadWarning = true;
settings.Browser.MainWindow.ShowToolbar = false;
settings.Browser.MainWindow.UrlPolicy = UrlPolicy.Never;

View file

@ -58,6 +58,10 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
internal const string DownloadPdfFiles = "downloadPDFFiles";
internal const string EnableBrowser = "enableSebBrowser";
internal const string ExamKeySalt = "examKeySalt";
internal const string HomeButtonMessage = "restartExamText";
internal const string HomeButtonRequiresPassword = "restartExamPasswordProtected";
internal const string HomeButtonUrl = "restartExamURL";
internal const string HomeButtonUseStartUrl = "restartExamUseStartURL";
internal const string PopupPolicy = "newBrowserWindowByLinkPolicy";
internal const string PopupBlockForeignHost = "newBrowserWindowByLinkBlockForeign";
internal const string QuitUrl = "quitURL";

View file

@ -71,6 +71,8 @@ namespace SafeExamBrowser.I18n.Contracts
MessageBox_ApplicationNotFoundTitle,
MessageBox_ApplicationTerminationFailure,
MessageBox_ApplicationTerminationFailureTitle,
MessageBox_BrowserHomeQuestion,
MessageBox_BrowserHomeQuestionTitle,
MessageBox_BrowserNavigationBlocked,
MessageBox_BrowserNavigationBlockedTitle,
MessageBox_BrowserQuitUrlConfirmation,
@ -84,6 +86,8 @@ namespace SafeExamBrowser.I18n.Contracts
MessageBox_ConfigurationDownloadErrorTitle,
MessageBox_InvalidConfigurationData,
MessageBox_InvalidConfigurationDataTitle,
MessageBox_InvalidHomePassword,
MessageBox_InvalidHomePasswordTitle,
MessageBox_InvalidPasswordError,
MessageBox_InvalidPasswordErrorTitle,
MessageBox_InvalidQuitPassword,
@ -155,6 +159,8 @@ namespace SafeExamBrowser.I18n.Contracts
OperationStatus_WaitExplorerStartup,
OperationStatus_WaitExplorerTermination,
OperationStatus_WaitRuntimeDisconnection,
PasswordDialog_BrowserHomePasswordRequired,
PasswordDialog_BrowserHomePasswordRequiredTitle,
PasswordDialog_Cancel,
PasswordDialog_Confirm,
PasswordDialog_LocalAdminPasswordRequired,

View file

@ -171,6 +171,12 @@
<Entry key="MessageBox_ApplicationTerminationFailureTitle">
Automatisches Beenden fehlgeschlagen
</Entry>
<Entry key="MessageBox_BrowserHomeQuestion">
Sind Sie sicher? (Diese Funktion loggt Sie nicht aus, falls Sie sich auf einer Website eingeloggt haben)
</Entry>
<Entry key="MessageBox_BrowserHomeQuestionTitle">
Zurück zum Start
</Entry>
<Entry key="MessageBox_BrowserNavigationBlocked">
Zugriff auf "%%URL%%" ist gemäss der aktiven Konfiguration nicht erlaubt.
</Entry>
@ -210,6 +216,12 @@
<Entry key="MessageBox_InvalidConfigurationDataTitle">
Konfigurations-Fehler
</Entry>
<Entry key="MessageBox_InvalidHomePassword">
Das eingegebene Passwort ist nicht korrekt.
</Entry>
<Entry key="MessageBox_InvalidHomePasswordTitle">
Ungültiges Passwort
</Entry>
<Entry key="MessageBox_InvalidPasswordError">
Sie haben 5 mal das falsche Passwort eingegeben. SEB wird sich nun beenden...
</Entry>
@ -423,6 +435,12 @@
<Entry key="OperationStatus_WaitRuntimeDisconnection">
Warte bis Runtime Verbindung trennt
</Entry>
<Entry key="PasswordDialog_BrowserHomePasswordRequired">
Beenden-/Neustart-Passwort eingeben: (Diese Funktion loggt Sie nicht aus, falls Sie sich auf einer Website eingeloggt haben)
</Entry>
<Entry key="PasswordDialog_BrowserHomePasswordRequiredTitle">
Zurück zum Start
</Entry>
<Entry key="PasswordDialog_Cancel">
Abbrechen
</Entry>

View file

@ -171,6 +171,12 @@
<Entry key="MessageBox_ApplicationTerminationFailureTitle">
Automatic Termination Failed
</Entry>
<Entry key="MessageBox_BrowserHomeQuestion">
Are you sure? (This function doesn't log you out if you are logged in on a website)
</Entry>
<Entry key="MessageBox_BrowserHomeQuestionTitle">
Back to Start
</Entry>
<Entry key="MessageBox_BrowserNavigationBlocked">
Access to "%%URL%%" is not allowed according to the current configuration.
</Entry>
@ -210,6 +216,12 @@
<Entry key="MessageBox_InvalidConfigurationDataTitle">
Configuration Error
</Entry>
<Entry key="MessageBox_InvalidHomePassword">
The password you entered is incorrect.
</Entry>
<Entry key="MessageBox_InvalidHomePasswordTitle">
Invalid Password
</Entry>
<Entry key="MessageBox_InvalidPasswordError">
You failed to enter the correct password within 5 attempts. SEB will now terminate...
</Entry>
@ -423,6 +435,12 @@
<Entry key="OperationStatus_WaitRuntimeDisconnection">
Waiting for the runtime to disconnect
</Entry>
<Entry key="PasswordDialog_BrowserHomePasswordRequired">
Enter quit/restart password: (This function doesn't log you out if you are logged in on a website)
</Entry>
<Entry key="PasswordDialog_BrowserHomePasswordRequiredTitle">
Back to Start
</Entry>
<Entry key="PasswordDialog_Cancel">
Cancel
</Entry>

View file

@ -171,6 +171,12 @@
<Entry key="MessageBox_ApplicationTerminationFailureTitle">
Chiusura automatica non riuscita
</Entry>
<Entry key="MessageBox_BrowserHomeQuestion">
Sei sicuro? (Questa funzione non ti disconnette se sei loggato su un sito web)
</Entry>
<Entry key="MessageBox_BrowserHomeQuestionTitle">
Torna all'inizio
</Entry>
<Entry key="MessageBox_BrowserNavigationBlocked">
L'accesso a "%%URL%%" non è consentito in base alla configurazione corrente.
</Entry>
@ -210,6 +216,12 @@
<Entry key="MessageBox_InvalidConfigurationDataTitle">
Errore di configurazione
</Entry>
<Entry key="MessageBox_InvalidHomePassword">
Non sei riuscito a inserire la password corretta.
</Entry>
<Entry key="MessageBox_InvalidHomePasswordTitle">
Password non valida
</Entry>
<Entry key="MessageBox_InvalidPasswordError">
Non sei riuscito a inserire la password corretta in 5 tentativi. SEB ora verrà chiuso ...
</Entry>
@ -423,6 +435,12 @@
<Entry key="OperationStatus_WaitRuntimeDisconnection">
In attesa della disconnessione del runtime
</Entry>
<Entry key="PasswordDialog_BrowserHomePasswordRequired">
Inserisci la password di chiusura / riavvio: (questa funzione non ti disconnette se sei connesso a un sito web)
</Entry>
<Entry key="PasswordDialog_BrowserHomePasswordRequiredTitle">
Torna all'inizio
</Entry>
<Entry key="PasswordDialog_Cancel">
Annulla
</Entry>

View file

@ -118,6 +118,26 @@ namespace SafeExamBrowser.Settings.Browser
/// </summary>
public FilterSettings Filter { get; set; }
/// <summary>
/// An optional custom message shown before navigating home.
/// </summary>
public string HomeNavigationMessage { get; set; }
/// <summary>
/// Determines whether a password is required to navigate home.
/// </summary>
public bool HomeNavigationRequiresPassword { get; set; }
/// <summary>
/// The hash code of the password optionally required to navigate home.
/// </summary>
public string HomePasswordHash { get; set; }
/// <summary>
/// An optional custom URL to be used when navigating home.
/// </summary>
public string HomeUrl { get; set; }
/// <summary>
/// The settings to be used for the main browser window.
/// </summary>
@ -173,6 +193,11 @@ namespace SafeExamBrowser.Settings.Browser
/// </summary>
public bool UseQueryParameter { get; set; }
/// <summary>
/// Determines whether the start URL will be used when navigating home.
/// </summary>
public bool UseStartUrlAsHomeUrl { get; set; }
/// <summary>
/// A custom suffix to be appended to the user agent.
/// </summary>

View file

@ -71,6 +71,11 @@ namespace SafeExamBrowser.Settings.Browser
/// </summary>
public int? RelativeWidth { get; set; }
/// <summary>
/// Determines whether the home button is visible.
/// </summary>
public bool ShowHomeButton { get; set; }
/// <summary>
/// Determines whether the user will need to confirm every reload attempt.
/// </summary>

View file

@ -59,6 +59,11 @@ namespace SafeExamBrowser.UserInterface.Contracts.Browser
/// </summary>
event ActionRequestedEventHandler ForwardNavigationRequested;
/// <summary>
/// Event fired when the user would like to navigate home.
/// </summary>
event ActionRequestedEventHandler HomeNavigationRequested;
/// <summary>
/// Event fired when the user would like to reload the current page.
/// </summary>

View file

@ -386,7 +386,7 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Resource>
<Resource Include="Images\SkipBack.xaml">
<Resource Include="Images\Home.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Resource>

View file

@ -32,15 +32,17 @@
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" x:Name="BackwardButton" Height="30" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="1" x:Name="ForwardButton" Height="30" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="2" x:Name="ReloadButton" Height="30" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<TextBox Grid.Column="3" x:Name="UrlTextBox" Height="25" HorizontalAlignment="Stretch" Margin="5,0" Padding="5,0" VerticalContentAlignment="Center" />
<Button Grid.Column="4" x:Name="DownloadsButton" Height="30" HorizontalAlignment="Center" Margin="5" Padding="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" Visibility="Collapsed">
<Button Grid.Column="0" x:Name="HomeButton" Height="30" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="1" x:Name="BackwardButton" Height="30" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="2" x:Name="ForwardButton" Height="30" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="3" x:Name="ReloadButton" Height="30" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<TextBox Grid.Column="4" x:Name="UrlTextBox" Height="25" HorizontalAlignment="Stretch" Margin="5,0" Padding="5,0" VerticalContentAlignment="Center" />
<Button Grid.Column="5" x:Name="DownloadsButton" Height="30" HorizontalAlignment="Center" Margin="5" Padding="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" Visibility="Collapsed">
<fa:ImageAwesome Icon="Download" />
</Button>
<Popup x:Name="DownloadsPopup" AllowsTransparency="True" PopupAnimation="Slide" Placement="Custom" PlacementTarget="{Binding ElementName=BrowserControlHost}">
@ -48,7 +50,7 @@
<StackPanel x:Name="Downloads" Orientation="Vertical" />
</Border>
</Popup>
<Button Grid.Column="5" x:Name="MenuButton" Height="30" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="6" x:Name="MenuButton" Height="30" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Popup x:Name="MenuPopup" IsOpen="False" AllowsTransparency="True" PopupAnimation="Slide" Placement="Custom" PlacementTarget="{Binding ElementName=BrowserControlHost}">
<Border Background="{StaticResource BackgroundBrush}" BorderBrush="LightGray" BorderThickness="1,0,1,1" Width="250">
<StackPanel Orientation="Vertical">

View file

@ -49,6 +49,7 @@ namespace SafeExamBrowser.UserInterface.Desktop.Windows
public event ActionRequestedEventHandler DeveloperConsoleRequested;
public event FindRequestedEventHandler FindRequested;
public event ActionRequestedEventHandler ForwardNavigationRequested;
public event ActionRequestedEventHandler HomeNavigationRequested;
public event ActionRequestedEventHandler ReloadRequested;
public event ActionRequestedEventHandler ZoomInRequested;
public event ActionRequestedEventHandler ZoomOutRequested;
@ -197,6 +198,11 @@ namespace SafeExamBrowser.UserInterface.Desktop.Windows
ReloadRequested?.Invoke();
}
if (e.Key == Key.Home)
{
HomeNavigationRequested?.Invoke();
}
if (settings.AllowFind && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) && e.Key == Key.F)
{
ShowFindbar();
@ -303,6 +309,7 @@ namespace SafeExamBrowser.UserInterface.Desktop.Windows
FindMenuButton.Click += (o, args) => ShowFindbar();
FindTextBox.KeyUp += FindTextBox_KeyUp;
ForwardButton.Click += (o, args) => ForwardNavigationRequested?.Invoke();
HomeButton.Click += (o, args) => HomeNavigationRequested?.Invoke();
Loaded += BrowserWindow_Loaded;
MenuButton.Click += (o, args) => MenuPopup.IsOpen = !MenuPopup.IsOpen;
MenuButton.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => MenuPopup.IsOpen = MenuPopup.IsMouseOver));
@ -328,23 +335,17 @@ namespace SafeExamBrowser.UserInterface.Desktop.Windows
{
BackwardButton.IsEnabled = WindowSettings.AllowBackwardNavigation;
BackwardButton.Visibility = WindowSettings.AllowBackwardNavigation ? Visibility.Visible : Visibility.Collapsed;
DeveloperConsoleMenuItem.Visibility = WindowSettings.AllowDeveloperConsole ? Visibility.Visible : Visibility.Collapsed;
FindMenuItem.Visibility = settings.AllowFind ? Visibility.Visible : Visibility.Collapsed;
ForwardButton.IsEnabled = WindowSettings.AllowForwardNavigation;
ForwardButton.Visibility = WindowSettings.AllowForwardNavigation ? Visibility.Visible : Visibility.Collapsed;
HomeButton.IsEnabled = WindowSettings.ShowHomeButton;
HomeButton.Visibility = WindowSettings.ShowHomeButton ? Visibility.Visible : Visibility.Collapsed;
MenuButton.IsEnabled = settings.AllowPageZoom || WindowSettings.AllowDeveloperConsole;
ReloadButton.IsEnabled = WindowSettings.AllowReloading;
ReloadButton.Visibility = WindowSettings.AllowReloading ? Visibility.Visible : Visibility.Collapsed;
Toolbar.Visibility = WindowSettings.ShowToolbar ? Visibility.Visible : Visibility.Collapsed;
UrlTextBox.Visibility = WindowSettings.AllowAddressBar ? Visibility.Visible : Visibility.Hidden;
ZoomMenuItem.Visibility = settings.AllowPageZoom ? Visibility.Visible : Visibility.Collapsed;
}
@ -416,11 +417,13 @@ namespace SafeExamBrowser.UserInterface.Desktop.Windows
{
var backward = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/NavigateBack.xaml") };
var forward = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/NavigateForward.xaml") };
var home = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Home.xaml") };
var menu = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Menu.xaml") };
var reload = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Reload.xaml") };
BackwardButton.Content = IconResourceLoader.Load(backward);
ForwardButton.Content = IconResourceLoader.Load(forward);
HomeButton.Content = IconResourceLoader.Load(home);
MenuButton.Content = IconResourceLoader.Load(menu);
ReloadButton.Content = IconResourceLoader.Load(reload);
}

View file

@ -428,30 +428,30 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Resource>
<Page Include="Images\SkipBack.xaml">
<Resource Include="Images\Home.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</Resource>
<Page Include="Images\ShutDown.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Images\Reload.xaml">
<Resource Include="Images\Reload.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Images\NavigateForward.xaml">
</Resource>
<Resource Include="Images\NavigateForward.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Images\NavigateBack.xaml">
</Resource>
<Resource Include="Images\NavigateBack.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Images\Menu.xaml">
</Resource>
<Resource Include="Images\Menu.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</Resource>
<Page Include="Images\Keyboard.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>

View file

@ -32,15 +32,17 @@
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" x:Name="BackwardButton" Height="50" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="1" x:Name="ForwardButton" Height="50" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="2" x:Name="ReloadButton" Height="50" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<TextBox Grid.Column="3" x:Name="UrlTextBox" Height="50" HorizontalAlignment="Stretch" Margin="5,10" Padding="8" VerticalContentAlignment="Center" />
<Button Grid.Column="4" x:Name="DownloadsButton" Height="50" HorizontalAlignment="Center" Margin="5" Padding="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" Visibility="Collapsed">
<Button Grid.Column="0" x:Name="HomeButton" Height="50" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="1" x:Name="BackwardButton" Height="50" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="2" x:Name="ForwardButton" Height="50" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="3" x:Name="ReloadButton" Height="50" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<TextBox Grid.Column="4" x:Name="UrlTextBox" Height="50" HorizontalAlignment="Stretch" Margin="5,10" Padding="8" VerticalContentAlignment="Center" />
<Button Grid.Column="5" x:Name="DownloadsButton" Height="50" HorizontalAlignment="Center" Margin="5" Padding="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" Visibility="Collapsed">
<fa:ImageAwesome Icon="Download" />
</Button>
<Popup x:Name="DownloadsPopup" AllowsTransparency="True" PopupAnimation="Slide" Placement="Custom" PlacementTarget="{Binding ElementName=BrowserControlHost}">
@ -48,7 +50,7 @@
<StackPanel x:Name="Downloads" Orientation="Vertical" />
</Border>
</Popup>
<Button Grid.Column="5" x:Name="MenuButton" Height="50" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Button Grid.Column="6" x:Name="MenuButton" Height="50" HorizontalAlignment="Center" Margin="5" Template="{StaticResource BrowserButton}" VerticalAlignment="Center" />
<Popup x:Name="MenuPopup" IsOpen="False" AllowsTransparency="True" PopupAnimation="Slide" Placement="Custom" PlacementTarget="{Binding ElementName=BrowserControlHost}">
<Border Background="{StaticResource BackgroundBrush}" BorderBrush="LightGray" BorderThickness="1,0,1,1" Width="350">
<StackPanel Orientation="Vertical">

View file

@ -49,6 +49,7 @@ namespace SafeExamBrowser.UserInterface.Mobile.Windows
public event ActionRequestedEventHandler DeveloperConsoleRequested;
public event FindRequestedEventHandler FindRequested;
public event ActionRequestedEventHandler ForwardNavigationRequested;
public event ActionRequestedEventHandler HomeNavigationRequested;
public event ActionRequestedEventHandler ReloadRequested;
public event ActionRequestedEventHandler ZoomInRequested;
public event ActionRequestedEventHandler ZoomOutRequested;
@ -197,6 +198,11 @@ namespace SafeExamBrowser.UserInterface.Mobile.Windows
ReloadRequested?.Invoke();
}
if (e.Key == Key.Home)
{
HomeNavigationRequested?.Invoke();
}
if (settings.AllowFind && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) && e.Key == Key.F)
{
ShowFindbar();
@ -303,6 +309,7 @@ namespace SafeExamBrowser.UserInterface.Mobile.Windows
FindMenuButton.Click += (o, args) => ShowFindbar();
FindTextBox.KeyUp += FindTextBox_KeyUp;
ForwardButton.Click += (o, args) => ForwardNavigationRequested?.Invoke();
HomeButton.Click += (o, args) => HomeNavigationRequested?.Invoke();
Loaded += BrowserWindow_Loaded;
MenuButton.Click += (o, args) => MenuPopup.IsOpen = !MenuPopup.IsOpen;
MenuButton.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => MenuPopup.IsOpen = MenuPopup.IsMouseOver));
@ -328,23 +335,17 @@ namespace SafeExamBrowser.UserInterface.Mobile.Windows
{
BackwardButton.IsEnabled = WindowSettings.AllowBackwardNavigation;
BackwardButton.Visibility = WindowSettings.AllowBackwardNavigation ? Visibility.Visible : Visibility.Collapsed;
DeveloperConsoleMenuItem.Visibility = WindowSettings.AllowDeveloperConsole ? Visibility.Visible : Visibility.Collapsed;
FindMenuItem.Visibility = settings.AllowFind ? Visibility.Visible : Visibility.Collapsed;
ForwardButton.IsEnabled = WindowSettings.AllowForwardNavigation;
ForwardButton.Visibility = WindowSettings.AllowForwardNavigation ? Visibility.Visible : Visibility.Collapsed;
HomeButton.IsEnabled = WindowSettings.ShowHomeButton;
HomeButton.Visibility = WindowSettings.ShowHomeButton ? Visibility.Visible : Visibility.Collapsed;
MenuButton.IsEnabled = settings.AllowPageZoom || WindowSettings.AllowDeveloperConsole;
ReloadButton.IsEnabled = WindowSettings.AllowReloading;
ReloadButton.Visibility = WindowSettings.AllowReloading ? Visibility.Visible : Visibility.Collapsed;
Toolbar.Visibility = WindowSettings.ShowToolbar ? Visibility.Visible : Visibility.Collapsed;
UrlTextBox.Visibility = WindowSettings.AllowAddressBar ? Visibility.Visible : Visibility.Hidden;
ZoomMenuItem.Visibility = settings.AllowPageZoom ? Visibility.Visible : Visibility.Collapsed;
if (!WindowSettings.AllowAddressBar)
@ -424,13 +425,15 @@ namespace SafeExamBrowser.UserInterface.Mobile.Windows
private void LoadIcons()
{
var backward = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/NavigateBack.xaml") };
var forward = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/NavigateForward.xaml") };
var menu = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Menu.xaml") };
var reload = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Reload.xaml") };
var backward = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/NavigateBack.xaml") };
var forward = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/NavigateForward.xaml") };
var home = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Home.xaml") };
var menu = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Menu.xaml") };
var reload = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Reload.xaml") };
BackwardButton.Content = IconResourceLoader.Load(backward);
ForwardButton.Content = IconResourceLoader.Load(forward);
HomeButton.Content = IconResourceLoader.Load(home);
MenuButton.Content = IconResourceLoader.Load(menu);
ReloadButton.Content = IconResourceLoader.Load(reload);
}

View file

@ -30,8 +30,8 @@ namespace SebWindowsConfig
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SebWindowsConfigForm));
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
this.openFileDialogSebConfigFile = new System.Windows.Forms.OpenFileDialog();
this.saveFileDialogSebConfigFile = new System.Windows.Forms.SaveFileDialog();
this.imageListTabIcons = new System.Windows.Forms.ImageList(this.components);
@ -1828,8 +1828,8 @@ namespace SebWindowsConfig
//
// Type
//
dataGridViewCellStyle11.BackColor = System.Drawing.Color.Silver;
this.Type.DefaultCellStyle = dataGridViewCellStyle11;
dataGridViewCellStyle1.BackColor = System.Drawing.Color.Silver;
this.Type.DefaultCellStyle = dataGridViewCellStyle1;
this.Type.HeaderText = "Type";
this.Type.Name = "Type";
this.Type.ReadOnly = true;
@ -3187,7 +3187,7 @@ namespace SebWindowsConfig
this.groupBox9.Size = new System.Drawing.Size(610, 168);
this.groupBox9.TabIndex = 121;
this.groupBox9.TabStop = false;
this.groupBox9.Text = "Back to Start Button (Mac)";
this.groupBox9.Text = "Back to Start Button";
//
// checkBoxUseStartURL
//
@ -4526,8 +4526,8 @@ namespace SebWindowsConfig
// spellCheckerDictionaryFilesColumn
//
this.spellCheckerDictionaryFilesColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.spellCheckerDictionaryFilesColumn.DefaultCellStyle = dataGridViewCellStyle12;
dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.spellCheckerDictionaryFilesColumn.DefaultCellStyle = dataGridViewCellStyle2;
this.spellCheckerDictionaryFilesColumn.HeaderText = "Files";
this.spellCheckerDictionaryFilesColumn.Name = "spellCheckerDictionaryFilesColumn";
this.spellCheckerDictionaryFilesColumn.ReadOnly = true;

View file

@ -131,7 +131,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAk
1gAAAk1TRnQBSQFMAgEBDAEAAZABCwGQAQsBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
1gAAAk1TRnQBSQFMAgEBDAEAAZgBCwGYAQsBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
AwABgAMAAQEBAAEgBwABAf8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A0QABjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
@ -159,8 +159,8 @@
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wNUAe4QAAMyAVEDTQH6A00B+gNNAfoDTQH6A00B+gNNAfoDTQH6A00B+gNNAfoDTQH6
A00B+gNNAfoDTQH6A00B+gNNAfoDTQH6A00B+gNNAfoDTQH6A00B+gNNAfoDTQH6AzYBWTQAAzIBUANc
Ad8BsQGvAa0B/wGlAaIBoQH/AZIBjwGOAf8BhgGDAYIB/wGAATsBOgH/AYABOwE6Af8BgAE7AToB/wGA
ATsBOgH/AYABOwE6Af8BigGHAYYB/wGWAZMBkgH/AaUBogGgAf8BpgGjAaEB/wNUAa8DFwEgGAABjgGL
Ad8BsQGvAa0B/wGlAaIBoQH/AZIBjwGOAf8BhgGDAYIB/wGAAToBOQH/AYABOgE5Af8BgAE6ATkB/wGA
AToBOQH/AYABOgE5Af8BigGHAYYB/wGWAZMBkgH/AaUBogGgAf8BpgGjAaEB/wNUAa8DFwEgGAABjgGL
AQAB/wGOAYsBAAH/AbsBuQEAAf8C/gH9Af8C/gH9Af8C/gH9Af8C9AHmAf8BwgHAAQAB/wL+Af0B/wL+
Af0B/wL+Af0B/wLwAd0B/wHGAcQBAAH/Av4B/QH/Av4B/QH/Av4B/QH/AekB6AHOAf8BqwGoAQAB/wGP
AYwBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
@ -168,16 +168,16 @@
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/xAA
AzQBVFj/AzgBXCwAAwwBEANRAZ8BtQGyAbAB/wGpAaYBpAH/AZIBjwGNAf8BhAGBAYAB/wGRAY4BjAH/
AZkBlgGUAf8BjwGMAYoB/wGEAYEBgAH/AYABOwE6Af8BgAE7AToB/wGAATsBOgH/AYABOwE6Af8BgAE7
AToB/wGAATsBOgH/AZEBjgGNAf8BpAGhAZ8B/wNiAe8DMgFQFAABjgGLAQAB/wGOAYsBAAH/AbsBuQEA
AZkBlgGUAf8BjwGMAYoB/wGEAYEBgAH/AYABOgE5Af8BgAE6ATkB/wGAAToBOQH/AYABOgE5Af8BgAE6
ATkB/wGAAToBOQH/AZEBjgGNAf8BpAGhAZ8B/wNiAe8DMgFQFAABjgGLAQAB/wGOAYsBAAH/AbsBuQEA
Af8MAAL1AegB/wHCAcABAAH/DAAC8QHfAf8BxgHEAQAB/wwAAeoB6QHPAf8B0gHRAZoB/wG+AbwBAAH/
AY8BjAEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
AQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8DAAH/AwAB/wMAAf8DmgH/
A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/
A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/A5oB/wMAAf8DAAH/AwAB/xAAAzMBU1j/
AzcBWygAAwwBEANcAc8BtwG0AbIB/wGfAZwBmwH/AYsBiAGHAf8BiQGGAYQB/wGYAZUBkwH/AakBpgGk
Af8BpwGkAaIB/wGkAaEBnwH/AaIBnwGdAf8BlgGTAZEB/wGFAYIBgQH/AYABOwE6Af8BgAE7AToB/wGA
ATsBOgH/AYABOwE6Af8BgAE7AToB/wGCAT0BPAH/AZ0BmgGYAf8BpQGiAaAB/wM6AWAQAAGOAYsBAAH/
Af8BpwGkAaIB/wGkAaEBnwH/AaIBnwGdAf8BlgGTAZEB/wGFAYIBgQH/AYABOgE5Af8BgAE6ATkB/wGA
AToBOQH/AYABOgE5Af8BgAE6ATkB/wGCATwBOwH/AZ0BmgGYAf8BpQGiAaAB/wM6AWAQAAGOAYsBAAH/
AY4BiwEAAf8BuwG5AQAB/wwAAvUB6AH/AcIBwAEAAf8MAALxAd8B/wHGAcQBAAH/DAAB6gHpAc8B/wHS
AdEBmgH/Ad0B3AGyAf8BxQHDAQAB/wGPAYwBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
Af8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wMA
@ -185,7 +185,7 @@
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DkwH/A6IB/wMA
Af8DAAH/EAADMwFTWP8DNwFbKAADXAHPAbcBtAGyAf8BmwGYAZYB/wGQAY0BiwH/AY0BigGJAf8BiwGI
AYcB/wGoAaUBowH/AaoBpwGlAf8BpwGkAaIB/wGmAaMBoQH/AaMBoAGeAf8BogGfAZ0B/wGdAZoBmAH/
AY0BigGJAf8BgQE8ATsB/wGAATsBOgH/AYABOwE6Af8BgAE7AToB/wGAATsBOgH/AYABOwE6Af8BmAGV
AY0BigGJAf8BgQE7AToB/wGAAToBOQH/AYABOgE5Af8BgAE6ATkB/wGAAToBOQH/AYABOgE5Af8BmAGV
AZMB/wGlAaIBoAH/AzoBYAwAAY4BiwEAAf8BjgGLAQAB/wG7AbkBAAH/DAAC9QHoAf8BwgHAAQAB/wwA
AvEB3wH/AcYBxAEAAf8MAAHqAekBzwH/AdIB0QGaAf8B3QHcAbIB/wHdAdwBsgH/Ac8BzgGSAf8BjgGL
AQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/
@ -194,7 +194,7 @@
AwAB/wMAAf8DAAH/AwAB/wMAAf8DkwH/A5oB/wMAAf8QAAMzAVNY/wM3AVskAANMAY8BuwG4AbcB/wGh
AZ4BnAH/AZQBkQGPAf8BkgGPAY0B/wGQAY0BiwH/AY0BigGJAf8BqgGnAaUB/wGqAacBpQH/AagBpQGj
Af8BpwGkAaIB/wGkAaEBnwH/AaMBoAGeAf8BoQGeAZwB/wGhAZ4BnAH/AZ4BmwGZAf8BkQGOAYwB/wGC
AT0BPAH/AYABOwE6Af8BgAE7AToB/wGAATsBOgH/AYABOwE6Af8BmAGVAZMB/wGlAaIBoAH/AyEBMAgA
ATwBOwH/AYABOgE5Af8BgAE6ATkB/wGAAToBOQH/AYABOgE5Af8BmAGVAZMB/wGlAaIBoAH/AyEBMAgA
AY4BiwEAAf8BjgGLAQAB/wGfAZwBAAH/AbgBtgEAAf8BuAG2AQAB/wG4AbYBAAH/AbQBsgEAAf8BoQGf
AQAB/wG4AbYBAAH/AbgBtgEAAf8BuAG2AQAB/wGyAbABAAH/AacBpAEAAf8BvgG9AQAB/wG+Ab0BAAH/
Ab4BvQEAAf8BuAG2AQAB/wHQAc8BlQH/Ad0B3AGyAf8B3QHcAbIB/wLqAdAB/wGOAYsBAAH/AY4BiwEA
@ -204,7 +204,7 @@
Af8DAAH/AwAB/wMAAf8DogH/AwAB/xAAAzMBU1j/AzcBWyAAAyoBQAG8AboBuAH/AasBqAGnAf8BmAGV
AZMB/wGWAZMBkQH/AZQBkQGPAf8BkgGPAY0B/wGQAY0BiwH/AasBqAGmAf8BqwGoAaYB/wGpAaYBpAH/
AacBpAGiAf8BpQGiAaAB/wGjAaABngH/AaEBngGcAf8BoQGeAZwB/wGhAZ4BnAH/AaEBngGcAf8BmwGY
AZYB/wGBATwBOwH/AYABOwE6Af8BgAE7AToB/wGAATsBOgH/AYIBPQE8Af8BoQGeAZ0B/wNcAc8IAAGO
AZYB/wGBATsBOgH/AYABOgE5Af8BgAE6ATkB/wGAAToBOQH/AYIBPAE7Af8BoQGeAZ0B/wNcAc8IAAGO
AYsBAAH/AY4BiwEAAf8BuwG5AQAB/wwAAvUB6AH/AcIBwAEAAf8MAALxAd8B/wGzAbEBAAH/AuYBxwH/
Ae0B7AHWAf8B7QHsAdYB/wHtAewB1gH/AcQBwgEAAf8BzAHLAYwB/wHdAdwBsgH/AuoB0AH/AY4BiwEA
Af8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
@ -213,16 +213,16 @@
AwAB/wMAAf8DogH/AwAB/xAAAzMBU1j/AzcBWyAAA1kBvwG6AbcBtQH/AZ0BmgGYAf8BmwGYAZYB/wGY
AZUBkwH/AZYBkwGRAf8BlAGRAY8B/wGSAY8BjQH/AagBpQGjAf8BnQGaAZkB/wGqAacBpQH/AagBpQGj
Af8BpgGjAaEB/wGkAaEBnwH/AaIBnwGdAf8BoQGeAZwB/wGhAZ4BnAH/AaEBngGcAf8BoQGeAZwB/wGF
AYIBgAH/AYABOwE6Af8BgAE7AToB/wGAATsBOgH/AYABOwE6Af8BigGHAYYB/wGmAaMBoQH/AzoBYAQA
AYIBgAH/AYABOgE5Af8BgAE6ATkB/wGAAToBOQH/AYABOgE5Af8BigGHAYYB/wGmAaMBoQH/AzoBYAQA
AY4BiwEAAf8BjgGLAQAB/wG7AbkBAAH/DAAC9QHoAf8BwgHAAQAB/wwAAvEB3wH/AcwBywGNAf8B0wHS
AZwB/wHuAe0B2AH/Ae4B7QHYAf8B7gHtAdgB/wHuAe0B2AH/AacBpAEAAf8ByQHIAYUB/wLqAdAB/wGO
AYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
Af8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8DAAH/A6IB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DyAH/CAAD4wH/A6AB/wOtAf8IAAPIAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DogH/AwAB/xAAAzMBU1j/AzcBWxwAAyoBQAHAAb0BvAH/AawBqQGoAf8BnwGc
AZoB/wGdAZoBmAH/AZsBmAGWAf8BmAGVAZMB/wE0ATIBMAH/AwAB/wMAAf8DAAH/ATcBNAEzAf8BqQGm
AZoB/wGdAZoBmAH/AZsBmAGWAf8BmAGVAZMB/wEzATEBLwH/AwAB/wMAAf8DAAH/ATYBMwEyAf8BqQGm
AaQB/wGnAaQBogH/AaUBogGgAf8BowGgAZ4B/wGhAZ4BnAH/AaEBngGcAf8BoQGeAZwB/wGhAZ4BnAH/
AYUBggGBAf8BgAE7AToB/wGAATsBOgH/AYABOwE6Af8BgAE7AToB/wGAATsBOgH/AZ0BmgGZAf8DXAHf
AYUBggGBAf8BgAE6ATkB/wGAAToBOQH/AYABOgE5Af8BgAE6ATkB/wGAAToBOQH/AZ0BmgGZAf8DXAHf
BAABjgGLAQAB/wGOAYsBAAH/AbsBuQEAAf8MAAL1AegB/wHCAcABAAH/DAAC8QHfAf8BzAHLAY0B/wHb
AdoBrgH/EAABugG4AQAB/wHMAcsBjAH/AdYB1QGkAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
AQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/
@ -230,9 +230,9 @@
Af8DAAH/AwAB/wgAA5EB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A6IB/wMAAf8QAAMz
AVMI/wP+Af8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D/gH/
A/4B/wP+Af8D/gH/A/4B/wP+Bf8DNwFbHAADUQGfAb0BuwG5Af8BpAGhAZ8B/wGiAZ8BnQH/AZ8BnAGa
Af8BnQGaAZgB/wGbAZgBlgH/AwAB/wMAAf8DAAH/AgABAgH/ARcBIAElAf8BqgGnAaUB/wGoAaUBowH/
AaYBowGhAf8BpAGhAZ8B/wGiAZ8BnQH/AaEBngGcAf8BoQGeAZwB/wGeAZsBmQH/AYABOwE6Af8BgAE7
AToB/wGAATsBOgH/AYABOwE6Af8BgAE7AToB/wGAATsBOgH/AYwBiQGIAf8BpwGkAaIB/wMhATABjgGL
Af8BnQGaAZgB/wGbAZgBlgH/AwAB/wMAAf8DAAH/AgABAQH/ARYBHwEkAf8BqgGnAaUB/wGoAaUBowH/
AaYBowGhAf8BpAGhAZ8B/wGiAZ8BnQH/AaEBngGcAf8BoQGeAZwB/wGeAZsBmQH/AYABOgE5Af8BgAE6
ATkB/wGAAToBOQH/AYABOgE5Af8BgAE6ATkB/wGAAToBOQH/AYwBiQGIAf8BpwGkAaIB/wMhATABjgGL
AQAB/wGOAYsBAAH/AbsBuQEAAf8MAAL1AegB/wHCAcABAAH/DAAC8QHfAf8BzAHLAY0B/wHbAdoBrgH/
EAABugG4AQAB/wLdAbMB/wHUAdMBngH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
AQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wMAAf8DogH/
@ -240,9 +240,9 @@
AwAB/wO6Af8EAAPAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wOiAf8DAAH/EAADMwFT
BP8D/gH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9
Af8D/QH/A/0B/wP9Af8D/QH/A/0F/wM3AVscAANcAd8BtgG0AbIB/wGmAaMBoQH/AaQBoQGfAf8BogGf
AZ0B/wGfAZwBmgH/AZ0BmgGYAf8BGAEWARUB/wMAAf8BAAGPAbgB/wEAAY8BvQH/ASABjQGkAf8BqwGo
AZ0B/wGfAZwBmgH/AZ0BmgGYAf8BFwEVARQB/wMAAf8BAAGPAbgB/wEAAY8BvQH/AR8BjQGkAf8BqwGo
AaYB/wGpAaYBpAH/AacBpAGiAf8BpQGiAaAB/wGjAaABngH/AaEBngGcAf8BoQGeAZwB/wGPAYwBigH/
AYQBgQGAAf8BhAGBAYAB/wGAATsBOgH/AYABOwE6Af8BgAE7AToB/wGAATsBOgH/AYABOwE6Af8BqAGl
AYQBgQGAAf8BhAGBAYAB/wGAAToBOQH/AYABOgE5Af8BgAE6ATkB/wGAAToBOQH/AYABOgE5Af8BqAGl
AaMB/wNHAYABjgGLAQAB/wGOAYsBAAH/AZ8BnAEAAf8BuAG2AQAB/wG4AbYBAAH/AbgBtgEAAf8BtAGy
AQAB/wGkAaEBAAH/AcsBygGLAf8BywHKAYsB/wHLAcoBiwH/AcgBxwGDAf8BvwG+AQAB/wHbAdoBrQH/
EAABugG4AQAB/wLdAbMB/wLqAdAB/wGOAYsBAAH/AZEBjgEAAf8BzAHLAYwB/wGXAZQBAAH/AY4BiwEA
@ -251,10 +251,10 @@
AwAB/wOcAf8EAAPOAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wOiAf8DAAH/EAADMwFT
A/4B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/
A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QX/AzcBWxgAAwwBEAHEAcEBwAH/AbIBrwGtAf8BqQGmAaQB/wGm
AaMBoQH/AaQBoQGfAf8BogGfAZ0B/wGfAZwBmgH/AYMBgAE8Af8DAAH/AQcBpAHKAf8BAAGQAb0B/wEg
AaMBoQH/AaQBoQGfAf8BogGfAZ0B/wGfAZwBmgH/AYMBgAE7Af8DAAH/AQYBpAHKAf8BAAGQAb0B/wEf
AY0BpAH/AawBqQGnAf8BqgGnAaUB/wGoAaUBowH/AaYBowGhAf8BpAGhAZ8B/wGeAZsBmQH/AZEBjgGN
Af8BlAGRAY8B/wGhAZ4BnAH/AaABnQGbAf8BjwGMAYoB/wGAATsBOgH/AYABOwE6Af8BgAE7AToB/wGA
ATsBOgH/AZ8BnAGaAf8DVAGvAY4BiwEAAf8BjgGLAQAB/wG7AbkBAAH/DAAC9QHoAf8BuQG2AQAB/wHU
Af8BlAGRAY8B/wGhAZ4BnAH/AaABnQGbAf8BjwGMAYoB/wGAAToBOQH/AYABOgE5Af8BgAE6ATkB/wGA
AToBOQH/AZ8BnAGaAf8DVAGvAY4BiwEAAf8BjgGLAQAB/wG7AbkBAAH/DAAC9QHoAf8BuQG2AQAB/wHU
AdMBngH/AdkB2AGoAf8B2QHYAagB/wHZAdgBqAH/AcUBxAEAAf8BpAGhAQAB/wHFAcMBAAH/AcUBwwEA
Af8BxQHDAQAB/wHFAcMBAAH/AbgBtgEAAf8C3QGzAf8C6gHQAf8BkQGOAQAB/wLcAbEB/wQAAesB6gHR
Af8BlwGUAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wMA
@ -262,10 +262,10 @@
Af8DAAH/AwAB/wMAAf8D3AH/BAADswH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DogH/
AwAB/xAAAzMBUwP9Af8D/QH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8
Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wF/wM3AVsYAAMqAUABxAHCAcEB/wG+AbsBugH/
AbYBswGxAf8BqwGoAaYB/wGmAaMBoQH/AaQBoQGfAf8BogGfAZ0B/wGfAZwBmgH/AQ0BCwEKAf8BAAGD
AZkB/wEDAaYBygH/ASEBkgGnAf8BrQGqAagB/wGrAagBpgH/AaUBogGgAf8BmAGVAZMB/wGPAYwBiwH/
AYkBhgGEAf8BkQGOAY0B/wGhAZ4BnAH/AaEBngGcAf8BoQGeAZwB/wGfAZwBmgH/AYEBPAE7Af8BgAE7
AToB/wGAATsBOgH/AYABOwE6Af8BlQGSAZAB/wNZAb8BjgGLAQAB/wGOAYsBAAH/AbsBuQEAAf8MAAL1
AbYBswGxAf8BqwGoAaYB/wGmAaMBoQH/AaQBoQGfAf8BogGfAZ0B/wGfAZwBmgH/AQwBCgEJAf8BAAGD
AZkB/wECAaYBygH/ASABkgGnAf8BrQGqAagB/wGrAagBpgH/AaUBogGgAf8BmAGVAZMB/wGPAYwBiwH/
AYkBhgGEAf8BkQGOAY0B/wGhAZ4BnAH/AaEBngGcAf8BoQGeAZwB/wGfAZwBmgH/AYEBOwE6Af8BgAE6
ATkB/wGAAToBOQH/AYABOgE5Af8BlQGSAZAB/wNZAb8BjgGLAQAB/wGOAYsBAAH/AbsBuQEAAf8MAAL1
AegB/wHIAcYBgwH/AdYB1QGjAf8C8gHiAf8C8gHhAf8C8gHhAf8C8gHhAf8BrgGsAQAB/wHbAdoBrQH/
AvgB7wH/AvgB7wH/AvgB7wH/AdYB1QGjAf8BxQHEAQAB/wHgAd8BuQH/AdwB2wGxAf8MAAHrAeoB0QH/
AZcBlAEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AwAB/wOhAf8DAAH/
@ -273,10 +273,10 @@
A6kB/wsAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wOhAf8DAAH/EAADMwFTA/wB/wP7
Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP6
Af8D+gH/A/oB/wP6Af8D+gH/A/4B/wM3AVsYAAMqAUABxQHDAcIB/wHEAcEBwAH/AcIBwAG+Af8BvgG7
AboB/wGqAacBpQH/AaYBowGhAf8BpAGhAZ8B/wGkAaEBnwH/AZ8BnAGbAf8BAAEbASYB/wEGAb0B2gH/
ASMBngGvAf8BrgGrAakB/wGiAZ8BnQH/AZIBjwGNAf8BlAGRAY8B/wGUAZEBkAH/AYsBiAGHAf8BngGb
AZkB/wGhAZ4BnAH/AaEBngGcAf8BoQGeAZwB/wGhAZ4BnAH/AYYBgwGCAf8BgAE7AToB/wGAATsBOgH/
AYABOwE6Af8BlQGSAZEB/wNiAe8BjgGLAQAB/wGOAYsBAAH/AbsBuQEAAf8MAAL1AegB/wHIAcYBgwH/
AboB/wGqAacBpQH/AaYBowGhAf8BpAGhAZ8B/wGkAaEBnwH/AZ8BnAGbAf8BAAEaASUB/wEFAb0B2gH/
ASIBngGvAf8BrgGrAakB/wGiAZ8BnQH/AZIBjwGNAf8BlAGRAY8B/wGUAZEBkAH/AYsBiAGHAf8BngGb
AZkB/wGhAZ4BnAH/AaEBngGcAf8BoQGeAZwB/wGhAZ4BnAH/AYYBgwGCAf8BgAE6ATkB/wGAAToBOQH/
AYABOgE5Af8BlQGSAZEB/wNiAe8BjgGLAQAB/wGOAYsBAAH/AbsBuQEAAf8MAAL1AegB/wHIAcYBgwH/
AdkB2AGpAf8QAAG+AbwBAAH/AdMB0gGcAf8BzAHKAYsB/wHbAdoBrgH/AdsB2gGuAf8B2wHaAa4B/wG/
Ab4BAAH/AbsBugEAAf8C/gH8Af8QAAG6AbgBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
Af8BjgGLAQAB/wMAAf8DnQH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
@ -284,19 +284,19 @@
AwAB/wOdAf8DAAH/EAADMwFTA/oB/wP5Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5
Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5Af8D+QH/A/0B/wM3AVsYAAMqAUABxwHF
AcMB/wHFAcMBwgH/AcMBwAG/Af8BvQK7Af8BrwGuAbAB/wGsAaoBqAH/AaYBowGhAf8BqAGlAaMB/wG3
AbQBsgH/ARcBHwEgAf8BAAHEAd8B/wEMAakBvgH/AY4BoQGmAf8BlgGTAZEB/wGUAZEBjwH/AZkBlgGU
AbQBsgH/ARYBHgEfAf8BAAHEAd8B/wELAakBvgH/AY4BoQGmAf8BlgGTAZEB/wGUAZEBjwH/AZkBlgGU
Af8BpwGkAaIB/wGbAZgBlgH/AaMBoAGeAf8BoQGeAZwB/wGhAZ4BnAH/AaEBngGcAf8BoQGeAZwB/wGG
AYMBggH/AYABOwE6Af8BgAE7AToB/wGAATsBOgH/AZYBkwGRAf8BqwGoAaYB/wGOAYsBAAH/AY4BiwEA
AYMBggH/AYABOgE5Af8BgAE6ATkB/wGAAToBOQH/AZYBkwGRAf8BqwGoAaYB/wGOAYsBAAH/AY4BiwEA
Af8BuwG5AQAB/wwAAvUB6AH/AcgBxgGDAf8B2QHYAagB/xAAAb4BvAEAAf8B1gHVAaIB/wHoAecBygH/
DAAB2wHaAa4B/wHXAdYBpQH/AbYBtAEAAf8C/gH8Af8IAAHDAcEBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
AYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AwAB/wOYAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A7AB/wPrAf8IAAOeAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A5gB/wMAAf8QAAMzAVMD+QH/A/kB/wP4Af8D+AH/A/gB/wP4
Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4
Af8D/AH/AzcBWxgAAyoBQAGoAcABxQH/AT0BsgHAAf8BCwGiAbwB/wEAAZoBvAH/AQABlwG6Af8BLgGp
AbkB/wGuAasBqQH/AasBqAGmAf8BuAG1AbMB/wE9AToBOQH/AQABjwGhAf8BAAG/AdsB/wEAAaIBwQH/
ATEBkQGdAf8BoAGdAZsB/wGfAZwBmgH/AaYBowGhAf8BpgGjAaEB/wGkAaEBnwH/AaIBnwGdAf8BoQGe
AZwB/wGhAZ4BnAH/AaEBngGcAf8BiAGFAYQB/wGAATsBOgH/AYABOwE6Af8BgAE7AToB/wGWAZMBkgH/
Af8D/AH/AzcBWxgAAyoBQAGoAcABxQH/ATwBsgHAAf8BCgGiAbwB/wEAAZoBvAH/AQABlwG6Af8BLQGp
AbkB/wGuAasBqQH/AasBqAGmAf8BuAG1AbMB/wE8ATkBOAH/AQABjwGhAf8BAAG/AdsB/wEAAaIBwQH/
ATABkQGdAf8BoAGdAZsB/wGfAZwBmgH/AaYBowGhAf8BpgGjAaEB/wGkAaEBnwH/AaIBnwGdAf8BoQGe
AZwB/wGhAZ4BnAH/AaEBngGcAf8BiAGFAYQB/wGAAToBOQH/AYABOgE5Af8BgAE6ATkB/wGWAZMBkgH/
A1kBvwGOAYsBAAH/AY4BiwEAAf8BlwGUAQAB/wG6AbgBAAH/Ab0BvAEAAf8BvQG8AQAB/wG7AboBAAH/
AcYBxAEAAf8B2QHYAagB/xAAAb4BvAEAAf8B1gHVAaIB/wLnAcoB/wwAAdsB2gGuAf8C6gHQAf8BjgGL
AQAB/wG2AbQBAAH/Af4B/QH8Af8BwwHCAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/
@ -304,10 +304,10 @@
AwAB/wMAAf8DAAH/AwAB/wMAAf8DsAH/CAAD1QH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/A5QB/wMAAf8QAAMzAVMD+AH/A/cB/wP2Af8D9gH/A/YB/wP2Af8D9gH/
A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D+gH/
AzcBWxAAAzIBUANUAa8BWAJiAe8BAAGaAbwB/wEAAaYBxgH/AQABuAHUAf8BFAHGAd8B/wETAcIB3AH/
AQABmgG4Af8BugG4AbcB/wG5AbYBtQH/AbUBswGyAf8BLQGEAYoB/wEAAYQBnAH/AQABuwHXAf8BAAGu
Ac8B/wEAAZUBvgH/AT0BlAGeAf8BqgGnAaUB/wGpAaYBpAH/AacBpAGiAf8BpQGiAaAB/wGjAaABngH/
AaEBngGcAf8BoQGeAZwB/wGgAZ0BmwH/AYYBgwGCAf8BggE9ATwB/wGAATsBOgH/AYABOwE6Af8BogGf
AzcBWxAAAzIBUANUAa8BWAJiAe8BAAGaAbwB/wEAAaYBxgH/AQABuAHUAf8BEwHGAd8B/wESAcIB3AH/
AQABmgG4Af8BugG4AbcB/wG5AbYBtQH/AbUBswGyAf8BLAGEAYoB/wEAAYQBnAH/AQABuwHXAf8BAAGu
Ac8B/wEAAZUBvgH/ATwBlAGeAf8BqgGnAaUB/wGpAaYBpAH/AacBpAGiAf8BpQGiAaAB/wGjAaABngH/
AaEBngGcAf8BoQGeAZwB/wGgAZ0BmwH/AYYBgwGCAf8BggE8ATsB/wGAAToBOQH/AYABOgE5Af8BogGf
AZ4B/wNZAb8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BrgGsAQAB/wHeAd0BtAH/Ad4B3QG0Af8B3gHd
AbQB/wHPAc4BkwH/AakBpwEAAf8BvgG8AQAB/wG+AbwBAAH/Ab4BvAEAAf8BvgG8AQAB/wG2AbQBAAH/
AdYB1QGiAf8C5wHKAf8MAAHbAdoBrgH/AuoB0AH/AY4BiwEAAf8BjgGLAQAB/wGhAZ4BAAH/AY4BiwEA
@ -316,10 +316,10 @@
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DjwH/AwAB/xAA
AzMBUwP2Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/
A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP5Af8DNwFbEQABkAG/Af8BAAGMAbcB/wEAAbIB0gH/
AQABxwHhAf8BFAHJAeEB/wGBAccB1wH/AZoBxAHMAf8BJwHKAeEB/wEAAaEBwgH/ASgBnQGxAf8BIQGb
AbIB/wEAAZYBtgH/AQABoAHCAf8BAAGuAcwB/wEAAbgB1gH/AQABswHTAf8BAAGaAcEB/wEOAYgBpQH/
AQABxwHhAf8BEwHJAeEB/wGBAccB1wH/AZoBxAHMAf8BJgHKAeEB/wEAAaEBwgH/AScBnQGxAf8BIAGb
AbIB/wEAAZYBtgH/AQABoAHCAf8BAAGuAcwB/wEAAbgB1gH/AQABswHTAf8BAAGaAcEB/wENAYgBpQH/
AasBqAGmAf8BqgGnAaUB/wGnAaQBogH/AaYBowGhAf8BowGgAZ4B/wGiAZ8BnQH/AaEBngGcAf8BngGb
AZkB/wGHAYQBggH/AYQBgQGAAf8BggE9ATwB/wGAATsBOgH/AawBqQGnAf8DRwGAAY4BiwEAAf8BjgGL
AZkB/wGHAYQBggH/AYQBgQGAAf8BggE8ATsB/wGAAToBOQH/AawBqQGnAf8DRwGAAY4BiwEAAf8BjgGL
AQAB/wGOAYsBAAH/AY4BiwEAAf8BrQGrAQAB/wL2AewB/wL5AfEB/wL5AfEB/wHrAeoB0QH/AdUB1AGh
Af8C+QHxAf8C+QHxAf8C+QHxAf8B5wHmAckB/wG2AbQBAAH/AcoByQGGAf8B2gHZAasB/wHaAdkBqwH/
AdoB2QGrAf8BxAHDAQAB/wHqAekBzwH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
@ -328,8 +328,8 @@
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wOKAf8DAAH/EAADMwFTA/UB/wP1Af8D9AH/
A/QB/wP0Af8D9AH/A/QB/wP0Af8D9AH/A/QB/wP0Af8D9AH/A/QB/wP0Af8D9AH/A/QB/wP0Af8D9AH/
A/QB/wP0Af8D9AH/A/cB/wM3AVsQAAFYAmIB7wEAAZ4BxQH/AVcCXAHfA1kBvwHJAccBxgH/AccBxQHD
Af8BxAHCAcEB/wGBAcYB1gH/AQwBvAHWAf8BAAGiAcMB/wEAAa4BzQH/AQABuAHVAf8BAAG6AdcB/wEA
AboB1wH/AQABugHXAf8BAAG1AdUB/wEAAaEBxwH/AQQBiwGtAf8BqwGoAaYB/wGhAZ4BnAH/AakBpgGk
Af8BxAHCAcEB/wGBAcYB1gH/AQsBvAHWAf8BAAGiAcMB/wEAAa4BzQH/AQABuAHVAf8BAAG6AdcB/wEA
AboB1wH/AQABugHXAf8BAAG1AdUB/wEAAaEBxwH/AQMBiwGtAf8BqwGoAaYB/wGhAZ4BnAH/AakBpgGk
Af8BowGgAZ4B/wGcAZkBlwH/AZsBmAGWAf8BnAGZAZcB/wGPAYwBiwH/AYkBhgGEAf8BhwGEAYIB/wGE
AYEBgAH/AZEBjgGNAf8BsAGtAasB/wMhATABjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
AYsBAAH/AZwBmgEAAf8B3wHeAbYB/wHjAeIBvwH/AeMB4gG/Af8B3wHeAbYB/wG/Ab0BAAH/AeMB4gG/
@ -339,9 +339,9 @@
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D1QH/HAAD8wH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wOFAf8DAAH/EAADMwFTA/QB/wPzAf8D8gH/A/IB/wPyAf8D8gH/A/IB/wPy
Af8D8gH/A/IB/wPyAf8D8gH/A/IB/wPyAf8D8gH/A/EB/wPxAf8D8QH/A/EB/wPxAf8D8QH/A/MB/wM3
AVsQAANRAaABBwGpAc4B/wFaAl0B0wMyAVABywHJAcgB/wHIAcYBxAH/AcUBwwHCAf8BmAHCAcsB/wEk
AcgB4AH/AQABuwHZAf8BAAG7AdgB/wEAAbsB2AH/AQABvAHZAf8BAAHAAdsB/wEFAcUB3wH/AQkBwQHd
Af8BAAGVAbYB/wEFATIBiwH/AZ4BmwGZAf8BmwGYAZYB/wGgAZ0BmwH/AZYBkwGRAf8BlAGRAY8B/wGS
AVsQAANRAaABBgGpAc4B/wFaAl0B0wMyAVABywHJAcgB/wHIAcYBxAH/AcUBwwHCAf8BmAHCAcsB/wEj
AcgB4AH/AQABuwHZAf8BAAG7AdgB/wEAAbsB2AH/AQABvAHZAf8BAAHAAdsB/wEEAcUB3wH/AQgBwQHd
Af8BAAGVAbYB/wEEATEBiwH/AZ4BmwGZAf8BmwGYAZYB/wGgAZ0BmwH/AZYBkwGRAf8BlAGRAY8B/wGS
AY8BjQH/AZABjQGLAf8BjQGKAYkB/wGLAYgBhwH/AYkBhgGEAf8BhwGEAYIB/wGhAZ4BnAH/A1wB3wQA
AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AZ0BmgEAAf8BpQGj
AQAB/wGlAaMBAAH/AaUBowEAAf8BnAGZAQAB/wGjAaEBAAH/AaUBowEAAf8BpQGjAQAB/wGlAaMBAAH/
@ -350,9 +350,9 @@
Af8BjgGLAQAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DmAH/JAADvgH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8QAAMzAVMD8gH/A/EB/wPx
Af8D8QH/A/EB/wPxAf8D8QH/A/EB/wPxAf8D8QH/A/EB/wPxAf8D8QH/A/EB/wPwAf8D7QH/A+oB/wPo
Af8D6AH/A+cB/wPmAf8D5wH/AzgBXBAAAzoBYAEgAbQB1wH/AQABlgG6Af8DHAEnA1wB3wHKAcgBxwH/
AcYBxAHDAf8BuwHCAcMB/wEjAcoB4QH/AQABvgHaAf8BAAHBAd0B/wESAccB4AH/ARQByAHhAf8BHQHC
AdcB/wEXAZsBqAH/AwAB/wMAAf8BhAGCAYAB/wGlAaIBoAH/AaoBpwGlAf8BqgGnAaUB/wGgAZ0BmwH/
Af8D6AH/A+cB/wPmAf8D5wH/AzgBXBAAAzoBYAEfAbQB1wH/AQABlgG6Af8DHAEnA1wB3wHKAcgBxwH/
AcYBxAHDAf8BuwHCAcMB/wEiAcoB4QH/AQABvgHaAf8BAAHBAd0B/wERAccB4AH/ARMByAHhAf8BHAHC
AdcB/wEWAZsBqAH/AwAB/wMAAf8BhAGCAYAB/wGlAaIBoAH/AaoBpwGlAf8BqgGnAaUB/wGgAZ0BmwH/
AZYBkwGRAf8BlAGRAY8B/wGSAY8BjQH/AZABjQGLAf8BjQGKAYkB/wGLAYgBhwH/AZEBjgGMAf8BswGw
Aa4B/wNHAYAEAAGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
AYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
@ -361,8 +361,8 @@
AQAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8D2gH/KwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8QAAMzAVMD8QH/A/EB/wPwAf8D8AH/A/AB/wPw
Af8D8AH/A/AB/wPwAf8D8AH/A/AB/wPwAf8D8AH/A+8B/wPsAf8D5AH/A9gB/wPQAf8DzwH/A9AB/wPM
Af8DyAH/AzUBVxAAAwwBEAEqAbcB2gH/AQABoQHFAf8DQwF3AzIBUAHLAckByAH/AckBxwHFAf8BxQHD
AcIB/wE4AcYB1wH/AQABvwHbAf8BDQGyAcwB/wGOAb4BxwH/AakBuQG8Af8BuQG3AbUB/wG3AbQBsgH/
Af8DyAH/AzUBVxAAAwwBEAEpAbcB2gH/AQABoQHFAf8DQwF3AzIBUAHLAckByAH/AckBxwHFAf8BxQHD
AcIB/wE3AcYB1wH/AQABvwHbAf8BDAGyAcwB/wGOAb4BxwH/AakBuQG8Af8BuQG3AbUB/wG3AbQBsgH/
AaQBogGgAf8BqwGoAaYB/wGxAa8BrQH/Aa8BrAGqAf8BrQGqAagB/wGrAagBpgH/AaIBnwGdAf8BmAGV
AZMB/wGWAZMBkQH/AZQBkQGPAf8BkgGPAY0B/wGQAY0BiwH/AY0BigGJAf8BrQGqAagB/wNcAd8DDAEQ
BAABjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
@ -371,8 +371,8 @@
AvwB+QH/AZ0BmwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8vAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/xAAAzMBUwPwAf8D7wH/A+4B/wPuAf8D7gH/A+4B/wPuAf8D7gH/A+4B/wPuAf8D7gH/
A+4B/wPuAf8D7QH/A+gB/wPWAf8DuAH/A6cB/wOiAf8DngH/A54B/wNhAeYDFAEbFAADVAGvARoBsAHT
Af8BWgJdAdMEAANUAa8BywHJAcgB/wHHAcUBxAH/AZMBwwHMAf8BBgHDAd4B/wEAAZoBugH/Ab0BuwG6
A+4B/wPuAf8D7QH/A+gB/wPWAf8DuAH/A6cB/wOiAf8DngH/A54B/wNhAeYDFAEbFAADVAGvARkBsAHT
Af8BWgJdAdMEAANUAa8BywHJAcgB/wHHAcUBxAH/AZMBwwHMAf8BBQHDAd4B/wEAAZoBugH/Ab0BuwG6
Af8BvAG6AbgB/wG6AbcBtgH/AbgBtgG0Af8BtgGzAbIB/wG0AbIBsAH/AbIBrwGtAf8BsAGtAasB/wGu
AasBqQH/AasBqAGmAf8BngGbAZkB/wGbAZgBlgH/AZgBlQGTAf8BlgGTAZEB/wGUAZEBjwH/AZIBjwGN
Af8BqAGlAaMB/wG1AbMBsQH/AyoBQAgAAY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
@ -382,8 +382,8 @@
Af8BjgGLAQAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/EAADMwFTA+4B/wPtAf8D7QH/A+0B/wPtAf8D7QH/A+0B/wPtAf8D7QH/
A+0B/wPtAf8D7QH/A+0B/wPsAf8D4wH/A8oB/wOdAf8DgwH/A4YB/wOYAf8DYgHvAycBOxgAAzoBYAEw
AboB3QH/AQABkwG6Af8DGgEkAwwBEANcAc8BjQG4AcQB/wEFAaUBwAH/AQABuQHWAf8BAAGeAb4B/wGY
A+0B/wPtAf8D7QH/A+0B/wPsAf8D4wH/A8oB/wOdAf8DgwH/A4YB/wOYAf8DYgHvAycBOxgAAzoBYAEv
AboB3QH/AQABkwG6Af8DGgEkAwwBEANcAc8BjQG4AcQB/wEEAaUBwAH/AQABuQHWAf8BAAGeAb4B/wGY
AbYBvQH/Ab0BuwG5Af8BvQG6AbkB/wG5AbcBtQH/AbcBtAGyAf8BtQGyAbEB/wGzAbABrgH/AbEBrwGt
Af8BrQGqAagB/wGiAZ8BnQH/AZ8BnAGaAf8BnQGaAZgB/wGbAZgBlgH/AZgBlQGTAf8BlgGTAZEB/wGk
AaEBnwH/AbgBtQGzAf8DRwGADAABjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/
@ -393,7 +393,7 @@
AQAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8vAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/xAAAzMBUwPtAf8D7QH/A+wB/wPsAf8D7AH/A+wB/wPs
Af8D7AH/A+wB/wPsAf8D7AH/A+wB/wPsAf8D6wH/A98B/wPJAf8D7QH/A/AB/wPxAf8DZwHyAysBQhwA
AwwBEAE7AcEB4gH/AQ0BngHHAf8BWAJaAcADUQGiAQABmAG7Af8BAAGjAcQB/wEAAbUB0wH/AQABwgHe
AwwBEAE6AcEB4gH/AQwBngHHAf8BWAJaAcADUQGiAQABmAG7Af8BAAGjAcQB/wEAAbUB0wH/AQABwgHe
Af8BAAGxAdAB/wGhAbcBvQH/Ab4BvAG6Af8BvQG7AbkB/wG9AboBuQH/AboBtwG1Af8BtgGzAbEB/wGy
Aa8BrQH/Aa4BqwGpAf8BpgGjAaEB/wGkAaEBnwH/AaIBnwGdAf8BnwGcAZoB/wGdAZoBmAH/AZ0BmgGY
Af8BrgGrAakB/wG5AbcBtQH/A1EBnxAAAY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
@ -403,8 +403,8 @@
AY4BiwEAAf8BjgGLAQAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/EAADMwFTA+wB/wPsAf8D6wH/A+sB/wPrAf8D6wH/A+sB/wPr
Af8D6wH/A+sB/wPrAf8D6wH/A+sB/wPpAf8D3AH/A8cB/wP+Bf8DZwHyAywBRCQAA1wBzwEoAbYB2wH/
AQcBlwHCAf8BBQGeAcYB/wEOAbEB1AH/ARoBvQHcAf8BIQHAAdsB/wE8AcIB1AH/AaMBwgHJAf8BwgHA
Af8D6wH/A+sB/wPrAf8D6wH/A+sB/wPpAf8D3AH/A8cB/wP+Bf8DZwHyAywBRCQAA1wBzwEnAbYB2wH/
AQYBlwHCAf8BBAGeAcYB/wENAbEB1AH/ARkBvQHcAf8BIAHAAdsB/wE7AcIB1AH/AaMBwgHJAf8BwgHA
Ab4B/wG/AbwBuwH/Ab0BuwG5Af8BuwG4AbcB/wG6AbcBtQH/AbQBsQGvAf8BrQGqAagB/wGrAagBpgH/
AakBpgGkAf8BpgGjAaEB/wGkAaEBnwH/AaIBnwGdAf8BpwGkAaIB/wG4AbYBtAH/AbwBuQG4Af8DQAFw
FAABjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
@ -414,8 +414,8 @@
Af8BjgGLAQAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/EAADMwFTA+oB/wPqAf8D6QH/A+kB/wPpAf8D6QH/A+kB/wPpAf8D6QH/
A+kB/wPpAf8D6QH/A+kB/wPmAf8D2AH/A8YB/wP4Af8DZwHyAy0BRSgAA0ABcAGLAcoB6AH/ATcBvwHh
Af8BMwG7Ad4B/wNUAa8DOgFgAwwBEANHAYADYgHvAcsByQHIAf8BxgHEAcMB/wHBAb8BvQH/AbwBuQG4
A+kB/wPpAf8D6QH/A+kB/wPmAf8D2AH/A8YB/wP4Af8DZwHyAy0BRSgAA0ABcAGLAcoB6AH/ATYBvwHh
Af8BMgG7Ad4B/wNUAa8DOgFgAwwBEANHAYADYgHvAcsByQHIAf8BxgHEAcMB/wHBAb8BvQH/AbwBuQG4
Af8BugG3AbYB/wG5AbYBtAH/Aa8BrAGqAf8BrQGqAagB/wGrAagBpgH/AawBqQGnAf8BsAGtAawB/wG7
AbgBtgH/Ab8BvAG7Af8DXAHPAyEBMBgAAY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
AQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/
@ -1066,36 +1066,12 @@
<metadata name="dataGridViewTextBoxColumnName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Type.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumnName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewCheckBoxColumnProtocolEnable.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumnProtocolType.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewCheckBoxColumnProtocolEnable.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumnProtocolType.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Active.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="OS.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Executable.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Title.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Active.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -1117,12 +1093,6 @@
<metadata name="ArgumentParameter.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ArgumentActive.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ArgumentParameter.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="checkBoxPermittedProcessAllowUser.ToolTip" xml:space="preserve">
<value>Allow locating third party applications with a file dialog if it cannot be found at the paths specified. Only applications matching other criteria specified (like Original Name, executable) are accepted.</value>
</data>
@ -1138,18 +1108,6 @@
<metadata name="dataGridViewTextBoxColumn2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewCheckBoxColumn1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewComboBoxColumn1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="label23.Text" xml:space="preserve">
<value>The seb(s):// link to the config file can contain an additional query string, separated from the main URL by '?' or '??' (if the URL itself doesn't contain a query). SEB will then append this query string to the Start URL.</value>
</data>
@ -1167,30 +1125,12 @@ IMPORTANT: Always copy the key(s) as a last step, after the configuration file w
<data name="label18.Text" xml:space="preserve">
<value>The Browser Exam Key verifies the intergrity of an installed SEB version as well as the configuration used by an exam client. This means that this key is different for every configuration and SEB version used. It changes when one or more configuration value(s) change as well as when a different SEB version is used.</value>
</data>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="checkBoxAllowBrowsingBackForward.ToolTip" xml:space="preserve">
<value>Disabling browsing to previously visited pages (by Ctrl-Cursor left or the button in the browser toolbar, if enabled) increases security, because it might be possible to leave an exam by browsing back to an external start page.</value>
</data>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="checkBoxAllowNavigationNewWindow.ToolTip" xml:space="preserve">
<value>Disabling browsing to previously visited pages (by Ctrl-Cursor left or the button in the browser toolbar, if enabled) might not be desired for additional resources and other content opening in additional browser windows, therefore this separate setting.</value>
</data>
<metadata name="spellCheckerDictionaryEnabledColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="spellCheckerDictionaryLocaleColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="spellCheckerDictionaryFilesColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="checkBoxAllowBrowsingBackForward.ToolTip" xml:space="preserve">
<value>Disabling browsing to previously visited pages (by Ctrl-Cursor left or the button in the browser toolbar, if enabled) increases security, because it might be possible to leave an exam by browsing back to an external start page.</value>
</data>
<metadata name="spellCheckerDictionaryEnabledColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>