diff --git a/SafeExamBrowser.ResetUtility/App.config b/SafeExamBrowser.ResetUtility/App.config deleted file mode 100644 index 56efbc7b..00000000 --- a/SafeExamBrowser.ResetUtility/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/SafeExamBrowser.ResetUtility/App.cs b/SafeExamBrowser.ResetUtility/App.cs deleted file mode 100644 index 9dc818ca..00000000 --- a/SafeExamBrowser.ResetUtility/App.cs +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -using System; -using System.Threading; -using System.Threading.Tasks; -using System.Windows; -using SafeExamBrowser.ResetUtility.Procedure; - -namespace SafeExamBrowser.ResetUtility -{ - public class App : Application - { - private static readonly Mutex Mutex = new Mutex(true, "safe_exam_browser_reset_mutex"); - private CompositionRoot instances = new CompositionRoot(); - - [STAThread] - public static void Main() - { - try - { - StartApplication(); - } - catch (Exception e) - { - MessageBox.Show(e.Message + "\n\n" + e.StackTrace, "Fatal Error", MessageBoxButton.OK, MessageBoxImage.Error); - } - finally - { - Mutex.Close(); - } - } - - private static void StartApplication() - { - if (NoInstanceRunning()) - { - new App().Run(); - } - else - { - MessageBox.Show("You can only run one instance of the Reset Utility at a time.", "Startup Not Allowed", MessageBoxButton.OK, MessageBoxImage.Information); - } - } - - private static bool NoInstanceRunning() - { - return Mutex.WaitOne(TimeSpan.Zero, true); - } - - protected override void OnStartup(StartupEventArgs e) - { - base.OnStartup(e); - - instances.BuildObjectGraph(); - instances.LogStartupInformation(); - - MainWindow = instances.MainWindow; - MainWindow.Show(); - - Task.Run(new Action(RunApplication)); - } - - private void RunApplication() - { - for (var step = instances.InitialStep; ; step = step.GetNextStep()) - { - var result = step.Execute(); - - if (result == ProcedureStepResult.Terminate) - { - break; - } - } - - Dispatcher.Invoke(Shutdown); - } - - protected override void OnExit(ExitEventArgs e) - { - instances.LogShutdownInformation(); - - base.OnExit(e); - } - } -} diff --git a/SafeExamBrowser.ResetUtility/AppContext.cs b/SafeExamBrowser.ResetUtility/AppContext.cs deleted file mode 100644 index f376a932..00000000 --- a/SafeExamBrowser.ResetUtility/AppContext.cs +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -using SafeExamBrowser.Contracts.Logging; - -namespace SafeExamBrowser.ResetUtility -{ - internal class AppContext - { - internal ILogger Logger { get; set; } - internal IUserInterface UserInterface { get; set; } - } -} diff --git a/SafeExamBrowser.ResetUtility/CompositionRoot.cs b/SafeExamBrowser.ResetUtility/CompositionRoot.cs deleted file mode 100644 index 15a76f4b..00000000 --- a/SafeExamBrowser.ResetUtility/CompositionRoot.cs +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -using System; -using System.IO; -using System.Windows; -using SafeExamBrowser.Contracts.Logging; -using SafeExamBrowser.Logging; -using SafeExamBrowser.ResetUtility.Procedure; -using SafeExamBrowser.ResetUtility.UserInterface; - -namespace SafeExamBrowser.ResetUtility -{ - internal class CompositionRoot - { - private ILogger logger; - - internal Window MainWindow { get; private set; } - internal ProcedureStep InitialStep { get; private set; } - - internal void BuildObjectGraph() - { - InitializeLogging(); - - var context = new AppContext - { - Logger = logger, - UserInterface = new MainWindow() - }; - - MainWindow = context.UserInterface as Window; - InitialStep = new Initialization(context); - } - - internal void LogStartupInformation() - { - logger.Log($"# Application started at {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}"); - logger.Log(string.Empty); - } - - internal void LogShutdownInformation() - { - logger?.Log($"# Application terminated at {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}"); - } - - private void InitializeLogging() - { - var appDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), nameof(SafeExamBrowser)); - var logFolder = Path.Combine(appDataFolder, "Logs"); - var logFilePrefix = DateTime.Now.ToString("yyyy-MM-dd\\_HH\\hmm\\mss\\s"); - var logFilePath = Path.Combine(logFolder, $"{logFilePrefix}_{nameof(ResetUtility)}.log"); - var logFileWriter = new LogFileWriter(new DefaultLogFormatter(), logFilePath); - - logger = new Logger(); - logger.LogLevel = LogLevel.Debug; - logger.Subscribe(logFileWriter); - logFileWriter.Initialize(); - } - } -} diff --git a/SafeExamBrowser.ResetUtility/IUserInterface.cs b/SafeExamBrowser.ResetUtility/IUserInterface.cs deleted file mode 100644 index 0c922b2a..00000000 --- a/SafeExamBrowser.ResetUtility/IUserInterface.cs +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -namespace SafeExamBrowser.ResetUtility -{ - internal interface IUserInterface - { - } -} diff --git a/SafeExamBrowser.ResetUtility/Images/SafeExamBrowser.ico b/SafeExamBrowser.ResetUtility/Images/SafeExamBrowser.ico deleted file mode 100644 index abdc4635..00000000 Binary files a/SafeExamBrowser.ResetUtility/Images/SafeExamBrowser.ico and /dev/null differ diff --git a/SafeExamBrowser.ResetUtility/Images/SafeExamBrowser.png b/SafeExamBrowser.ResetUtility/Images/SafeExamBrowser.png deleted file mode 100644 index c56dd2b0..00000000 Binary files a/SafeExamBrowser.ResetUtility/Images/SafeExamBrowser.png and /dev/null differ diff --git a/SafeExamBrowser.ResetUtility/Procedure/Initialization.cs b/SafeExamBrowser.ResetUtility/Procedure/Initialization.cs deleted file mode 100644 index fb8b6065..00000000 --- a/SafeExamBrowser.ResetUtility/Procedure/Initialization.cs +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -namespace SafeExamBrowser.ResetUtility.Procedure -{ - internal class Initialization : ProcedureStep - { - public Initialization(AppContext context) : base(context) - { - } - - internal override ProcedureStepResult Execute() - { - System.Threading.Thread.Sleep(5000); - - if (SebNotRunning() && IsAdmin()) - { - return ProcedureStepResult.Continue; - } - else - { - return ProcedureStepResult.Terminate; - } - } - - internal override ProcedureStep GetNextStep() - { - return new MainMenu(Context); - } - - private bool IsAdmin() - { - return false; - } - - private bool SebNotRunning() - { - return false; - } - } -} diff --git a/SafeExamBrowser.ResetUtility/Procedure/MainMenu.cs b/SafeExamBrowser.ResetUtility/Procedure/MainMenu.cs deleted file mode 100644 index 209a0cf3..00000000 --- a/SafeExamBrowser.ResetUtility/Procedure/MainMenu.cs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -using System; - -namespace SafeExamBrowser.ResetUtility.Procedure -{ - internal class MainMenu : ProcedureStep - { - public MainMenu(AppContext context) : base(context) - { - } - - internal override ProcedureStepResult Execute() - { - throw new NotImplementedException(); - } - - internal override ProcedureStep GetNextStep() - { - throw new NotImplementedException(); - } - } -} diff --git a/SafeExamBrowser.ResetUtility/Procedure/ProcedureStep.cs b/SafeExamBrowser.ResetUtility/Procedure/ProcedureStep.cs deleted file mode 100644 index d1e55b74..00000000 --- a/SafeExamBrowser.ResetUtility/Procedure/ProcedureStep.cs +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -namespace SafeExamBrowser.ResetUtility.Procedure -{ - internal abstract class ProcedureStep - { - protected AppContext Context { get; } - - internal ProcedureStep(AppContext context) - { - Context = context; - } - - internal abstract ProcedureStepResult Execute(); - internal abstract ProcedureStep GetNextStep(); - } -} diff --git a/SafeExamBrowser.ResetUtility/Procedure/ProcedureStepResult.cs b/SafeExamBrowser.ResetUtility/Procedure/ProcedureStepResult.cs deleted file mode 100644 index 0b50c157..00000000 --- a/SafeExamBrowser.ResetUtility/Procedure/ProcedureStepResult.cs +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -namespace SafeExamBrowser.ResetUtility.Procedure -{ - internal enum ProcedureStepResult - { - Continue, - Terminate - } -} diff --git a/SafeExamBrowser.ResetUtility/Properties/AssemblyInfo.cs b/SafeExamBrowser.ResetUtility/Properties/AssemblyInfo.cs deleted file mode 100644 index d1172a74..00000000 --- a/SafeExamBrowser.ResetUtility/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; -using System.Windows; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("SafeExamBrowser.ResetUtility")] -[assembly: AssemblyDescription("Safe Exam Browser")] -[assembly: AssemblyCompany("ETH Zürich")] -[assembly: AssemblyProduct("Safe Exam Browser")] -[assembly: AssemblyCopyright("Copyright © 2019 ETH Zürich, Educational Development and Technology (LET)")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -//In order to begin building localizable applications, set -//CultureYouAreCodingWith in your .csproj file -//inside a . For example, if you are using US english -//in your source files, set the to en-US. Then uncomment -//the NeutralResourceLanguage attribute below. Update the "en-US" in -//the line below to match the UICulture setting in the project file. - -//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] - - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located - //(used if a resource is not found in the page, - // or application resource dictionaries) - ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located - //(used if a resource is not found in the page, - // app, or any theme specific resource dictionaries) -)] - - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: AssemblyInformationalVersion("1.0.0.0")] diff --git a/SafeExamBrowser.ResetUtility/Properties/Resources.Designer.cs b/SafeExamBrowser.ResetUtility/Properties/Resources.Designer.cs deleted file mode 100644 index 13bb97ed..00000000 --- a/SafeExamBrowser.ResetUtility/Properties/Resources.Designer.cs +++ /dev/null @@ -1,71 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace SafeExamBrowser.ResetUtility.Properties -{ - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if ((resourceMan == null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SafeExamBrowser.ResetUtility.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { - return resourceCulture; - } - set - { - resourceCulture = value; - } - } - } -} diff --git a/SafeExamBrowser.ResetUtility/Properties/Resources.resx b/SafeExamBrowser.ResetUtility/Properties/Resources.resx deleted file mode 100644 index af7dbebb..00000000 --- a/SafeExamBrowser.ResetUtility/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/SafeExamBrowser.ResetUtility/Properties/Settings.Designer.cs b/SafeExamBrowser.ResetUtility/Properties/Settings.Designer.cs deleted file mode 100644 index cecbf05e..00000000 --- a/SafeExamBrowser.ResetUtility/Properties/Settings.Designer.cs +++ /dev/null @@ -1,30 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace SafeExamBrowser.ResetUtility.Properties -{ - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { - return defaultInstance; - } - } - } -} diff --git a/SafeExamBrowser.ResetUtility/Properties/Settings.settings b/SafeExamBrowser.ResetUtility/Properties/Settings.settings deleted file mode 100644 index 033d7a5e..00000000 --- a/SafeExamBrowser.ResetUtility/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/SafeExamBrowser.ResetUtility/SafeExamBrowser.ResetUtility.csproj b/SafeExamBrowser.ResetUtility/SafeExamBrowser.ResetUtility.csproj deleted file mode 100644 index fbca7ae6..00000000 --- a/SafeExamBrowser.ResetUtility/SafeExamBrowser.ResetUtility.csproj +++ /dev/null @@ -1,135 +0,0 @@ - - - - - Debug - AnyCPU - {61167B0C-9C42-46AC-8C48-1EDC48C28D98} - WinExe - SafeExamBrowser.ResetUtility - SafeExamBrowser.ResetUtility - v4.7.2 - 512 - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 4 - true - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - true - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - true - - - Images\SafeExamBrowser.ico - - - - - - 4.0 - - - - - - - - MSBuild:Compile - Designer - - - - - - - MainWindow.xaml - Code - - - - - - - - - Code - - - True - True - Resources.resx - - - True - Settings.settings - True - - - ResXFileCodeGenerator - Resources.Designer.cs - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - - - - {47da5933-bef8-4729-94e6-abde2db12262} - SafeExamBrowser.Contracts - - - {386b6042-3e12-4753-9fc6-c88ea4f97030} - SafeExamBrowser.Lockdown - - - {e107026c-2011-4552-a7d8-3a0d37881df6} - SafeExamBrowser.Logging - - - - - - - - - - \ No newline at end of file diff --git a/SafeExamBrowser.ResetUtility/UserInterface/MainWindow.xaml b/SafeExamBrowser.ResetUtility/UserInterface/MainWindow.xaml deleted file mode 100644 index 3fe8f6b3..00000000 --- a/SafeExamBrowser.ResetUtility/UserInterface/MainWindow.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - diff --git a/SafeExamBrowser.ResetUtility/UserInterface/MainWindow.xaml.cs b/SafeExamBrowser.ResetUtility/UserInterface/MainWindow.xaml.cs deleted file mode 100644 index b1ee6b03..00000000 --- a/SafeExamBrowser.ResetUtility/UserInterface/MainWindow.xaml.cs +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -using System.Windows; - -namespace SafeExamBrowser.ResetUtility.UserInterface -{ - public partial class MainWindow : Window, IUserInterface - { - public MainWindow() - { - InitializeComponent(); - } - } -} diff --git a/SafeExamBrowser.sln b/SafeExamBrowser.sln index c4fbdfc5..b124b003 100644 --- a/SafeExamBrowser.sln +++ b/SafeExamBrowser.sln @@ -66,8 +66,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Lockdown", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Lockdown.UnitTests", "SafeExamBrowser.Lockdown.UnitTests\SafeExamBrowser.Lockdown.UnitTests.csproj", "{90378E33-3898-4A7C-BE2D-2F3EFCFC4BB5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.ResetUtility", "SafeExamBrowser.ResetUtility\SafeExamBrowser.ResetUtility.csproj", "{61167B0C-9C42-46AC-8C48-1EDC48C28D98}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -284,14 +282,6 @@ Global {90378E33-3898-4A7C-BE2D-2F3EFCFC4BB5}.Release|Any CPU.Build.0 = Release|Any CPU {90378E33-3898-4A7C-BE2D-2F3EFCFC4BB5}.Release|x86.ActiveCfg = Release|x86 {90378E33-3898-4A7C-BE2D-2F3EFCFC4BB5}.Release|x86.Build.0 = Release|x86 - {61167B0C-9C42-46AC-8C48-1EDC48C28D98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {61167B0C-9C42-46AC-8C48-1EDC48C28D98}.Debug|Any CPU.Build.0 = Debug|Any CPU - {61167B0C-9C42-46AC-8C48-1EDC48C28D98}.Debug|x86.ActiveCfg = Debug|x86 - {61167B0C-9C42-46AC-8C48-1EDC48C28D98}.Debug|x86.Build.0 = Debug|x86 - {61167B0C-9C42-46AC-8C48-1EDC48C28D98}.Release|Any CPU.ActiveCfg = Release|Any CPU - {61167B0C-9C42-46AC-8C48-1EDC48C28D98}.Release|Any CPU.Build.0 = Release|Any CPU - {61167B0C-9C42-46AC-8C48-1EDC48C28D98}.Release|x86.ActiveCfg = Release|x86 - {61167B0C-9C42-46AC-8C48-1EDC48C28D98}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE