diff --git a/Pilz.Cryptography/ICrypter.cs b/Pilz.Cryptography/ICrypter.cs new file mode 100644 index 0000000..f126915 --- /dev/null +++ b/Pilz.Cryptography/ICrypter.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pilz.Cryptography +{ + public interface ICrypter + { + string Encrypt(string plainValue); + string Decrypt(string encryptedValue); + } +} diff --git a/Pilz.Cryptography/My Project/Application.Designer.vb b/Pilz.Cryptography/My Project/Application.Designer.vb deleted file mode 100644 index 8ab460b..0000000 --- a/Pilz.Cryptography/My Project/Application.Designer.vb +++ /dev/null @@ -1,13 +0,0 @@ -'------------------------------------------------------------------------------ -' -' Dieser Code wurde von einem Tool generiert. -' Laufzeitversion:4.0.30319.42000 -' -' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -' der Code erneut generiert wird. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - diff --git a/Pilz.Cryptography/My Project/Application.myapp b/Pilz.Cryptography/My Project/Application.myapp deleted file mode 100644 index 758895d..0000000 --- a/Pilz.Cryptography/My Project/Application.myapp +++ /dev/null @@ -1,10 +0,0 @@ - - - false - false - 0 - true - 0 - 1 - true - diff --git a/Pilz.Cryptography/My Project/AssemblyInfo.vb b/Pilz.Cryptography/My Project/AssemblyInfo.vb deleted file mode 100644 index 0eae44b..0000000 --- a/Pilz.Cryptography/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,35 +0,0 @@ -Imports System -Imports System.Reflection -Imports System.Runtime.InteropServices - -' Allgemeine Informationen über eine Assembly werden über die folgenden -' Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, -' die einer Assembly zugeordnet sind. - -' Werte der Assemblyattribute überprüfen - - - - - - - - - - -'Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird. - - -' Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: -' -' Hauptversion -' Nebenversion -' Buildnummer -' Revision -' -' Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, -' übernehmen, indem Sie "*" eingeben: -' - - - diff --git a/Pilz.Cryptography/My Project/Resources.Designer.vb b/Pilz.Cryptography/My Project/Resources.Designer.vb deleted file mode 100644 index ec424b6..0000000 --- a/Pilz.Cryptography/My Project/Resources.Designer.vb +++ /dev/null @@ -1,63 +0,0 @@ -'------------------------------------------------------------------------------ -' -' Dieser Code wurde von einem Tool generiert. -' Laufzeitversion:4.0.30319.42000 -' -' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -' der Code erneut generiert wird. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - -Imports System - -Namespace My.Resources - - 'Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert - '-Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. - 'Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen - 'mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. - ''' - ''' Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - ''' - _ - Friend Module Resources - - Private resourceMan As Global.System.Resources.ResourceManager - - Private resourceCulture As Global.System.Globalization.CultureInfo - - ''' - ''' Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - ''' - _ - Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager - Get - If Object.ReferenceEquals(resourceMan, Nothing) Then - Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Pilz.Cryptography.Resources", GetType(Resources).Assembly) - resourceMan = temp - End If - Return resourceMan - End Get - End Property - - ''' - ''' Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - ''' Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - ''' - _ - Friend Property Culture() As Global.System.Globalization.CultureInfo - Get - Return resourceCulture - End Get - Set - resourceCulture = value - End Set - End Property - End Module -End Namespace diff --git a/Pilz.Cryptography/My Project/Resources.resx b/Pilz.Cryptography/My Project/Resources.resx deleted file mode 100644 index af7dbeb..0000000 --- a/Pilz.Cryptography/My Project/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/Pilz.Cryptography/My Project/Settings.Designer.vb b/Pilz.Cryptography/My Project/Settings.Designer.vb deleted file mode 100644 index 528ccbe..0000000 --- a/Pilz.Cryptography/My Project/Settings.Designer.vb +++ /dev/null @@ -1,73 +0,0 @@ -'------------------------------------------------------------------------------ -' -' Dieser Code wurde von einem Tool generiert. -' Laufzeitversion:4.0.30319.42000 -' -' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -' der Code erneut generiert wird. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - - -Namespace My - - _ - Partial Friend NotInheritable Class MySettings - Inherits Global.System.Configuration.ApplicationSettingsBase - - Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) - -#Region "Automatische My.Settings-Speicherfunktion" -#If _MyType = "WindowsForms" Then - Private Shared addedHandler As Boolean - - Private Shared addedHandlerLockObject As New Object - - _ - Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) - If My.Application.SaveMySettingsOnExit Then - My.Settings.Save() - End If - End Sub -#End If -#End Region - - Public Shared ReadOnly Property [Default]() As MySettings - Get - -#If _MyType = "WindowsForms" Then - If Not addedHandler Then - SyncLock addedHandlerLockObject - If Not addedHandler Then - AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings - addedHandler = True - End If - End SyncLock - End If -#End If - Return defaultInstance - End Get - End Property - End Class -End Namespace - -Namespace My - - _ - Friend Module MySettingsProperty - - _ - Friend ReadOnly Property Settings() As Global.Pilz.Cryptography.My.MySettings - Get - Return Global.Pilz.Cryptography.My.MySettings.Default - End Get - End Property - End Module -End Namespace diff --git a/Pilz.Cryptography/My Project/Settings.settings b/Pilz.Cryptography/My Project/Settings.settings deleted file mode 100644 index 85b890b..0000000 --- a/Pilz.Cryptography/My Project/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/Pilz.Cryptography/Pilz.Cryptography.csproj b/Pilz.Cryptography/Pilz.Cryptography.csproj new file mode 100644 index 0000000..f953029 --- /dev/null +++ b/Pilz.Cryptography/Pilz.Cryptography.csproj @@ -0,0 +1,59 @@ + + + + + Debug + AnyCPU + {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6} + Library + Properties + Pilz.Cryptography + Pilz.Cryptography + v4.7.2 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Pilz.Cryptography/Pilz.Cryptography.vbproj b/Pilz.Cryptography/Pilz.Cryptography.vbproj deleted file mode 100644 index 4a166e5..0000000 --- a/Pilz.Cryptography/Pilz.Cryptography.vbproj +++ /dev/null @@ -1,104 +0,0 @@ - - - - - Debug - AnyCPU - {DF980F5D-820C-4CD3-A865-C40791BF7CE4} - Library - Pilz.Cryptography - Pilz.Cryptography - 512 - Windows - v4.7.2 - true - - - - true - full - true - true - bin\Debug\ - Pilz.Cryptography.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - - - pdbonly - false - true - true - bin\Release\ - Pilz.Cryptography.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - - - On - - - Binary - - - Off - - - On - - - - - - - - - - - - - - - - - - - - - - - - - True - Application.myapp - - - True - True - Resources.resx - - - True - Settings.settings - True - - - - - VbMyResourcesResXFileCodeGenerator - Resources.Designer.vb - My.Resources - Designer - - - - - MyApplicationCodeGenerator - Application.Designer.vb - - - SettingsSingleFileGenerator - My - Settings.Designer.vb - - - - \ No newline at end of file diff --git a/Pilz.Cryptography/Properties/AssemblyInfo.cs b/Pilz.Cryptography/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9c9846d --- /dev/null +++ b/Pilz.Cryptography/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("Pilz.Cryptography")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Pilz.Cryptography")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("3f5988e6-439e-4a9d-b2c6-47effb161ac6")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// indem Sie "*" wie unten gezeigt eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Pilz.Cryptography/SecureString.cs b/Pilz.Cryptography/SecureString.cs new file mode 100644 index 0000000..73d2b06 --- /dev/null +++ b/Pilz.Cryptography/SecureString.cs @@ -0,0 +1,78 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pilz.Cryptography +{ + public class SecureString + { + public static ICrypter DefaultCrypter { get; set; } + + [JsonIgnore] + public ICrypter Crypter { get; set; } + + [JsonProperty] + public string EncryptedValue { get; set; } + + [JsonIgnore] + public string Value + { + get => GetCrypter().Decrypt(EncryptedValue); + set => EncryptedValue = GetCrypter().Encrypt(Value); + } + + public SecureString() : + this(string.Empty, true) + { + } + + public SecureString(string value, bool isEncrypted) : + this(value, isEncrypted, null) + { + } + + public SecureString(string value, bool isEncrypted, ICrypter crypter) + { + Crypter = crypter; + + if (isEncrypted) + EncryptedValue = value; + else + Value = value; + } + + private ICrypter GetCrypter() + { + if (Crypter == null) + { + if (DefaultCrypter == null) + DefaultCrypter = new SimpleStringCrypter(string.Empty); + Crypter = DefaultCrypter; + } + return Crypter; + } + + public override string ToString() => Value; + + public override bool Equals(object obj) + { + var @string = obj as SecureString; + return @string != null && + EncryptedValue == @string.EncryptedValue; + } + + public override int GetHashCode() + { + return -2303024 + EqualityComparer.Default.GetHashCode(EncryptedValue); + } + + public static implicit operator string(SecureString value) => value.Value; + public static implicit operator SecureString(string value) => new SecureString(value, false); + + public static bool operator ==(SecureString left, SecureString right) => left.EncryptedValue == right.EncryptedValue; + public static bool operator !=(SecureString left, SecureString right) => left.EncryptedValue != right.EncryptedValue; + } +} diff --git a/Pilz.Cryptography/SimpleStringCrypter.cs b/Pilz.Cryptography/SimpleStringCrypter.cs new file mode 100644 index 0000000..d652e0d --- /dev/null +++ b/Pilz.Cryptography/SimpleStringCrypter.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Security.Cryptography; +using System.IO; +using Microsoft.VisualBasic.CompilerServices; + +namespace Pilz.Cryptography +{ + public class SimpleStringCrypter : ICrypter + { + private TripleDESCryptoServiceProvider TripleDes; + public Encoding TextEncoding { get; private set; } = Encoding.Default; + + public SimpleStringCrypter() : this(string.Empty) + { + } + + public SimpleStringCrypter(string key) : this(key, Encoding.Default) + { + } + + public SimpleStringCrypter(string key, Encoding textEncoding) + { + TextEncoding = textEncoding; + TripleDes = new TripleDESCryptoServiceProvider(); + TripleDes.Key = TruncateHash(key,TripleDes.KeySize / 8); + TripleDes.IV = TruncateHash(string.Empty, TripleDes.BlockSize / 8); + } + + private byte[] TruncateHash(string key, int length) + { + SHA1CryptoServiceProvider sha1CryptoServiceProvider = new SHA1CryptoServiceProvider(); + byte[] bytes = TextEncoding.GetBytes(key); + byte[] array = sha1CryptoServiceProvider.ComputeHash(bytes); + return (byte[])Utils.CopyArray(array, new byte[checked(length - 1 + 1)]); + } + + private string EncryptData(string plaintext) + { + byte[] bytes = TextEncoding.GetBytes(plaintext); + MemoryStream memoryStream = new MemoryStream(); + CryptoStream cryptoStream = new CryptoStream(memoryStream, TripleDes.CreateEncryptor(), CryptoStreamMode.Write); + cryptoStream.Write(bytes, 0, bytes.Length); + cryptoStream.FlushFinalBlock(); + return Convert.ToBase64String(memoryStream.ToArray()); + } + + private string DecryptData(string encryptedtext) + { + byte[] array = Convert.FromBase64String(encryptedtext); + MemoryStream memoryStream = new MemoryStream(); + CryptoStream cryptoStream = new CryptoStream(memoryStream, TripleDes.CreateDecryptor(), CryptoStreamMode.Write); + cryptoStream.Write(array, 0, array.Length); + cryptoStream.FlushFinalBlock(); + return TextEncoding.GetString(memoryStream.ToArray()); + } + + public string Encrypt(string plainValue) + { + return EncryptData(plainValue); + } + + public string Decrypt(string encryptedValue) + { + if (string.IsNullOrEmpty(encryptedValue)) + return string.Empty; + else + return DecryptData(encryptedValue); + } + } +} diff --git a/Pilz.Cryptography/UniquieID.cs b/Pilz.Cryptography/UniquieID.cs new file mode 100644 index 0000000..b4d7af3 --- /dev/null +++ b/Pilz.Cryptography/UniquieID.cs @@ -0,0 +1,110 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Management; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace SM64Lib +{ + public class UniquieID + { + private static int currentSimpleID = 0; + + [JsonProperty(nameof(ID))] + private string _iD; + + [JsonIgnore] + public string ID + { + get + { + if (GenerateOnGet) + GenerateIfNull(); + return _iD; + } + internal set + => _iD = value; + } + + [JsonIgnore] + public bool HasID { get => !string.IsNullOrEmpty(_iD); } + [JsonIgnore] + public bool SimpleMode { get; set; } = false; + [JsonIgnore] + public bool GenerateOnGet { get; set; } = false; + + public UniquieID() : this(false) + { + } + + public UniquieID(bool autoGenerate) + { + if (autoGenerate) + GenerateIfNull(); + } + + public void Generate() + { + if (SimpleMode) + ID = typeof(TargetType).ToString() + currentSimpleID++.ToString(); + else + ID = GenerateUniquieID(string.Empty); + } + public void GenerateIfNull() + { + if (!HasID) Generate(); + } + + private static string GenerateUniquieID(string var) + { + var sn = TryGetSerialNumberOfFirstHardDrive(); + var dateTime = DateTime.UtcNow.ToString("yyyyMMddHHmmssfffffff"); + var type = typeof(T).ToString(); + var together = sn + dateTime + type + var; + + var md5 = MD5.Create(); + var hash = BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(together))).Replace("-", string.Empty); + md5.Dispose(); + + return hash; + } + + private static string TryGetSerialNumberOfFirstHardDrive() + { + var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia"); + var sn = string.Empty; + + foreach (ManagementObject wmi_HD in searcher.Get()) + { + if (string.IsNullOrEmpty(sn) && wmi_HD["SerialNumber"] != null) + sn = wmi_HD["SerialNumber"].ToString().Trim(); + } + + return sn; + } + + public override string ToString() => ID; + + public override bool Equals(object obj) + { + var iD = obj as UniquieID; + return iD != null && + _iD == iD._iD; + } + + public override int GetHashCode() + { + return -1430039477 + EqualityComparer.Default.GetHashCode(_iD); + } + + public static implicit operator string(UniquieID id) => id.ID; + public static implicit operator UniquieID(string id) => new UniquieID() { ID = id }; + public static implicit operator UniquieID(int id) => new UniquieID() { ID = Convert.ToString(id) }; + + public static bool operator ==(UniquieID left, UniquieID right) => left.ID == right.ID; + public static bool operator !=(UniquieID left, UniquieID right) => left.ID != right.ID; + } +} diff --git a/Pilz.Cryptography/packages.config b/Pilz.Cryptography/packages.config new file mode 100644 index 0000000..a9de8b5 --- /dev/null +++ b/Pilz.Cryptography/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Pilz.Drawing.Drawing3D.OpenGLRenderer/Pilz.Drawing.Drawing3D.OpenGLFactory.vbproj b/Pilz.Drawing.Drawing3D.OpenGLRenderer/Pilz.Drawing.Drawing3D.OpenGLFactory.vbproj index fedd166..8599650 100644 --- a/Pilz.Drawing.Drawing3D.OpenGLRenderer/Pilz.Drawing.Drawing3D.OpenGLFactory.vbproj +++ b/Pilz.Drawing.Drawing3D.OpenGLRenderer/Pilz.Drawing.Drawing3D.OpenGLFactory.vbproj @@ -44,8 +44,8 @@ On - - ..\packages\OpenTK.3.1.0\lib\net20\OpenTK.dll + + ..\packages\OpenTK.3.2\lib\net20\OpenTK.dll ..\packages\OpenTK.GLControl.3.1.0\lib\net20\OpenTK.GLControl.dll diff --git a/Pilz.Drawing.Drawing3D.OpenGLRenderer/app.config b/Pilz.Drawing.Drawing3D.OpenGLRenderer/app.config index 75a9d48..5c893eb 100644 --- a/Pilz.Drawing.Drawing3D.OpenGLRenderer/app.config +++ b/Pilz.Drawing.Drawing3D.OpenGLRenderer/app.config @@ -1,11 +1,11 @@ - + - - + + - + diff --git a/Pilz.Drawing.Drawing3D.OpenGLRenderer/packages.config b/Pilz.Drawing.Drawing3D.OpenGLRenderer/packages.config index 54d90f7..eec2fad 100644 --- a/Pilz.Drawing.Drawing3D.OpenGLRenderer/packages.config +++ b/Pilz.Drawing.Drawing3D.OpenGLRenderer/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/Pilz.sln b/Pilz.sln index 0f52e43..0500f97 100644 --- a/Pilz.sln +++ b/Pilz.sln @@ -15,8 +15,6 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Pilz.Threading", "Pilz.Thre EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.IO", "Pilz.IO\Pilz.IO.csproj", "{877D980E-4F61-0E53-0E8B-5C50B7D1440C}" EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Pilz.Cryptography", "Pilz.Cryptography\Pilz.Cryptography.vbproj", "{DF980F5D-820C-4CD3-A865-C40791BF7CE4}" -EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Pilz.Win32", "Pilz.Win32\Pilz.Win32.vbproj", "{0BE0428D-AC97-4812-ADFC-6D7D00AEE497}" EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Pilz.Configuration", "Pilz.Configuration\Pilz.Configuration.vbproj", "{A56C6153-C61F-4B10-BE06-35EB0448CFDC}" @@ -31,6 +29,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.LicenseHelper", "Pilz. EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Pilz.Networking", "Pilz.Networking\Pilz.Networking.vbproj", "{4584B121-09C6-40AC-849B-7E410125EF66}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.Cryptography", "Pilz.Cryptography\Pilz.Cryptography.csproj", "{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -87,14 +87,6 @@ Global {877D980E-4F61-0E53-0E8B-5C50B7D1440C}.Release|Any CPU.Build.0 = Release|Any CPU {877D980E-4F61-0E53-0E8B-5C50B7D1440C}.Release|x86.ActiveCfg = Release|x86 {877D980E-4F61-0E53-0E8B-5C50B7D1440C}.Release|x86.Build.0 = Release|x86 - {DF980F5D-820C-4CD3-A865-C40791BF7CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DF980F5D-820C-4CD3-A865-C40791BF7CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DF980F5D-820C-4CD3-A865-C40791BF7CE4}.Debug|x86.ActiveCfg = Debug|Any CPU - {DF980F5D-820C-4CD3-A865-C40791BF7CE4}.Debug|x86.Build.0 = Debug|Any CPU - {DF980F5D-820C-4CD3-A865-C40791BF7CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DF980F5D-820C-4CD3-A865-C40791BF7CE4}.Release|Any CPU.Build.0 = Release|Any CPU - {DF980F5D-820C-4CD3-A865-C40791BF7CE4}.Release|x86.ActiveCfg = Release|Any CPU - {DF980F5D-820C-4CD3-A865-C40791BF7CE4}.Release|x86.Build.0 = Release|Any CPU {0BE0428D-AC97-4812-ADFC-6D7D00AEE497}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0BE0428D-AC97-4812-ADFC-6D7D00AEE497}.Debug|Any CPU.Build.0 = Debug|Any CPU {0BE0428D-AC97-4812-ADFC-6D7D00AEE497}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -151,6 +143,14 @@ Global {4584B121-09C6-40AC-849B-7E410125EF66}.Release|Any CPU.Build.0 = Release|Any CPU {4584B121-09C6-40AC-849B-7E410125EF66}.Release|x86.ActiveCfg = Release|Any CPU {4584B121-09C6-40AC-849B-7E410125EF66}.Release|x86.Build.0 = Release|Any CPU + {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Debug|x86.ActiveCfg = Debug|Any CPU + {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Debug|x86.Build.0 = Debug|Any CPU + {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|Any CPU.Build.0 = Release|Any CPU + {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|x86.ActiveCfg = Release|Any CPU + {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE