Index: /branches/RegressionBenchmarks/Build.cmd
===================================================================
--- /branches/RegressionBenchmarks/Build.cmd	(revision 7084)
+++ /branches/RegressionBenchmarks/Build.cmd	(revision 7085)
@@ -1,5 +1,5 @@
 @ECHO OFF
 
-SET CLEANBEFOREBUILD=1
+SET CLEANBEFOREBUILD=0
 
 SET SELECTED=
@@ -77,5 +77,5 @@
 )
 ECHO Building ...
-%MSBUILDPATH%msbuild.exe %SELECTED% /target:Build /p:Configuration="%CONFIGURATION%",Platform="%PLATFORM%" /m:2 /nologo /verbosity:q /clp:ErrorsOnly
+%MSBUILDPATH%msbuild.exe %SELECTED% /target:Rebuild /p:Configuration="%CONFIGURATION%",Platform="%PLATFORM%" /m:2 /nologo /verbosity:q /clp:ErrorsOnly
 
 ECHO.
Index: /branches/RegressionBenchmarks/HeuristicLab 3.3 Hive.Slave.sln
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab 3.3 Hive.Slave.sln	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab 3.3 Hive.Slave.sln	(revision 7085)
@@ -0,0 +1,130 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Slave-3.3", "HeuristicLab.Clients.Hive.Slave\3.3\HeuristicLab.Clients.Hive.Slave-3.3.csproj", "{989FE92B-484E-41EE-87E2-6A24AF0381D8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Slave.Views-3.3", "HeuristicLab.Clients.Hive.Slave.Views\3.3\HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj", "{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Slave.App-3.3", "HeuristicLab.Clients.Hive.Slave.App\3.3\HeuristicLab.Clients.Hive.Slave.App-3.3.csproj", "{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3", "HeuristicLab.Clients.Hive.Slave.ConsoleClient\3.3\HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj", "{464D70B8-2D91-485C-B622-22E4A4891C68}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3", "HeuristicLab.Clients.Hive.Slave.TrayIcon\3.3\HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj", "{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}"
+EndProject
+Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "HeuristicLab.Clients.Hive.Slave.TrayIconSetup-3.3", "HeuristicLab.Clients.Hive.Slave.TrayIconSetup\HeuristicLab.Clients.Hive.Slave.TrayIconSetup.vdproj", "{57E37188-4523-4F8D-8CEF-AE0AA27BB754}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Slave.WindowsService-3.3", "HeuristicLab.Clients.Hive.Slave.WindowsService\3.3\HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj", "{BA8001DE-E83C-4B1F-8B2E-2695C4222491}"
+EndProject
+Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup-3.3", "HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup\HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup.vdproj", "{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Debug|x64.ActiveCfg = Debug|x64
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Debug|x64.Build.0 = Debug|x64
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Debug|x86.ActiveCfg = Debug|x86
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Debug|x86.Build.0 = Debug|x86
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Release|x64.ActiveCfg = Release|x64
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Release|x64.Build.0 = Release|x64
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Release|x86.ActiveCfg = Release|x86
+		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Release|x86.Build.0 = Release|x86
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Debug|x64.ActiveCfg = Debug|x64
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Debug|x64.Build.0 = Debug|x64
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Debug|x86.ActiveCfg = Debug|x86
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Debug|x86.Build.0 = Debug|x86
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Release|x64.ActiveCfg = Release|x64
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Release|x64.Build.0 = Release|x64
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Release|x86.ActiveCfg = Release|x86
+		{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}.Release|x86.Build.0 = Release|x86
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Debug|x64.ActiveCfg = Debug|x64
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Debug|x64.Build.0 = Debug|x64
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Debug|x86.ActiveCfg = Debug|x86
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Debug|x86.Build.0 = Debug|x86
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Release|x64.ActiveCfg = Release|x64
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Release|x64.Build.0 = Release|x64
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Release|x86.ActiveCfg = Release|x86
+		{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}.Release|x86.Build.0 = Release|x86
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Debug|x64.ActiveCfg = Debug|x64
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Debug|x64.Build.0 = Debug|x64
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Debug|x86.ActiveCfg = Debug|x86
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Debug|x86.Build.0 = Debug|x86
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Release|Any CPU.Build.0 = Release|Any CPU
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Release|x64.ActiveCfg = Release|x64
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Release|x64.Build.0 = Release|x64
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Release|x86.ActiveCfg = Release|x86
+		{464D70B8-2D91-485C-B622-22E4A4891C68}.Release|x86.Build.0 = Release|x86
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Debug|x64.ActiveCfg = Debug|x64
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Debug|x64.Build.0 = Debug|x64
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Debug|x86.ActiveCfg = Debug|x86
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Debug|x86.Build.0 = Debug|x86
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Release|x64.ActiveCfg = Release|x64
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Release|x64.Build.0 = Release|x64
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Release|x86.ActiveCfg = Release|x86
+		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Release|x86.Build.0 = Release|x86
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Debug|Any CPU.ActiveCfg = Debug
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Debug|Any CPU.Build.0 = Debug
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Debug|x64.ActiveCfg = Debug
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Debug|x64.Build.0 = Debug
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Debug|x86.ActiveCfg = Debug
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Debug|x86.Build.0 = Debug
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Release|Any CPU.ActiveCfg = Release
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Release|Any CPU.Build.0 = Release
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Release|x64.ActiveCfg = Release
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Release|x64.Build.0 = Release
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Release|x86.ActiveCfg = Release
+		{57E37188-4523-4F8D-8CEF-AE0AA27BB754}.Release|x86.Build.0 = Release
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Debug|x64.ActiveCfg = Debug|x64
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Debug|x64.Build.0 = Debug|x64
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Debug|x86.ActiveCfg = Debug|x86
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Debug|x86.Build.0 = Debug|x86
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Release|x64.ActiveCfg = Release|x64
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Release|x64.Build.0 = Release|x64
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Release|x86.ActiveCfg = Release|x86
+		{BA8001DE-E83C-4B1F-8B2E-2695C4222491}.Release|x86.Build.0 = Release|x86
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Debug|Any CPU.ActiveCfg = Debug
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Debug|Any CPU.Build.0 = Debug
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Debug|x64.ActiveCfg = Debug
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Debug|x64.Build.0 = Debug
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Debug|x86.ActiveCfg = Debug
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Debug|x86.Build.0 = Debug
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Release|Any CPU.ActiveCfg = Release
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Release|Any CPU.Build.0 = Release
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Release|x64.ActiveCfg = Release
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Release|x64.Build.0 = Release
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Release|x86.ActiveCfg = Release
+		{C16CA1A6-7AE8-4B87-A6A6-9C290E8B9646}.Release|x86.Build.0 = Release
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /branches/RegressionBenchmarks/HeuristicLab 3.3 Services.sln
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab 3.3 Services.sln	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab 3.3 Services.sln	(revision 7085)
@@ -16,4 +16,33 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.Deployment-3.3.Tests", "HeuristicLab.Services.Deployment\3.3\Tests\HeuristicLab.Services.Deployment-3.3.Tests.csproj", "{421D9CCA-5A48-4813-AB9C-ED7025F9CC35}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hive", "Hive", "{C159ED4A-0E0C-4CCC-81B4-F8979F5C3CE1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.Hive.DataAccess-3.3", "HeuristicLab.Services.Hive.DataAccess\3.3\HeuristicLab.Services.Hive.DataAccess-3.3.csproj", "{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.Hive-3.3", "HeuristicLab.Services.Hive\3.3\HeuristicLab.Services.Hive-3.3.csproj", "{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}"
+EndProject
+Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Hive-3.3", "HeuristicLab.Services.Hive.Web\Hive-3.3\", "{0CA6706D-A569-45DE-A85C-4158891CC1BC}"
+	ProjectSection(WebsiteProperties) = preProject
+		TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
+		ProjectReferences = "{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}|HeuristicLab.Services.Hive-3.3.dll;{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}|HeuristicLab.Services.Hive.DataAccess-3.3.dll;"
+		Debug.AspNetCompiler.VirtualPath = "/Hive-3.3"
+		Debug.AspNetCompiler.PhysicalPath = "HeuristicLab.Services.Hive.Web\Hive-3.3\"
+		Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\Hive-3.3\"
+		Debug.AspNetCompiler.Updateable = "true"
+		Debug.AspNetCompiler.ForceOverwrite = "true"
+		Debug.AspNetCompiler.FixedNames = "false"
+		Debug.AspNetCompiler.Debug = "True"
+		Release.AspNetCompiler.VirtualPath = "/Hive-3.3"
+		Release.AspNetCompiler.PhysicalPath = "HeuristicLab.Services.Hive.Web\Hive-3.3\"
+		Release.AspNetCompiler.TargetPath = "PrecompiledWeb\Hive-3.3\"
+		Release.AspNetCompiler.Updateable = "true"
+		Release.AspNetCompiler.ForceOverwrite = "true"
+		Release.AspNetCompiler.FixedNames = "false"
+		Release.AspNetCompiler.Debug = "False"
+		VWDPort = "4591"
+		VWDVirtualPath = "/Hive-3.3"
+		DefaultWebSiteLanguage = "Visual C#"
+	EndProjectSection
 EndProject
 Global
@@ -66,7 +95,42 @@
 		{421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Release|x86.ActiveCfg = Release|x86
 		{421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Release|x86.Build.0 = Release|x86
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x64.ActiveCfg = Debug|x64
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x64.Build.0 = Debug|x64
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x86.ActiveCfg = Debug|x86
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x86.Build.0 = Debug|x86
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Release|x64.ActiveCfg = Release|x64
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Release|x64.Build.0 = Release|x64
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Release|x86.ActiveCfg = Release|x86
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Release|x86.Build.0 = Release|x86
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x64.ActiveCfg = Debug|x64
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x64.Build.0 = Debug|x64
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x86.ActiveCfg = Debug|x86
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x86.Build.0 = Debug|x86
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Release|x64.ActiveCfg = Release|x64
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Release|x64.Build.0 = Release|x64
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Release|x86.ActiveCfg = Release|x86
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Release|x86.Build.0 = Release|x86
+		{0CA6706D-A569-45DE-A85C-4158891CC1BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0CA6706D-A569-45DE-A85C-4158891CC1BC}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{0CA6706D-A569-45DE-A85C-4158891CC1BC}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{0CA6706D-A569-45DE-A85C-4158891CC1BC}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+		{0CA6706D-A569-45DE-A85C-4158891CC1BC}.Release|x64.ActiveCfg = Debug|Any CPU
+		{0CA6706D-A569-45DE-A85C-4158891CC1BC}.Release|x86.ActiveCfg = Debug|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC} = {C159ED4A-0E0C-4CCC-81B4-F8979F5C3CE1}
+		{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE} = {C159ED4A-0E0C-4CCC-81B4-F8979F5C3CE1}
+		{0CA6706D-A569-45DE-A85C-4158891CC1BC} = {C159ED4A-0E0C-4CCC-81B4-F8979F5C3CE1}
+	EndGlobalSection
 EndGlobal
Index: /branches/RegressionBenchmarks/HeuristicLab 3.3.sln
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab 3.3.sln	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab 3.3.sln	(revision 7085)
@@ -9,4 +9,5 @@
 		HeuristicLab 3.3.vsmdi = HeuristicLab 3.3.vsmdi
 		LocalTestRun.testrunconfig = LocalTestRun.testrunconfig
+		MergeConfigs.cmd = MergeConfigs.cmd
 		PreBuildEvent.cmd = PreBuildEvent.cmd
 	EndProjectSection
@@ -34,5 +35,7 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab-3.3", "HeuristicLab\3.3\HeuristicLab-3.3.csproj", "{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}"
 	ProjectSection(ProjectDependencies) = postProject
+		{E1D6C801-892A-406A-B606-F158E36DD3C3} = {E1D6C801-892A-406A-B606-F158E36DD3C3}
 		{730A9104-D4D1-4360-966B-E49B7571DDA3} = {730A9104-D4D1-4360-966B-E49B7571DDA3}
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3} = {DBFD7205-61AF-40EF-8776-3052DEF91CF3}
 		{125D3006-67F5-48CB-913E-73C0548F17FA} = {125D3006-67F5-48CB-913E-73C0548F17FA}
 		{315BDA09-3F4F-49B3-9790-B37CFC1C5750} = {315BDA09-3F4F-49B3-9790-B37CFC1C5750}
@@ -58,4 +61,5 @@
 		{DF87C13E-A889-46FF-8153-66DCAA8C5674} = {DF87C13E-A889-46FF-8153-66DCAA8C5674}
 		{3D28463F-EC96-4D82-AFEE-38BE91A0CA00} = {3D28463F-EC96-4D82-AFEE-38BE91A0CA00}
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D} = {F98A1740-9AC9-4D36-A582-6A2D0D06978D}
 		{3E9E8944-44FF-40BB-A622-3A4A7DD0F198} = {3E9E8944-44FF-40BB-A622-3A4A7DD0F198}
 		{49F28045-7B5F-411B-8D59-16C846FA26E0} = {49F28045-7B5F-411B-8D59-16C846FA26E0}
@@ -71,4 +75,5 @@
 		{2C429157-9C34-4DD3-9D5F-B444B751E39A} = {2C429157-9C34-4DD3-9D5F-B444B751E39A}
 		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A} = {3BD61258-31DA-4B09-89C0-4F71FEF5F05A}
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB} = {B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}
 		{96E5ED5B-187D-4012-9CDA-D85CDAD38342} = {96E5ED5B-187D-4012-9CDA-D85CDAD38342}
 		{E86E215D-E3CE-4244-978D-555D4E17AC09} = {E86E215D-E3CE-4244-978D-555D4E17AC09}
@@ -81,4 +86,5 @@
 		{56F9106A-079F-4C61-92F6-86A84C2D84B7} = {56F9106A-079F-4C61-92F6-86A84C2D84B7}
 		{A8D5676D-9662-437A-B44D-ECB4046CDE12} = {A8D5676D-9662-437A-B44D-ECB4046CDE12}
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E} = {3C906172-E044-4DF0-B4FD-AA21192D5D3E}
 		{DC3D7072-7999-4719-B65D-3997744D5DC1} = {DC3D7072-7999-4719-B65D-3997744D5DC1}
 		{20831A74-D18F-42D9-A667-1CE3AF53DF93} = {20831A74-D18F-42D9-A667-1CE3AF53DF93}
@@ -97,6 +103,8 @@
 		{30DD3DA2-CA57-49DD-A5BA-50CEF19DB45F} = {30DD3DA2-CA57-49DD-A5BA-50CEF19DB45F}
 		{6410BDA6-3641-42B2-BABA-AA626E2F6F71} = {6410BDA6-3641-42B2-BABA-AA626E2F6F71}
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC} = {068C70A7-8CAF-4AB6-8721-4564D62292BC}
 		{3083C7AA-5AF4-4C75-BA19-B69B86E2F66A} = {3083C7AA-5AF4-4C75-BA19-B69B86E2F66A}
 		{F5C0ECAC-EDBA-4024-872A-1F74AFCB20B4} = {F5C0ECAC-EDBA-4024-872A-1F74AFCB20B4}
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8} = {5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}
 		{A2330DB0-413D-4424-B4E6-591118E2B9F8} = {A2330DB0-413D-4424-B4E6-591118E2B9F8}
 		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} = {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}
@@ -300,4 +308,20 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Tests", "HeuristicLab.Tests\HeuristicLab.Tests.csproj", "{B62872C1-6752-4758-9823-751A2D28C388}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hive", "Hive", "{40362A4B-25F8-48AC-AFB1-645E6F4226A9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive-3.3", "HeuristicLab.Hive\3.3\HeuristicLab.Hive-3.3.csproj", "{F98A1740-9AC9-4D36-A582-6A2D0D06978D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive-3.3", "HeuristicLab.Clients.Hive\3.3\HeuristicLab.Clients.Hive-3.3.csproj", "{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Views-3.3", "HeuristicLab.Clients.Hive.Views\3.3\HeuristicLab.Clients.Hive.Views-3.3.csproj", "{E1D6C801-892A-406A-B606-F158E36DD3C3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.JobManager-3.3", "HeuristicLab.Clients.Hive.JobManager\3.3\HeuristicLab.Clients.Hive.JobManager-3.3.csproj", "{DBFD7205-61AF-40EF-8776-3052DEF91CF3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Administrator-3.3", "HeuristicLab.Clients.Hive.Administrator\3.3\HeuristicLab.Clients.Hive.Administrator-3.3.csproj", "{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Algorithms.Benchmarks-3.3", "HeuristicLab.Algorithms.Benchmarks\3.3\HeuristicLab.Algorithms.Benchmarks-3.3.csproj", "{068C70A7-8CAF-4AB6-8721-4564D62292BC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Algorithms.Benchmarks.Views-3.3", "HeuristicLab.Algorithms.Benchmarks.Views\3.3\HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj", "{3C906172-E044-4DF0-B4FD-AA21192D5D3E}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.DataAnalysis.Benchmarks-3.4", "HeuristicLab.Problems.DataAnalysis.Benchmarks\3.4\HeuristicLab.Problems.DataAnalysis.Benchmarks-3.4.csproj", "{4232E766-B8E4-4FC9-A665-C2D2FC5CD73C}"
@@ -1456,4 +1480,74 @@
 		{B62872C1-6752-4758-9823-751A2D28C388}.Release|x86.ActiveCfg = Release|x86
 		{B62872C1-6752-4758-9823-751A2D28C388}.Release|x86.Build.0 = Release|x86
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D}.Debug|x64.ActiveCfg = Debug|x86
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D}.Debug|x86.ActiveCfg = Debug|x86
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D}.Debug|x86.Build.0 = Debug|x86
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D}.Release|x64.ActiveCfg = Release|x86
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D}.Release|x86.ActiveCfg = Release|x86
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D}.Release|x86.Build.0 = Release|x86
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}.Debug|x64.ActiveCfg = Debug|x86
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}.Debug|x86.ActiveCfg = Debug|x86
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}.Debug|x86.Build.0 = Debug|x86
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}.Release|x64.ActiveCfg = Release|x86
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}.Release|x86.ActiveCfg = Release|x86
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}.Release|x86.Build.0 = Release|x86
+		{E1D6C801-892A-406A-B606-F158E36DD3C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E1D6C801-892A-406A-B606-F158E36DD3C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E1D6C801-892A-406A-B606-F158E36DD3C3}.Debug|x64.ActiveCfg = Debug|x86
+		{E1D6C801-892A-406A-B606-F158E36DD3C3}.Debug|x86.ActiveCfg = Debug|x86
+		{E1D6C801-892A-406A-B606-F158E36DD3C3}.Debug|x86.Build.0 = Debug|x86
+		{E1D6C801-892A-406A-B606-F158E36DD3C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E1D6C801-892A-406A-B606-F158E36DD3C3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E1D6C801-892A-406A-B606-F158E36DD3C3}.Release|x64.ActiveCfg = Release|x86
+		{E1D6C801-892A-406A-B606-F158E36DD3C3}.Release|x86.ActiveCfg = Release|x86
+		{E1D6C801-892A-406A-B606-F158E36DD3C3}.Release|x86.Build.0 = Release|x86
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Debug|x64.ActiveCfg = Debug|x64
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Debug|x64.Build.0 = Debug|x64
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Debug|x86.ActiveCfg = Debug|x86
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Debug|x86.Build.0 = Debug|x86
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Release|x64.ActiveCfg = Release|x64
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Release|x64.Build.0 = Release|x64
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Release|x86.ActiveCfg = Release|x86
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3}.Release|x86.Build.0 = Release|x86
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Debug|x64.ActiveCfg = Debug|x64
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Debug|x64.Build.0 = Debug|x64
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Debug|x86.ActiveCfg = Debug|x86
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Debug|x86.Build.0 = Debug|x86
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Release|x64.ActiveCfg = Release|x64
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Release|x64.Build.0 = Release|x64
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Release|x86.ActiveCfg = Release|x86
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Release|x86.Build.0 = Release|x86
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Release|x64.ActiveCfg = Release|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Release|x86.ActiveCfg = Release|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Release|x64.ActiveCfg = Release|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Release|x86.ActiveCfg = Release|Any CPU
 		{4232E766-B8E4-4FC9-A665-C2D2FC5CD73C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{4232E766-B8E4-4FC9-A665-C2D2FC5CD73C}.Debug|Any CPU.Build.0 = Debug|Any CPU
@@ -1483,4 +1577,9 @@
 		{125D3006-67F5-48CB-913E-73C0548F17FA} = {EE3B1E7B-6F7C-4AD6-A077-CCAC262F32EE}
 		{B62872C1-6752-4758-9823-751A2D28C388} = {C89ADA03-1DAC-406A-9C1F-128CC9986D80}
+		{F98A1740-9AC9-4D36-A582-6A2D0D06978D} = {40362A4B-25F8-48AC-AFB1-645E6F4226A9}
+		{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB} = {40362A4B-25F8-48AC-AFB1-645E6F4226A9}
+		{E1D6C801-892A-406A-B606-F158E36DD3C3} = {40362A4B-25F8-48AC-AFB1-645E6F4226A9}
+		{DBFD7205-61AF-40EF-8776-3052DEF91CF3} = {40362A4B-25F8-48AC-AFB1-645E6F4226A9}
+		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8} = {40362A4B-25F8-48AC-AFB1-645E6F4226A9}
 	EndGlobalSection
 EndGlobal
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.Designer.cs	(revision 7085)
@@ -0,0 +1,40 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Algorithms.Benchmarks.Views {
+  partial class BenchmarkView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+
+    }
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.cs	(revision 7085)
@@ -0,0 +1,39 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization.Views;
+
+namespace HeuristicLab.Algorithms.Benchmarks.Views {
+  [View("Benchmark View")]
+  [Content(typeof(Benchmark), true)]
+  public partial class BenchmarkView : AlgorithmView {
+    public new Benchmark Content {
+      get { return (Benchmark)base.Content; }
+      set { base.Content = value; }
+    }
+    public BenchmarkView() {
+      InitializeComponent();
+      tabControl.TabPages.Remove(this.problemTabPage);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj	(revision 7085)
@@ -0,0 +1,184 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{3C906172-E044-4DF0-B4FD-AA21192D5D3E}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Algorithms.Benchmarks.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Algorithms.Benchmarks.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BenchmarkView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="BenchmarkView.Designer.cs">
+      <DependentUpon>BenchmarkView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="IBenchmarkView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="IBenchmarkView.Designer.cs">
+      <DependentUpon>IBenchmarkView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Algorithms.Benchmarks\3.3\HeuristicLab.Algorithms.Benchmarks-3.3.csproj">
+      <Project>{068C70A7-8CAF-4AB6-8721-4564D62292BC}</Project>
+      <Name>HeuristicLab.Algorithms.Benchmarks-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
+      <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
+      <Name>HeuristicLab.MainForm-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization.Views\3.3\HeuristicLab.Optimization.Views-3.3.csproj">
+      <Project>{662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2}</Project>
+      <Name>HeuristicLab.Optimization.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/IBenchmarkView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/IBenchmarkView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/IBenchmarkView.Designer.cs	(revision 7085)
@@ -0,0 +1,40 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Algorithms.Benchmarks.Views {
+  partial class IBenchmarkView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+
+    }
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/IBenchmarkView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/IBenchmarkView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/IBenchmarkView.cs	(revision 7085)
@@ -0,0 +1,40 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Algorithms.Benchmarks.Views {
+  [View("IBenchmark View")]
+  [Content(typeof(IBenchmark), true)]
+  public partial class IBenchmarkView : AsynchronousContentView {
+    public new IBenchmark Content {
+      get { return (IBenchmark)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public IBenchmarkView() {
+      InitializeComponent();
+    }
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Algorithms.Benchmarks.Views {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Algorithms.Benchmarks plugin.
+  /// </summary>
+  [Plugin("HeuristicLab.Algorithms.Benchmarks.Views", "Provides views for benchmarking algorithms.", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Algorithms.Benchmarks.Views-3.3.dll", PluginFileType.Assembly)]  
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")] 
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Algorithms.Benchmarks", "3.3")] 
+  public class HeuristicLabAlgorithmsBenchmarksViewsPlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Algorithms.Benchmarks.Views")]
+[assembly: AssemblyDescription("Benchmarking")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("3E422463-0CE0-400D-9544-5C11D5818769")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/Benchmark.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/Benchmark.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/Benchmark.cs	(revision 7085)
@@ -0,0 +1,562 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Algorithms.Benchmarks {
+  /// <summary>
+  /// A base class for benchmarks.
+  /// </summary>
+  [Item("Benchmark", "A wrapper for benchmark algorithms.")]
+  [Creatable("Algorithms")]
+  [StorableClass]
+  public class Benchmark : IAlgorithm {
+    private Random random = new Random();
+
+    [Storable]
+    private DateTime lastUpdateTime;
+
+    [Storable]
+    private IBenchmark benchmarkAlgorithm;
+    public IBenchmark BenchmarkAlgorithm {
+      get { return benchmarkAlgorithm; }
+      set {
+        if (value == null) throw new ArgumentNullException();
+        benchmarkAlgorithm = value;
+      }
+    }
+
+    private CancellationTokenSource cancellationTokenSource;
+
+    [Storable]
+    private ExecutionState executionState;
+    public ExecutionState ExecutionState {
+      get { return executionState; }
+      private set {
+        if (executionState != value) {
+          executionState = value;
+          OnExecutionStateChanged();
+          OnItemImageChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private TimeSpan executionTime;
+    public TimeSpan ExecutionTime {
+      get { return executionTime; }
+      protected set {
+        executionTime = value;
+        OnExecutionTimeChanged();
+      }
+    }
+
+    [Storable]
+    private bool storeAlgorithmInEachRun;
+    public bool StoreAlgorithmInEachRun {
+      get { return storeAlgorithmInEachRun; }
+      set {
+        if (storeAlgorithmInEachRun != value) {
+          storeAlgorithmInEachRun = value;
+          OnStoreAlgorithmInEachRunChanged();
+        }
+      }
+    }
+
+    [Storable]
+    protected int runsCounter;
+
+    [Storable]
+    private RunCollection runs = new RunCollection();
+    public RunCollection Runs {
+      get { return runs; }
+      protected set {
+        if (value == null) throw new ArgumentNullException();
+        if (runs != value) {
+          if (runs != null) DeregisterRunsEvents();
+          runs = value;
+          if (runs != null) RegisterRunsEvents();
+        }
+      }
+    }
+
+    [Storable]
+    private ResultCollection results;
+    public ResultCollection Results {
+      get { return results; }
+    }
+
+    [Storable]
+    private IProblem problem;
+    public IProblem Problem {
+      get { return problem; }
+      set {
+        if (problem != value) {
+          if ((value != null) && !ProblemType.IsInstanceOfType(value)) throw new ArgumentException("Invalid problem type.");
+          if (problem != null) DeregisterProblemEvents();
+          problem = value;
+          if (problem != null) RegisterProblemEvents();
+          OnProblemChanged();
+          Prepare();
+        }
+      }
+    }
+
+    public Type ProblemType {
+      get { return typeof(IProblem); }
+    }
+
+    [Storable]
+    protected string name;
+
+    public string Name {
+      get { return name; }
+      set {
+        if (!CanChangeName) throw new NotSupportedException("Name cannot be changed.");
+        if (!(name.Equals(value) || (value == null) && (name == string.Empty))) {
+          CancelEventArgs<string> e = value == null ? new CancelEventArgs<string>(string.Empty) : new CancelEventArgs<string>(value);
+          OnNameChanging(e);
+          if (!e.Cancel) {
+            name = value == null ? string.Empty : value;
+            OnNameChanged();
+          }
+        }
+      }
+    }
+
+    public bool CanChangeName {
+      get { return false; }
+    }
+
+    [Storable]
+    protected string description;
+    public string Description {
+      get { return description; }
+      set {
+        if (!CanChangeDescription) throw new NotSupportedException("Description cannot be changed.");
+        if (!(description.Equals(value) || (value == null) && (description == string.Empty))) {
+          description = value == null ? string.Empty : value;
+          OnDescriptionChanged();
+        }
+      }
+    }
+
+    public bool CanChangeDescription {
+      get { return false; }
+    }
+
+    public string ItemName {
+      get { return ItemAttribute.GetName(this.GetType()); }
+    }
+
+    public string ItemDescription {
+      get { return ItemAttribute.GetDescription(this.GetType()); }
+    }
+
+    public Version ItemVersion {
+      get { return ItemAttribute.GetVersion(this.GetType()); }
+    }
+
+    public Image ItemImage {
+      get {
+        if (ExecutionState == ExecutionState.Prepared) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutablePrepared;
+        else if (ExecutionState == ExecutionState.Started) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStarted;
+        else if (ExecutionState == ExecutionState.Paused) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutablePaused;
+        else if (ExecutionState == ExecutionState.Stopped) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStopped;
+        else return HeuristicLab.Common.Resources.VSImageLibrary.Event;
+      }
+    }
+
+    [Storable]
+    private ParameterCollection parameters = new ParameterCollection();
+
+    public IKeyedItemCollection<string, IParameter> Parameters {
+      get { return parameters; }
+    }
+
+    private ReadOnlyKeyedItemCollection<string, IParameter> readOnlyParameters;
+
+    IKeyedItemCollection<string, IParameter> IParameterizedItem.Parameters {
+      get {
+        if (readOnlyParameters == null) readOnlyParameters = parameters.AsReadOnly();
+        return readOnlyParameters;
+      }
+    }
+
+    public IEnumerable<IOptimizer> NestedOptimizers {
+      get { return Enumerable.Empty<IOptimizer>(); }
+    }
+
+    #region Parameter Properties
+
+    public ConstrainedValueParameter<IBenchmark> BenchmarkAlgorithmParameter {
+      get { return (ConstrainedValueParameter<IBenchmark>)Parameters["BenchmarkAlgorithm"]; }
+    }
+
+    private ValueParameter<IntValue> ChunkSizeParameter {
+      get { return (ValueParameter<IntValue>)Parameters["ChunkSize"]; }
+    }
+
+    private ValueParameter<DoubleValue> TimeLimitParameter {
+      get { return (ValueParameter<DoubleValue>)Parameters["TimeLimit"]; }
+    }
+
+    #endregion
+
+    #region Constructors
+
+    [StorableConstructor]
+    public Benchmark(bool deserializing) { }
+
+    public Benchmark() {
+      name = ItemName;
+      description = ItemDescription;
+      parameters = new ParameterCollection();
+      readOnlyParameters = null;
+      executionState = ExecutionState.Stopped;
+      executionTime = TimeSpan.Zero;
+      storeAlgorithmInEachRun = false;
+      runsCounter = 0;
+      Runs = new RunCollection();
+      results = new ResultCollection();
+      CreateParameters();
+      DiscoverBenchmarks();
+      Prepare();
+    }
+
+    public Benchmark(Benchmark original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      name = original.name;
+      description = original.description;
+      parameters = cloner.Clone(original.parameters);
+      readOnlyParameters = null;
+      if (ExecutionState == ExecutionState.Started) throw new InvalidOperationException(string.Format("Clone not allowed in execution state \"{0}\".", ExecutionState));
+      executionState = original.executionState;
+      executionTime = original.executionTime;
+      storeAlgorithmInEachRun = original.storeAlgorithmInEachRun;
+      runsCounter = original.runsCounter;
+      runs = cloner.Clone(original.runs);
+      Initialize();
+
+      results = cloner.Clone(original.results);
+      DiscoverBenchmarks();
+      Prepare();
+    }
+
+    #endregion
+
+    private void CreateParameters() {
+      Parameters.Add(new ValueParameter<IntValue>("ChunkSize", "The size (MB) of the chunk array that gets generated", new IntValue(0)));
+      Parameters.Add(new ValueParameter<DoubleValue>("TimeLimit", "The time limit (in minutes) for a benchmark run. Zero means a fixed number of iterations", new DoubleValue(0)));
+    }
+
+    private void DiscoverBenchmarks() {
+      var benchmarks = from t in ApplicationManager.Manager.GetTypes(typeof(IBenchmark))
+                       select t;
+      ItemSet<IBenchmark> values = new ItemSet<IBenchmark>();
+      foreach (var benchmark in benchmarks) {
+        IBenchmark b = (IBenchmark)Activator.CreateInstance(benchmark);
+        values.Add(b);
+      }
+      string paramName = "BenchmarkAlgorithm";
+      if (!Parameters.ContainsKey(paramName)) {
+        if (values.Count > 0) {
+          Parameters.Add(new ConstrainedValueParameter<IBenchmark>(paramName, values, values.First(a => a is IBenchmark)));
+        } else {
+          Parameters.Add(new ConstrainedValueParameter<IBenchmark>(paramName, values));
+        }
+      }
+    }
+
+    private void Initialize() {
+      if (problem != null) RegisterProblemEvents();
+      if (runs != null) RegisterRunsEvents();
+    }
+
+    public virtual void Prepare() {
+      if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped))
+        throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState));
+      results.Clear();
+      OnPrepared();
+    }
+
+    public void Prepare(bool clearRuns) {
+      if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped))
+        throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState));
+      if (clearRuns) runs.Clear();
+      Prepare();
+    }
+
+    public virtual void Pause() {
+      if (ExecutionState != ExecutionState.Started)
+        throw new InvalidOperationException(string.Format("Pause not allowed in execution state \"{0}\".", ExecutionState));
+    }
+    public virtual void Stop() {
+      if ((ExecutionState != ExecutionState.Started) && (ExecutionState != ExecutionState.Paused))
+        throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState));
+      cancellationTokenSource.Cancel();
+    }
+
+    public virtual void Start() {
+      cancellationTokenSource = new CancellationTokenSource();
+      OnStarted();
+      Task task = Task.Factory.StartNew(Run, cancellationTokenSource.Token, cancellationTokenSource.Token);
+      task.ContinueWith(t => {
+        try {
+          t.Wait();
+        }
+        catch (AggregateException ex) {
+          try {
+            ex.Flatten().Handle(x => x is OperationCanceledException);
+          }
+          catch (AggregateException remaining) {
+            if (remaining.InnerExceptions.Count == 1) OnExceptionOccurred(remaining.InnerExceptions[0]);
+            else OnExceptionOccurred(remaining);
+          }
+        }
+
+        cancellationTokenSource.Dispose();
+        cancellationTokenSource = null;
+        OnStopped();
+      });
+    }
+
+    protected virtual void Run(object state) {
+      CancellationToken cancellationToken = (CancellationToken)state;
+      lastUpdateTime = DateTime.Now;
+      System.Timers.Timer timer = new System.Timers.Timer(250);
+      timer.AutoReset = true;
+      timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
+      timer.Start();
+      try {
+        BenchmarkAlgorithm = (IBenchmark)BenchmarkAlgorithmParameter.ActualValue;
+        int chunkSize = ((IntValue)ChunkSizeParameter.ActualValue).Value;
+        if (chunkSize > 0) {
+          BenchmarkAlgorithm.ChunkData = CreateDataChuck(chunkSize);
+        } else if (chunkSize < 0) {
+          throw new ArgumentException("ChunkSize must not be negativ.");
+        }
+        TimeSpan timelimit = TimeSpan.FromMinutes(((DoubleValue)TimeLimitParameter.ActualValue).Value);
+        if (timelimit.TotalMilliseconds < 0) {
+          throw new ArgumentException("TimeLimit must not be negativ. ");
+        }
+        BenchmarkAlgorithm.TimeLimit = timelimit;
+        BenchmarkAlgorithm.Run(cancellationToken, results);
+      }
+      catch (OperationCanceledException) {
+      }
+      finally {
+        timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed);
+        timer.Stop();
+        ExecutionTime += DateTime.Now - lastUpdateTime;
+      }
+    }
+
+    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
+      System.Timers.Timer timer = (System.Timers.Timer)sender;
+      timer.Enabled = false;
+      DateTime now = DateTime.Now;
+      ExecutionTime += now - lastUpdateTime;
+      lastUpdateTime = now;
+      timer.Enabled = true;
+    }
+
+    public virtual void CollectResultValues(IDictionary<string, IItem> values) {
+      values.Add("Execution Time", new TimeSpanValue(ExecutionTime));
+      CollectResultsRecursively("", Results, values);
+    }
+
+    private void CollectResultsRecursively(string path, ResultCollection results, IDictionary<string, IItem> values) {
+      foreach (IResult result in results) {
+        values.Add(path + result.Name, result.Value);
+        ResultCollection childCollection = result.Value as ResultCollection;
+        if (childCollection != null) {
+          CollectResultsRecursively(path + result.Name + ".", childCollection, values);
+        }
+      }
+    }
+
+    public virtual void CollectParameterValues(IDictionary<string, IItem> values) {
+      foreach (IValueParameter param in parameters.OfType<IValueParameter>()) {
+        if (param.GetsCollected && param.Value != null) values.Add(param.Name, param.Value);
+        if (param.Value is IParameterizedItem) {
+          Dictionary<string, IItem> children = new Dictionary<string, IItem>();
+          ((IParameterizedItem)param.Value).CollectParameterValues(children);
+          foreach (string key in children.Keys)
+            values.Add(param.Name + "." + key, children[key]);
+        }
+      }
+    }
+
+    private byte[][] CreateDataChuck(int megaBytes) {
+      if (megaBytes <= 0) {
+        throw new ArgumentException("MegaBytes must be greater than zero", "megaBytes");
+      }
+      byte[][] chunk = new byte[megaBytes][];
+      for (int i = 0; i < chunk.Length; i++) {
+        chunk[i] = new byte[1024 * 1024];
+        random.NextBytes(chunk[i]);
+      }
+      return chunk;
+    }
+
+    #region Events
+
+    public event EventHandler ExecutionStateChanged;
+    protected virtual void OnExecutionStateChanged() {
+      EventHandler handler = ExecutionStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ExecutionTimeChanged;
+    protected virtual void OnExecutionTimeChanged() {
+      EventHandler handler = ExecutionTimeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ProblemChanged;
+    protected virtual void OnProblemChanged() {
+      EventHandler handler = ProblemChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler StoreAlgorithmInEachRunChanged;
+    protected virtual void OnStoreAlgorithmInEachRunChanged() {
+      EventHandler handler = StoreAlgorithmInEachRunChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Prepared;
+    protected virtual void OnPrepared() {
+      ExecutionState = ExecutionState.Prepared;
+      ExecutionTime = TimeSpan.Zero;
+      foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects().OfType<IStatefulItem>()) {
+        statefulObject.InitializeState();
+      }
+      EventHandler handler = Prepared;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Started;
+    protected virtual void OnStarted() {
+      ExecutionState = ExecutionState.Started;
+      EventHandler handler = Started;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Paused;
+    protected virtual void OnPaused() {
+      ExecutionState = ExecutionState.Paused;
+      EventHandler handler = Paused;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Stopped;
+    protected virtual void OnStopped() {
+      ExecutionState = ExecutionState.Stopped;
+      foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects().OfType<IStatefulItem>()) {
+        statefulObject.ClearState();
+      }
+      runsCounter++;
+      runs.Add(new Run(string.Format("{0} Run {1}", Name, runsCounter), this));
+      EventHandler handler = Stopped;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
+    protected virtual void OnExceptionOccurred(Exception exception) {
+      EventHandler<EventArgs<Exception>> handler = ExceptionOccurred;
+      if (handler != null) handler(this, new EventArgs<Exception>(exception));
+    }
+
+    public event EventHandler<CancelEventArgs<string>> NameChanging;
+    protected virtual void OnNameChanging(CancelEventArgs<string> e) {
+      var handler = NameChanging;
+      if (handler != null) handler(this, e);
+    }
+
+    public event EventHandler NameChanged;
+    protected virtual void OnNameChanged() {
+      var handler = NameChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+      OnToStringChanged();
+    }
+
+    public event EventHandler DescriptionChanged;
+    protected virtual void OnDescriptionChanged() {
+      var handler = DescriptionChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ItemImageChanged;
+    protected virtual void OnItemImageChanged() {
+      EventHandler handler = ItemImageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ToStringChanged;
+    protected virtual void OnToStringChanged() {
+      EventHandler handler = ToStringChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    protected virtual void DeregisterProblemEvents() {
+      problem.OperatorsChanged -= new EventHandler(Problem_OperatorsChanged);
+      problem.Reset -= new EventHandler(Problem_Reset);
+    }
+    protected virtual void RegisterProblemEvents() {
+      problem.OperatorsChanged += new EventHandler(Problem_OperatorsChanged);
+      problem.Reset += new EventHandler(Problem_Reset);
+    }
+    protected virtual void Problem_OperatorsChanged(object sender, EventArgs e) { }
+    protected virtual void Problem_Reset(object sender, EventArgs e) {
+      Prepare();
+    }
+
+    protected virtual void DeregisterRunsEvents() {
+      runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset);
+    }
+    protected virtual void RegisterRunsEvents() {
+      runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset);
+    }
+    protected virtual void Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      runsCounter = runs.Count;
+    }
+
+    #endregion
+
+    #region Clone
+
+    public IDeepCloneable Clone(Cloner cloner) {
+      return new Benchmark(this, cloner);
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/DhrystoneBenchmark.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/DhrystoneBenchmark.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/DhrystoneBenchmark.cs	(revision 7085)
@@ -0,0 +1,421 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Diagnostics;
+using System.Drawing;
+using System.Threading;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.Benchmarks {
+  [Item("Dhrystone Algorithm", "Dhrystone benchmarking algorithm.")]
+  [StorableClass]
+  public class DhrystoneBenchmark : IBenchmark {
+    [Storable]
+    private byte[][] chunk;
+    public byte[][] ChunkData {
+      get { return chunk; }
+      set { chunk = value; }
+    }
+
+    [Storable]
+    private TimeSpan timeLimit;
+    public TimeSpan TimeLimit {
+      get { return timeLimit; }
+      set { timeLimit = value; }
+    }
+
+    private bool stopBenchmark;
+
+    private CancellationToken cancellationToken;
+
+    public string ItemName {
+      get { return ItemAttribute.GetName(this.GetType()); }
+    }
+
+    public string ItemDescription {
+      get { return ItemAttribute.GetDescription(this.GetType()); }
+    }
+
+    public Version ItemVersion {
+      get { return ItemAttribute.GetVersion(this.GetType()); }
+    }
+
+    public Image ItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Event; }
+    }
+
+    #region Benchmark Fields
+
+    private const int Ident_1 = 0;
+    private const int Ident_2 = 1;
+    private const int Ident_3 = 2;
+    private const int Ident_4 = 3;
+    private const int Ident_5 = 4;
+
+    private Record_Type Record_Glob;
+    private Record_Type Next_Record_Glob;
+
+    private int Int_Glob;
+    private Boolean Bool_Glob;
+
+    private char Char_Glob_1;
+    private char Char_Glob_2;
+
+    private int[] Array_Glob_1 = new int[128];
+    private int[][] Array_Glob_2 = new int[128][];
+
+    private Record_Type First_Record = new Record_Type();
+    private Record_Type Second_Record = new Record_Type();
+
+    private long Default_Number_Of_Runs = 10000000;
+
+    #endregion
+
+    #region Costructors
+
+    [StorableConstructor]
+    public DhrystoneBenchmark(bool deserializing) { }
+
+    public DhrystoneBenchmark() { }
+
+    protected DhrystoneBenchmark(DhrystoneBenchmark original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+    }
+
+    #endregion
+
+    #region Benchmark Methods
+    // implementation based on Java version: http://www.okayan.jp/DhrystoneApplet/dhry_src.jar
+
+    public void Run(CancellationToken token, ResultCollection results) {
+      cancellationToken = token;
+      stopBenchmark = false;
+
+      int Int_Loc_1;
+      int Int_Loc_2;
+      int Int_Loc_3;
+
+      int[] Int_Loc_1_Ref = new int[1];
+      int[] Int_Loc_3_Ref = new int[1];
+
+      char Char_Index;
+      int[] Enum_Loc = new int[1];
+
+      string String_Loc_1;
+      string String_Loc_2;
+
+      long total_time;
+
+      long Run_Index;
+
+      Next_Record_Glob = Second_Record;
+      Record_Glob = First_Record;
+
+      Record_Glob.Record_Comp = Next_Record_Glob;
+      Record_Glob.Discr = Ident_1;
+      Record_Glob.Enum_Comp = Ident_3;
+      Record_Glob.Int_Comp = 40;
+      Record_Glob.String_Comp = "DHRYSTONE PROGRAM, SOME STRING";
+      String_Loc_1 = "DHRYSTONE PROGRAM, 1'ST STRING";
+
+      for (int i = 0; i < 128; i++) {
+        Array_Glob_2[i] = new int[128];
+      }
+
+      Stopwatch sw = new Stopwatch();
+      sw.Start();
+
+      Run_Index = 1;
+      while (!stopBenchmark) {
+        Proc_5();
+        Proc_4();
+
+        Int_Loc_1 = 2;
+        Int_Loc_2 = 3;
+
+        String_Loc_2 = "DHRYSTONE PROGRAM, 2'ND STRING";
+
+        Enum_Loc[0] = Ident_2;
+        Bool_Glob = !Func_2(String_Loc_1, String_Loc_2);
+
+        while (Int_Loc_1 < Int_Loc_2) {
+          Int_Loc_3_Ref[0] = 5 * Int_Loc_1 - Int_Loc_2;
+          Proc_7(Int_Loc_1, Int_Loc_2, Int_Loc_3_Ref);
+          Int_Loc_1 += 1;
+        }
+
+        Int_Loc_3 = Int_Loc_3_Ref[0];
+        Proc_8(Array_Glob_1, Array_Glob_2, Int_Loc_1, Int_Loc_3);
+        Proc_1(Record_Glob);
+
+        for (Char_Index = 'A'; Char_Index <= Char_Glob_2; ++Char_Index) {
+          if (Enum_Loc[0] == Func_1(Char_Index, 'C'))
+            Proc_6(Ident_1, Enum_Loc);
+        }
+
+        Int_Loc_3 = Int_Loc_2 * Int_Loc_1;
+        Int_Loc_2 = Int_Loc_3 / Int_Loc_1;
+        Int_Loc_2 = 7 * (Int_Loc_3 - Int_Loc_2) - Int_Loc_1;
+
+        Int_Loc_1_Ref[0] = Int_Loc_1;
+        Proc_2(Int_Loc_1_Ref);
+        Int_Loc_1 = Int_Loc_1_Ref[0];
+
+        if (cancellationToken.IsCancellationRequested) {
+          throw new OperationCanceledException(cancellationToken);
+        }
+
+        if ((timeLimit == null) || (timeLimit.TotalMilliseconds == 0)) {
+          if (Run_Index > Default_Number_Of_Runs) {
+            stopBenchmark = true;
+          }
+        } else if (sw.Elapsed > timeLimit) {
+          stopBenchmark = true;
+        }
+
+        Run_Index++;
+      }
+
+      sw.Stop();
+      total_time = sw.ElapsedMilliseconds;
+
+      results.Add(new Result("DIPS", new DoubleValue(Run_Index * 1000 / total_time)));
+
+    }
+
+    private int Func_1(char Char_Par_1_Val, char Char_Par_2_Val) {
+      char Char_Loc_1;
+      char Char_Loc_2;
+
+      Char_Loc_1 = Char_Par_1_Val;
+      Char_Loc_2 = Char_Loc_1;
+      if (Char_Loc_2 != Char_Par_2_Val)
+        return Ident_1;
+      else
+        return Ident_2;
+    }
+
+    private bool Func_2(string String_Par_1_Ref, string String_Par_2_Ref) {
+      int Int_Loc;
+      char Char_Loc = '\0';
+
+      Int_Loc = 2;
+
+      while (Int_Loc <= 2) {
+        if (Func_1(String_Par_1_Ref[Int_Loc], String_Par_2_Ref[Int_Loc + 1]) == Ident_1) {
+          Char_Loc = 'A';
+          Int_Loc += 1;
+        }
+      }
+      if (Char_Loc >= 'W' && Char_Loc < 'z')
+        Int_Loc = 7;
+      if (Char_Loc == 'X')
+        return true;
+      else {
+        if (String_Par_1_Ref.CompareTo(String_Par_2_Ref) > 0) {
+          Int_Loc += 7;
+          return true;
+        } else
+          return false;
+      }
+    }
+
+    private bool Func_3(int Enum_Par_Val) {
+      int Enum_Loc;
+
+      Enum_Loc = Enum_Par_Val;
+      if (Enum_Loc == Ident_3)
+        return true;
+      else
+        return false;
+    }
+
+    private void Proc_1(Record_Type Pointer_Par_Val) {
+      Record_Type Next_Record = Pointer_Par_Val.Record_Comp;
+
+      Pointer_Par_Val.Record_Comp = Record_Glob;
+
+      Pointer_Par_Val.Int_Comp = 5;
+
+      Next_Record.Int_Comp = Pointer_Par_Val.Int_Comp;
+      Next_Record.Record_Comp = Pointer_Par_Val.Record_Comp;
+      Proc_3(Next_Record.Record_Comp);
+
+      int[] Int_Ref = new int[1];
+
+      if (Next_Record.Discr == Ident_1) {
+        Next_Record.Int_Comp = 6;
+        Int_Ref[0] = Next_Record.Enum_Comp;
+        Proc_6(Pointer_Par_Val.Enum_Comp, Int_Ref);
+        Next_Record.Enum_Comp = Int_Ref[0];
+        Next_Record.Record_Comp = Record_Glob.Record_Comp;
+        Int_Ref[0] = Next_Record.Int_Comp;
+        Proc_7(Next_Record.Int_Comp, 10, Int_Ref);
+        Next_Record.Int_Comp = Int_Ref[0];
+      } else
+        Pointer_Par_Val = Pointer_Par_Val.Record_Comp;
+    }
+
+    private void Proc_2(int[] Int_Par_Ref) {
+      int Int_Loc;
+      int Enum_Loc;
+
+      Int_Loc = Int_Par_Ref[0] + 10;
+      Enum_Loc = 0;
+
+      do
+        if (Char_Glob_1 == 'A') {
+          Int_Loc -= 1;
+          Int_Par_Ref[0] = Int_Loc - Int_Glob;
+          Enum_Loc = Ident_1;
+        }
+      while (Enum_Loc != Ident_1);
+    }
+
+    private void Proc_3(Record_Type Pointer_Par_Ref) {
+      if (Record_Glob != null)
+        Pointer_Par_Ref = Record_Glob.Record_Comp;
+      else
+        Int_Glob = 100;
+
+      int[] Int_Comp_Ref = new int[1];
+      Int_Comp_Ref[0] = Record_Glob.Int_Comp;
+      Proc_7(10, Int_Glob, Int_Comp_Ref);
+      Record_Glob.Int_Comp = Int_Comp_Ref[0];
+    }
+
+    private void Proc_4() {
+      bool Bool_Loc;
+
+      Bool_Loc = Char_Glob_1 == 'A';
+      Bool_Loc = Bool_Loc || Bool_Glob;
+      Char_Glob_2 = 'B';
+    }
+
+    private void Proc_5() {
+      Char_Glob_1 = 'A';
+      Bool_Glob = false;
+    }
+
+    private void Proc_6(int Enum_Par_Val, int[] Enum_Par_Ref) {
+
+      Enum_Par_Ref[0] = Enum_Par_Val;
+
+      if (!Func_3(Enum_Par_Val))
+        Enum_Par_Ref[0] = Ident_4;
+
+      switch (Enum_Par_Val) {
+        case Ident_1:
+          Enum_Par_Ref[0] = Ident_1;
+          break;
+
+        case Ident_2:
+          if (Int_Glob > 100)
+            Enum_Par_Ref[0] = Ident_1;
+          else
+            Enum_Par_Ref[0] = Ident_4;
+          break;
+
+        case Ident_3:
+          Enum_Par_Ref[0] = Ident_2;
+          break;
+
+        case Ident_4:
+          break;
+
+        case Ident_5:
+          Enum_Par_Ref[0] = Ident_3;
+          break;
+      }
+    }
+
+    private void Proc_7(int Int_Par_Val1, int Int_Par_Val2, int[] Int_Par_Ref) {
+      int Int_Loc;
+      Int_Loc = Int_Par_Val1 + 2;
+      Int_Par_Ref[0] = Int_Par_Val2 + Int_Loc;
+    }
+
+    private void Proc_8(int[] Array_Par_1_Ref, int[][] Array_Par_2_Ref, int Int_Par_Val_1, int Int_Par_Val_2) {
+      int Int_Index;
+      int Int_Loc;
+
+      Int_Loc = Int_Par_Val_1 + 5;
+      Array_Par_1_Ref[Int_Loc] = Int_Par_Val_2;
+      Array_Par_1_Ref[Int_Loc + 1] = Array_Par_1_Ref[Int_Loc];
+      Array_Par_1_Ref[Int_Loc + 30] = Int_Loc;
+
+      for (Int_Index = Int_Loc; Int_Index <= Int_Loc + 1; ++Int_Index)
+        Array_Par_2_Ref[Int_Loc][Int_Index] = Int_Loc;
+      Array_Par_2_Ref[Int_Loc][Int_Loc - 1] += 1;
+      Array_Par_2_Ref[Int_Loc + 20][Int_Loc] = Array_Par_1_Ref[Int_Loc];
+      Int_Glob = 5;
+    }
+
+    #endregion
+
+    #region Private Class
+
+    private class Record_Type {
+      public Record_Type Record_Comp;
+      public int Discr;
+      public int Enum_Comp;
+      public int Int_Comp;
+      public string String_Comp;
+    }
+
+    #endregion
+
+    #region Clone
+
+    public IDeepCloneable Clone(Cloner cloner) {
+      return new DhrystoneBenchmark(this, cloner);
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    #endregion
+
+    #region Events
+
+    public event EventHandler ItemImageChanged;
+    protected virtual void OnItemImageChanged() {
+      EventHandler handler = ItemImageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ToStringChanged;
+    protected virtual void OnToStringChanged() {
+      EventHandler handler = ToStringChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    #endregion
+
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj	(revision 7085)
@@ -0,0 +1,178 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{068C70A7-8CAF-4AB6-8721-4564D62292BC}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Algorithms.Benchmarks</RootNamespace>
+    <AssemblyName>HeuristicLab.Algorithms.Benchmarks-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Benchmark.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="DhrystoneBenchmark.cs" />
+    <Compile Include="IBenchmark.cs" />
+    <Compile Include="LinpackBenchmark.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="WhetstoneBenchmark.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
+      <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
+      <Name>HeuristicLab.Operators-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/IBenchmark.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/IBenchmark.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/IBenchmark.cs	(revision 7085)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Threading;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+namespace HeuristicLab.Algorithms.Benchmarks {
+  public interface IBenchmark : IItem {
+    byte[][] ChunkData { get; set; }
+    TimeSpan TimeLimit { get; set; }
+    void Run(CancellationToken cancellationToken, ResultCollection resuls);
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/LinpackBenchmark.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/LinpackBenchmark.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/LinpackBenchmark.cs	(revision 7085)
@@ -0,0 +1,564 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Diagnostics;
+using System.Drawing;
+using System.Threading;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.Benchmarks {
+  [Item("Linpack Algorithm", "Linpack benchmarking algorithm.")]
+  [StorableClass]
+  public class LinpackBenchmark : IBenchmark {
+    [Storable]
+    private byte[][] chunk;
+    public byte[][] ChunkData {
+      get { return chunk; }
+      set { chunk = value; }
+    }
+
+    [Storable]
+    private TimeSpan timeLimit;
+    public TimeSpan TimeLimit {
+      get { return timeLimit; }
+      set { timeLimit = value; }
+    }
+
+    private bool stopBenchmark;
+
+    private CancellationToken cancellationToken;
+
+    public string ItemName {
+      get { return ItemAttribute.GetName(this.GetType()); }
+    }
+
+    public string ItemDescription {
+      get { return ItemAttribute.GetDescription(this.GetType()); }
+    }
+
+    public Version ItemVersion {
+      get { return ItemAttribute.GetVersion(this.GetType()); }
+    }
+
+    public Image ItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Event; }
+    }
+
+    #region Benchmark Fields
+
+    private const int DEFAULT_PSIZE = 1500;
+
+    private double eps_result = 0.0;
+    private double mflops_result = 0.0;
+    private double residn_result = 0.0;
+    private double time_result = 0.0;
+    private double total = 0.0;
+
+    private Stopwatch sw = new Stopwatch();
+
+    #endregion
+
+    #region Costructors
+
+    [StorableConstructor]
+    public LinpackBenchmark(bool deserializing) { }
+
+    public LinpackBenchmark() { }
+
+    public LinpackBenchmark(LinpackBenchmark original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+    }
+
+    #endregion
+
+    #region Linpack Benchmark
+    // implementation based on Java version: http://www.netlib.org/benchmark/linpackjava/
+
+    public void Run(CancellationToken token, ResultCollection results) {
+      cancellationToken = token;
+      stopBenchmark = false;
+      TimeSpan executionTime = new TimeSpan();
+      bool resultAchieved = false;
+      do {
+        int n = DEFAULT_PSIZE;
+        int ldaa = DEFAULT_PSIZE;
+        int lda = DEFAULT_PSIZE + 1;
+
+        double[][] a = new double[ldaa][];
+        double[] b = new double[ldaa];
+        double[] x = new double[ldaa];
+
+        double ops;
+        double norma;
+        double normx;
+        double resid;
+        int i;
+        int info;
+        int[] ipvt = new int[ldaa];
+
+        for (i = 0; i < ldaa; i++) {
+          a[i] = new double[lda];
+        }
+
+        ops = (2.0e0 * (((double)n) * n * n)) / 3.0 + 2.0 * (n * n);
+
+        norma = mathGen(a, lda, n, b);
+
+        if (cancellationToken.IsCancellationRequested) {
+          throw new OperationCanceledException(cancellationToken);
+        }
+
+        sw.Reset();
+        sw.Start();
+
+        info = dgefa(a, lda, n, ipvt);
+
+        if (cancellationToken.IsCancellationRequested) {
+          throw new OperationCanceledException(cancellationToken);
+        }
+
+        dgesl(a, lda, n, ipvt, b, 0);
+
+        sw.Stop();
+        total = sw.Elapsed.TotalMilliseconds / 1000;
+
+        if (cancellationToken.IsCancellationRequested) {
+          throw new OperationCanceledException(cancellationToken);
+        }
+
+        for (i = 0; i < n; i++) {
+          x[i] = b[i];
+        }
+
+        norma = mathGen(a, lda, n, b);
+
+        for (i = 0; i < n; i++) {
+          b[i] = -b[i];
+        }
+
+        dmxpy(n, b, n, lda, x, a);
+
+        resid = 0.0;
+        normx = 0.0;
+
+        for (i = 0; i < n; i++) {
+          resid = (resid > abs(b[i])) ? resid : abs(b[i]);
+          normx = (normx > abs(x[i])) ? normx : abs(x[i]);
+        }
+
+        eps_result = epslon((double)1.0);
+
+        residn_result = resid / (n * norma * normx * eps_result);
+        residn_result += 0.005; // for rounding
+        residn_result = (int)(residn_result * 100);
+        residn_result /= 100;
+
+        time_result = total;
+        time_result += 0.005; // for rounding
+        time_result = (int)(time_result * 100);
+        time_result /= 100;
+
+        mflops_result = ops / (1.0e6 * total);
+        mflops_result += 0.0005; // for rounding
+        mflops_result = (int)(mflops_result * 1000);
+        mflops_result /= 1000;
+
+        if (!resultAchieved) {
+          results.Add(new Result("Mflops/s", new DoubleValue(mflops_result)));
+          results.Add(new Result("Total Mflops/s", new DoubleValue(mflops_result * Environment.ProcessorCount)));
+          resultAchieved = true;
+        }
+
+        executionTime += sw.Elapsed;
+        if ((timeLimit == null) || (timeLimit.TotalMilliseconds == 0))
+          stopBenchmark = true;
+        else if (executionTime > timeLimit)
+          stopBenchmark = true;
+      } while (!stopBenchmark);
+    }
+
+    private double abs(double d) {
+      return (d >= 0) ? d : -d;
+    }
+
+    private double mathGen(double[][] a, int lda, int n, double[] b) {
+      Random gen;
+      double norma;
+      int init, i, j;
+
+      init = 1325;
+      norma = 0.0;
+
+      gen = new Random(init);
+
+      if (cancellationToken.IsCancellationRequested) {
+        throw new OperationCanceledException(cancellationToken);
+      }
+
+      // Next two for() statements switched.  Solver wants
+      // matrix in column order. --dmd 3/3/97
+
+      for (i = 0; i < n; i++) {
+        for (j = 0; j < n; j++) {
+          a[j][i] = gen.NextDouble() - .5;
+          norma = (a[j][i] > norma) ? a[j][i] : norma;
+        }
+      }
+
+      for (i = 0; i < n; i++) {
+        b[i] = 0.0;
+      }
+
+      for (j = 0; j < n; j++) {
+        for (i = 0; i < n; i++) {
+          b[i] += a[j][i];
+        }
+      }
+
+      return norma;
+    }
+
+    private int dgefa(double[][] a, int lda, int n, int[] ipvt) {
+      double[] col_k, col_j;
+      double t;
+      int j, k, kp1, l, nm1;
+      int info;
+
+      if (cancellationToken.IsCancellationRequested) {
+        throw new OperationCanceledException(cancellationToken);
+      }
+
+      // gaussian elimination with partial pivoting
+
+      info = 0;
+      nm1 = n - 1;
+      if (nm1 >= 0) {
+        for (k = 0; k < nm1; k++) {
+          col_k = a[k];
+          kp1 = k + 1;
+
+          // find l = pivot index
+
+          l = idamax(n - k, col_k, k, 1) + k;
+          ipvt[k] = l;
+
+          // zero pivot implies this column already triangularized
+
+          if (col_k[l] != 0) {
+            // interchange if necessary
+
+            if (l != k) {
+              t = col_k[l];
+              col_k[l] = col_k[k];
+              col_k[k] = t;
+            }
+
+            if (cancellationToken.IsCancellationRequested) {
+              throw new OperationCanceledException(cancellationToken);
+            }
+
+            // compute multipliers
+
+            t = -1.0 / col_k[k];
+            dscal(n - (kp1), t, col_k, kp1, 1);
+
+            if (cancellationToken.IsCancellationRequested) {
+              throw new OperationCanceledException(cancellationToken);
+            }
+
+            // row elimination with column indexing
+
+            for (j = kp1; j < n; j++) {
+              col_j = a[j];
+              t = col_j[l];
+              if (l != k) {
+                col_j[l] = col_j[k];
+                col_j[k] = t;
+              }
+              daxpy(n - (kp1), t, col_k, kp1, 1,
+                col_j, kp1, 1);
+            }
+          } else {
+            info = k;
+          }
+        }
+      }
+
+      ipvt[n - 1] = n - 1;
+      if (a[(n - 1)][(n - 1)] == 0) info = n - 1;
+
+      return info;
+    }
+
+    private void dgesl(double[][] a, int lda, int n, int[] ipvt, double[] b, int job) {
+      double t;
+      int k, kb, l, nm1, kp1;
+
+      if (cancellationToken.IsCancellationRequested) {
+        throw new OperationCanceledException(cancellationToken);
+      }
+
+      nm1 = n - 1;
+      if (job == 0) {
+        // job = 0 , solve  a * x = b.  first solve  l*y = b
+
+        if (nm1 >= 1) {
+          for (k = 0; k < nm1; k++) {
+            l = ipvt[k];
+            t = b[l];
+            if (l != k) {
+              b[l] = b[k];
+              b[k] = t;
+            }
+            kp1 = k + 1;
+            daxpy(n - (kp1), t, a[k], kp1, 1, b, kp1, 1);
+          }
+        }
+
+        if (cancellationToken.IsCancellationRequested) {
+          throw new OperationCanceledException(cancellationToken);
+        }
+
+        // now solve  u*x = y
+
+        for (kb = 0; kb < n; kb++) {
+          k = n - (kb + 1);
+          b[k] /= a[k][k];
+          t = -b[k];
+          daxpy(k, t, a[k], 0, 1, b, 0, 1);
+        }
+      } else {
+        // job = nonzero, solve  trans(a) * x = b.  first solve  trans(u)*y = b
+
+        for (k = 0; k < n; k++) {
+          t = ddot(k, a[k], 0, 1, b, 0, 1);
+          b[k] = (b[k] - t) / a[k][k];
+        }
+
+        if (cancellationToken.IsCancellationRequested) {
+          throw new OperationCanceledException(cancellationToken);
+        }
+
+        // now solve trans(l)*x = y 
+
+        if (nm1 >= 1) {
+          //for (kb = 1; kb < nm1; kb++) {
+          for (kb = 0; kb < nm1; kb++) {
+            k = n - (kb + 1);
+            kp1 = k + 1;
+            b[k] += ddot(n - (kp1), a[k], kp1, 1, b, kp1, 1);
+            l = ipvt[k];
+            if (l != k) {
+              t = b[l];
+              b[l] = b[k];
+              b[k] = t;
+            }
+          }
+        }
+      }
+    }
+
+    private void daxpy(int n, double da, double[] dx, int dx_off, int incx, double[] dy, int dy_off, int incy) {
+      int i, ix, iy;
+
+      if (cancellationToken.IsCancellationRequested) {
+        throw new OperationCanceledException(cancellationToken);
+      }
+
+      if ((n > 0) && (da != 0)) {
+        if (incx != 1 || incy != 1) {
+
+          // code for unequal increments or equal increments not equal to 1
+
+          ix = 0;
+          iy = 0;
+          if (incx < 0) ix = (-n + 1) * incx;
+          if (incy < 0) iy = (-n + 1) * incy;
+          for (i = 0; i < n; i++) {
+            dy[iy + dy_off] += da * dx[ix + dx_off];
+            ix += incx;
+            iy += incy;
+          }
+          return;
+        } else {
+          // code for both increments equal to 1
+
+          for (i = 0; i < n; i++)
+            dy[i + dy_off] += da * dx[i + dx_off];
+        }
+      }
+    }
+
+    private double ddot(int n, double[] dx, int dx_off, int incx, double[] dy, int dy_off, int incy) {
+      double dtemp = 0;
+      int i, ix, iy;
+
+      if (cancellationToken.IsCancellationRequested) {
+        throw new OperationCanceledException(cancellationToken);
+      }
+
+      if (n > 0) {
+        if (incx != 1 || incy != 1) {
+          // code for unequal increments or equal increments not equal to 1
+
+          ix = 0;
+          iy = 0;
+          if (incx < 0) ix = (-n + 1) * incx;
+          if (incy < 0) iy = (-n + 1) * incy;
+          for (i = 0; i < n; i++) {
+            dtemp += dx[ix + dx_off] * dy[iy + dy_off];
+            ix += incx;
+            iy += incy;
+          }
+        } else {
+          // code for both increments equal to 1
+
+          for (i = 0; i < n; i++)
+            dtemp += dx[i + dx_off] * dy[i + dy_off];
+        }
+      }
+      return (dtemp);
+    }
+
+    private void dscal(int n, double da, double[] dx, int dx_off, int incx) {
+      int i, nincx;
+
+      if (cancellationToken.IsCancellationRequested) {
+        throw new OperationCanceledException(cancellationToken);
+      }
+
+      if (n > 0) {
+        if (incx != 1) {
+          // code for increment not equal to 1
+
+          nincx = n * incx;
+          for (i = 0; i < nincx; i += incx)
+            dx[i + dx_off] *= da;
+        } else {
+          // code for increment equal to 1
+
+          for (i = 0; i < n; i++)
+            dx[i + dx_off] *= da;
+        }
+      }
+    }
+
+    private int idamax(int n, double[] dx, int dx_off, int incx) {
+      double dmax, dtemp;
+      int i, ix, itemp = 0;
+
+      if (cancellationToken.IsCancellationRequested) {
+        throw new OperationCanceledException(cancellationToken);
+      }
+
+      if (n < 1) {
+        itemp = -1;
+      } else if (n == 1) {
+        itemp = 0;
+      } else if (incx != 1) {
+        // code for increment not equal to 1
+
+        dmax = (dx[dx_off] < 0.0) ? -dx[dx_off] : dx[dx_off];
+        ix = 1 + incx;
+        for (i = 0; i < n; i++) {
+          dtemp = (dx[ix + dx_off] < 0.0) ? -dx[ix + dx_off] : dx[ix + dx_off];
+          if (dtemp > dmax) {
+            itemp = i;
+            dmax = dtemp;
+          }
+          ix += incx;
+        }
+      } else {
+        // code for increment equal to 1
+
+        itemp = 0;
+        dmax = (dx[dx_off] < 0.0) ? -dx[dx_off] : dx[dx_off];
+        for (i = 0; i < n; i++) {
+          dtemp = (dx[i + dx_off] < 0.0) ? -dx[i + dx_off] : dx[i + dx_off];
+          if (dtemp > dmax) {
+            itemp = i;
+            dmax = dtemp;
+          }
+        }
+      }
+      return (itemp);
+    }
+
+    private double epslon(double x) {
+      double a, b, c, eps;
+
+      a = 4.0e0 / 3.0e0;
+      eps = 0;
+      while (eps == 0) {
+        b = a - 1.0;
+        c = b + b + b;
+        eps = abs(c - 1.0);
+      }
+      return (eps * abs(x));
+    }
+
+    private void dmxpy(int n1, double[] y, int n2, int ldm, double[] x, double[][] m) {
+      int j, i;
+
+      // cleanup odd vector
+      for (j = 0; j < n2; j++) {
+        for (i = 0; i < n1; i++) {
+          y[i] += x[j] * m[j][i];
+        }
+      }
+    }
+
+    #endregion
+
+    #region Clone
+
+    public IDeepCloneable Clone(Cloner cloner) {
+      return new LinpackBenchmark(this, cloner);
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    #endregion
+
+    #region Events
+
+    public event EventHandler ItemImageChanged;
+    protected virtual void OnItemImageChanged() {
+      EventHandler handler = ItemImageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ToStringChanged;
+    protected virtual void OnToStringChanged() {
+      EventHandler handler = ToStringChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,40 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Algorithms.Benchmarks {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Algorithms.Benchmark plugin.
+  /// </summary>
+  [Plugin("HeuristicLab.Algorithms.Benchmarks", "Provides different benchmarking algorithms", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Algorithms.Benchmarks-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]   
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")] 
+  public class HeuristicLabAlgorithmsBenchmarksPlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Algorithms.Benchmarks")]
+[assembly: AssemblyDescription("Benchmarking")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("3E422463-0CE0-400D-9544-5C11D5818769")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/WhetstoneBenchmark.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/WhetstoneBenchmark.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.Benchmarks/3.3/WhetstoneBenchmark.cs	(revision 7085)
@@ -0,0 +1,323 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Diagnostics;
+using System.Drawing;
+using System.Threading;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.Benchmarks {
+  [Item("Whetstone Algorithm", "Whetstone benchmarking algorithm.")]
+  [StorableClass]
+  public class WhetstoneBenchmark : IBenchmark {
+    [Storable]
+    private byte[][] chunk;
+    public byte[][] ChunkData {
+      get { return chunk; }
+      set { chunk = value; }
+    }
+
+    [Storable]
+    private TimeSpan timeLimit;
+    public TimeSpan TimeLimit {
+      get { return timeLimit; }
+      set { timeLimit = value; }
+    }
+
+    private bool stopBenchmark;
+
+    private CancellationToken cancellationToken;
+
+    public string ItemName {
+      get { return ItemAttribute.GetName(this.GetType()); }
+    }
+
+    public string ItemDescription {
+      get { return ItemAttribute.GetDescription(this.GetType()); }
+    }
+
+    public Version ItemVersion {
+      get { return ItemAttribute.GetVersion(this.GetType()); }
+    }
+
+    public Image ItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Event; }
+    }
+
+    #region Benchmark Fields
+
+    private long begin_time;
+    private long end_time;
+
+    private int ITERATIONS;
+    private int numberOfCycles;
+    private int cycleNo;
+    private double x1, x2, x3, x4, x, y, t, t1, t2;
+    private double[] z = new double[1];
+    private double[] e1 = new double[4];
+    private int i, j, k, l, n1, n2, n3, n4, n6, n7, n8, n9, n10, n11;
+
+    #endregion
+
+    #region Costructors
+
+    [StorableConstructor]
+    public WhetstoneBenchmark(bool deserializing) { }
+
+    public WhetstoneBenchmark() { }
+
+    protected WhetstoneBenchmark(WhetstoneBenchmark original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+    }
+
+    #endregion
+
+    #region Whetstone Benchmark
+    // implementation based on Java version: www.aicas.com/download/Whetstone.java
+
+    public void Run(CancellationToken token, ResultCollection results) {
+      cancellationToken = token;
+      stopBenchmark = false;
+
+      ITERATIONS = 100; // ITERATIONS / 10 = Millions Whetstone instructions
+
+      numberOfCycles = 100;
+      int defaultNumberOfRuns = 10;
+      float elapsedTime = 0;
+      float meanTime = 0;
+      float rating = 0;
+      float meanRating = 0;
+      int intRating = 0;
+
+      long runNumber = 1;
+      Stopwatch sw = new Stopwatch();
+      sw.Start();
+
+      while (!stopBenchmark) {
+        elapsedTime = (float)(MainCalc() / 1000);
+        meanTime = meanTime + (elapsedTime * 1000 / numberOfCycles);
+        rating = (1000 * numberOfCycles) / elapsedTime;
+        meanRating = meanRating + rating;
+        intRating = (int)rating;
+        numberOfCycles += 10;
+
+        if (cancellationToken.IsCancellationRequested) {
+          throw new OperationCanceledException(cancellationToken);
+        }
+
+        if ((timeLimit == null) || (timeLimit.TotalMilliseconds == 0)) {
+          if (runNumber > defaultNumberOfRuns) {
+            stopBenchmark = true;
+          }
+        } else if (sw.Elapsed > timeLimit) {
+          stopBenchmark = true;
+        }
+
+        runNumber++;
+      }
+      sw.Stop();
+      meanTime = meanTime / runNumber;
+      meanRating = meanRating / runNumber;
+      intRating = (int)meanRating;
+
+      results.Add(new Result("MWIPS", new IntValue(intRating / 1000)));
+    }
+
+    private double MainCalc() {
+      // initialize constants
+      t = 0.499975;
+      t1 = 0.50025;
+      t2 = 2.0;
+
+      // set values of module weights
+      n1 = 0 * ITERATIONS;
+      n2 = 12 * ITERATIONS;
+      n3 = 14 * ITERATIONS;
+      n4 = 345 * ITERATIONS;
+      n6 = 210 * ITERATIONS;
+      n7 = 32 * ITERATIONS;
+      n8 = 899 * ITERATIONS;
+      n9 = 616 * ITERATIONS;
+      n10 = 0 * ITERATIONS;
+      n11 = 93 * ITERATIONS;
+
+      begin_time = DateTime.Now.Ticks / 10000; // get ms
+
+      for (cycleNo = 1; cycleNo <= numberOfCycles; cycleNo++) {
+        /* MODULE 1: simple identifiers */
+        x1 = 1.0;
+        x2 = x3 = x4 = -1.0;
+        for (i = 1; i <= n1; i += 1) {
+          x1 = (x1 + x2 + x3 - x4) * t;
+          x2 = (x1 + x2 - x3 + x4) * t; // correction: x2 = ( x1 + x2 - x3 - x4 ) * t;
+          x3 = (x1 - x2 + x3 + x4) * t; // correction: x3 = ( x1 - x2 + x3 + x4 ) * t;
+          x4 = (-x1 + x2 + x3 + x4) * t;
+        }
+
+        /* MODULE 2: array elements */
+        e1[0] = 1.0;
+        e1[1] = e1[2] = e1[3] = -1.0;
+        for (i = 1; i <= n2; i += 1) {
+          e1[0] = (e1[0] + e1[1] + e1[2] - e1[3]) * t;
+          e1[1] = (e1[0] + e1[1] - e1[2] + e1[3]) * t;
+          e1[2] = (e1[0] - e1[1] + e1[2] + e1[3]) * t;
+          e1[3] = (-e1[0] + e1[1] + e1[2] + e1[3]) * t;
+        }
+
+        /* MODULE 3: array as parameter */
+        for (i = 1; i <= n3; i += 1)
+          pa(e1);
+
+        /* MODULE 4: conditional jumps */
+        j = 1;
+        for (i = 1; i <= n4; i += 1) {
+          if (j == 1)
+            j = 2;
+          else
+            j = 3;
+          if (j > 2)
+            j = 0;
+          else
+            j = 1;
+          if (j < 1)
+            j = 1;
+          else
+            j = 0;
+        }
+
+        /* MODULE 5: omitted */
+
+        /* MODULE 6: integer arithmetic */
+        j = 1;
+        k = 2;
+        l = 3;
+        for (i = 1; i <= n6; i += 1) {
+          j = j * (k - j) * (l - k);
+          k = l * k - (l - j) * k;
+          l = (l - k) * (k + j);
+          e1[l - 2] = j + k + l; /* C arrays are zero based */
+          e1[k - 2] = j * k * l;
+        }
+
+        /* MODULE 7: trig. functions */
+        x = y = 0.5;
+        for (i = 1; i <= n7; i += 1) {
+          x = t * Math.Atan(t2 * Math.Sin(x) * Math.Cos(x) / (Math.Cos(x + y) + Math.Cos(x - y) - 1.0));
+          y = t * Math.Atan(t2 * Math.Sin(y) * Math.Cos(y) / (Math.Cos(x + y) + Math.Cos(x - y) - 1.0));
+        }
+
+        /* MODULE 8: procedure calls */
+        x = y = z[0] = 1.0;
+        for (i = 1; i <= n8; i += 1)
+          p3(x, y, z);
+
+        /* MODULE9: array references */
+        j = 0;
+        k = 1;
+        l = 2;
+        e1[0] = 1.0;
+        e1[1] = 2.0;
+        e1[2] = 3.0;
+        for (i = 1; i <= n9; i++)
+          p0();
+
+        /* MODULE10: integer arithmetic */
+        j = 2;
+        k = 3;
+        for (i = 1; i <= n10; i += 1) {
+          j = j + k;
+          k = j + k;
+          j = k - j;
+          k = k - j - j;
+        }
+
+        /* MODULE11: standard functions */
+        x = 0.75;
+        for (i = 1; i <= n11; i += 1)
+          x = Math.Sqrt(Math.Exp(Math.Log(x) / t1));
+      } /* for */
+
+      end_time = DateTime.Now.Ticks / 10000; // get ms
+
+      return (end_time - begin_time);
+    }
+
+    public void pa(double[] e) {
+      int j;
+      j = 0;
+      do {
+        e[0] = (e[0] + e[1] + e[2] - e[3]) * t;
+        e[1] = (e[0] + e[1] - e[2] + e[3]) * t;
+        e[2] = (e[0] - e[1] + e[2] + e[3]) * t;
+        e[3] = (-e[0] + e[1] + e[2] + e[3]) / t2;
+        j += 1;
+      }
+      while (j < 6);
+    }
+
+    public void p3(double x, double y, double[] z) {
+      x = t * (x + y);
+      y = t * (x + y);
+      z[0] = (x + y) / t2;
+    }
+
+    public void p0() {
+      e1[j] = e1[k];
+      e1[k] = e1[l];
+      e1[l] = e1[j];
+    }
+
+    #endregion
+
+    #region Clone
+
+    public IDeepCloneable Clone(Cloner cloner) {
+      return new WhetstoneBenchmark(this, cloner);
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    #endregion
+
+    #region Events
+
+    public event EventHandler ItemImageChanged;
+    protected virtual void OnItemImageChanged() {
+      EventHandler handler = ItemImageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ToStringChanged;
+    protected virtual void OnToStringChanged() {
+      EventHandler handler = ToStringChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj	(revision 7085)
@@ -106,4 +106,5 @@
     <Reference Include="LibSVM-1.6.3, Version=1.6.3.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\LibSVM-1.6.3.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj	(revision 7085)
@@ -103,7 +103,9 @@
     <Reference Include="ALGLIB-3.1.0, Version=3.1.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\ALGLIB-3.1.0.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="LibSVM-1.6.3, Version=1.6.3.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\LibSVM-1.6.3.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Analysis.Views/3.3/DataTableView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 7085)
@@ -576,10 +576,19 @@
       }
 
-      double current = minValue, intervalCenter = intervalWidth / 2.0;
+      var area = chart.ChartAreas[0];
+      double current = 0.0;
+      if (!Double.IsNaN(Content.VisualProperties.XAxisMinimumFixedValue) && !Content.VisualProperties.XAxisMinimumAuto)
+        current = Content.VisualProperties.XAxisMinimumFixedValue;
+      else current = minValue;
+
+      area.AxisX.Interval = intervalWidth / row.VisualProperties.ScaleFactor;
+      area.AxisX.IntervalOffset = intervalWidth / row.VisualProperties.ScaleFactor;
+
+      series.SetCustomProperty("PointWidth", intervalWidth.ToString());
+
       int frequency = 0;
-      series.Points.AddXY(current - intervalCenter, 0); // so that the first column is not visually truncated
       foreach (double v in row.Values.Where(x => !IsInvalidValue(x)).OrderBy(x => x)) {
         while (v > current + intervalWidth) {
-          series.Points.AddXY(current + intervalCenter, frequency);
+          series.Points.AddXY(current + intervalWidth, frequency);
           current += intervalWidth;
           frequency = 0;
@@ -587,6 +596,5 @@
         frequency++;
       }
-      series.Points.AddXY(current + intervalCenter, frequency);
-      series.Points.AddXY(current + 3 * intervalCenter, 0); // so that the last column is not visually truncated
+      series.Points.AddXY(current + intervalWidth, frequency);
     }
 
Index: /branches/RegressionBenchmarks/HeuristicLab.Analysis/3.3/DataVisualization/DataRowVisualProperties.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Analysis/3.3/DataVisualization/DataRowVisualProperties.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Analysis/3.3/DataVisualization/DataRowVisualProperties.cs	(revision 7085)
@@ -142,4 +142,14 @@
       }
     }
+    private double scaleFactor;
+    public double ScaleFactor {
+      get { return scaleFactor; }
+      set {
+        if (scaleFactor != value) {
+          scaleFactor = value;
+          OnPropertyChanged("ScaleFactor");
+        }
+      }
+    }
     private string displayName;
     public string DisplayName {
@@ -203,4 +213,9 @@
       get { return exactBins; }
       set { exactBins = value; }
+    }
+    [Storable(Name = "ScaleFactor")]
+    private double StorableScaleFactor {
+      get { return scaleFactor; }
+      set { scaleFactor = value; }
     }
     [Storable(Name = "DisplayName")]
@@ -224,4 +239,5 @@
       this.bins = original.bins;
       this.exactBins = original.exactBins;
+      this.scaleFactor = original.scaleFactor;
       this.displayName = original.displayName;
     }
@@ -236,4 +252,5 @@
       bins = 10;
       exactBins = false;
+      scaleFactor = 1.0;
       displayName = String.Empty;
     }
Index: /branches/RegressionBenchmarks/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 7085)
@@ -101,4 +101,5 @@
     <Reference Include="ALGLIB-3.1.0, Version=3.1.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\ALGLIB-3.1.0.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj	(revision 7085)
@@ -0,0 +1,256 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Hive.Administrator</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Hive.Administrator-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Calendar.DayView, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\Calendar.DayView.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.DayView-1.0, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\HeuristicLab.DayView-1.0.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Xml.Linq" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Views\HiveAdministratorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\HiveAdministratorView.Designer.cs">
+      <DependentUpon>HiveAdministratorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveAppointment.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="MenuItems\AdministratorMenuItem.cs" />
+    <Compile Include="Views\Recurrence.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Views\Recurrence.Designer.cs">
+      <DependentUpon>Recurrence.cs</DependentUpon>
+    </Compile>
+    <Compile Include="RecurrentEvent.cs" />
+    <Compile Include="Views\ResourcesView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ResourcesView.Designer.cs">
+      <DependentUpon>ResourcesView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ScheduleView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ScheduleView.Designer.cs">
+      <DependentUpon>ScheduleView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\SlaveView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\SlaveView.Designer.cs">
+      <DependentUpon>SlaveView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Plugin.cs" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Views\HiveAdministratorView.resx">
+      <DependentUpon>HiveAdministratorView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\Recurrence.resx">
+      <DependentUpon>Recurrence.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\ResourcesView.resx">
+      <DependentUpon>ResourcesView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\ScheduleView.resx">
+      <DependentUpon>ScheduleView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\SlaveView.resx">
+      <DependentUpon>SlaveView.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Common\3.3\HeuristicLab.Clients.Common-3.3.csproj">
+      <Project>{730A9104-D4D1-4360-966B-E49B7571DDA3}</Project>
+      <Name>HeuristicLab.Clients.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive.Views\3.3\HeuristicLab.Clients.Hive.Views-3.3.csproj">
+      <Project>{E1D6C801-892A-406A-B606-F158E36DD3C3}</Project>
+      <Name>HeuristicLab.Clients.Hive.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive\3.3\HeuristicLab.Clients.Hive-3.3.csproj">
+      <Project>{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}</Project>
+      <Name>HeuristicLab.Clients.Hive-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
+      <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
+      <Name>HeuristicLab.MainForm-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimizer\3.3\HeuristicLab.Optimizer-3.3.csproj">
+      <Project>{C664305E-497C-4533-A140-967DEDB05C19}</Project>
+      <Name>HeuristicLab.Optimizer-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/HiveAppointment.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/HiveAppointment.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/HiveAppointment.cs	(revision 7085)
@@ -0,0 +1,141 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Xml.Serialization;
+
+namespace HeuristicLab.Clients.Hive.Administrator.Views {
+
+  public class HiveAppointment : Calendar.Appointment {
+    private Guid recurringId = Guid.Empty;
+
+    [XmlIgnore]
+    public bool Changed { get; set; }
+
+    public HiveAppointment()
+      : base() {
+      Changed = false;
+    }
+
+    [XmlIgnore]
+    public new int Layer {
+      get { return base.Layer; }
+      set { base.Layer = value; }
+    }
+
+    [XmlIgnore]
+    public new string Group {
+      get { return base.Group; }
+      set { base.Group = value; }
+    }
+
+    [XmlAttribute("Locked")]
+    public new bool Locked {
+      get { return base.Locked; }
+      set { base.Locked = value; }
+    }
+
+    [XmlIgnore]
+    public new Color Color {
+      get { return base.Color; }
+      set { base.Color = value; }
+    }
+
+    [XmlIgnore]
+    public new Color TextColor {
+      get { return base.TextColor; }
+      set { base.TextColor = value; }
+    }
+
+    [XmlIgnore]
+    public new Color BorderColor {
+      get { return base.BorderColor; }
+      set { base.BorderColor = value; }
+    }
+
+    [XmlIgnore]
+    public new bool DrawBorder {
+      get { return base.DrawBorder; }
+      set { base.DrawBorder = value; }
+    }
+
+    [XmlAttribute("AllDayEvent")]
+    public new bool AllDayEvent {
+      get { return base.AllDayEvent; }
+      set { base.AllDayEvent = value; Changed = true; }
+    }
+
+    [XmlAttribute("Recurring")]
+    public new bool Recurring {
+      get { return base.Recurring; }
+      set { base.Recurring = value; Changed = true; }
+    }
+
+    [XmlAttribute("RecurringId")]
+    public Guid RecurringId {
+      get { return recurringId; }
+      set { recurringId = value; Changed = true; }
+    }
+
+    [XmlAttribute("EndDate")]
+    public new DateTime EndDate {
+      get { return base.EndDate; }
+      set { base.EndDate = value; Changed = true; }
+    }
+
+    [XmlAttribute("StartDate")]
+    public new DateTime StartDate {
+      get { return base.StartDate; }
+      set { base.StartDate = value; Changed = true; }
+    }
+
+    [XmlIgnore]
+    public new int AppointmentId {
+      get { return base.AppointmentId; }
+      set { base.AppointmentId = value; }
+    }
+
+    [XmlElement("Subject")]
+    public new string Subject {
+      get { return base.Subject; }
+      set { base.Subject = value; }
+    }
+
+    [XmlIgnore]
+    public new string Location {
+      get { return base.Location; }
+      set { base.Location = value; }
+    }
+
+    [XmlIgnore]
+    public new string Note {
+      get { return base.Note; }
+      set { base.Note = value; }
+    }
+
+    [XmlIgnore]
+    public bool Deleted { get; set; }
+
+    [XmlIgnore]
+    public Guid Id { get; set; }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/MenuItems/AdministratorMenuItem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/MenuItems/AdministratorMenuItem.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/MenuItems/AdministratorMenuItem.cs	(revision 7085)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.Clients.Hive;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  public class AdministratorMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "&Administrator"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Services", "&Hive" }; }
+    }
+    public override void Execute() {
+      MainFormManager.MainForm.ShowContent(HiveAdminClient.Instance);
+    }
+    public override int Position {
+      get { return 10000; }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive.Administration {
+  [Plugin("HeuristicLab.Clients.Hive.Administrator", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Clients.Hive.Administrator-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]  
+  [PluginDependency("HeuristicLab.Clients.Hive", "3.3")]
+  [PluginDependency("HeuristicLab.Clients.Hive.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Optimizer", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]  
+  public class HeuristicLabClientsHiveAdministratorPlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Clients.Hive.Administrator")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7c14407e-6980-465b-ba3a-4a916d48989b")]
+
+// 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("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/RecurrentEvent.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/RecurrentEvent.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/RecurrentEvent.cs	(revision 7085)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Clients.Hive.Administrator.Views {
+  public class RecurrentEvent {
+    public DateTime DateFrom { get; set; }
+    public DateTime DateTo { get; set; }
+    public bool AllDay { get; set; }    
+    public HashSet<DayOfWeek> WeekDays { get; set; }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.Designer.cs	(revision 7085)
@@ -0,0 +1,100 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.Administrator.Views {
+  partial class HiveAdministratorView {
+    private System.Windows.Forms.TabControl tabAdmin;
+    private HeuristicLab.Clients.Hive.Administrator.Views.ResourcesView resourcesView;
+
+    #region Component Designer generated code
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.tabAdmin = new System.Windows.Forms.TabControl();
+      this.tabSlaves = new System.Windows.Forms.TabPage();
+      this.imageListUsers = new System.Windows.Forms.ImageList(this.components);
+      this.resourcesView = new HeuristicLab.Clients.Hive.Administrator.Views.ResourcesView();
+      this.tabAdmin.SuspendLayout();
+      this.tabSlaves.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tabAdmin
+      // 
+      this.tabAdmin.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabAdmin.Controls.Add(this.tabSlaves);
+      this.tabAdmin.Location = new System.Drawing.Point(3, 0);
+      this.tabAdmin.Name = "tabAdmin";
+      this.tabAdmin.SelectedIndex = 0;
+      this.tabAdmin.Size = new System.Drawing.Size(742, 546);
+      this.tabAdmin.TabIndex = 0;
+      // 
+      // tabSlaves
+      // 
+      this.tabSlaves.Controls.Add(this.resourcesView);
+      this.tabSlaves.Location = new System.Drawing.Point(4, 22);
+      this.tabSlaves.Name = "tabSlaves";
+      this.tabSlaves.Padding = new System.Windows.Forms.Padding(3);
+      this.tabSlaves.Size = new System.Drawing.Size(734, 520);
+      this.tabSlaves.TabIndex = 3;
+      this.tabSlaves.Text = "Slaves";
+      this.tabSlaves.UseVisualStyleBackColor = true;
+      // 
+      // imageListUsers
+      // 
+      this.imageListUsers.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
+      this.imageListUsers.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageListUsers.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // resourcesView
+      // 
+      this.resourcesView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.resourcesView.Caption = "ResourcesView";
+      this.resourcesView.Content = null;
+      this.resourcesView.Location = new System.Drawing.Point(0, 0);
+      this.resourcesView.Name = "resourcesView";
+      this.resourcesView.ReadOnly = false;
+      this.resourcesView.Size = new System.Drawing.Size(734, 520);
+      this.resourcesView.TabIndex = 0;
+      // 
+      // HiveAdministrationView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabAdmin);
+      this.Name = "HiveAdministrationView";
+      this.Size = new System.Drawing.Size(745, 546);
+      this.tabAdmin.ResumeLayout(false);
+      this.tabSlaves.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.ComponentModel.IContainer components;
+    private System.Windows.Forms.ImageList imageListUsers;
+    private System.Windows.Forms.TabPage tabSlaves;
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.cs	(revision 7085)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.Hive.Administrator.Views {
+  [View("Hive Administrator")]
+  [Content(typeof(HiveAdminClient), IsDefaultView = true)]
+  public partial class HiveAdministratorView : AsynchronousContentView {
+    public new HiveAdminClient Content {
+      get { return (HiveAdminClient)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public HiveAdministratorView() {
+      InitializeComponent();
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.resx	(revision 7085)
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="imageListUsers.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>46, 23</value>
+  </metadata>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Recurrence.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Recurrence.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Recurrence.Designer.cs	(revision 7085)
@@ -0,0 +1,277 @@
+﻿namespace HeuristicLab.Clients.Hive.Administrator.Views {
+  partial class Recurrence {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Recurrence));
+      this.gbAppointment = new System.Windows.Forms.GroupBox();
+      this.chbade = new System.Windows.Forms.CheckBox();
+      this.dtpEnd = new System.Windows.Forms.DateTimePicker();
+      this.dtpToTime = new System.Windows.Forms.DateTimePicker();
+      this.label5 = new System.Windows.Forms.Label();
+      this.dtpStart = new System.Windows.Forms.DateTimePicker();
+      this.dtpFromTime = new System.Windows.Forms.DateTimePicker();
+      this.label6 = new System.Windows.Forms.Label();
+      this.btSaveRecurrence = new System.Windows.Forms.Button();
+      this.btCancelRecurrence = new System.Windows.Forms.Button();
+      this.gbWeekly = new System.Windows.Forms.GroupBox();
+      this.cbSunday = new System.Windows.Forms.CheckBox();
+      this.cbSaturday = new System.Windows.Forms.CheckBox();
+      this.cbFriday = new System.Windows.Forms.CheckBox();
+      this.cbThursday = new System.Windows.Forms.CheckBox();
+      this.cbWednesday = new System.Windows.Forms.CheckBox();
+      this.cbTuesday = new System.Windows.Forms.CheckBox();
+      this.cbMonday = new System.Windows.Forms.CheckBox();
+      this.gbAppointment.SuspendLayout();
+      this.gbWeekly.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // gbAppointment
+      // 
+      this.gbAppointment.Controls.Add(this.chbade);
+      this.gbAppointment.Controls.Add(this.dtpEnd);
+      this.gbAppointment.Controls.Add(this.dtpToTime);
+      this.gbAppointment.Controls.Add(this.label5);
+      this.gbAppointment.Controls.Add(this.dtpStart);
+      this.gbAppointment.Controls.Add(this.dtpFromTime);
+      this.gbAppointment.Controls.Add(this.label6);
+      this.gbAppointment.Location = new System.Drawing.Point(2, 2);
+      this.gbAppointment.Name = "gbAppointment";
+      this.gbAppointment.Size = new System.Drawing.Size(386, 109);
+      this.gbAppointment.TabIndex = 39;
+      this.gbAppointment.TabStop = false;
+      this.gbAppointment.Text = "Appointment";
+      // 
+      // chbade
+      // 
+      this.chbade.AutoSize = true;
+      this.chbade.Location = new System.Drawing.Point(113, 86);
+      this.chbade.Name = "chbade";
+      this.chbade.Size = new System.Drawing.Size(90, 17);
+      this.chbade.TabIndex = 39;
+      this.chbade.Text = "All Day Event";
+      this.chbade.UseVisualStyleBackColor = true;
+      // 
+      // dtpEnd
+      // 
+      this.dtpEnd.Format = System.Windows.Forms.DateTimePickerFormat.Short;
+      this.dtpEnd.Location = new System.Drawing.Point(113, 56);
+      this.dtpEnd.Name = "dtpEnd";
+      this.dtpEnd.Size = new System.Drawing.Size(91, 20);
+      this.dtpEnd.TabIndex = 29;
+      // 
+      // dtpToTime
+      // 
+      this.dtpToTime.CustomFormat = "HH:00";
+      this.dtpToTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpToTime.Location = new System.Drawing.Point(226, 56);
+      this.dtpToTime.Name = "dtpToTime";
+      this.dtpToTime.ShowUpDown = true;
+      this.dtpToTime.Size = new System.Drawing.Size(73, 20);
+      this.dtpToTime.TabIndex = 38;
+      // 
+      // label5
+      // 
+      this.label5.AutoSize = true;
+      this.label5.Location = new System.Drawing.Point(58, 60);
+      this.label5.Name = "label5";
+      this.label5.Size = new System.Drawing.Size(55, 13);
+      this.label5.TabIndex = 27;
+      this.label5.Text = "End Date:";
+      // 
+      // dtpStart
+      // 
+      this.dtpStart.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpStart.Location = new System.Drawing.Point(113, 19);
+      this.dtpStart.Name = "dtpStart";
+      this.dtpStart.Size = new System.Drawing.Size(89, 20);
+      this.dtpStart.TabIndex = 28;
+      // 
+      // dtpFromTime
+      // 
+      this.dtpFromTime.CustomFormat = "HH:00";
+      this.dtpFromTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpFromTime.Location = new System.Drawing.Point(226, 19);
+      this.dtpFromTime.Name = "dtpFromTime";
+      this.dtpFromTime.ShowUpDown = true;
+      this.dtpFromTime.Size = new System.Drawing.Size(73, 20);
+      this.dtpFromTime.TabIndex = 30;
+      // 
+      // label6
+      // 
+      this.label6.AutoSize = true;
+      this.label6.Location = new System.Drawing.Point(58, 23);
+      this.label6.Name = "label6";
+      this.label6.Size = new System.Drawing.Size(58, 13);
+      this.label6.TabIndex = 25;
+      this.label6.Text = "Start Date:";
+      // 
+      // btSaveRecurrence
+      // 
+      this.btSaveRecurrence.Location = new System.Drawing.Point(2, 217);
+      this.btSaveRecurrence.Name = "btSaveRecurrence";
+      this.btSaveRecurrence.Size = new System.Drawing.Size(147, 23);
+      this.btSaveRecurrence.TabIndex = 43;
+      this.btSaveRecurrence.Text = "Save";
+      this.btSaveRecurrence.UseVisualStyleBackColor = true;
+      this.btSaveRecurrence.Click += new System.EventHandler(this.btSaveRecurrence_Click);
+      // 
+      // btCancelRecurrence
+      // 
+      this.btCancelRecurrence.Location = new System.Drawing.Point(241, 217);
+      this.btCancelRecurrence.Name = "btCancelRecurrence";
+      this.btCancelRecurrence.Size = new System.Drawing.Size(147, 23);
+      this.btCancelRecurrence.TabIndex = 44;
+      this.btCancelRecurrence.Text = "Cancel";
+      this.btCancelRecurrence.UseVisualStyleBackColor = true;
+      this.btCancelRecurrence.Click += new System.EventHandler(this.btCancelRecurrence_Click);
+      // 
+      // gbWeekly
+      // 
+      this.gbWeekly.Controls.Add(this.cbSunday);
+      this.gbWeekly.Controls.Add(this.cbSaturday);
+      this.gbWeekly.Controls.Add(this.cbFriday);
+      this.gbWeekly.Controls.Add(this.cbThursday);
+      this.gbWeekly.Controls.Add(this.cbWednesday);
+      this.gbWeekly.Controls.Add(this.cbTuesday);
+      this.gbWeekly.Controls.Add(this.cbMonday);
+      this.gbWeekly.Location = new System.Drawing.Point(2, 111);
+      this.gbWeekly.Name = "gbWeekly";
+      this.gbWeekly.Size = new System.Drawing.Size(386, 100);
+      this.gbWeekly.TabIndex = 42;
+      this.gbWeekly.TabStop = false;
+      this.gbWeekly.Text = "Days of week";
+      // 
+      // cbSunday
+      // 
+      this.cbSunday.AutoSize = true;
+      this.cbSunday.Location = new System.Drawing.Point(199, 65);
+      this.cbSunday.Name = "cbSunday";
+      this.cbSunday.Size = new System.Drawing.Size(62, 17);
+      this.cbSunday.TabIndex = 6;
+      this.cbSunday.Text = "Sunday";
+      this.cbSunday.UseVisualStyleBackColor = true;
+      // 
+      // cbSaturday
+      // 
+      this.cbSaturday.AutoSize = true;
+      this.cbSaturday.Location = new System.Drawing.Point(122, 65);
+      this.cbSaturday.Name = "cbSaturday";
+      this.cbSaturday.Size = new System.Drawing.Size(68, 17);
+      this.cbSaturday.TabIndex = 5;
+      this.cbSaturday.Text = "Saturday";
+      this.cbSaturday.UseVisualStyleBackColor = true;
+      // 
+      // cbFriday
+      // 
+      this.cbFriday.AutoSize = true;
+      this.cbFriday.Location = new System.Drawing.Point(37, 65);
+      this.cbFriday.Name = "cbFriday";
+      this.cbFriday.Size = new System.Drawing.Size(54, 17);
+      this.cbFriday.TabIndex = 4;
+      this.cbFriday.Text = "Friday";
+      this.cbFriday.UseVisualStyleBackColor = true;
+      // 
+      // cbThursday
+      // 
+      this.cbThursday.AutoSize = true;
+      this.cbThursday.Location = new System.Drawing.Point(289, 40);
+      this.cbThursday.Name = "cbThursday";
+      this.cbThursday.Size = new System.Drawing.Size(70, 17);
+      this.cbThursday.TabIndex = 3;
+      this.cbThursday.Text = "Thursday";
+      this.cbThursday.UseVisualStyleBackColor = true;
+      // 
+      // cbWednesday
+      // 
+      this.cbWednesday.AutoSize = true;
+      this.cbWednesday.Location = new System.Drawing.Point(199, 42);
+      this.cbWednesday.Name = "cbWednesday";
+      this.cbWednesday.Size = new System.Drawing.Size(86, 17);
+      this.cbWednesday.TabIndex = 2;
+      this.cbWednesday.Text = "Wednesday ";
+      this.cbWednesday.UseVisualStyleBackColor = true;
+      // 
+      // cbTuesday
+      // 
+      this.cbTuesday.AutoSize = true;
+      this.cbTuesday.Location = new System.Drawing.Point(123, 42);
+      this.cbTuesday.Name = "cbTuesday";
+      this.cbTuesday.Size = new System.Drawing.Size(67, 17);
+      this.cbTuesday.TabIndex = 1;
+      this.cbTuesday.Text = "Tuesday";
+      this.cbTuesday.UseVisualStyleBackColor = true;
+      // 
+      // cbMonday
+      // 
+      this.cbMonday.AutoSize = true;
+      this.cbMonday.Location = new System.Drawing.Point(37, 42);
+      this.cbMonday.Name = "cbMonday";
+      this.cbMonday.Size = new System.Drawing.Size(64, 17);
+      this.cbMonday.TabIndex = 0;
+      this.cbMonday.Text = "Monday";
+      this.cbMonday.UseVisualStyleBackColor = true;
+      // 
+      // Recurrence
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(393, 243);
+      this.Controls.Add(this.gbWeekly);
+      this.Controls.Add(this.btCancelRecurrence);
+      this.Controls.Add(this.btSaveRecurrence);
+      this.Controls.Add(this.gbAppointment);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "Recurrence";
+      this.Text = "Recurrence";
+      this.gbAppointment.ResumeLayout(false);
+      this.gbAppointment.PerformLayout();
+      this.gbWeekly.ResumeLayout(false);
+      this.gbWeekly.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox gbAppointment;
+    private System.Windows.Forms.DateTimePicker dtpEnd;
+    private System.Windows.Forms.DateTimePicker dtpStart;
+    private System.Windows.Forms.Label label5;
+    private System.Windows.Forms.Label label6;
+    private System.Windows.Forms.Button btSaveRecurrence;
+    private System.Windows.Forms.Button btCancelRecurrence;
+    private System.Windows.Forms.DateTimePicker dtpFromTime;
+    private System.Windows.Forms.DateTimePicker dtpToTime;
+    private System.Windows.Forms.CheckBox chbade;
+    private System.Windows.Forms.GroupBox gbWeekly;
+    private System.Windows.Forms.CheckBox cbSunday;
+    private System.Windows.Forms.CheckBox cbSaturday;
+    private System.Windows.Forms.CheckBox cbFriday;
+    private System.Windows.Forms.CheckBox cbThursday;
+    private System.Windows.Forms.CheckBox cbWednesday;
+    private System.Windows.Forms.CheckBox cbTuesday;
+    private System.Windows.Forms.CheckBox cbMonday;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Recurrence.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Recurrence.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Recurrence.cs	(revision 7085)
@@ -0,0 +1,104 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Clients.Hive.Administrator.Views {
+
+  public partial class Recurrence : Form {
+
+    public ScheduleView.OnDialogClosedDelegate dialogClosedDelegate;
+
+    public Recurrence() {
+      InitializeComponent();
+    }
+
+    private void btCancelRecurrence_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+
+    private void btSaveRecurrence_Click(object sender, EventArgs e) {
+      DateTime dateFrom, dateTo;
+      HashSet<DayOfWeek> days = new HashSet<DayOfWeek>();
+
+      days = GetDays();
+
+      //check if valid
+      if (InputIsValid()) {
+        dateFrom = DateTime.Parse(dtpStart.Text + " " + dtpFromTime.Text);
+        dateTo = DateTime.Parse(dtpEnd.Text + " " + dtpToTime.Text);
+
+        RecurrentEvent recurrentEvent = new RecurrentEvent() {
+          DateFrom = dateFrom,
+          DateTo = dateTo,
+          AllDay = chbade.Checked,
+          WeekDays = days
+        };
+
+        //fire delegate and close the dialog
+        dialogClosedDelegate(recurrentEvent);
+        this.Close();
+      } else {
+        MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
+    }
+
+    private HashSet<DayOfWeek> GetDays() {
+      HashSet<DayOfWeek> days = new HashSet<DayOfWeek>();
+
+      if (cbMonday.Checked)
+        days.Add(DayOfWeek.Monday);
+      if (cbTuesday.Checked)
+        days.Add(DayOfWeek.Tuesday);
+      if (cbWednesday.Checked)
+        days.Add(DayOfWeek.Wednesday);
+      if (cbThursday.Checked)
+        days.Add(DayOfWeek.Thursday);
+      if (cbFriday.Checked)
+        days.Add(DayOfWeek.Friday);
+      if (cbSaturday.Checked)
+        days.Add(DayOfWeek.Saturday);
+      if (cbSunday.Checked)
+        days.Add(DayOfWeek.Sunday);
+
+      return days;
+    }
+
+    private bool InputIsValid() {
+      DateTime dateFrom, dateTo;
+
+      dateFrom = DateTime.Parse(dtpStart.Text + " " + dtpFromTime.Text);
+      dateTo = DateTime.Parse(dtpEnd.Text + " " + dtpToTime.Text);
+
+      if (chbade.Checked && dateFrom < dateTo) {
+        return true;
+      }
+
+      if (!chbade.Checked && dateFrom < dateTo && dateFrom.TimeOfDay < dateTo.TimeOfDay) {
+        return true;
+      }
+
+      return false;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Recurrence.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Recurrence.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Recurrence.resx	(revision 7085)
@@ -0,0 +1,1787 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAAAwMAAAAQAgAKglAABmFQAAQEAAAAEA
+        IAAoQgAADjsAAICAAAABACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR/gAbk/YAAAAAABuS9gAAAAAAGpD2AAAAAAAAAAAAAAAAABuQ
+        9QAAAAAAAAAAAByS9QAAAAAAAAAAAAAAAAAakfUAAAAAABuR9QIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJD2QAAAAAAAAAAAGo/4CBuR9f8akPVCAAAAABuT9gAAAAAAG5H1/xuR9YEbkPYUG5H1/xqR
+        9v8bkfX/G5H1/xuS9P8bkfX/GpH1QwAAAAAbkfX/G5H1eQAAAAAAAAAAAAAAABuR9cgbkPSjAAAAABuR
+        9f8dkfWZG5H1QRyR9kAbkfWrG5L1TwAAAAAAAAAAHJH1zhuR9p4AAAAAAAAAAAAAAAAckvaHG5H15QAA
+        AAAbkfXkHJH2hgAAAAAAAAAAAAAAAAAAAAAbkvUAAAAAABuS9YwbkfXiGpHzJhuS9TQbkfQwG5H1fhuR
+        9f8AAAAAG5L1qhuR9cUAAAAAHJD2AAAAAAAbkfYAAAAAAAAAAAAbkfVqG5H1/xuR9f8akfX/G5H1/xuR
+        9f8bkfX/GpLzFhuQ9n0bkfX/AAAAABiQ9gAAAAAAAAAAAAAAAAAAAAAAG5H2KRuR9f8ckfYcI5D3Ax+U
+        /AUAAAAAG5H1/xyR9VEckvVBG5H1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckfX/GpH1TgAA
+        AAAAAAAAAAAAABuR9esakfWBGI7xBhyR9f8akfQwAAAAAAAAAAAAAAAAAAAAABuS9QAAAAAAG5L1+huR
+        9YAAAAAAGpH1AAAAAAAbkfalG5H0ugAAAAAbkfX/HJL1bwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9ccbkfXIAAAAAAAAAAAAAAAAG5L17BuR9f8dkvMXG5H17BqR9Z0AAAAAAAAAAAAAAAAAAAAAAAAAABuR
+        9QEAAAAAAAAAABuR9QEbkfQAAAAAAB6P9w8akfXwAAAAAAAAAAAAAAAAG5H1AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9gAAAAAAAAAAABqR9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5L1AAAAAAAckvQAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//AAD//wAA//8AALyBAAC8mwAAnJ8AAJ6fAADA3wAA3t8AAN5fAADOXwAAzk8AAP9/
+        AAD//wAA//8AAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//////////////////////////////78fxwAPH8cABx/HAB8f5x+/H+Mf/5/jH/+f4
+        5//j+OP/4ADj/+AA4//j/GP/8/xj//H8c//x/HH/8f5x//H+cf/5/BH/+f4x///+P////3//////////
+        ////////////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpD2AByX+AAAAAAAAAAAABuT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2AByT9gAbkvcAHJL2AByS9wAAAAAAHJL3AAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL1AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAbkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJH2AByS9gIAAAAAHJH1TRuS
+        9v8bkfb/G5H1TgAAAAAAAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2AByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAek/YAAAAAABuR9ocbkvXlGpL2DgAAAAAakPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvUAAAAAABuR9hEbkvUuAAAAAByR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAakfgAHJL1AQAAAAAAAAAAHZH2ABuS9QAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR9gAckvUBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP//
+        /////wAA////////AAD///////8AAP///////wAA////////AAD//////x8AAMH/w8AADwAA4f/D4AAD
+        AADh/8HgAAMAAOH/4eAADwAA4f/h4f8fAADg/+Hh//8AAPD/4eD//wAA8P/h8P//AADw//Dw//8AAPD/
+        8PD//wAA8P/w8P//AADwAADw//8AAPgAAPD//wAA+AAAeH//AAD4AAB4f/8AAPg/+Hh//wAA+D/4eH//
+        AAD8P/h4f/8AAPw/+Hg//wAA/D/8PD//AAD8P/w8P/8AAPw//Dw//wAA/B/8PD//AAD+H/w8P/8AAP4f
+        +Awf/wAA/h/4Dh//AAD+H/weH/8AAP///h///wAA////P///AAD///8///8AAP///////wAA////////
+        AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AACgA
+        AABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/YAAAAAAB2T9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvcAAAAAAAAAAAAbk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqQ9gQbk/cUAAAAAEac7AAckvYAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9wAckvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AByS
+        9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2U9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZP2AAAAAAAAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2/xyR
+        9oEAAAAAAAAAAByS9gAfkPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9ikdk/crG5P3LhyS
+        9zEck/c0HJL3LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZb3ARyS9hQckvcSHZP3Eh2R9hIbkfcTIJX0BAAAAAAck/cAAAAAAAAAAAAAAAAAHJL2ExyQ
+        9hIckvUSHZP3EhyS9hIdkvYSHJL2Eh2T9xIdkfYSHZP3EhyU9xIck/YSHZH2EhyT9xIck/cSG5D2EhyT
+        9xIckfYSG5r9AhyS9/8ckvb/HJL2+hyS9kAAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAHZP2AAAA
+        AAAckvbSHJL2/xyS9v8ckvb/HZP2/xyS9v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvb/HJL2/xyS9v8ck/f/HZL2/xuS9ooAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9u4ck/b/HJL2/x2S9/8ck/f/HJP3/xyS9/8ckvb/HJP3/xyS9v8ckff/HJL2/xyT
+        9/8ckvb/HJL2/x2T9/8ckfb/HJL2/xyS9v8ckvb9HJL2/xyS9v0ckvb/HJL2xR+R+AcAAAAAAAAAAByS
+        9wAAAAAAAAAAAByS9gAAAAAAG5H3hh2T9v8ckvb+HJL2/hyS9v4ckvb/IZ3/AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9gAAAAAAHJL2zRyS9v8ckvb+HJL2/hyS
+        9v8ckfbAAAAAAAAAAAAAAAAAG5H1AAAAAAAckvevHJL1/xyS9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvf+HJL2/hyS9v4ck/b9HJL2/hyS9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyT
+        9v8ckvb/HJP1ggAAAAAAAAAAHZL2AAAAAAAAAAAAAAAAAB2S91Yckvb/HJL2/hyS9v4ckvb/HJL2/xyS
+        9ikAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdlPQAAAAAAByS
+        9pYckvb/HJL3/hyS9/4ckvf/HJL29AAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2fByS9v8ckvb+HJL2/hyS
+        9v8ckvf/HJL2/hyS9/4ckvf+HJL2/xyR9v8ckvb/HJL3/hyS9v8ckvf/HJP2/hyR9/8ckvb/HJL2/hyS
+        9v4ckvb/HJL3/xyS9v4ckvf+HZL2/hyS9/8ckvb/HZH1IQAAAAAAAAAAHJL2AAAAAAAakvQYHJL2/xyS
+        9v8ckvb+HJL2/xyS9v8bkvZXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvZhHJL2/xyS9v4ckvb+HJL2/hyS9v8dk/cJAAAAAAAAAAAAAAAAAAAAAB2S
+        9kwckvb/HJL2/hyS9v4ckvb/HJL2/xyS9v4ckvb+HJL2/hyS9v8ckfb/HJL2/xyS9/4ckvb/HJL2/xyT
+        9/4ckvb/HJL2/xyS9v4ckvb+HJL2/xyS9v8ckvb+HJL2/hyS9v8ckvb+HJL2RgAAAAAckvUAAAAAAAAA
+        AAAAAAAAAAAAAByS9v8dkvb+HJP2/hyS9f8ckvb/HZP2kQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        9v8dk/b+HZP2/hyS9v4dk/f/HZL3KwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJP2SxyS9v8ckvb+HJL2/hyS9v4ckvb/AAAAAAAAAAAAAAAAAAAAAAAA
+        AAAbkvaCHZL2/x2T9v4dk/b+HJL2/hyS9v8AAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvb/HJL2/xyS9/8ckvb/HZL3/RyS9/8ckvb/HJH2/xyS9v8ckvb/HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8ckvb+HJL2/xyS9v8ckvb/HJL2/xyS
+        9j0AAAAAAAAAAAAAAAAAAAAAHZP3TB2S9v8ckvb/HJL3/xyS9v8ckvf/HJL2DwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL26R2S9v8dkvb/HJL2/hyS9v4dkvb+HJH2/hyR
+        9v8ckfb/HZL2/hyR9v8ckfb/HJL2/hyR9v8ckfb/HJL2/h2S9v4dkvb/HZL2/xyS9v4ckvb+HZL2/hyR
+        9v8ckfb/HJH2/xyT9/8ckfVrAAAAAAAAAAAAAAAAAAAAABuR9R8ckvb/HZL2/x2S9v8ckvb+HJL2/xyS
+        9kUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAByS9q0ckvb/HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS9/4ckvb+HJL2/hyT9v0ckvb+HJL2/hyS9v4ckvb+HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS9v4ck/f/HJL2pwAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2/xyS
+        9v4ckvb+HJL2/hyS9v8ckvdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvZ+HJL2/xyS9/8ckvb+HJL3/hyS9/4ckvb/HJH2/xyS9v8ckvf+HJL2/xyS9/8ck/b+HJH3/xyS
+        9v8ckvb+HJL2/hyS9v8ckvf/HJL2/hyS9/4ckvf+HJL2/xyR9v8ckvb/HJL3/xyS9tIAAAAAHJL2AAAA
+        AAAAAAAAAAAAAByS9uYckvb/HJL3/xyS9v4ck/b/HJL1qAAAAAAdkvYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAG5L2QByS9v8ckvb/HJL2/hyS9v4dk/b+HJL2/xyR9v8ckvb/HJP2/xyS
+        9v8ckvb/HJP2/xyS9v8ckvb/HJL2/xyS9v8ck/b/HJP2/xyS9v8ckvb/HJP3/xyS9v0ckfb/HJL2/xyS
+        9/8ckvb/AAAAAAAAAAAdk/YAHJP3AAAAAAAckvesHJL2/xyS9v8ckvb+HJL2/xyS9tMAAAAAHJL2AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9hUckvb/HJL1/xyS9v4dkvb+HJL2/x2S
+        9rYckvd1HZL3eB2T93gck/Z4HZL3eByS9ngdkvd4HJP2eB2T93gdkvd4HJL3eByT93gdkvd4HJP2dx2R
+        944dk/b/HJH1/xyS9v8ck/f+HJL2/x6V+A0AAAAAAAAAAAAAAAAAAAAAHJL2fxyS9v8ckvX/HJL2/h2S
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbk/YAAAAAAByS9tcckvb/G5L2/hyS
+        9v8bkfVEAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAII34AAAA
+        AAAAAAAAHJL2/xyS9v8ckvbyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdkvcAAAAAABqR+CIckvb/G5L2agAAAAAck/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL2ABqS+AAAAAAAHJL2cCWU7gEAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YAHJL2AAAA
+        AAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////8//////////x/4H//A+AAAB/gf/8D4AAAB/B//wPwAAAD8H//g/AAAAfwP/+D8AAAD/A/
+        /4PwP/w/8D//gfA//P/4P/+B8D/9//g//8HwP///+D//wfg////4H//B+D////gf/8D4P///+B//wPgf
+        ///8H//A+B////wf/+D4H////AAAAPwf///8AAAA/B////wAAAB8H////gAAAHwP///+AAAAfA////4H
+        /+B+D////gf/8H4P///+B//wfg////4H//A+B////wf/8D4H////B//4Pgf///8H//g/B////wP/+D8H
+        ////A//4Hwf///8D//gfA////4P/+B8D////g//8HwP///+D//AHg////4H/8AeD////gf/4B4P////B
+        //wPg////////A/////////+H/////////8f/////////7//////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////8oAAAAgAAAAAABAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAIJX1AB2T9gIclvsAHYvvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOY9AAAAAAAAAAAAAAAAAAAAAAAHZL3AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuS9xgck/d9HZT4BwAAAAAAAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5P2ExyT9v8dkvfnHJP2VQAA
+        AAAAAAAAHZP2ARqR9gAdkvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvYSHJL39R2T9v8dkvf/HZL3shyS9yQAAAAAAAAAAB2S9wAdk/YAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI3xAB2T
+        9wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZT2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR9wAdk/YAAID/AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByV9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeT9wYck/f2HZL3/x2T
+        9/8dk/b/HJL3/xyT9oEck/UKAAAAAB+R9wEbk/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9kQdk/d5HZP3bh2T93Ick/d0HJP3dx2T
+        93kckvd8HZP3fhyT94AckveLHZP4RQAAAAAckvgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZT3Cx2T90AckvZHHJP3RR2S90Udk/dFHZP3RR2S90Udk/dFHZP3RRyS
+        90cdk/Y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByn7QAck/Y0HZL3SRyS
+        9kUdkvdFHJL2RR2T9kUdk/dFHZP3RR2T90Uck/dFHZP3RR2T90Uck/dFHZL3RR2T90Udk/dFHZL3RR2T
+        90Udk/dFHZP3RRyT90Udk/dFHJP2RR2T90UdkvdFHZP3RRyT90Udk/dFHJP3RR2T90UdkvdFHJL3RR2S
+        90Uck/dFHJL2RR2S90Udk/dCHJP3UxyT9/kdk/f/HZP2/hyS9/8dk/b/HZL3/x2S990ck/ZWAAAAAAAA
+        AAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2jR2T9/8dk/f/HZP2/x2T9v8dkvb/HZP3/x2T9/8dk/b/HZP3/xyS9/8dk/e0AAAAAByS
+        9wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/YXHJP21h2S
+        9/8ckvb6HZP3+h2T9/ockvb6HZP3+hyT9/odk/f6HZP3/RyS9u8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9qsckvf/HJP2+h2T9/odk/f6HJL2+h2S9/odk/f6HZP3+hyT
+        9/odk/f6HJP3+hyS9/odk/f6HZP3+hyS9vodk/f6HJP3+h2T9/ockvb6HJL3+h2S9/ock/b6HZL3+h2T
+        9/ock/f6HJL2+h2T9/ockvb6HZP3+h2T9/odk/f6HZL2+hyS9/ockvb6HZP3+hyT9/odkvb7HZP3/hyT
+        9/8dk/f/HJL2/x2S9/4ck/b6HZL2/xyT9/8ck/ezHJL2IgAAAAAAAAAAHpL3ABuT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI3xAAAAAAAdk/dZHJP2/xyS9/8dk/b/HJP3/xyS
+        9v8dkvf/HJP2/x2T9v8dk/b/HZP3/xyS9tMAAAAAHpT3AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvbBHZP3/x2S9/8dk/f/HZP3/x2S9v8dk/f/HZP3/x2T
+        9/8dkvb/HJP3/xyT9yMAAAAAHJP3AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACue8QAAAAAAHJL3jh2T
+        9v8dk/f/HZP3/x2T9/8dkvb/HZL3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZL2/x2T
+        9/8dk/f/HZP3/xyS9v8dkvf/HZL3/x2T9/8dkvf/HZP3/x2T9/8ckvb/HZP3/xyS9v8dk/f/HZP3/x2T
+        9/8dkvb/HZL3/x2S9/8dk/f/HJP2/xyS9v8dkvf/HZP2/h2S9v8dkvb/HZL2/xyT9/8ck/f+HZL2/x2S
+        9v8ckvf/HZL3gBuT9ggAAAAAAAAAAAAAAAAckvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9y4ckvf8HZP2/x2T9/8dk/f+HJL2/x2T9/4ckvb/HJL2/xyS9v8dkvb/HJP34xyU
+        +BYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95wck/b/HJL2/x2T9/4dk/f+HJL2/x2T9/4ckvb/HJL3/xyT9v8dkvf/HZL3VAAAAAAdkvcCAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/ZlHJL3/x2T9v8ckvb/HZP3/hyS9v8dk/f+HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8ckvb/HZP3/h2T9/4ckvb/HZP3/hyS9v8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS
+        9/8dk/f+HJL3/xyS9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8ckvb/HJL3/xyS9v8dk/f+HJL2/x2T
+        9/4ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8dk/f/HZP3/RyT9v8dk/b/HJL32xyT9lMAAAAAAAAAAAAA
+        AAAck/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxmNYAAH7/AByS9/Adk/b/HZP2/xyT
+        9v4dk/f/HZP3/h2T9v4dk/b+HZP3/hyS9v8dk/f2HZP3PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9QAAAAAAHZP3ax2T9v8dkvf/HJP3/h2T9/4dk/f/HZP3/h2T
+        9/4dk/f+HZP3/xyS9v8dk/aIAAAAAByT9gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T
+        9zsdk/f/HJL2/xyS9v4ck/b+HZP3/x2T9/4dk/b+HZP2/h2T9/4dk/f+HZP3/h2T9v4ck/f+HZP3/h2T
+        9/8dk/f+HZP3/h2T9/4dk/b/HJP3/h2T9v4ck/b+HZL3/x2T9/4dk/f+HJP2/x2T9/4dk/f/HZP3/hyT
+        9/4ck/b+HZP3/x2T9/4dk/f/HZP2/hyT9v4dk/f/HZP3/h2T9v4dk/b+HZP3/h2T9/4dk/f+HZP2/hyT
+        9/4dk/f+HZP2/hyS9v8dkvf/HZP2/x2T9rYdkvcrAAAAAAAAAAAek/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gIAAAAAHZP30RyS9v8dkvf+HZP2/x2S9/8dkvf/HZP2/x2T9v8dk/f/HZP3/x2S
+        9v8ck/ZdAAAAAB2S9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdkvZAHZL2/xyT9/8dk/f/HZP3/x2S9/8dk/f/HZP3/x2T9/8dk/f/HZP2/xyT97YAAAAAHZP2BQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2FRyS9vYdk/f/HZL2/x2T9v8dkvf/HZL3/x2T
+        9v8dk/b/HZP3/x2T9/8dk/f/HZL2/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyS9v8dkvf/HZL2/x2T
+        9v8dkvf/HZP3/x2T9/8ckvb/HZP3/xyS9/8dk/f/HZP3/x2T9v8dkvf/HZL3/x2S9/8dk/b/HZP2/x2S
+        9/8dkvf/HZP2/x2T9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9/8dkvf/HZP3/x2T9v4ckvf/HZP3/xyS
+        9vwdk/eEH5L2EAAAAAAWmP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3AQAAAAAdkvefHJP2/x2S
+        9/0ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvb/HJP2/x2S938AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9xIck/f8HZL2/xyT9/8dk/f+HJL3/x2T
+        9/4ckvf/HJL3/xyT9/4dkvb/HJP30gqT+AAgkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9QEAAAAAHZP36RyS9v8ckvb+HJP3/hyS9/8dk/f+HJL2/xyT9v8ckvf/HJL3/xyT9/8ckvb/HJP3/h2T
+        9/4ckvf/HZP3/hyS9/8ckvf/HJL2/xyS9/8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS9v8ckvf/HJL3/xyS
+        9/8ck/f+HJP3/hyS9/8ckvf/HJL3/xyS9v8ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvf/HJP3/xyS
+        9v8ck/f+HZP3/hyS9/8dk/f+HZL3/x2T9/8ckvf7HJP3/x2T9v8dkvaOAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAck/YAAAAAAByT9modkvf/HJP2/ByT9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyT
+        9v4dkvf/HJP2pgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAelPUBAAAAAByS9+Mdk/b/HJL3/h2T9/8dk/f/HZP3/x2T9/8dk/f/HZP3/h2S9/8ck/bpHJL2JgAA
+        AAAAqv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP3AgAAAAAdkva+HJP3/x2T9v0ck/f/HZP3/x2S
+        9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2S9/8ck/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL3/x2S
+        9/8ck/f/HZL3/x2T9/8dk/f/HJP3/x2T9/8dk/f/HZP3/xyT9/8ck/f/HZP3/x2S9/8dk/f/HZP3/xyT
+        9/8dk/f/HZL3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL3/xyT9/8dk/f/HZP3/x2T9v4dk/f+HZL2/xyT
+        9/8dk/fkHJL2VQAAAAAolP8AHZH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9gAAAAAAHJL2Ox2T
+        9/8ckvb6HZP3/hyS9v8dk/f+HJL2/xyT9v8ckvb/HJL2/x2T9v8ckvfJHJL3CwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP2sxyS9/8dk/f9HZP3/hyS
+        9v8dk/f+HJL2/xyS9/8ckvb/HJP3/x2S9v8dk/dIAAAAAByR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvYBAAAAAB2T95Mckvb/HZL3/B2T9/4ckvb/HZP3/hyS9v8ck/b/HJL2/xyS9v8ck/b/HJL2/x2T
+        9/4dk/f+HJL2/x2T9/4ckvb/HJL3/xyS9v8ckvb/HJL2/xyS9v8ckvb/HZP3/hyS9/8ckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/4ckvb/HJL2/xyS9v8ckvb/HZP3/hyS9v8dk/f+HJL2/xyT9v8ckvb/HJL2/xyT
+        9v8ckvb/HZP3/h2T9/8ckvb+HJL3/x2T9/8ck/f/HZL2kR2S9hIAAAAAH5L4AQBVuAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvcbHJL2+x2T9/4dk/f+HZL2/x2T9/4dk/b/HZP2/x2T
+        9v8dk/b/HJP3/x2T9vEdk/ccAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2AAAAAAAdk/Z9HJL3/x2T9vsdk/f+HZL2/x2T9/4dk/b/HZP3/xyS9v8dk/f/HZL2/xyT
+        924AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHJL2Yx2T9/8ckvb7HZP3/h2S
+        9v8dk/f+HZP2/x2T9v8dk/b/HZP2/x2T9/4dkvf/HZP3/R2T9/0dk/f9HZP3/R2T9/0dk/f9HZP3/R2S
+        9/0dkvf9HJP2/R2S9/0dk/f9HZP2/RyS9/0dk/b9HZL3/R2T9/0dk/f9HZP3/R2S9/0dkvf9HZP3/R2T
+        9/0dk/b9HZP2/R2S9/4dk/b/HZP2/x2T9v8dk/b/HZP2/x2S9/8ck/b/HZP3/RyS9/8dkvb/HJL2yRyS
+        9zcAAAAAAAAAAB+V9gAakfcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2U
+        9g4dk/bUHJL3/x2T9/4dk/b/HZP3/hyT9v8dkvb/HJP2/x2T9v8ckvb6HZP3/xyT9i4AAAAAGpP2AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cAAAAAAByT904dkvb/HJP3+h2T
+        9/4dk/b/HZP3/hyT9v8dk/f/HJP2/x2S9v4dk/f/HJL2lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZT3AAAAAAAdk/c4HJL3/x2T9vodk/f+HZP2/x2T9/4ck/b/HZL2/xyT9v8dk/b/HZL3/x2T
+        9v0dkvf/HZL3/x2S9/8dk/f/HZP3/x2T9/8ckvb/HJL2/x2S9v8dk/b/HJL3/x2T9/8dk/f/HJP2/xyT
+        9/8ck/b/HJP2/x2T9v8dk/b/HZP2/x2S9v8ck/b/HZL2/xyT9/8dkvb/HZP3/xyT9v4dkvb/HJP2/x2T
+        9v8dk/f/HJP3/h2S9/8dkvb/HJP3+hyT928AAAAAAAAAAB+V+gAAAAAAHpH2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT96kdkvb/HJP3/x2S9/8dk/f+HJL2/x2T
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6Q+QEAAAAAAAAAAAAAAAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvYDAAAAAByT9ngckvf/HJP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyS
+        9v8dk/f/HJL3kQAAAAAdk/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdkPgBAAAAAByT9tsckvf/HZL2/x2T9/4dk/f+HZP3/hyS9v8dk/f+HZL3/xyT9v8dkvf1HZH3HAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9g4dkvbeHZP3/x2S9v8dk/f+HZP3/h2T
+        9/4dk/f+HZP3/h2T9/4dk/b/HJL3+xyR9yYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAekPkAAAAAAByT
+        9wIdkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wEAAAAAHJL3QxyS
+        9/8ckvf+HZL3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HJL3/hyT9v8dkve2AAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wQAAAAAHJL2thyT9/8ckvb+HZP3/h2T
+        9/4dk/f+HJL2/x2S9/4dkvf+HJP3/xyS9v8dkvZLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/cEAAAAAB2S9sgdk/f/HZL2/h2S9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyS9/8dk/b/HZP2TQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZP2AAAAAAAdk/YVHZP3/x2T9/4dkvf/HZP2/x2T9v8dk/f/HZP3/x2T
+        9/8dkvb/HJL2/x2T99Adk/kOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL3AgAAAAAdk/aFHZL3/x2S9v4dk/f/HZP3/x2T9/8dk/b+HZL3/x2S9v8dk/b/HJP3/x2S
+        9nQAAAAAHJT3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9gQAAAAAHJP3pR2S9v8dk/f+HZL3/x2T
+        9v8dk/b/HZP3/x2T9/8dk/f/HZP2/xyS9v8ckvdxAAAAAB2T9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/bmHZP3/x2S9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2S9/8dkvb/HJP37hyS9yoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cBAAAAAByT91Ack/f/HJP3/R2T
+        9/8dk/f/HZP3/xyT9v8ckvf/HZL3/xyT9v4ckvb/HZP3nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2AwAAAAAckvZzHJL2/xyS9v4dkvf/HZP3/x2T9/8dk/f/HZP3/x2T9/8ckvb/HJP3/x2T
+        9poAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS97gckvb/HZL3/h2T9v8dk/b/HZP2/x2T
+        9v8dk/b/HZL2/x2T9/8ckvb/HZP3QQAAAAAZkfYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2IByS9v8ckvb9HZP3/h2T9v8dk/b/HZP2/x2S9v8dkvb/HZP2/h2S
+        9v8ck/e/HJb6AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cBAAAAAB2T90cdk/f/HZP3/h2S
+        9/4dk/b/HZP2/x2T9v8dk/b/HZP2/xyS9v4ckvb/HJL3tgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL2jByT9/8dk/f+HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL2/hyS9v8dk/dhAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvYHHZL28x2S
+        9v8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJP3/x2S9t8ckvYaAAAAADOZ/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuS9gAAAAAAHJL2GRyS9v8ckvb+HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZP3/xyT
+        9v8dkvfOHZP3DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/dbHZL2/x2S9/8dk/b/HZP2/x2T
+        9/8dk/f/HZP3/x2S9v8ck/f+HZP2/xyS95EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvfCHJP2/x2T9/8dk/f/HZP3/xyS9v8ckvf/HZL2/xyT
+        9v8dkvf/HJP2/x2S9zMAAAAAGZP0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL27hyS
+        9v8dkvf/HZP2/x2T9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9ukdkvYlAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAij/UAAAAAAByT9z0dkvb/HZP3/xyT9v8dk/b/HJP3/x2T9/8ck/f/HJL2/x2T9/4dk/f/HZP2ugAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95gck/b/HZP3/hyT9/8dk/f/HJP2/xyS9/8dkvb/HJP2/x2T9/4ckvf/HZP2UQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAakvYAAAAAAAAAAAAck/bDHJL3/x2T9/4ck/b/HZP2/xyT9/8dk/f/HJP3/xyS
+        9v8dk/f/HJP2/x2S9zsAAAAAHZP2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACq/gAAAAAAHZL2IByS9uQdk/f/HZP2/x2T
+        9v8dk/b/HZP2/x2T9v8dkvb/HZP3/hyS9/8ckvfqF4T/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL3aByT9v8ck/b/HZP2/x2T9/8ckvb/HZL2/x2S
+        9v8dk/b/HJL3/h2S9/8ck/aFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95Qck/b/HZL3/x2T9v8dk/b/HZP2/x2T9v8dk/b/HZL2/x2T9/4ck/b/HZL3WwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdlfkGHZP3yByS9v8dk/b+HZP2/xyT9v8dk/b/HJP2/xyS9v8ck/f+HJL3/hyS
+        9/8bkvcSAAAAABqR9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL3AAAA
+        AAAck/ZHHZL3/x2T9/8ck/b/HZP2/xyS9v8ckvb/HZL2/xyT9v8ckvb/HZP2/xyS97QAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3ah2T9v8dk/f+HJP2/x2T9v8ck/b/HZP2/xyT
+        9v8ckvb/HJP3/h2S9v8ck/eDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/asHZL3/x2S
+        9v4dk/f+HZP3/h2T9/4dk/f+HZL3/hyT9/4ck/b+HJP2/xyT9j8AAAAAHJP2AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9ysdk/btHJL3/x2T9/4dk/f+HJL2/xyS
+        9/4dkvf+HJP3/h2S9/8ck/f/HZL25QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAck/ZHHZL3/x2S9/8dk/f+HZP3/h2T9/4dk/f+HZP3/h2S9/4ck/f/HZP2/xyS96sAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdk/gAAAAAAByS9oEdk/f/HZP2/x2T9v8dk/b/HZP2/x2T9v8dkvb/HJP2/x2T
+        9/4dk/f/HZL3cQAAAAAdk/cDHZP3AByT9wAdk/YAHJL3AB+V8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGpn2BxyT9s8dkvf/HZP2/x2T9/8dk/b/HJL2/x2S9v8ck/b/HZL3/xyS9v8dk/f/HpP3EgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAakvgAAAAAAB2T9iwckvfxHZL3/x2T9v8dk/b/HZP2/x2T
+        9v8dk/b/HZL2/xyT9v8ckvf/HZL22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2Vh2S
+        9/8dk/f/HZP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/h2T9/8dk/ecAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfmPkEH5v5BB+a+QQfmvkEH5r5BCCd
+        +gQdkfcIHo/zCx6P8wsej/MLHo/zCx6P8woekPQLHpL4EB6Q+A84hP8AHZP3uxyS9v8dk/f+HZP3/hyS
+        9v8dk/f+HZP3/h2T9/4ckvf/HZP2/xyS9/8ckvdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2FByT9tYdkvf/HZP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyT9/8ck/f/GpT3BgAA
+        AAAPmvcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YnHZP2/ByS9/8dk/f/HZP3/x2T9/8dk/f/HZP3/xyT
+        9/8dk/f/HZP3/x2T9/4dk/fxHZP3+B2T9/kckvf4HZL2+B2T9vgckvf4HJL2+R2T9vkdk/b5HZP2+R2T
+        9vkdk/b5HZP2+R2T9/odk/f6HZP3+h2T9/odk/f6HZP3+h2S9/sdkvb7HZL2+x2S9vsdkvb7HZL2+x2S
+        9vsdkvf8HZL3/B2S9/odkvf8HJP2/x2T9/8dk/f/HJL2/xyT9/8dk/f/HJP3/x2S9/8ck/f/HZL2/xyS
+        9nUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3uB2S9v8dk/f+HZP3/x2T
+        9/8dk/f/HZP3/x2T9/8ck/f/HJP3/hyT9/8ck/YtAAAAAByT9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZHvAAAA
+        AAAck/fyHZL2/x2T9v8ckvf/HZL3/xyT9/8ckvb/HJL3/x2S9/8dkvf+HZP3/xyS9/8ckvb/HZP3/xyS
+        9/8dkvb/HJL3/x2T9v8dk/f/HJL3/xyS9/8ckvf/HJL3/xyS9/8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS
+        9v8ckvb/HJP2/xyT9/8ck/f/HJP3/xyT9/8ck/f/HJP3/xyT9v8ck/b/HJP2/xyS9v8dkvf+HJL3/x2S
+        9/8ckvb/HJL3/x2S9v8ckvb/HZL3/x2S9/8ckvb/HZP3pQAAAAAbjfMAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdk/eaHZL2/x2S9v8dk/b/HJL3/x2S9/8ck/f/HJL2/xyS9/8dkvf+HZL3/x2S
+        91kAAAAAHZL3AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YBAAAAAByS980dk/b/HZP3/h2S9/8dkvf/HZP3/x2S
+        9/8dk/f+HZP3/hyS9v8dk/f+HZL3/h2S9/4ckvb/HZL3/x2S9/8dkvf/HJL3/x2T9/4dkvf/HJL2/x2S
+        9/8ckvb/HZL3/x2T9/4dk/f+HJL2/x2S9/8ckvf/HZL3/x2T9/4ckvb/HZP3/h2S9/8dk/f/HZL3/x2S
+        9/8dk/f/HZL3/x2T9/4dk/f+HJL2/x2T9/4dkvf/HZL3/xyS9v8dkvf/HZL3/x2S9/8ckvf/HZP3/hyT
+        9/8dkvbHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdm/8AAAAAAByS9nMdk/f/HJP2/x2T
+        9/8dkvf/HZL3/x2T9/8dkvf/HZP3/h2T9v4ck/b/HZL3gwAAAAAck/YDAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9wEAAAAAHZP2mByS9/8dk/f8HZL2/x2S9v8dkvb/HZL2/xyS9v8dkvb/HJL2/x2S9v8dkvb/HZL3/xyS
+        9v8ckvb/HZL2/xyS9v8ckvf/HZL2/x2S9/8ckvb/HZL2/xyS9v8dkvb/HJL2/xyS9v8ckvb/HZL2/xyS
+        9v8dkvb/HJL2/xyS9v8dkvb/HZL2/x2S9v8dkvb/HZL2/x2S9v8dkvb/HJL2/x2S9v8ckvb/HZL2/x2S
+        9v8dkvf/HJL2/xyS9v8dkvb/HJL2/xyS9/8dk/f+HZP3/xyS9t8ckvYYAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZL2Rh2S9v8ck/f/HZL2/x2S9v8dkvb/HZL2/x2S9v8ckvb/HZP3/h2S
+        9/8ck/a0AAAAAB2S9wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2AAAAAAAckvZpHZP3/xyS9vsckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/4ckvb/HZP3/hyS9v8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS
+        9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8ckvb/HJL3/xyS9v8dk/f+HJL2/x2T9/4ckvb/HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8dk/f+HJL2/xyS9/8ckvb/HJL2/xyS9v8ckvb/HJL3/x2T
+        9/4dk/f/HJP29B2S9zYAAAAAHJf2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cdHJP3+x2S
+        9v8ck/b/HJL2/xyS9v8ckvb/HJL2/x2T9/4dk/b/HZL2/xyT99AAAAAAHZL2AgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAaj/UAAAAAAByS9jYdk/f/HJL2+h2T9/4dk/f+HZP3/h2T9v4ck/f+HZP3/h2T9/8dk/f+HZP3/h2T
+        9/4dk/b/HJP3/h2T9v4ck/b+HZL3/x2T9/4dk/f+HJP2/x2T9/4dk/f/HZP3/hyT9/4ck/b+HZP3/x2T
+        9/4dk/f/HZP2/hyT9v4dk/f/HZP3/h2T9v4dk/b+HZP3/h2T9/4dk/f+HZP2/hyT9/4dk/f+HZP3/x2T
+        9/4dk/f+HZP3/h2T9v8ck/f+HZP2/hyT9v4dkvf/HZP3/hyT9/8ckvf/HZP2WAAAAAAbjPcAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAH5H1AQAAAAAck/fsHZL2/x2T9v4dk/f+HZP3/h2T9/4dk/b+HJP3/h2T
+        9/8ck/b/HZL35B2S9xsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3HhyS9vgdk/f/HZP3/x2T
+        9/8dk/f/HZL2/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyS9v8dkvf/HZL2/x2T9v8dkvf/HZP3/x2T
+        9/8ckvb/HZP3/xyS9/8dk/f/HZP3/x2T9v8dkvf/HZL3/x2S9/8dk/b/HZP2/x2S9/8dkvf/HZP2/x2T
+        9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9/8dkvf/HZP3/x2T9/8dk/f/HJL2/x2S9/8dkvb/HZP2/x2S
+        9/8dk/f/HJL3/h2S9/8ck/Z6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cBAAAAAB2S
+        9sQck/f/HZP2/R2T9/8dk/f/HZP3/x2S9v8dk/f/HZP3/x2T9/8ck/b1HZL2OgAAAAAVlf8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGo/2AAAAAAAdkvYPHZP30RyS9v8ckvf/HJL3/xyT9/8ckvb/HJP3/h2T9/4ckvf/HZP3/hyS
+        9/8ckvf/HJL2/xyS9/8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS9v8ckvf/HJL3/xyS9/8ck/f+HJP3/hyS
+        9/8ckvf/HJL3/xyS9v8ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvf/HJP3/xyS9v8ck/f+HZP3/hyS
+        9/8dk/f+HJL3/xyS9/8ckvb/HJL3/xyS9v8ckvb/HJL3/x2T9/4dk/f/HZP2/xyS96IAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9gAAAAAAHJL3lR2T9v8ckvb8HJL3/xyS9/8ck/f/HJL2/xyT
+        9/4dk/f+HJP2/x2S9v8ck/dZAAAAAB+S9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckveoHZP2/xyT
+        9/4dk/f/HZP3/x2S9/8ck/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL3/x2S9/8ck/f/HZL3/x2T
+        9/8dk/f/HJP3/x2T9/8dk/f/HZP3/xyT9/8ck/f/HZP3/x2S9/8dk/f/HZP3/xyT9/8dk/f/HZL3/x2T
+        9/8dk/f/HZP3/x2T9/8dk/f/HZL3/xyT9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8ckvf/HZL3/xyT
+        9/8dkvf/HZP3/x2T9/8ckvf/HZP2zh2S9gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3AAAA
+        AAAdk/dkHJL3/x2T9/sdk/f/HZP3/x2T9/8dkvf/HJP3/x2T9/8dk/f/HJL3/x2T9n0AAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9oQdkvf/HJP3/hyS9v8ck/b/HJL2/x2T9/4dk/f+HJL2/x2T
+        9/4dk/b+HZP3/xyS9v8ckvb/HZL2/xyT9v8ckvb/HZP3/xyT9v8ckvb/HJP2/xyS9v8ck/b/HZP3/x2T
+        9v8ckvb/HJL2/xyS9v8dk/b/HZP2/xyS9v8dkvf/HJP2/x2T9v8ck/b/HZP2/xyT9v8ckvb/HZP3/x2T
+        9/8ckvb/HZP3/xyT9/8dkvf+HJP2/hyS9v8ckvb/HJL2/xyS9v8dk/f+HJL3/xyS9v8dk/f2HJL2DQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbk/cAAAAAAByT9jgdkvf/HJP2+hyS9v8ckvb/HJP2/xyS
+        9v8dk/f+HZP3/hyS9v4ck/f/HZL2nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP3XByT
+        9/8dkvb/HZP2/x2T9v8dkvb/HZP3/h2T9/4dkvb/HZP3/h2T9/8dkvb8HZL22x2T990dkvfdHZP33R2S
+        990dk/fdHZP33RyT9t0dk/fdHZP33R2T990dk/fdHZP33R2T990dkvfdHZP23R2T990dk/fdHZP33R2S
+        990dk/fdHZP33R2T990dk/fdHZP33R2S990dk/fdHZP33R2T9t0dkvfaHZL38R2T9v8dk/f+HJL2/x2S
+        9v8ck/b/HZL3/x2T9/4dk/f/HZP3+xyS9v8dk/cpAAAAAB2U9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2Hh2T9/gckvb/HZP2/x2T9v8dk/b/HZL2/x2T9/4dk/f+HZL2/x2S9v8ck/fGHJL3CQAA
+        AAAkkv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJf2AAAAAAAdkvY5HZL29RyT9/8dk/b/HJL2/xyS9v8dk/f+HZP3/h2T
+        9v8dk/f+HJL2/x2T9/Mck/ceHJL2FRyT9xYckvcWHJP2Fh2T9xYck/YWHZP3FhyT9hYckvYWHJL2Fh2S
+        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
+        AAAAAAAAAAAAACGT/QAAAAAAHJL2aB2T9/8dk/f/HJL2/xyT9v8ckvb/HJP2/x2T9v8ckvb/HJL2/B2S
+        9/8ck/aLAAAAAByS9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AgAAAAAdk/dwHZL3/x2T9/4ck/f/HJL2/x2T
+        9/4dk/f+HZL3/x2T9/4ck/b+HZL2/xyT96QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL2BAAAAAAdk/fLHJL2/xyT9/4dkvb/HJL2/x2S9/8dk/f+HJL3/xyS
+        9v8ckvb/HZP27hyU9h8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJHyAAAAAAAdk/dCHJL2+R2T
+        9/8dkvf/HJP3/xyS9v8dk/f+HZP3/h2S9/8dk/f+HZP2/xyS98UAAAAAHZP2AgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvYBAAAAAByS9kEckvb/HJL2/hyT9v8ckvb/HZP3/h2T9/4dkvb/HZP3/h2T9/4ck/f/HZL3vx2E
+        9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cDAAAAAByS
+        9qAdk/f/HJP2/h2S9v8ckvb/HZL3/x2T9/4ckvb/HJL2/x2T9/8dkvf6HJL2RgAAAAAkkv8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9iEdk/bpHJL3/x2S9/8ck/b/HJL2/x2T9/4dk/f+HZL2/x2T
+        9/4dk/b/HJL37QAAAAAhlvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6V+gAAAAAAHZP4EB2T9/8ckvf+HZP2/x2S
+        9v8dk/f+HZP3/h2S9v8dk/f+HZP2/xyT9v8ckvfdHZL2GgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9wIAAAAAHZL3bhyT9v8dkvf9HZL2/x2T9v8dkvf/HZP3/h2T
+        9/8ckvb/HZP3/xyT9v8dkvdxAAAAABmV8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YBAAAAAByS
+        99Ydk/b/HZP2/x2T9v8dkvb/HZP3/h2T9/4dkvb/HZP3/x2T9/8ckvb7HJL2KQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckfYBHJL25B2T9v8dk/f/HZL2/xyT9/8dk/f/HZP3/x2T9/8dk/f/HZL3/x2T
+        9vkck/cvAAAAAB2R9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP2AQAA
+        AAAck/ZCHZL3/xyT9vwdkvb/HJP2/x2S9/8dk/f/HZP3/xyT9v8dk/f/HZL3/xyT9pUAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9gUAAAAAHJL3uh2T9v8ckvb+HZP3/x2S9v8ck/f/HZP3/x2T
+        9/8dk/f/HJL3/x2T9/8dk/ZWAAAAAB6U9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAglfkAAAAAAAAAAAAdk/a5HJL3/x2T
+        9/4dk/f+HZP3/h2T9/4dkvb/HZP3/h2T9/4ckvf/HJP3/x2S9kUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdlvkAAAAAAB2T9xkckvb/HZP3/B2T9/4dk/f+HZL3/x2T
+        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
+        AAAAAAAAAAAAABaO8QAAAAAAHZP3TxyS9v8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL2/ByT
+        9/8dkvacAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSS/gAAAAAAAAAAAB2S96wckvf/HZP3/x2T
+        9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8ck/b/HZL3TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2sRyS9/8dk/b+HJP3/x2T9/8dkvb/HZP3/x2T9/8dk/f/HZP3/xyS9v8ckvZDAAAAAByS
+        9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIpn/AAAAAAAckvYwHZP38B2S
+        9/8ck/b/HZL3/x2T9/8dk/f/HJL2/x2T9/8dkvb9HZP3/xyS9s8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL2fh2T9/8dkvf+HZL2/xyT9/8dk/f/HZL2/x2T9/8dk/f/HZP3/hyT
+        9v8dkvd6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGW+Agdk/eUHJL2rx2T
+        96gdk/eoHZP2qB2T96gck/eoHJP2qB2S96gdkvauHJP3kgAAAAAejvYCAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP2RxyS9v8dk/b/HZP3/hyT9/8ckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/8ckvb/HZL3/xyT9kMAAAAAHZH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR
+        9gYckveCHZP3rhyT96gdk/eoHZP3qB2T9qgdk/eoHJP3qByT9qgckvanHJP3qR2T9hIAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdlPYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGpr3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AAAA
+        AAAAAAAAHJL3cx2S9/8ck/b/HZL3/xyS9v8dk/b/HJL2/x2T9v8dk/f+HJP3/hyS9v8dk/fCAAAAAByS
+        9wMamfIAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACua/gAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfivYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAglfQAHJL2ABuS0QAAAAAAHJP3rB2S9v8ck/f9HJP2/hyT
+        9v8ck/b/HJP2/x2T9/4dkvb8HZP3/xyT9kwAAAAAHZP2AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP3AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL4AAAAAAAgjfgEHJP32x2T9v8ckvb+HJP3/xyS9/8ckvf/HJP3/h2T9/8ckvbVAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL1AAAAAAAdkvcvHJL2+xyT
+        9v8dk/b+HJP2/xyT9/4dkvb/HJP3/xyS9mwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACuA/wAAAAAAHZX2AAAAAAAdkvdhHZP2/xyT9/8ckvb+HZL3/hyT9/8dkvbmHZP3GAAA
+        AAAdkfUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAAAA
+        AAAck/eZHZL2/xyT9/4ck/b/HJP3/x2S9owAAAAAG5T6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvYAAAAAABWU/AIckvfMHZP2/x2S9v8ck/f/HJP2GgAA
+        AAAekPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuU
+        +AAdkvYBAAAAAByT9xockvbuHZL3/xyS9qIAAAAAHpL3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9wAdk/YBAAAAAB2T904ck/f/HZP2NgAA
+        AAAZlPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9kYckvYOAAAAAByS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wAAAAAAAAAAAAAA
+        AAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2S/wAdkvYAHJL1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////////////////P////////////////////w
+        ////////////////////8D////5///////////////Af//wAP////wAf/AAAAAAAB//+AD////8AH/wA
+        AAAAAAH//gA/////AB/+AAAAAAAA//4AP////4AP/gAAAAAAAD/+AD////+AD/4AAAAAAAAP/gA/////
+        gA/+AAAAAAAAB/8AH////4AP/gAAAAAAAB//AB////+AD/4AAAAAAAA//wAf////wA//AAAAAAAA//8A
+        H////8AH/wAAAAAAA///AB/////AB/8ACD//8Af//wAP////wAf/AB////Af//+AD////8AH/wAf///w
+        P///gA/////AB/8AD///8P///4AP////4AP/gA////P///+AD////+AD/4AP///3////gA/////gA/+A
+        D////////8AH////4AP/gA/////////AB////+AD/4AP////////wAf////gA/+AD////////8AH////
+        8AH/wAf////////AB/////AB/8AH////////wAf////wAf/AB////////+AD////8AH/wAf////////g
+        A/////AB/8AH////////4AP////4AP/AB////////+AD////+AD/4AP////////gA/////gA/+AD////
+        ////4AP////4AP/gA/////////AB////+AD/4AP////////wAAAAAAAA/+AD////////8AAAAAAAAH/g
+        A/////////AAAAAAAAB/8AH////////wAAAAAAAAf/AB////////+AAAAAAAAH/wAf////////gAAAAA
+        AAB/8AH////////4AAAAAAAAf/AB////////+AAAAAAAAD/wAf////////gAAAAAAAA/+AH////////4
+        AAAAAAAAP/gA/////////AAAAAAAAD/4AP////////wAf////gA/+AD////////8AH////8AH/gA////
+        /////AB/////AB/4AP////////wAf////wAf/AB////////+AD////8AH/wAf////////gA/////AB/8
+        AH////////4AP////4Af/AB////////+AD////+AD/wAf////////gA/////gA/8AD////////4AP///
+        /4AP/gA/////////AB////+AD/4AP////////wAf////gA/+AD////////8AH////8AP/gA/////////
+        AB/////AB/4AP////////wAf////wAf/AD////////8AH////8AH/wAf////////gA/////AB/8AH///
+        /////4AP////wAf/AB////////+AD////+AD/wAf////////gA/////gA/8AH////////4AP////4AP/
+        AB/////////AD////+AD/4AP////////wAf////gA/+AD////////8AH////4AP/gA/////////AB///
+        /gAAH4AP////////wAf///8AAD+AD////////8AH////gAA/wA/////////gB////4AAP8AH////////
+        4AP////AAH/AB////////+AD////4AB/wAf////////gA/////AA/8AH///////////////4AP//////
+        ////////////+AH///////////////////wB///////////////////+A////////////////////wP/
+        //////////////////8D////////////////////h////////////////////8f/////////////////
+        ///v////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////
+</value>
+  </data>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs	(revision 7085)
@@ -0,0 +1,267 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Clients.Hive.Administrator.Views {
+  partial class ResourcesView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ResourcesView));
+      this.imageListSlaveGroups = new System.Windows.Forms.ImageList(this.components);
+      this.splitSlaves = new System.Windows.Forms.SplitContainer();
+      this.btnRefresh = new System.Windows.Forms.Button();
+      this.progressBar = new System.Windows.Forms.ProgressBar();
+      this.btnSave = new System.Windows.Forms.Button();
+      this.btnRemoveGroup = new System.Windows.Forms.Button();
+      this.btnAddGroup = new System.Windows.Forms.Button();
+      this.treeSlaveGroup = new System.Windows.Forms.TreeView();
+      this.tabSlaveGroup = new System.Windows.Forms.TabControl();
+      this.tabDetails = new System.Windows.Forms.TabPage();
+      this.slaveView = new HeuristicLab.Clients.Hive.Administrator.Views.SlaveView();
+      this.tabSchedule = new System.Windows.Forms.TabPage();
+      this.scheduleView = new HeuristicLab.Clients.Hive.Administrator.Views.ScheduleView();
+      ((System.ComponentModel.ISupportInitialize)(this.splitSlaves)).BeginInit();
+      this.splitSlaves.Panel1.SuspendLayout();
+      this.splitSlaves.Panel2.SuspendLayout();
+      this.splitSlaves.SuspendLayout();
+      this.tabSlaveGroup.SuspendLayout();
+      this.tabDetails.SuspendLayout();
+      this.tabSchedule.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // imageListSlaveGroups
+      // 
+      this.imageListSlaveGroups.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
+      this.imageListSlaveGroups.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageListSlaveGroups.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // splitSlaves
+      // 
+      this.splitSlaves.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.splitSlaves.Location = new System.Drawing.Point(3, 3);
+      this.splitSlaves.Name = "splitSlaves";
+      // 
+      // splitSlaves.Panel1
+      // 
+      this.splitSlaves.Panel1.Controls.Add(this.btnRefresh);
+      this.splitSlaves.Panel1.Controls.Add(this.progressBar);
+      this.splitSlaves.Panel1.Controls.Add(this.btnSave);
+      this.splitSlaves.Panel1.Controls.Add(this.btnRemoveGroup);
+      this.splitSlaves.Panel1.Controls.Add(this.btnAddGroup);
+      this.splitSlaves.Panel1.Controls.Add(this.treeSlaveGroup);
+      // 
+      // splitSlaves.Panel2
+      // 
+      this.splitSlaves.Panel2.Controls.Add(this.tabSlaveGroup);
+      this.splitSlaves.Size = new System.Drawing.Size(847, 547);
+      this.splitSlaves.SplitterDistance = 249;
+      this.splitSlaves.TabIndex = 3;
+      // 
+      // btnRefresh
+      // 
+      this.btnRefresh.Image = ((System.Drawing.Image)(resources.GetObject("btnRefresh.Image")));
+      this.btnRefresh.Location = new System.Drawing.Point(3, 3);
+      this.btnRefresh.Name = "btnRefresh";
+      this.btnRefresh.Size = new System.Drawing.Size(24, 24);
+      this.btnRefresh.TabIndex = 8;
+      this.btnRefresh.UseVisualStyleBackColor = true;
+      this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);
+      // 
+      // progressBar
+      // 
+      this.progressBar.Location = new System.Drawing.Point(123, 4);
+      this.progressBar.Name = "progressBar";
+      this.progressBar.Size = new System.Drawing.Size(123, 23);
+      this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
+      this.progressBar.TabIndex = 7;
+      // 
+      // btnSave
+      // 
+      this.btnSave.Image = ((System.Drawing.Image)(resources.GetObject("btnSave.Image")));
+      this.btnSave.Location = new System.Drawing.Point(93, 3);
+      this.btnSave.Name = "btnSave";
+      this.btnSave.Size = new System.Drawing.Size(24, 24);
+      this.btnSave.TabIndex = 5;
+      this.btnSave.UseVisualStyleBackColor = true;
+      this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
+      // 
+      // btnRemoveGroup
+      // 
+      this.btnRemoveGroup.Image = ((System.Drawing.Image)(resources.GetObject("btnRemoveGroup.Image")));
+      this.btnRemoveGroup.Location = new System.Drawing.Point(63, 3);
+      this.btnRemoveGroup.Name = "btnRemoveGroup";
+      this.btnRemoveGroup.Size = new System.Drawing.Size(24, 24);
+      this.btnRemoveGroup.TabIndex = 2;
+      this.btnRemoveGroup.UseVisualStyleBackColor = true;
+      this.btnRemoveGroup.Click += new System.EventHandler(this.btnRemoveGroup_Click);
+      // 
+      // btnAddGroup
+      // 
+      this.btnAddGroup.Image = ((System.Drawing.Image)(resources.GetObject("btnAddGroup.Image")));
+      this.btnAddGroup.Location = new System.Drawing.Point(33, 3);
+      this.btnAddGroup.Name = "btnAddGroup";
+      this.btnAddGroup.Size = new System.Drawing.Size(24, 24);
+      this.btnAddGroup.TabIndex = 1;
+      this.btnAddGroup.UseVisualStyleBackColor = true;
+      this.btnAddGroup.Click += new System.EventHandler(this.btnAddGroup_Click);
+      // 
+      // treeSlaveGroup
+      // 
+      this.treeSlaveGroup.AllowDrop = true;
+      this.treeSlaveGroup.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.treeSlaveGroup.ImageIndex = 0;
+      this.treeSlaveGroup.ImageList = this.imageListSlaveGroups;
+      this.treeSlaveGroup.Location = new System.Drawing.Point(3, 33);
+      this.treeSlaveGroup.Name = "treeSlaveGroup";
+      this.treeSlaveGroup.SelectedImageIndex = 0;
+      this.treeSlaveGroup.Size = new System.Drawing.Size(243, 511);
+      this.treeSlaveGroup.TabIndex = 0;
+      this.treeSlaveGroup.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeSlaveGroup_ItemDrag);
+      this.treeSlaveGroup.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeSlaveGroup_NodeMouseClick);
+      this.treeSlaveGroup.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeSlaveGroup_DragDrop);
+      this.treeSlaveGroup.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeSlaveGroup_DragEnter);
+      this.treeSlaveGroup.DragOver += new System.Windows.Forms.DragEventHandler(this.treeSlaveGroup_DragOver);
+      this.treeSlaveGroup.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.treeSlaveGroup_QueryContinueDrag);
+      // 
+      // tabSlaveGroup
+      // 
+      this.tabSlaveGroup.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabSlaveGroup.Controls.Add(this.tabDetails);
+      this.tabSlaveGroup.Controls.Add(this.tabSchedule);
+      this.tabSlaveGroup.Location = new System.Drawing.Point(3, 3);
+      this.tabSlaveGroup.Name = "tabSlaveGroup";
+      this.tabSlaveGroup.SelectedIndex = 0;
+      this.tabSlaveGroup.Size = new System.Drawing.Size(585, 541);
+      this.tabSlaveGroup.TabIndex = 1;
+      this.tabSlaveGroup.SelectedIndexChanged += new System.EventHandler(this.tabSlaveGroup_SelectedIndexChanged);
+      // 
+      // tabDetails
+      // 
+      this.tabDetails.Controls.Add(this.slaveView);
+      this.tabDetails.Location = new System.Drawing.Point(4, 22);
+      this.tabDetails.Name = "tabDetails";
+      this.tabDetails.Padding = new System.Windows.Forms.Padding(3);
+      this.tabDetails.Size = new System.Drawing.Size(577, 515);
+      this.tabDetails.TabIndex = 0;
+      this.tabDetails.Text = "Details";
+      this.tabDetails.UseVisualStyleBackColor = true;
+      // 
+      // slaveView
+      // 
+      this.slaveView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.slaveView.Caption = "SlaveView";
+      this.slaveView.Content = null;
+      this.slaveView.Location = new System.Drawing.Point(7, 7);
+      this.slaveView.Name = "slaveView";
+      this.slaveView.ReadOnly = false;
+      this.slaveView.Size = new System.Drawing.Size(564, 502);
+      this.slaveView.TabIndex = 0;
+      // 
+      // tabSchedule
+      // 
+      this.tabSchedule.Controls.Add(this.scheduleView);
+      this.tabSchedule.Location = new System.Drawing.Point(4, 22);
+      this.tabSchedule.Name = "tabSchedule";
+      this.tabSchedule.Padding = new System.Windows.Forms.Padding(3);
+      this.tabSchedule.Size = new System.Drawing.Size(577, 515);
+      this.tabSchedule.TabIndex = 1;
+      this.tabSchedule.Text = "Schedule";
+      this.tabSchedule.UseVisualStyleBackColor = true;
+      // 
+      // scheduleView
+      // 
+      this.scheduleView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.scheduleView.Caption = "ScheduleView";
+      this.scheduleView.Content = null;
+      this.scheduleView.Location = new System.Drawing.Point(3, 8);
+      this.scheduleView.Name = "scheduleView";
+      this.scheduleView.ReadOnly = false;
+      this.scheduleView.Size = new System.Drawing.Size(568, 501);
+      this.scheduleView.TabIndex = 0;
+      // 
+      // ResourcesView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitSlaves);
+      this.Name = "ResourcesView";
+      this.Size = new System.Drawing.Size(853, 553);
+      this.Load += new System.EventHandler(this.ResourcesView_Load);
+      this.splitSlaves.Panel1.ResumeLayout(false);
+      this.splitSlaves.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitSlaves)).EndInit();
+      this.splitSlaves.ResumeLayout(false);
+      this.tabSlaveGroup.ResumeLayout(false);
+      this.tabDetails.ResumeLayout(false);
+      this.tabSchedule.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitSlaves;
+    private System.Windows.Forms.Button btnRemoveGroup;
+    private System.Windows.Forms.Button btnAddGroup;
+    private System.Windows.Forms.TreeView treeSlaveGroup;
+    private System.Windows.Forms.TabControl tabSlaveGroup;
+    private System.Windows.Forms.TabPage tabDetails;
+    private System.Windows.Forms.TabPage tabSchedule;
+    private SlaveView slaveView;
+    private System.Windows.Forms.ImageList imageListSlaveGroups;
+    private ScheduleView scheduleView;
+    private System.Windows.Forms.Button btnSave;
+    private System.Windows.Forms.ProgressBar progressBar;
+    private System.Windows.Forms.Button btnRefresh;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs	(revision 7085)
@@ -0,0 +1,405 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Linq;
+using System.ServiceModel.Security;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Hive.Views;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using TS = System.Threading.Tasks;
+
+namespace HeuristicLab.Clients.Hive.Administrator.Views {
+  [View("Resources View")]
+  [Content(typeof(IItemList<Resource>), IsDefaultView = true)]
+  public partial class ResourcesView : ItemView, IDisposable {
+    public new IItemList<Resource> Content {
+      get { return (IItemList<Resource>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public const string UngroupedGroupName = "UNGROUPED";
+    private const int slaveImageIndex = 0;
+    private const int slaveGroupImageIndex = 1;
+    private TS.Task progressTask;
+    private bool stopProgressTask;
+
+
+    public ResourcesView() {
+      InitializeComponent();
+      treeSlaveGroup.ImageList.Images.Add(HiveImageLibrary.Slave);
+      treeSlaveGroup.ImageList.Images.Add(HiveImageLibrary.SlaveGroup);
+
+      HiveAdminClient.Instance.Refreshing += new EventHandler(Instance_Refreshing);
+      HiveAdminClient.Instance.Refreshed += new EventHandler(Instance_Refreshed);
+    }
+
+    public new void Dispose() {
+      HiveAdminClient.Instance.Refreshing -= new EventHandler(Instance_Refreshing);
+      HiveAdminClient.Instance.Refreshed -= new EventHandler(Instance_Refreshed);
+    }
+
+    private void UpdateProgress() {
+      while (!stopProgressTask) {
+        int diff = (progressBar.Maximum - progressBar.Minimum) / 10;
+
+        if (progressBar.InvokeRequired) {
+          progressBar.Invoke(new Action(delegate() { progressBar.Value = (progressBar.Value + diff) % progressBar.Maximum; }));
+        } else {
+          progressBar.Value = (progressBar.Value + diff) % progressBar.Maximum;
+        }
+
+        //ok, this is not very clever...
+        Thread.Sleep(500);
+      }
+      if (progressBar.InvokeRequired) {
+        progressBar.Invoke(new Action(delegate() { progressBar.Value = progressBar.Minimum; }));
+      } else {
+        progressBar.Value = progressBar.Minimum;
+      }
+    }
+
+    void Instance_Refreshing(object sender, EventArgs e) {
+      stopProgressTask = false;
+      progressTask = new TS.Task(UpdateProgress);
+      progressTask.Start();
+    }
+
+    void Instance_Refreshed(object sender, EventArgs e) {
+      stopProgressTask = true;
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      Content.ItemsAdded -= new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<Resource>>(Content_ItemsAdded);
+      Content.ItemsRemoved -= new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<Resource>>(Content_ItemsRemoved);
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ItemsAdded += new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<Resource>>(Content_ItemsAdded);
+      Content.ItemsRemoved += new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<Resource>>(Content_ItemsRemoved);
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        slaveView.Content = null;
+        treeSlaveGroup.Nodes.Clear();
+      } else {
+        treeSlaveGroup.Nodes.Clear();
+
+        //rebuild
+        TreeNode ungrp = new TreeNode(UngroupedGroupName);
+        ungrp.ImageIndex = slaveGroupImageIndex;
+        ungrp.SelectedImageIndex = ungrp.ImageIndex;
+        var newGroup = new SlaveGroup();
+        newGroup.Name = UngroupedGroupName;
+        newGroup.Id = Guid.NewGuid();
+        newGroup.Description = "Contains slaves which are in no group";
+        ungrp.Tag = newGroup;
+
+        foreach (Resource g in Content) {
+          if (g.GetType() == typeof(SlaveGroup)) {
+            //root node
+            if (g.ParentResourceId == null) {
+              TreeNode tn = new TreeNode();
+              tn.ImageIndex = slaveGroupImageIndex;
+              tn.SelectedImageIndex = tn.ImageIndex;
+
+              tn.Tag = g;
+              tn.Text = g.Name;
+
+              BuildSlaveGroupTree(g, tn);
+              tn.ExpandAll();
+              treeSlaveGroup.Nodes.Add(tn);
+            }
+          } else if (g.GetType() == typeof(Slave)) {
+            if (g.ParentResourceId == null) {
+              var stn = new TreeNode(g.Name);
+              stn.ImageIndex = slaveImageIndex;
+              stn.SelectedImageIndex = stn.ImageIndex;
+              stn.Tag = g;
+              ungrp.Nodes.Add(stn);
+            }
+          }
+        }
+        ungrp.ExpandAll();
+        treeSlaveGroup.Nodes.Add(ungrp);
+      }
+    }
+
+    private void BuildSlaveGroupTree(Resource g, TreeNode tn) {
+      foreach (Resource r in Content.Where(s => s.ParentResourceId != null && s.ParentResourceId == g.Id)) {
+        TreeNode stn = new TreeNode(r.Name);
+        if (r is Slave) {
+          stn.ImageIndex = slaveImageIndex;
+        } else if (r is SlaveGroup) {
+          stn.ImageIndex = slaveGroupImageIndex;
+        }
+        stn.SelectedImageIndex = stn.ImageIndex;
+        stn.Tag = r;
+        tn.Nodes.Add(stn);
+
+        BuildSlaveGroupTree(r, stn);
+        tn.ExpandAll();
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    private void treeSlaveGroup_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
+      if (slaveView.Content != null && slaveView.Content is SlaveGroup) {
+        slaveView.Content.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(SlaveViewContent_PropertyChanged);
+      }
+
+      slaveView.Content = (Resource)e.Node.Tag;
+      HiveAdminClient.Instance.DowntimeForResourceId = ((Resource)e.Node.Tag).Id;
+
+      if (e.Node.Tag is SlaveGroup) {
+        slaveView.Content.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(SlaveViewContent_PropertyChanged);
+      }
+
+      if (tabSlaveGroup.SelectedIndex == 1) {
+        UpdateScheduleAsync();
+      }
+    }
+
+    void SlaveViewContent_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) {
+      OnContentChanged();
+      if (e.PropertyName == "HbInterval") {
+        UpdateChildHbIntervall(slaveView.Content);
+      }
+    }
+
+    private void UpdateChildHbIntervall(Resource resource) {
+      foreach (Resource r in Content.Where(x => x.ParentResourceId == resource.Id)) {
+        r.HbInterval = resource.HbInterval;
+        if (r is SlaveGroup) {
+          UpdateChildHbIntervall(r);
+        }
+      }
+    }
+
+    private void btnAddGroup_Click(object sender, EventArgs e) {
+      SlaveGroup newGroup = new SlaveGroup();
+      newGroup.Name = "New Group";
+      Content.Add(newGroup);
+    }
+
+    void Content_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<Resource>> e) {
+      OnContentChanged();
+    }
+
+    void Content_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<Resource>> e) {
+      OnContentChanged();
+    }
+
+    private void btnRemoveGroup_Click(object sender, EventArgs e) {
+      if (treeSlaveGroup.SelectedNode != null && treeSlaveGroup.SelectedNode.Tag != null) {
+        Resource res = (Resource)treeSlaveGroup.SelectedNode.Tag;
+
+        DialogResult diagRes = MessageBox.Show("Do you really want to delete " + res.Name + "?", "HeuristicLab Hive Administrator", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+        if (diagRes == DialogResult.Yes) {
+          if (res is Slave) {
+            Content.Remove(res);
+            HiveAdminClient.Delete(res);
+          } else if (res is SlaveGroup) {
+            //only delete empty groups
+            if (Content.Where(s => s.ParentResourceId == res.Id).Count() < 1) {
+              Content.Remove(res);
+              HiveAdminClient.Delete(res);
+            } else {
+              MessageBox.Show("Only empty groups can be deleted.", "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+          }
+        }
+      }
+    }
+
+    private void btnSave_Click(object sender, EventArgs e) {
+      foreach (Resource res in Content) {
+        if (res is SlaveGroup && res.Id == Guid.Empty) {
+          SlaveGroup slaveGroup = (SlaveGroup)res;
+          slaveGroup.Store();
+        } else if (res.Id != Guid.Empty && res.Modified) {
+          res.Store();
+        }
+      }
+    }
+
+    private void treeSlaveGroup_DragDrop(object sender, DragEventArgs e) {
+      if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false)) {
+        Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
+        TreeNode destNode = ((TreeView)sender).GetNodeAt(pt);
+        TreeNode newNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
+
+        if (destNode.TreeView == newNode.TreeView) {
+          if (destNode.Text == UngroupedGroupName || (destNode.Parent != null && destNode.Parent.Text == UngroupedGroupName)) {
+            MessageBox.Show(String.Format("You can't drag items to the {0} group.{1}This group only contains slaves which haven't yet been assigned to a real group.",
+              UngroupedGroupName, Environment.NewLine), "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Information);
+            return;
+          }
+
+          SlaveGroup sgrp = null;
+          TreeNode parentNode = null;
+          if (destNode.Tag != null && destNode.Tag is SlaveGroup) {
+            sgrp = (SlaveGroup)destNode.Tag;
+            parentNode = destNode;
+          } else if (destNode.Parent != null && destNode.Parent.Tag is SlaveGroup) {
+            sgrp = (SlaveGroup)destNode.Parent.Tag;
+            parentNode = destNode.Parent;
+          }
+
+          if (newNode.Tag is SlaveGroup && CheckParentsEqualsMovedNode(parentNode, newNode)) {
+            return;
+          }
+
+          if (sgrp != null && newNode.Tag != null) {
+            //save parent group to get an id
+            if (sgrp.Id == Guid.Empty) {
+              sgrp.Store();
+            }
+
+            if (newNode.Tag is Slave) {
+              Slave slave = (Slave)newNode.Tag;
+              if (slave.ParentResourceId == null || (slave.ParentResourceId != null && slave.ParentResourceId != sgrp.Id)) {
+                slave.ParentResourceId = sgrp.Id;
+                newNode.Remove();
+                parentNode.Nodes.Clear();
+                BuildSlaveGroupTree(sgrp, parentNode);
+              }
+            } else if (newNode.Tag is SlaveGroup) {
+              SlaveGroup slaveGroup = (SlaveGroup)newNode.Tag;
+              if (slaveGroup.ParentResourceId == null || (slaveGroup.ParentResourceId != null && slaveGroup.ParentResourceId != sgrp.Id)) {
+                slaveGroup.ParentResourceId = sgrp.Id;
+                newNode.Remove();
+                parentNode.Nodes.Clear();
+                BuildSlaveGroupTree(sgrp, parentNode);
+              }
+            }
+          }
+        }
+      }
+    }
+
+    private bool CheckParentsEqualsMovedNode(TreeNode dest, TreeNode movedNode) {
+      TreeNode tmp = dest;
+
+      while (tmp != null) {
+        if (tmp == movedNode) {
+          return true;
+        }
+        tmp = tmp.Parent;
+      }
+      return false;
+    }
+
+    private void treeSlaveGroup_ItemDrag(object sender, ItemDragEventArgs e) {
+      TreeNode sourceNode = (TreeNode)e.Item;
+      DoDragDrop(sourceNode, DragDropEffects.All);
+    }
+
+    private void treeSlaveGroup_DragEnter(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.Move;
+    }
+
+    private void treeSlaveGroup_DragOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.Move;
+    }
+
+    private void treeSlaveGroup_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) {
+      e.Action = DragAction.Continue;
+    }
+
+    void ResetView() {
+      treeSlaveGroup.Nodes.Clear();
+
+      if (slaveView.Content != null && slaveView.Content is SlaveGroup) {
+        slaveView.Content.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(SlaveViewContent_PropertyChanged);
+      }
+      slaveView.Content = null;
+      if (scheduleView.Content != null) {
+        scheduleView.Content.Clear();
+      }
+      HiveAdminClient.Instance.ResetDowntime();
+    }
+
+    private void UpdateResources() {
+      if (this.InvokeRequired) {
+        this.Invoke(new Action(ResetView));
+      } else {
+        ResetView();
+      }
+
+      try {
+        HiveAdminClient.Instance.Refresh();
+        Content = HiveAdminClient.Instance.Resources;
+      }
+      catch (MessageSecurityException) {
+        MessageBox.Show("A Message Security error has occured. This normally means that your user name or password is wrong.", "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
+    }
+
+    private void UpdateResourcesAsync() {
+      TS.Task.Factory.StartNew(UpdateResources).ContinueWith((t) => {
+        DisplayError(t.Exception);
+      }, TaskContinuationOptions.OnlyOnFaulted);
+    }
+
+    private void UpdateSchedule() {
+      HiveAdminClient.Instance.RefreshCalendar();
+      scheduleView.Invoke(new Action(() => scheduleView.Content = HiveAdminClient.Instance.Downtimes));
+    }
+
+    private void UpdateScheduleAsync() {
+      TS.Task.Factory.StartNew(UpdateSchedule).ContinueWith((t) => {
+        DisplayError(t.Exception);
+      }, TaskContinuationOptions.OnlyOnFaulted);
+    }
+
+    private void DisplayError(Exception ex) {
+      MessageBox.Show(string.Format("An error occured while updating: {0} {1}", Environment.NewLine, ex.Message), "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error);
+    }
+
+    private void tabSlaveGroup_SelectedIndexChanged(object sender, EventArgs e) {
+      if (tabSlaveGroup.SelectedIndex == 1) {
+        UpdateScheduleAsync();
+      }
+    }
+
+    private void btnRefresh_Click(object sender, EventArgs e) {
+      UpdateResourcesAsync();
+    }
+
+    private void ResourcesView_Load(object sender, EventArgs e) {
+      UpdateResourcesAsync();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.resx	(revision 7085)
@@ -0,0 +1,363 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="imageListSlaveGroups.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="btnRefresh.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+</value>
+  </data>
+  <data name="btnSave.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        AElFTkSuQmCC
+</value>
+  </data>
+  <data name="btnRemoveGroup.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        w6/9DUORY3pvwx7IAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="btnAddGroup.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        ugHE5lCKcyMAN07j92U5+iMAAAAASUVORK5CYII=
+</value>
+  </data>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>71</value>
+  </metadata>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ScheduleView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ScheduleView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ScheduleView.Designer.cs	(revision 7085)
@@ -0,0 +1,269 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.Administrator.Views {
+  partial class ScheduleView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      Calendar.DrawTool drawTool2 = new Calendar.DrawTool();
+      this.dvOnline = new Calendar.DayView();
+      this.txttimeTo = new System.Windows.Forms.DateTimePicker();
+      this.txttimeFrom = new System.Windows.Forms.DateTimePicker();
+      this.dtpTo = new System.Windows.Forms.DateTimePicker();
+      this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.dtpFrom = new System.Windows.Forms.DateTimePicker();
+      this.chbade = new System.Windows.Forms.CheckBox();
+      this.btnRecurrence = new System.Windows.Forms.Button();
+      this.btbDelete = new System.Windows.Forms.Button();
+      this.label2 = new System.Windows.Forms.Label();
+      this.label1 = new System.Windows.Forms.Label();
+      this.btCreate = new System.Windows.Forms.Button();
+      this.btnSaveCal = new System.Windows.Forms.Button();
+      this.btnClearCal = new System.Windows.Forms.Button();
+      this.mcOnline = new System.Windows.Forms.MonthCalendar();
+      this.groupBox1.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // dvOnline
+      // 
+      drawTool2.DayView = this.dvOnline;
+      this.dvOnline.ActiveTool = drawTool2;
+      this.dvOnline.AmPmDisplay = false;
+      this.dvOnline.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.dvOnline.AppointmentDuration = Calendar.AppointmentSlotDuration.SixtyMinutes;
+      this.dvOnline.AppointmentHeightMode = Calendar.AppHeightDrawMode.TrueHeightAll;
+      this.dvOnline.DayHeadersHeight = 15;
+      this.dvOnline.DaysToShow = 7;
+      this.dvOnline.DrawAllAppBorder = false;
+      this.dvOnline.EnableDurationDisplay = false;
+      this.dvOnline.EnableRoundedCorners = false;
+      this.dvOnline.EnableShadows = false;
+      this.dvOnline.EnableTimeIndicator = false;
+      this.dvOnline.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F);
+      this.dvOnline.Location = new System.Drawing.Point(9, 176);
+      this.dvOnline.MinHalfHourApp = false;
+      this.dvOnline.Name = "dvOnline";
+      this.dvOnline.SelectionEnd = new System.DateTime(((long)(0)));
+      this.dvOnline.SelectionStart = new System.DateTime(((long)(0)));
+      this.dvOnline.Size = new System.Drawing.Size(823, 354);
+      this.dvOnline.StartDate = new System.DateTime(((long)(0)));
+      this.dvOnline.TabIndex = 54;
+      this.dvOnline.OnSelectionChanged += new System.EventHandler<System.EventArgs>(this.dvOnline_OnSelectionChanged);
+      // 
+      // txttimeTo
+      // 
+      this.txttimeTo.CustomFormat = "HH:00";
+      this.txttimeTo.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.txttimeTo.Location = new System.Drawing.Point(164, 45);
+      this.txttimeTo.Name = "txttimeTo";
+      this.txttimeTo.ShowUpDown = true;
+      this.txttimeTo.Size = new System.Drawing.Size(73, 20);
+      this.txttimeTo.TabIndex = 40;
+      // 
+      // txttimeFrom
+      // 
+      this.txttimeFrom.CustomFormat = "HH:00";
+      this.txttimeFrom.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.txttimeFrom.Location = new System.Drawing.Point(164, 12);
+      this.txttimeFrom.Name = "txttimeFrom";
+      this.txttimeFrom.ShowUpDown = true;
+      this.txttimeFrom.Size = new System.Drawing.Size(73, 20);
+      this.txttimeFrom.TabIndex = 39;
+      // 
+      // dtpTo
+      // 
+      this.dtpTo.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpTo.Location = new System.Drawing.Point(72, 45);
+      this.dtpTo.Name = "dtpTo";
+      this.dtpTo.Size = new System.Drawing.Size(89, 20);
+      this.dtpTo.TabIndex = 33;
+      // 
+      // groupBox1
+      // 
+      this.groupBox1.Controls.Add(this.txttimeTo);
+      this.groupBox1.Controls.Add(this.txttimeFrom);
+      this.groupBox1.Controls.Add(this.dtpTo);
+      this.groupBox1.Controls.Add(this.dtpFrom);
+      this.groupBox1.Controls.Add(this.chbade);
+      this.groupBox1.Controls.Add(this.btnRecurrence);
+      this.groupBox1.Controls.Add(this.btbDelete);
+      this.groupBox1.Controls.Add(this.label2);
+      this.groupBox1.Controls.Add(this.label1);
+      this.groupBox1.Controls.Add(this.btCreate);
+      this.groupBox1.Location = new System.Drawing.Point(373, 4);
+      this.groupBox1.Name = "groupBox1";
+      this.groupBox1.Size = new System.Drawing.Size(254, 161);
+      this.groupBox1.TabIndex = 56;
+      this.groupBox1.TabStop = false;
+      // 
+      // dtpFrom
+      // 
+      this.dtpFrom.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpFrom.Location = new System.Drawing.Point(72, 12);
+      this.dtpFrom.Name = "dtpFrom";
+      this.dtpFrom.Size = new System.Drawing.Size(89, 20);
+      this.dtpFrom.TabIndex = 32;
+      // 
+      // chbade
+      // 
+      this.chbade.AutoSize = true;
+      this.chbade.Location = new System.Drawing.Point(135, 70);
+      this.chbade.Name = "chbade";
+      this.chbade.Size = new System.Drawing.Size(90, 17);
+      this.chbade.TabIndex = 31;
+      this.chbade.Text = "All Day Event";
+      this.chbade.UseVisualStyleBackColor = true;
+      this.chbade.CheckedChanged += new System.EventHandler(this.chbade_CheckedChanged);
+      // 
+      // btnRecurrence
+      // 
+      this.btnRecurrence.Location = new System.Drawing.Point(135, 129);
+      this.btnRecurrence.Name = "btnRecurrence";
+      this.btnRecurrence.Size = new System.Drawing.Size(113, 26);
+      this.btnRecurrence.TabIndex = 30;
+      this.btnRecurrence.Text = "Recurrence";
+      this.btnRecurrence.UseVisualStyleBackColor = true;
+      this.btnRecurrence.Click += new System.EventHandler(this.btnRecurrence_Click);
+      // 
+      // btbDelete
+      // 
+      this.btbDelete.Location = new System.Drawing.Point(8, 129);
+      this.btbDelete.Name = "btbDelete";
+      this.btbDelete.Size = new System.Drawing.Size(114, 26);
+      this.btbDelete.TabIndex = 25;
+      this.btbDelete.Text = "Delete";
+      this.btbDelete.UseVisualStyleBackColor = true;
+      this.btbDelete.Click += new System.EventHandler(this.btbDelete_Click);
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(16, 46);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(55, 13);
+      this.label2.TabIndex = 23;
+      this.label2.Text = "End Time:";
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(16, 15);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(58, 13);
+      this.label1.TabIndex = 21;
+      this.label1.Text = "Start Time:";
+      // 
+      // btCreate
+      // 
+      this.btCreate.Location = new System.Drawing.Point(6, 93);
+      this.btCreate.Name = "btCreate";
+      this.btCreate.Size = new System.Drawing.Size(242, 26);
+      this.btCreate.TabIndex = 20;
+      this.btCreate.Text = "Save Appointment";
+      this.btCreate.UseVisualStyleBackColor = true;
+      this.btCreate.Click += new System.EventHandler(this.btCreate_Click);
+      // 
+      // btnSaveCal
+      // 
+      this.btnSaveCal.Location = new System.Drawing.Point(633, 40);
+      this.btnSaveCal.Name = "btnSaveCal";
+      this.btnSaveCal.Size = new System.Drawing.Size(199, 23);
+      this.btnSaveCal.TabIndex = 57;
+      this.btnSaveCal.Text = "Save Calendar";
+      this.btnSaveCal.UseVisualStyleBackColor = true;
+      this.btnSaveCal.Click += new System.EventHandler(this.btnSaveCal_Click);
+      // 
+      // btnClearCal
+      // 
+      this.btnClearCal.Location = new System.Drawing.Point(633, 9);
+      this.btnClearCal.Name = "btnClearCal";
+      this.btnClearCal.Size = new System.Drawing.Size(199, 23);
+      this.btnClearCal.TabIndex = 58;
+      this.btnClearCal.Text = "Clear Calendar";
+      this.btnClearCal.UseVisualStyleBackColor = true;
+      this.btnClearCal.Click += new System.EventHandler(this.btnClearCal_Click);
+      // 
+      // mcOnline
+      // 
+      this.mcOnline.CalendarDimensions = new System.Drawing.Size(2, 1);
+      this.mcOnline.Location = new System.Drawing.Point(4, 9);
+      this.mcOnline.Name = "mcOnline";
+      this.mcOnline.TabIndex = 55;
+      this.mcOnline.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.mcOnline_DateChanged);
+      // 
+      // ScheduleView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dvOnline);
+      this.Controls.Add(this.groupBox1);
+      this.Controls.Add(this.btnSaveCal);
+      this.Controls.Add(this.btnClearCal);
+      this.Controls.Add(this.mcOnline);
+      this.Name = "ScheduleView";
+      this.Size = new System.Drawing.Size(842, 540);
+      this.groupBox1.ResumeLayout(false);
+      this.groupBox1.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.DateTimePicker txttimeTo;
+    private Calendar.DayView dvOnline;
+    private System.Windows.Forms.DateTimePicker txttimeFrom;
+    private System.Windows.Forms.DateTimePicker dtpTo;
+    private System.Windows.Forms.GroupBox groupBox1;
+    private System.Windows.Forms.DateTimePicker dtpFrom;
+    private System.Windows.Forms.CheckBox chbade;
+    private System.Windows.Forms.Button btnRecurrence;
+    private System.Windows.Forms.Button btbDelete;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.Button btCreate;
+    private System.Windows.Forms.Button btnSaveCal;
+    private System.Windows.Forms.Button btnClearCal;
+    private System.Windows.Forms.MonthCalendar mcOnline;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ScheduleView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ScheduleView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ScheduleView.cs	(revision 7085)
@@ -0,0 +1,355 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using System.Xml.Serialization;
+using Calendar;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.Administrator.Views {
+  [View("Schedule View")]
+  [Content(typeof(IItemList<Downtime>), IsDefaultView = true)]
+  public partial class ScheduleView : ItemView {
+    public new IItemList<Downtime> Content {
+      get { return (IItemList<Downtime>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    [XmlArray("Appointments")]
+    [XmlArrayItem("HiveAppointment", typeof(HiveAppointment))]
+    public List<HiveAppointment> offlineTimes = new List<HiveAppointment>();
+
+    //delegate fired, if a dialog is being closed
+    public delegate void OnDialogClosedDelegate(RecurrentEvent e);
+
+    public ScheduleView() {
+      InitializeComponent();
+      InitCalender();
+    }
+
+    private void InitCalender() {
+      dvOnline.StartDate = DateTime.Now;
+      dvOnline.OnNewAppointment += new EventHandler<NewAppointmentEventArgs>(dvOnline_OnNewAppointment);
+      dvOnline.OnResolveAppointments += new EventHandler<ResolveAppointmentsEventArgs>(dvOnline_OnResolveAppointments);
+    }
+
+    private void dvOnline_OnResolveAppointments(object sender, ResolveAppointmentsEventArgs e) {
+      List<HiveAppointment> apps = new List<HiveAppointment>();
+
+      foreach (HiveAppointment app in offlineTimes) {
+        if (app.StartDate >= e.StartDate && app.StartDate <= e.EndDate && !app.Deleted) {
+          apps.Add(app);
+        }
+      }
+
+      e.Appointments.Clear();
+      foreach (HiveAppointment app in apps) {
+        e.Appointments.Add(app);
+      }
+    }
+
+    private void dvOnline_OnNewAppointment(object sender, NewAppointmentEventArgs e) {
+      HiveAppointment Appointment = new HiveAppointment();
+
+      Appointment.StartDate = e.StartDate;
+      Appointment.EndDate = e.EndDate;
+      offlineTimes.Add(Appointment);
+    }
+
+    private void UpdateCalendarFromContent() {
+      offlineTimes.Clear();
+      if (Content != null) {
+        foreach (Downtime app in Content) {
+          offlineTimes.Add(ToHiveAppointment(app));
+        }
+      }
+      dvOnline.Invalidate();
+    }
+
+    private bool CreateAppointment() {
+      DateTime from, to;
+
+      if (!string.IsNullOrEmpty(dtpFrom.Text) && !string.IsNullOrEmpty(dtpTo.Text)) {
+        if (chbade.Checked) {
+          //whole day appointment, only dates are visible
+          if (DateTime.TryParse(dtpFrom.Text, out from) && DateTime.TryParse(dtpTo.Text, out to) && from <= to)
+            offlineTimes.Add(CreateAppointment(from, to.AddDays(1), true));
+          else
+            MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        } else if (!string.IsNullOrEmpty(txttimeFrom.Text) && !string.IsNullOrEmpty(txttimeTo.Text)) {
+          //Timeframe appointment
+          if (DateTime.TryParse(dtpFrom.Text + " " + txttimeFrom.Text, out from) && DateTime.TryParse(dtpTo.Text + " " + txttimeTo.Text, out to) && from < to) {
+            if (from.Date == to.Date)
+              offlineTimes.Add(CreateAppointment(from, to, false));
+            else {
+              //more than 1 day selected
+              while (from.Date != to.Date) {
+                offlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false));
+                from = from.AddDays(1);
+              }
+              offlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false));
+            }
+          } else
+            MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }
+        dvOnline.Invalidate();
+        return true;
+      } else {
+        MessageBox.Show("Error in create appointment, please fill out all textboxes!", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        return false;
+      }
+    }
+
+    private HiveAppointment CreateAppointment(DateTime startDate, DateTime endDate, bool allDay) {
+      HiveAppointment app = new HiveAppointment();
+      app.StartDate = startDate;
+      app.EndDate = endDate;
+      app.AllDayEvent = allDay;
+      app.BorderColor = Color.Red;
+      app.Locked = true;
+      app.Subject = "Offline";
+      app.Recurring = false;
+      return app;
+    }
+
+    private HiveAppointment CreateAppointment(DateTime startDate, DateTime endDate, bool allDay, bool recurring, Guid recurringId) {
+      HiveAppointment app = new HiveAppointment();
+      app.StartDate = startDate;
+      app.EndDate = endDate;
+      app.AllDayEvent = allDay;
+      app.BorderColor = Color.Red;
+      app.Locked = true;
+      app.Subject = "Offline";
+      app.Recurring = recurring;
+      app.RecurringId = recurringId;
+      return app;
+    }
+
+    private void DeleteRecurringAppointment(Guid recurringId) {
+      foreach (HiveAppointment app in offlineTimes) {
+        if (app.RecurringId == recurringId) {
+          app.Deleted = true;
+        }
+      }
+    }
+
+    private void ChangeRecurrenceAppointment(Guid recurringId) {
+      int hourfrom = int.Parse(txttimeFrom.Text.Substring(0, txttimeFrom.Text.IndexOf(':')));
+      int hourTo = int.Parse(txttimeTo.Text.Substring(0, txttimeTo.Text.IndexOf(':')));
+      List<HiveAppointment> recurringAppointments = offlineTimes.Where(appointment => ((HiveAppointment)appointment).RecurringId == recurringId).ToList();
+      recurringAppointments.ForEach(appointment => appointment.StartDate = new DateTime(appointment.StartDate.Year, appointment.StartDate.Month, appointment.StartDate.Day, hourfrom, 0, 0));
+      recurringAppointments.ForEach(appointment => appointment.EndDate = new DateTime(appointment.EndDate.Year, appointment.EndDate.Month, appointment.EndDate.Day, hourTo, 0, 0));
+
+      DeleteRecurringAppointment(recurringId);
+      offlineTimes.AddRange(recurringAppointments);
+    }
+
+    public void DialogClosed(RecurrentEvent e) {
+      CreateDailyRecurrenceAppointments(e.DateFrom, e.DateTo, e.AllDay, e.WeekDays);
+    }
+
+    private void CreateDailyRecurrenceAppointments(DateTime dateFrom, DateTime dateTo, bool allDay, HashSet<DayOfWeek> daysOfWeek) {
+      DateTime incDate = dateFrom;
+      Guid guid = Guid.NewGuid();
+
+      while (incDate.Date <= dateTo.Date) {
+        if (daysOfWeek.Contains(incDate.Date.DayOfWeek))
+          offlineTimes.Add(CreateAppointment(incDate, new DateTime(incDate.Year, incDate.Month, incDate.Day, dateTo.Hour, dateTo.Minute, 0), allDay, true, guid));
+        incDate = incDate.AddDays(1);
+      }
+
+      dvOnline.Invalidate();
+    }
+
+    private void btbDelete_Click(object sender, EventArgs e) {
+      HiveAppointment selectedAppointment = (HiveAppointment)dvOnline.SelectedAppointment;
+      if (dvOnline.SelectedAppointment != null) {
+        if (!selectedAppointment.Recurring)
+          DeleteAppointment();
+        else {
+          DialogResult res = MessageBox.Show("Delete all events in this series?", "Delete recurrences", MessageBoxButtons.YesNo);
+          if (res != DialogResult.Yes)
+            DeleteAppointment();
+          else
+            DeleteRecurringAppointment(selectedAppointment.RecurringId);
+        }
+      }
+      dvOnline.Invalidate();
+    }
+
+    private void DeleteAppointment() {
+      try {
+        HiveAppointment app = offlineTimes.First(s => s.Equals((HiveAppointment)dvOnline.SelectedAppointment));
+        app.Deleted = true;
+      }
+      catch (InvalidOperationException) {
+        // this is a ui bug where a selected all day appointment is not properly selected :-/
+      }
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      UpdateCalendarFromContent();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    private void btnClearCal_Click(object sender, System.EventArgs e) {
+      foreach (HiveAppointment app in offlineTimes) {
+        app.Deleted = true;
+      }
+      dvOnline.Invalidate();
+    }
+
+    private void chbade_CheckedChanged(object sender, EventArgs e) {
+      txttimeFrom.Visible = !chbade.Checked;
+      txttimeTo.Visible = !chbade.Checked;
+    }
+
+    private void dvOnline_OnSelectionChanged(object sender, EventArgs e) {
+      //btCreate.Enabled = true;
+      if (dvOnline.Selection == SelectionType.DateRange) {
+        dtpFrom.Text = dvOnline.SelectionStart.ToShortDateString();
+        dtpTo.Text = dvOnline.SelectionEnd.Date.ToShortDateString();
+        txttimeFrom.Text = dvOnline.SelectionStart.ToShortTimeString();
+        txttimeTo.Text = dvOnline.SelectionEnd.ToShortTimeString();
+
+        btCreate.Text = "Save";
+      }
+
+      if (dvOnline.Selection == SelectionType.Appointment) {
+
+        dtpFrom.Text = dvOnline.SelectedAppointment.StartDate.ToShortDateString();
+        dtpTo.Text = dvOnline.SelectedAppointment.EndDate.ToShortDateString();
+        txttimeFrom.Text = dvOnline.SelectedAppointment.StartDate.ToShortTimeString();
+        txttimeTo.Text = dvOnline.SelectedAppointment.EndDate.ToShortTimeString();
+
+        if (dvOnline.SelectedAppointment.Recurring)
+          //btCreate.Enabled = false;
+          //also change the caption of the save button
+          btCreate.Text = "Save changes";
+      }
+
+      if (dvOnline.Selection == SelectionType.None) {
+        //also change the caption of the save button
+        btCreate.Text = "Save";
+      }
+    }
+
+    private void mcOnline_DateChanged(object sender, DateRangeEventArgs e) {
+      dvOnline.StartDate = mcOnline.SelectionStart;
+    }
+
+    private void btCreate_Click(object sender, EventArgs e) {
+      if (dvOnline.Selection != SelectionType.Appointment) {
+        CreateAppointment();
+      } else {
+        //now we want to change an existing appointment
+        if (!dvOnline.SelectedAppointment.Recurring) {
+          if (CreateAppointment())
+            DeleteAppointment();
+        } else {
+          //change recurring appointment
+          //check, if only selected appointment has to change or whole recurrence
+          DialogResult res = MessageBox.Show("Change all events in this series?", "Change recurrences", MessageBoxButtons.YesNo);
+          if (res != DialogResult.Yes) {
+            if (CreateAppointment())
+              DeleteAppointment();
+          } else
+            ChangeRecurrenceAppointment(((HiveAppointment)dvOnline.SelectedAppointment).RecurringId);
+        }
+      }
+      dvOnline.Invalidate();
+    }
+
+    private void btnRecurrence_Click(object sender, EventArgs e) {
+      Recurrence recurrence = new Recurrence();
+      recurrence.dialogClosedDelegate = new OnDialogClosedDelegate(this.DialogClosed);
+      recurrence.Show();
+    }
+
+    private void btnSaveCal_Click(object sender, EventArgs e) {
+      if (HiveAdminClient.Instance.DowntimeForResourceId == null || HiveAdminClient.Instance.DowntimeForResourceId == Guid.Empty) {
+        MessageBox.Show("You have to save the goup before you can save the schedule. ", "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Stop);
+      } else {
+        List<Downtime> appointments = new List<Downtime>();
+        foreach (HiveAppointment app in offlineTimes) {
+          if (app.Deleted && app.Id != Guid.Empty) {
+            HiveAdminClient.Delete(ToDowntime(app));
+          } else if (app.Changed || app.Id == null || app.Id == Guid.Empty) {
+            Downtime dt = ToDowntime(app);
+            appointments.Add(dt);
+          }
+        }
+        foreach (Downtime dt in appointments) {
+          dt.Store();
+        }
+      }
+    }
+
+    private HiveAppointment ToHiveAppointment(Downtime downtime) {
+      HiveAppointment app = new HiveAppointment {
+        AllDayEvent = downtime.AllDayEvent,
+        EndDate = downtime.EndDate,
+        StartDate = downtime.StartDate,
+        Recurring = downtime.Recurring,
+        RecurringId = downtime.RecurringId,
+        Deleted = false,
+        BorderColor = Color.Red,
+        Locked = true,
+        Subject = "Offline",
+        Changed = downtime.Modified,
+        Id = downtime.Id
+      };
+      return app;
+    }
+
+    private Downtime ToDowntime(HiveAppointment app) {
+      Downtime downtime = new Downtime {
+        AllDayEvent = app.AllDayEvent,
+        EndDate = app.EndDate,
+        StartDate = app.StartDate,
+        Recurring = app.Recurring,
+        RecurringId = app.RecurringId,
+        ResourceId = HiveAdminClient.Instance.DowntimeForResourceId,
+        Id = app.Id
+      };
+      return downtime;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ScheduleView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ScheduleView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ScheduleView.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/SlaveView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/SlaveView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/SlaveView.Designer.cs	(revision 7085)
@@ -0,0 +1,313 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.Administrator.Views {
+  partial class SlaveView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.txtSlaveState = new System.Windows.Forms.TextBox();
+      this.txtOS = new System.Windows.Forms.TextBox();
+      this.label15 = new System.Windows.Forms.Label();
+      this.label14 = new System.Windows.Forms.Label();
+      this.txtDetailsDescription = new System.Windows.Forms.TextBox();
+      this.label13 = new System.Windows.Forms.Label();
+      this.txtName = new System.Windows.Forms.TextBox();
+      this.txtCPU = new System.Windows.Forms.TextBox();
+      this.txtMemory = new System.Windows.Forms.TextBox();
+      this.txtLastHeartbeat = new System.Windows.Forms.TextBox();
+      this.label12 = new System.Windows.Forms.Label();
+      this.label11 = new System.Windows.Forms.Label();
+      this.label10 = new System.Windows.Forms.Label();
+      this.label9 = new System.Windows.Forms.Label();
+      this.label1 = new System.Windows.Forms.Label();
+      this.txtFreeMemory = new System.Windows.Forms.TextBox();
+      this.txtId = new System.Windows.Forms.TextBox();
+      this.label2 = new System.Windows.Forms.Label();
+      this.label3 = new System.Windows.Forms.Label();
+      this.txtHbIntervall = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // txtSlaveState
+      // 
+      this.txtSlaveState.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtSlaveState.Enabled = false;
+      this.txtSlaveState.Location = new System.Drawing.Point(146, 216);
+      this.txtSlaveState.Name = "txtSlaveState";
+      this.txtSlaveState.Size = new System.Drawing.Size(390, 20);
+      this.txtSlaveState.TabIndex = 27;
+      // 
+      // txtOS
+      // 
+      this.txtOS.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtOS.Enabled = false;
+      this.txtOS.Location = new System.Drawing.Point(146, 190);
+      this.txtOS.Name = "txtOS";
+      this.txtOS.Size = new System.Drawing.Size(390, 20);
+      this.txtOS.TabIndex = 26;
+      // 
+      // label15
+      // 
+      this.label15.AutoSize = true;
+      this.label15.Location = new System.Drawing.Point(3, 219);
+      this.label15.Name = "label15";
+      this.label15.Size = new System.Drawing.Size(35, 13);
+      this.label15.TabIndex = 25;
+      this.label15.Text = "State:";
+      // 
+      // label14
+      // 
+      this.label14.AutoSize = true;
+      this.label14.Location = new System.Drawing.Point(3, 193);
+      this.label14.Name = "label14";
+      this.label14.Size = new System.Drawing.Size(93, 13);
+      this.label14.TabIndex = 24;
+      this.label14.Text = "Operating System:";
+      // 
+      // txtDetailsDescription
+      // 
+      this.txtDetailsDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtDetailsDescription.Enabled = false;
+      this.txtDetailsDescription.Location = new System.Drawing.Point(146, 86);
+      this.txtDetailsDescription.Name = "txtDetailsDescription";
+      this.txtDetailsDescription.Size = new System.Drawing.Size(390, 20);
+      this.txtDetailsDescription.TabIndex = 23;
+      // 
+      // label13
+      // 
+      this.label13.AutoSize = true;
+      this.label13.Location = new System.Drawing.Point(3, 89);
+      this.label13.Name = "label13";
+      this.label13.Size = new System.Drawing.Size(63, 13);
+      this.label13.TabIndex = 22;
+      this.label13.Text = "Description:";
+      // 
+      // txtName
+      // 
+      this.txtName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtName.Location = new System.Drawing.Point(146, 8);
+      this.txtName.Name = "txtName";
+      this.txtName.Size = new System.Drawing.Size(390, 20);
+      this.txtName.TabIndex = 21;
+      this.txtName.TextChanged += new System.EventHandler(this.txtName_TextChanged);
+      // 
+      // txtCPU
+      // 
+      this.txtCPU.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtCPU.Enabled = false;
+      this.txtCPU.Location = new System.Drawing.Point(146, 112);
+      this.txtCPU.Name = "txtCPU";
+      this.txtCPU.Size = new System.Drawing.Size(390, 20);
+      this.txtCPU.TabIndex = 20;
+      // 
+      // txtMemory
+      // 
+      this.txtMemory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtMemory.Enabled = false;
+      this.txtMemory.Location = new System.Drawing.Point(146, 138);
+      this.txtMemory.Name = "txtMemory";
+      this.txtMemory.Size = new System.Drawing.Size(390, 20);
+      this.txtMemory.TabIndex = 19;
+      // 
+      // txtLastHeartbeat
+      // 
+      this.txtLastHeartbeat.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtLastHeartbeat.Enabled = false;
+      this.txtLastHeartbeat.Location = new System.Drawing.Point(146, 242);
+      this.txtLastHeartbeat.Name = "txtLastHeartbeat";
+      this.txtLastHeartbeat.Size = new System.Drawing.Size(390, 20);
+      this.txtLastHeartbeat.TabIndex = 18;
+      // 
+      // label12
+      // 
+      this.label12.AutoSize = true;
+      this.label12.Location = new System.Drawing.Point(3, 245);
+      this.label12.Name = "label12";
+      this.label12.Size = new System.Drawing.Size(80, 13);
+      this.label12.TabIndex = 17;
+      this.label12.Text = "Last Heartbeat:";
+      // 
+      // label11
+      // 
+      this.label11.AutoSize = true;
+      this.label11.Location = new System.Drawing.Point(3, 141);
+      this.label11.Name = "label11";
+      this.label11.Size = new System.Drawing.Size(47, 13);
+      this.label11.TabIndex = 16;
+      this.label11.Text = "Memory:";
+      // 
+      // label10
+      // 
+      this.label10.AutoSize = true;
+      this.label10.Location = new System.Drawing.Point(3, 115);
+      this.label10.Name = "label10";
+      this.label10.Size = new System.Drawing.Size(32, 13);
+      this.label10.TabIndex = 15;
+      this.label10.Text = "CPU:";
+      // 
+      // label9
+      // 
+      this.label9.AutoSize = true;
+      this.label9.Location = new System.Drawing.Point(3, 11);
+      this.label9.Name = "label9";
+      this.label9.Size = new System.Drawing.Size(38, 13);
+      this.label9.TabIndex = 14;
+      this.label9.Text = "Name:";
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(3, 167);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(70, 13);
+      this.label1.TabIndex = 28;
+      this.label1.Text = "Free memory:";
+      // 
+      // txtFreeMemory
+      // 
+      this.txtFreeMemory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtFreeMemory.Enabled = false;
+      this.txtFreeMemory.Location = new System.Drawing.Point(146, 164);
+      this.txtFreeMemory.Name = "txtFreeMemory";
+      this.txtFreeMemory.Size = new System.Drawing.Size(390, 20);
+      this.txtFreeMemory.TabIndex = 29;
+      // 
+      // txtId
+      // 
+      this.txtId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtId.Enabled = false;
+      this.txtId.Location = new System.Drawing.Point(146, 60);
+      this.txtId.Name = "txtId";
+      this.txtId.Size = new System.Drawing.Size(390, 20);
+      this.txtId.TabIndex = 30;
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(3, 63);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(19, 13);
+      this.label2.TabIndex = 31;
+      this.label2.Text = "Id:";
+      // 
+      // label3
+      // 
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(3, 37);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(137, 13);
+      this.label3.TabIndex = 32;
+      this.label3.Text = "Heartbeat Intervall (in sec) :";
+      // 
+      // txtHbIntervall
+      // 
+      this.txtHbIntervall.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtHbIntervall.Location = new System.Drawing.Point(146, 34);
+      this.txtHbIntervall.Name = "txtHbIntervall";
+      this.txtHbIntervall.Size = new System.Drawing.Size(390, 20);
+      this.txtHbIntervall.TabIndex = 33;
+      this.txtHbIntervall.TextChanged += new System.EventHandler(this.txtHbIntervall_TextChanged);
+      // 
+      // SlaveView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.txtHbIntervall);
+      this.Controls.Add(this.label3);
+      this.Controls.Add(this.label2);
+      this.Controls.Add(this.txtId);
+      this.Controls.Add(this.txtFreeMemory);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.txtSlaveState);
+      this.Controls.Add(this.txtOS);
+      this.Controls.Add(this.label15);
+      this.Controls.Add(this.label14);
+      this.Controls.Add(this.txtDetailsDescription);
+      this.Controls.Add(this.label13);
+      this.Controls.Add(this.txtName);
+      this.Controls.Add(this.txtCPU);
+      this.Controls.Add(this.txtMemory);
+      this.Controls.Add(this.txtLastHeartbeat);
+      this.Controls.Add(this.label12);
+      this.Controls.Add(this.label11);
+      this.Controls.Add(this.label10);
+      this.Controls.Add(this.label9);
+      this.Name = "SlaveView";
+      this.Size = new System.Drawing.Size(539, 267);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox txtSlaveState;
+    private System.Windows.Forms.TextBox txtOS;
+    private System.Windows.Forms.Label label15;
+    private System.Windows.Forms.Label label14;
+    private System.Windows.Forms.TextBox txtDetailsDescription;
+    private System.Windows.Forms.Label label13;
+    private System.Windows.Forms.TextBox txtName;
+    private System.Windows.Forms.TextBox txtCPU;
+    private System.Windows.Forms.TextBox txtMemory;
+    private System.Windows.Forms.TextBox txtLastHeartbeat;
+    private System.Windows.Forms.Label label12;
+    private System.Windows.Forms.Label label11;
+    private System.Windows.Forms.Label label10;
+    private System.Windows.Forms.Label label9;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.TextBox txtFreeMemory;
+    private System.Windows.Forms.TextBox txtId;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.Label label3;
+    private System.Windows.Forms.TextBox txtHbIntervall;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/SlaveView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/SlaveView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/SlaveView.cs	(revision 7085)
@@ -0,0 +1,134 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.Hive.Administrator.Views {
+  [View("SlaveView")]
+  [Content(typeof(Resource), IsDefaultView = true)]
+  public partial class SlaveView : ItemView {
+    public new Resource Content {
+      get { return (Resource)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public SlaveView() {
+      InitializeComponent();
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        ShowSlaveUI(true);
+        txtName.Clear();
+        txtCPU.Clear();
+        txtDetailsDescription.Clear();
+        txtMemory.Clear();
+        txtOS.Clear();
+        txtSlaveState.Clear();
+        txtLastHeartbeat.Clear();
+        txtFreeMemory.Clear();
+        txtId.Clear();
+        txtHbIntervall.Clear();
+      } else {
+        if (Content.GetType() == typeof(Slave)) {
+          ShowSlaveUI(true);
+          Slave ct = (Slave)Content;
+          txtName.Text = ct.Name;
+          txtHbIntervall.Text = ct.HbInterval.ToString();
+          txtCPU.Text = string.Format("{0} Cores @ {1} Mhz, Arch.: {2}", ct.Cores.ToString(), ct.CpuSpeed.ToString(), ct.CpuArchitecture.ToString());
+          txtDetailsDescription.Text = ct.Description;
+          txtMemory.Text = ct.Memory.ToString();
+          txtOS.Text = ct.OperatingSystem;
+          txtSlaveState.Text = ct.SlaveState.ToString();
+          txtLastHeartbeat.Text = ct.LastHeartbeat.ToString();
+          txtFreeMemory.Text = ct.FreeMemory.ToString();
+          txtId.Text = ct.Id.ToString();
+        } else if (Content.GetType() == typeof(SlaveGroup)) {
+          SlaveGroup ct = (SlaveGroup)Content;
+          txtName.Text = ct.Name;
+          txtHbIntervall.Text = ct.HbInterval.ToString();
+          ShowSlaveUI(false);
+        } else {
+          throw new Exception("Unknown Resource in SlaveView");
+        }
+      }
+    }
+
+    private void ShowSlaveUI(bool show) {
+      label2.Visible = show;
+      label1.Visible = show;
+      label10.Visible = show;
+      label11.Visible = show;
+      label12.Visible = show;
+      label13.Visible = show;
+      label14.Visible = show;
+      label15.Visible = show;
+      txtCPU.Visible = show;
+      txtDetailsDescription.Visible = show;
+      txtMemory.Visible = show;
+      txtOS.Visible = show;
+      txtSlaveState.Visible = show;
+      txtLastHeartbeat.Visible = show;
+      txtFreeMemory.Visible = show;
+      txtId.Visible = show;
+      txtName.Enabled = !show;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    private void txtName_TextChanged(object sender, EventArgs e) {
+      if (Content != null && Content is SlaveGroup) {
+        Content.Name = txtName.Text;
+      }
+    }
+
+    private void txtHbIntervall_TextChanged(object sender, EventArgs e) {
+      if (Content != null) {
+        if (txtHbIntervall.Text.Length > 0) {
+          try {
+            int interval = int.Parse(txtHbIntervall.Text);
+            Content.HbInterval = interval;
+          }
+          catch (Exception) {
+            MessageBox.Show("Please enter a numeric value for the Heartbeat Interval.", "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            txtHbIntervall.Text = "10";
+          }
+        }
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/SlaveView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/SlaveView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Administrator/3.3/Views/SlaveView.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj	(revision 7085)
@@ -0,0 +1,246 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{DBFD7205-61AF-40EF-8776-3052DEF91CF3}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Hive.JobManager</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Hive.JobManager-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Xml.Linq" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Views\HiveJobManagerView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\HiveJobManagerView.Designer.cs">
+      <DependentUpon>HiveJobManagerView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="MenuItems\JobManagerMenuItem.cs" />
+    <Compile Include="Views\HiveJobPermissionListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\HiveJobPermissionListView.Designer.cs">
+      <DependentUpon>HiveJobPermissionListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\HiveJobPermissionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\HiveJobPermissionView.Designer.cs">
+      <DependentUpon>HiveJobPermissionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\RefreshableHiveJobListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\RefreshableHiveJobListView.Designer.cs">
+      <DependentUpon>RefreshableHiveJobListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\RefreshableHiveJobView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\RefreshableHiveJobView.Designer.cs">
+      <DependentUpon>RefreshableHiveJobView.cs</DependentUpon>
+    </Compile>
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Views\HiveJobManagerView.resx">
+      <DependentUpon>HiveJobManagerView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\HiveJobPermissionView.resx">
+      <DependentUpon>HiveJobPermissionView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\RefreshableHiveJobView.resx">
+      <DependentUpon>RefreshableHiveJobView.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive.Views\3.3\HeuristicLab.Clients.Hive.Views-3.3.csproj">
+      <Project>{E1D6C801-892A-406A-B606-F158E36DD3C3}</Project>
+      <Name>HeuristicLab.Clients.Hive.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive\3.3\HeuristicLab.Clients.Hive-3.3.csproj">
+      <Project>{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}</Project>
+      <Name>HeuristicLab.Clients.Hive-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive\3.3\HeuristicLab.Hive-3.3.csproj">
+      <Project>{F98A1740-9AC9-4D36-A582-6A2D0D06978D}</Project>
+      <Name>HeuristicLab.Hive-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
+      <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
+      <Name>HeuristicLab.MainForm-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimizer\3.3\HeuristicLab.Optimizer-3.3.csproj">
+      <Project>{C664305E-497C-4533-A140-967DEDB05C19}</Project>
+      <Name>HeuristicLab.Optimizer-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/MenuItems/JobManagerMenuItem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/MenuItems/JobManagerMenuItem.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/MenuItems/JobManagerMenuItem.cs	(revision 7085)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.Clients.Hive;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  public class ExperimentManagerMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "&Job Manager"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Services", "&Hive" }; }
+    }
+    public override void Execute() {
+      MainFormManager.MainForm.ShowContent(HiveClient.Instance);
+    }
+    public override int Position {
+      get { return 10000; }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive.JobManager {
+  [Plugin("HeuristicLab.Clients.Hive.JobManager", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Clients.Hive.JobManager-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Clients.Hive", "3.3")]
+  [PluginDependency("HeuristicLab.Clients.Hive.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Optimizer", "3.3")]
+  public class HeuristicLabClientsHiveJobManagerPlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Clients.Hive.JobManager")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7c14407e-6980-465b-ba3a-4a916d48989b")]
+
+// 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("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.Designer.cs	(revision 7085)
@@ -0,0 +1,93 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.JobManager.Views {
+  partial class HiveJobManagerView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveJobManagerView));
+      this.hiveExperimentListView = new RefreshableHiveJobListView();
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // hiveExperimentListView
+      // 
+      this.hiveExperimentListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.hiveExperimentListView.Caption = "HiveExperimentList View";
+      this.hiveExperimentListView.Content = null;
+      this.hiveExperimentListView.Location = new System.Drawing.Point(3, 33);
+      this.hiveExperimentListView.Name = "hiveExperimentListView";
+      this.hiveExperimentListView.ReadOnly = false;
+      this.hiveExperimentListView.Size = new System.Drawing.Size(729, 488);
+      this.hiveExperimentListView.TabIndex = 0;
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Image = ((System.Drawing.Image)(resources.GetObject("refreshButton.Image")));
+      this.refreshButton.Location = new System.Drawing.Point(3, 3);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshButton.TabIndex = 1;
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // HiveExperimentManagerView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.refreshButton);
+      this.Controls.Add(this.hiveExperimentListView);
+      this.Name = "HiveExperimentManagerView";
+      this.Size = new System.Drawing.Size(735, 524);
+      this.ResumeLayout(false);
+
+    }
+    #endregion
+
+    private RefreshableHiveJobListView hiveExperimentListView;
+    private System.Windows.Forms.Button refreshButton;
+
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.cs	(revision 7085)
@@ -0,0 +1,136 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.ServiceModel.Security;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive.JobManager.Views {
+  /// <summary>
+  /// The base class for visual representations of items.
+  /// </summary>
+  [View("Hive Job Manager")]
+  [Content(typeof(HiveClient), true)]
+  public partial class HiveJobManagerView : AsynchronousContentView {
+
+    public new HiveClient Content {
+      get { return (HiveClient)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemBaseView"/>.
+    /// </summary>
+    public HiveJobManagerView() {
+      InitializeComponent();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.Refreshing += new EventHandler(Content_Refreshing);
+      Content.Refreshed += new EventHandler(Content_Refreshed);
+      Content.HiveExperimentsChanged += new EventHandler(Content_HiveExperimentsChanged);
+
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.Refreshing -= new EventHandler(Content_Refreshing);
+      Content.Refreshed -= new EventHandler(Content_Refreshed);
+      Content.HiveExperimentsChanged -= new EventHandler(Content_HiveExperimentsChanged);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        hiveExperimentListView.Content = null;
+      } else {
+        hiveExperimentListView.Content = Content.Jobs;
+        if (Content != null)
+          Content.RefreshAsync(new Action<Exception>((Exception ex) => HandleServiceException(ex)));
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      refreshButton.Enabled = Content != null;
+      hiveExperimentListView.Enabled = Content != null;
+    }
+
+    private void Content_Refreshing(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_Refreshing), sender, e);
+      } else {
+        Cursor = Cursors.AppStarting;
+        refreshButton.Enabled = false;
+        hiveExperimentListView.Enabled = false;
+      }
+    }
+    private void Content_Refreshed(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_Refreshed), sender, e);
+      } else {
+        hiveExperimentListView.Content = Content.Jobs;
+        refreshButton.Enabled = true;
+        hiveExperimentListView.Enabled = true;
+        Cursor = Cursors.Default;
+      }
+    }
+
+    private void refreshButton_Click(object sender, EventArgs e) {
+      Content.RefreshAsync(new Action<Exception>((Exception ex) => HandleServiceException(ex)));
+    }
+
+    private void HandleServiceException(Exception ex) {
+      if (ex is MessageSecurityException) {
+        MessageBox.Show("A Message Security error has occured. This normally means that your user name or password is wrong.", "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      } else {
+        ErrorHandling.ShowErrorDialog(this, "Refresh failed.", ex);
+      }
+    }
+
+    protected override void OnClosing(FormClosingEventArgs e) {
+      base.OnClosing(e);
+      if (Content != null && Content.Jobs != null) {
+        foreach (var exp in Content.Jobs.OfType<RefreshableJob>()) {
+          if (exp.RefreshAutomatically) {
+            exp.RefreshAutomatically = false; // stop result polling
+          }
+        }
+      }
+    }
+
+    private void HiveExperiments_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<RefreshableJob> e) {
+      foreach (var item in e.Items) {
+        HiveClient.Delete(item);
+      }
+    }
+
+    private void Content_HiveExperimentsChanged(object sender, EventArgs e) {
+      Content.Jobs.ItemsRemoved += new CollectionItemsChangedEventHandler<RefreshableJob>(HiveExperiments_ItemsRemoved);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.resx	(revision 7085)
@@ -0,0 +1,185 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="refreshButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+</value>
+  </data>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>57</value>
+  </metadata>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionListView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionListView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionListView.Designer.cs	(revision 7085)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.Clients.Hive.JobManager.Views {
+  partial class HiveJobPermissionListView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionListView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionListView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionListView.cs	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.JobManager.Views {
+  [View("Hive Job Permission List")]
+  [Content(typeof(HiveItemCollection<JobPermission>), false)]
+  public partial class HiveJobPermissionListView : ItemCollectionView<JobPermission> {
+
+    private Guid hiveExperimentId;
+    public Guid HiveExperimentId {
+      get { return hiveExperimentId; }
+      set { hiveExperimentId = value; }
+    }
+
+    public HiveJobPermissionListView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Permissions";
+    }
+
+    protected override JobPermission CreateItem() {
+      return new JobPermission() { JobId = this.hiveExperimentId };
+    }
+
+    protected override void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<JobPermission> e) {
+      base.Content_ItemsRemoved(sender, e);
+      foreach (var item in e.Items) {
+        if (item.GrantedUserId != Guid.Empty) {
+          HiveClient.Delete(item);
+        }
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionView.Designer.cs	(revision 7085)
@@ -0,0 +1,101 @@
+﻿namespace HeuristicLab.Clients.Hive.JobManager.Views {
+  partial class HiveJobPermissionView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.usernameLabel = new System.Windows.Forms.Label();
+      this.permissionLabel = new System.Windows.Forms.Label();
+      this.usernameTextBox = new System.Windows.Forms.TextBox();
+      this.permissionComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // storeButton
+      // 
+      this.toolTip.SetToolTip(this.storeButton, "Store Data");
+      // 
+      // usernameLabel
+      // 
+      this.usernameLabel.AutoSize = true;
+      this.usernameLabel.Location = new System.Drawing.Point(3, 27);
+      this.usernameLabel.Name = "usernameLabel";
+      this.usernameLabel.Size = new System.Drawing.Size(58, 13);
+      this.usernameLabel.TabIndex = 1;
+      this.usernameLabel.Text = "Username:";
+      // 
+      // permissionLabel
+      // 
+      this.permissionLabel.AutoSize = true;
+      this.permissionLabel.Location = new System.Drawing.Point(4, 57);
+      this.permissionLabel.Name = "permissionLabel";
+      this.permissionLabel.Size = new System.Drawing.Size(60, 13);
+      this.permissionLabel.TabIndex = 2;
+      this.permissionLabel.Text = "Permission:";
+      // 
+      // usernameTextBox
+      // 
+      this.usernameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.usernameTextBox.Location = new System.Drawing.Point(70, 28);
+      this.usernameTextBox.Name = "usernameTextBox";
+      this.usernameTextBox.Size = new System.Drawing.Size(281, 20);
+      this.usernameTextBox.TabIndex = 3;
+      this.usernameTextBox.TextChanged += new System.EventHandler(this.usernameTextBox_TextChanged);
+      // 
+      // permissionComboBox
+      // 
+      this.permissionComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.permissionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.permissionComboBox.FormattingEnabled = true;
+      this.permissionComboBox.Location = new System.Drawing.Point(70, 54);
+      this.permissionComboBox.Name = "permissionComboBox";
+      this.permissionComboBox.Size = new System.Drawing.Size(281, 21);
+      this.permissionComboBox.TabIndex = 4;
+      this.permissionComboBox.SelectedValueChanged += new System.EventHandler(this.permissionComboBox_SelectedValueChanged);
+      // 
+      // HiveJobPermissionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.usernameLabel);
+      this.Controls.Add(this.permissionComboBox);
+      this.Controls.Add(this.permissionLabel);
+      this.Controls.Add(this.usernameTextBox);
+      this.Name = "HiveJobPermissionView";
+      this.Controls.SetChildIndex(this.usernameTextBox, 0);
+      this.Controls.SetChildIndex(this.permissionLabel, 0);
+      this.Controls.SetChildIndex(this.permissionComboBox, 0);
+      this.Controls.SetChildIndex(this.usernameLabel, 0);
+      this.Controls.SetChildIndex(this.storeButton, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+    #endregion
+
+    private System.Windows.Forms.Label usernameLabel;
+    private System.Windows.Forms.Label permissionLabel;
+    private System.Windows.Forms.TextBox usernameTextBox;
+    private System.Windows.Forms.ComboBox permissionComboBox;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionView.cs	(revision 7085)
@@ -0,0 +1,75 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Clients.Hive.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.JobManager.Views {
+  [View("Hive Job Permission")]
+  [Content(typeof(JobPermission), true)]
+  public partial class HiveJobPermissionView : HiveItemView {
+    public new JobPermission Content {
+      get { return (JobPermission)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public HiveJobPermissionView() {
+      InitializeComponent();
+      permissionComboBox.Items.Add(Permission.Read);
+      permissionComboBox.Items.Add(Permission.Full);
+      permissionComboBox.SelectedItem = Permission.Read;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        usernameTextBox.Text = string.Empty;
+        permissionComboBox.SelectedIndex = 0;
+      } else {
+        usernameTextBox.Text = Content.GrantedUserName;
+        permissionComboBox.SelectedItem = Content.Permission;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      if (Content == null) {
+        usernameTextBox.Enabled = false;
+        permissionComboBox.Enabled = false;
+      } else {
+        usernameTextBox.Enabled = true;
+        permissionComboBox.Enabled = true;
+      }
+    }
+
+    private void usernameTextBox_TextChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.GrantedUserName = usernameTextBox.Text;
+      }
+    }
+
+    private void permissionComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Permission = (Permission)permissionComboBox.SelectedItem;
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobPermissionView.resx	(revision 7085)
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.Designer.cs	(revision 7085)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.Clients.Hive.JobManager.Views {
+  partial class RefreshableHiveJobListView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs	(revision 7085)
@@ -0,0 +1,138 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.JobManager.Views {
+  [View("Refreshable Hive Job List")]
+  [Content(typeof(ItemCollection<RefreshableJob>), false)]
+  public partial class RefreshableHiveJobListView : HeuristicLab.Core.Views.ItemCollectionView<RefreshableJob> {
+
+    public RefreshableHiveJobListView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Jobs";
+      this.itemsListView.View = View.Details;
+      this.itemsListView.Columns.Clear();
+      this.itemsListView.Columns.Add(new ColumnHeader("Date") { Text = "Date" });
+      this.itemsListView.Columns.Add(new ColumnHeader("Name") { Text = "Name" });
+      foreach (ColumnHeader c in this.itemsListView.Columns) {
+        c.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
+      }
+      this.itemsListView.HeaderStyle = ColumnHeaderStyle.Clickable;
+      this.itemsListView.FullRowSelect = true;
+      this.itemsListView.Sorting = SortOrder.Ascending;
+      this.itemsListView.Sort();
+    }
+
+    protected override RefreshableJob CreateItem() {
+      var refreshableJob = new RefreshableJob() { IsAllowedPrivileged = HiveClient.Instance.IsAllowedPrivileged };
+      refreshableJob.Job.Name = "New Hive Job";
+      return refreshableJob;
+    }
+
+    protected override void removeButton_Click(object sender, EventArgs e) {
+      DialogResult result = MessageBox.Show("This action will permanently delete this job (also on the hive server). Continue?", "HeuristicLab Hive Job Manager", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
+      if (result == DialogResult.OK) {
+        base.removeButton_Click(sender, e);
+      }
+    }
+
+    protected override void Content_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<RefreshableJob> e) {
+      base.Content_ItemsAdded(sender, e);
+      foreach (ColumnHeader c in this.itemsListView.Columns) {
+        c.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+      }
+      foreach (var item in e.Items) {
+        item.ItemImageChanged += new EventHandler(item_ItemImageChanged);
+      }
+    }
+
+    void item_ItemImageChanged(object sender, EventArgs e) {
+        if (this.itemsListView.InvokeRequired) {
+            Invoke(new EventHandler(item_ItemImageChanged), sender, e); 
+        } else { 
+          RefreshableJob job = sender as RefreshableJob;
+          if (job != null) {
+            foreach (ListViewItem item in this.itemsListView.Items) {
+                if (item.Tag != null)
+                {
+                    RefreshableJob cur = item.Tag as RefreshableJob;
+                    if (cur != null && cur == job)
+                    {
+                        this.UpdateListViewItemImage(item);
+                    }
+                }
+            }
+         }
+      }
+    }
+
+    protected override void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<RefreshableJob> e) {
+      base.Content_ItemsRemoved(sender, e);
+      foreach (var item in e.Items) {
+        item.ItemImageChanged -= new EventHandler(item_ItemImageChanged);
+      }
+      if (Content != null && Content.Count == 0) {
+        foreach (ColumnHeader c in this.itemsListView.Columns) {
+          c.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
+        }
+      }
+    }
+
+    protected override ListViewItem CreateListViewItem(RefreshableJob item) {
+      ListViewItem listViewItem = base.CreateListViewItem(item);
+      listViewItem.SubItems.Clear();
+      listViewItem.SubItems.Insert(0, new ListViewItem.ListViewSubItem(listViewItem, item.Job.DateCreated.ToString("dd.MM.yyyy HH:mm")));
+      listViewItem.SubItems.Insert(1, new ListViewItem.ListViewSubItem(listViewItem, item.Job.Name));
+      listViewItem.Group = GetListViewGroup(item.Job.OwnerUsername);
+      return listViewItem;
+    }
+
+    protected override void UpdateListViewItemText(ListViewItem listViewItem) {
+      if (listViewItem == null) throw new ArgumentNullException();
+      var item = listViewItem.Tag as RefreshableJob;
+      listViewItem.SubItems[0].Text = item == null ? "null" : item.Job.DateCreated.ToString("dd.MM.yyyy HH:mm");
+      listViewItem.SubItems[1].Text = item == null ? "null" : item.Job.Name;
+      listViewItem.Group = GetListViewGroup(item.Job.OwnerUsername);
+      listViewItem.ToolTipText = item == null ? string.Empty : item.ItemName + ": " + item.ItemDescription;
+    }
+
+    //drag'n'drop is not supported
+    protected override void itemsListView_ItemDrag(object sender, ItemDragEventArgs e) { }
+    protected override void itemsListView_DragEnter(object sender, DragEventArgs e) { }
+    protected override void itemsListView_DragOver(object sender, DragEventArgs e) { }
+    protected override void itemsListView_DragDrop(object sender, DragEventArgs e) { }
+
+    private ListViewGroup GetListViewGroup(string groupName) {
+      foreach (ListViewGroup group in itemsListView.Groups) {
+        if (group.Name == groupName)
+          return group;
+      }
+      var newGroup = new ListViewGroup(string.Format("Owner ({0})", groupName), HorizontalAlignment.Left) { Name = groupName };
+      itemsListView.Groups.Add(newGroup);
+      return newGroup;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.Designer.cs	(revision 7085)
@@ -0,0 +1,509 @@
+﻿namespace HeuristicLab.Clients.Hive.JobManager.Views {
+  partial class RefreshableHiveJobView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RefreshableHiveJobView));
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.tasksTabPage = new System.Windows.Forms.TabPage();
+      this.jobsTreeView = new HeuristicLab.Clients.Hive.Views.ExperimentManager.HiveTaskItemTreeView();
+      this.permissionTabPage = new System.Windows.Forms.TabPage();
+      this.refreshPermissionsButton = new System.Windows.Forms.Button();
+      this.hiveExperimentPermissionListView = new HeuristicLab.Clients.Hive.JobManager.Views.HiveJobPermissionListView();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.stateTabPage = new System.Windows.Forms.TabPage();
+      this.stateLogViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.logTabPage = new System.Windows.Forms.TabPage();
+      this.logView = new HeuristicLab.Core.Views.LogView();
+      this.startButton = new System.Windows.Forms.Button();
+      this.stopButton = new System.Windows.Forms.Button();
+      this.resetButton = new System.Windows.Forms.Button();
+      this.executionTimeLabel = new System.Windows.Forms.Label();
+      this.executionTimeTextBox = new System.Windows.Forms.TextBox();
+      this.pauseButton = new System.Windows.Forms.Button();
+      this.resourceIdsLabel = new System.Windows.Forms.Label();
+      this.resourceNamesTextBox = new System.Windows.Forms.TextBox();
+      this.nameLabel = new System.Windows.Forms.Label();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.isPrivilegedCheckBox = new System.Windows.Forms.CheckBox();
+      this.refreshAutomaticallyCheckBox = new System.Windows.Forms.CheckBox();
+      this.infoGroupBox = new System.Windows.Forms.GroupBox();
+      this.finishedTextBox = new System.Windows.Forms.TextBox();
+      this.calculatingTextBox = new System.Windows.Forms.TextBox();
+      this.jobsTextBox = new System.Windows.Forms.TextBox();
+      this.finishedLabel = new System.Windows.Forms.Label();
+      this.calculatingLabel = new System.Windows.Forms.Label();
+      this.jobsLabel = new System.Windows.Forms.Label();
+      this.runCollectionViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.tabControl.SuspendLayout();
+      this.tasksTabPage.SuspendLayout();
+      this.permissionTabPage.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.stateTabPage.SuspendLayout();
+      this.logTabPage.SuspendLayout();
+      this.infoGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tabControl
+      // 
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl.Controls.Add(this.tasksTabPage);
+      this.tabControl.Controls.Add(this.permissionTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Controls.Add(this.stateTabPage);
+      this.tabControl.Controls.Add(this.logTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 78);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(717, 452);
+      this.tabControl.TabIndex = 4;
+      this.tabControl.SelectedIndexChanged += new System.EventHandler(this.tabControl_SelectedIndexChanged);
+      // 
+      // tasksTabPage
+      // 
+      this.tasksTabPage.Controls.Add(this.jobsTreeView);
+      this.tasksTabPage.Location = new System.Drawing.Point(4, 22);
+      this.tasksTabPage.Name = "tasksTabPage";
+      this.tasksTabPage.Size = new System.Drawing.Size(709, 426);
+      this.tasksTabPage.TabIndex = 5;
+      this.tasksTabPage.Text = "Tasks";
+      this.tasksTabPage.UseVisualStyleBackColor = true;
+      // 
+      // jobsTreeView
+      // 
+      this.jobsTreeView.AllowDrop = true;
+      this.jobsTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.jobsTreeView.Caption = "ItemTree View";
+      this.jobsTreeView.Content = null;
+      this.jobsTreeView.Location = new System.Drawing.Point(2, 3);
+      this.jobsTreeView.Name = "jobsTreeView";
+      this.jobsTreeView.ReadOnly = false;
+      this.jobsTreeView.Size = new System.Drawing.Size(704, 420);
+      this.jobsTreeView.TabIndex = 0;
+      this.jobsTreeView.DragDrop += new System.Windows.Forms.DragEventHandler(this.jobsTreeView_DragDrop);
+      this.jobsTreeView.DragEnter += new System.Windows.Forms.DragEventHandler(this.jobsTreeView_DragEnter);
+      this.jobsTreeView.DragOver += new System.Windows.Forms.DragEventHandler(this.jobsTreeView_DragOver);
+      // 
+      // permissionTabPage
+      // 
+      this.permissionTabPage.Controls.Add(this.refreshPermissionsButton);
+      this.permissionTabPage.Controls.Add(this.hiveExperimentPermissionListView);
+      this.permissionTabPage.Location = new System.Drawing.Point(4, 22);
+      this.permissionTabPage.Name = "permissionTabPage";
+      this.permissionTabPage.Size = new System.Drawing.Size(709, 426);
+      this.permissionTabPage.TabIndex = 7;
+      this.permissionTabPage.Text = "Permissions";
+      this.permissionTabPage.UseVisualStyleBackColor = true;
+      // 
+      // refreshPermissionsButton
+      // 
+      this.refreshPermissionsButton.Image = ((System.Drawing.Image)(resources.GetObject("refreshPermissionsButton.Image")));
+      this.refreshPermissionsButton.Location = new System.Drawing.Point(3, 3);
+      this.refreshPermissionsButton.Name = "refreshPermissionsButton";
+      this.refreshPermissionsButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshPermissionsButton.TabIndex = 23;
+      this.toolTip.SetToolTip(this.refreshPermissionsButton, "Refresh Data");
+      this.refreshPermissionsButton.UseVisualStyleBackColor = true;
+      this.refreshPermissionsButton.Click += new System.EventHandler(this.refreshPermissionsButton_Click);
+      // 
+      // hiveExperimentPermissionListView
+      // 
+      this.hiveExperimentPermissionListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.hiveExperimentPermissionListView.Caption = "HiveExperimentPermissionList View";
+      this.hiveExperimentPermissionListView.Content = null;
+      this.hiveExperimentPermissionListView.HiveExperimentId = new System.Guid("00000000-0000-0000-0000-000000000000");
+      this.hiveExperimentPermissionListView.Location = new System.Drawing.Point(3, 33);
+      this.hiveExperimentPermissionListView.Name = "hiveExperimentPermissionListView";
+      this.hiveExperimentPermissionListView.ReadOnly = false;
+      this.hiveExperimentPermissionListView.ShowDetails = true;
+      this.hiveExperimentPermissionListView.Size = new System.Drawing.Size(703, 390);
+      this.hiveExperimentPermissionListView.TabIndex = 0;
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runCollectionViewHost);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.runsTabPage.Size = new System.Drawing.Size(709, 426);
+      this.runsTabPage.TabIndex = 8;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // stateTabPage
+      // 
+      this.stateTabPage.Controls.Add(this.stateLogViewHost);
+      this.stateTabPage.Location = new System.Drawing.Point(4, 22);
+      this.stateTabPage.Name = "stateTabPage";
+      this.stateTabPage.Size = new System.Drawing.Size(709, 426);
+      this.stateTabPage.TabIndex = 6;
+      this.stateTabPage.Text = "Execution History";
+      this.stateTabPage.UseVisualStyleBackColor = true;
+      // 
+      // stateLogViewHost
+      // 
+      this.stateLogViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.stateLogViewHost.Caption = "StateLog View";
+      this.stateLogViewHost.Content = null;
+      this.stateLogViewHost.Enabled = false;
+      this.stateLogViewHost.Location = new System.Drawing.Point(3, 3);
+      this.stateLogViewHost.Name = "stateLogViewHost";
+      this.stateLogViewHost.ReadOnly = false;
+      this.stateLogViewHost.Size = new System.Drawing.Size(703, 420);
+      this.stateLogViewHost.TabIndex = 0;
+      this.stateLogViewHost.ViewsLabelVisible = true;
+      this.stateLogViewHost.ViewType = null;
+      // 
+      // logTabPage
+      // 
+      this.logTabPage.Controls.Add(this.logView);
+      this.logTabPage.Location = new System.Drawing.Point(4, 22);
+      this.logTabPage.Name = "logTabPage";
+      this.logTabPage.Size = new System.Drawing.Size(709, 426);
+      this.logTabPage.TabIndex = 3;
+      this.logTabPage.Text = "Log";
+      this.logTabPage.UseVisualStyleBackColor = true;
+      // 
+      // logView
+      // 
+      this.logView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.logView.Caption = "Log View";
+      this.logView.Content = null;
+      this.logView.Location = new System.Drawing.Point(3, 3);
+      this.logView.Name = "logView";
+      this.logView.ReadOnly = false;
+      this.logView.Size = new System.Drawing.Size(703, 420);
+      this.logView.TabIndex = 0;
+      // 
+      // startButton
+      // 
+      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.startButton.Image = ((System.Drawing.Image)(resources.GetObject("startButton.Image")));
+      this.startButton.Location = new System.Drawing.Point(0, 536);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(24, 24);
+      this.startButton.TabIndex = 5;
+      this.toolTip.SetToolTip(this.startButton, "Start/Resume Experiment");
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.startButton_Click);
+      // 
+      // stopButton
+      // 
+      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stopButton.Image = ((System.Drawing.Image)(resources.GetObject("stopButton.Image")));
+      this.stopButton.Location = new System.Drawing.Point(60, 536);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(24, 24);
+      this.stopButton.TabIndex = 7;
+      this.toolTip.SetToolTip(this.stopButton, "Stop Experiment");
+      this.stopButton.UseVisualStyleBackColor = true;
+      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
+      // 
+      // resetButton
+      // 
+      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resetButton.Enabled = false;
+      this.resetButton.Image = ((System.Drawing.Image)(resources.GetObject("resetButton.Image")));
+      this.resetButton.Location = new System.Drawing.Point(90, 536);
+      this.resetButton.Name = "resetButton";
+      this.resetButton.Size = new System.Drawing.Size(24, 24);
+      this.resetButton.TabIndex = 8;
+      this.toolTip.SetToolTip(this.resetButton, "Reset Experiment");
+      this.resetButton.UseVisualStyleBackColor = true;
+      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeLabel.AutoSize = true;
+      this.executionTimeLabel.Location = new System.Drawing.Point(491, 543);
+      this.executionTimeLabel.Name = "executionTimeLabel";
+      this.executionTimeLabel.Size = new System.Drawing.Size(83, 13);
+      this.executionTimeLabel.TabIndex = 9;
+      this.executionTimeLabel.Text = "&Execution Time:";
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeTextBox.Location = new System.Drawing.Point(580, 540);
+      this.executionTimeTextBox.Name = "executionTimeTextBox";
+      this.executionTimeTextBox.ReadOnly = true;
+      this.executionTimeTextBox.Size = new System.Drawing.Size(137, 20);
+      this.executionTimeTextBox.TabIndex = 10;
+      // 
+      // pauseButton
+      // 
+      this.pauseButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.pauseButton.Enabled = false;
+      this.pauseButton.Image = ((System.Drawing.Image)(resources.GetObject("pauseButton.Image")));
+      this.pauseButton.Location = new System.Drawing.Point(30, 536);
+      this.pauseButton.Name = "pauseButton";
+      this.pauseButton.Size = new System.Drawing.Size(24, 24);
+      this.pauseButton.TabIndex = 6;
+      this.toolTip.SetToolTip(this.pauseButton, "Pause Experiment");
+      this.pauseButton.UseVisualStyleBackColor = true;
+      this.pauseButton.Click += new System.EventHandler(this.pauseButton_Click);
+      // 
+      // resourceIdsLabel
+      // 
+      this.resourceIdsLabel.AutoSize = true;
+      this.resourceIdsLabel.Location = new System.Drawing.Point(3, 56);
+      this.resourceIdsLabel.Name = "resourceIdsLabel";
+      this.resourceIdsLabel.Size = new System.Drawing.Size(61, 13);
+      this.resourceIdsLabel.TabIndex = 12;
+      this.resourceIdsLabel.Text = "Resources:";
+      // 
+      // resourceNamesTextBox
+      // 
+      this.resourceNamesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.resourceNamesTextBox.Location = new System.Drawing.Point(70, 52);
+      this.resourceNamesTextBox.Name = "resourceNamesTextBox";
+      this.resourceNamesTextBox.Size = new System.Drawing.Size(415, 20);
+      this.resourceNamesTextBox.TabIndex = 14;
+      this.resourceNamesTextBox.Validated += new System.EventHandler(this.resourceNamesTextBox_Validated);
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.AutoSize = true;
+      this.nameLabel.Location = new System.Drawing.Point(3, 30);
+      this.nameLabel.Name = "nameLabel";
+      this.nameLabel.Size = new System.Drawing.Size(38, 13);
+      this.nameLabel.TabIndex = 20;
+      this.nameLabel.Text = "Name:";
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.nameTextBox.Location = new System.Drawing.Point(70, 27);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.Size = new System.Drawing.Size(501, 20);
+      this.nameTextBox.TabIndex = 21;
+      this.nameTextBox.Validated += new System.EventHandler(this.nameTextBox_Validated);
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Image = ((System.Drawing.Image)(resources.GetObject("refreshButton.Image")));
+      this.refreshButton.Location = new System.Drawing.Point(3, 0);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshButton.TabIndex = 22;
+      this.toolTip.SetToolTip(this.refreshButton, "Refresh Data");
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // isPrivilegedCheckBox
+      // 
+      this.isPrivilegedCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.isPrivilegedCheckBox.AutoSize = true;
+      this.isPrivilegedCheckBox.Location = new System.Drawing.Point(491, 53);
+      this.isPrivilegedCheckBox.Name = "isPrivilegedCheckBox";
+      this.isPrivilegedCheckBox.Size = new System.Drawing.Size(72, 17);
+      this.isPrivilegedCheckBox.TabIndex = 26;
+      this.isPrivilegedCheckBox.Text = "Privileged";
+      this.toolTip.SetToolTip(this.isPrivilegedCheckBox, "If checked, the task will be executed in a privileged sandbox on the slave.");
+      this.isPrivilegedCheckBox.UseVisualStyleBackColor = true;
+      this.isPrivilegedCheckBox.Validated += new System.EventHandler(this.isPrivilegedCheckBox_Validated);
+      // 
+      // refreshAutomaticallyCheckBox
+      // 
+      this.refreshAutomaticallyCheckBox.AutoSize = true;
+      this.refreshAutomaticallyCheckBox.Location = new System.Drawing.Point(30, 5);
+      this.refreshAutomaticallyCheckBox.Name = "refreshAutomaticallyCheckBox";
+      this.refreshAutomaticallyCheckBox.Size = new System.Drawing.Size(127, 17);
+      this.refreshAutomaticallyCheckBox.TabIndex = 24;
+      this.refreshAutomaticallyCheckBox.Text = "&Refresh automatically";
+      this.refreshAutomaticallyCheckBox.UseVisualStyleBackColor = true;
+      this.refreshAutomaticallyCheckBox.Validated += new System.EventHandler(this.refreshAutomaticallyCheckBox_Validated);
+      // 
+      // infoGroupBox
+      // 
+      this.infoGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.infoGroupBox.Controls.Add(this.finishedTextBox);
+      this.infoGroupBox.Controls.Add(this.calculatingTextBox);
+      this.infoGroupBox.Controls.Add(this.jobsTextBox);
+      this.infoGroupBox.Controls.Add(this.finishedLabel);
+      this.infoGroupBox.Controls.Add(this.calculatingLabel);
+      this.infoGroupBox.Controls.Add(this.jobsLabel);
+      this.infoGroupBox.Location = new System.Drawing.Point(580, 5);
+      this.infoGroupBox.Name = "infoGroupBox";
+      this.infoGroupBox.Size = new System.Drawing.Size(133, 89);
+      this.infoGroupBox.TabIndex = 25;
+      this.infoGroupBox.TabStop = false;
+      this.infoGroupBox.Text = "Tasks";
+      // 
+      // finishedTextBox
+      // 
+      this.finishedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.finishedTextBox.Location = new System.Drawing.Point(74, 64);
+      this.finishedTextBox.Name = "finishedTextBox";
+      this.finishedTextBox.Size = new System.Drawing.Size(53, 20);
+      this.finishedTextBox.TabIndex = 5;
+      // 
+      // calculatingTextBox
+      // 
+      this.calculatingTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.calculatingTextBox.Location = new System.Drawing.Point(74, 40);
+      this.calculatingTextBox.Name = "calculatingTextBox";
+      this.calculatingTextBox.Size = new System.Drawing.Size(53, 20);
+      this.calculatingTextBox.TabIndex = 4;
+      // 
+      // jobsTextBox
+      // 
+      this.jobsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.jobsTextBox.Location = new System.Drawing.Point(74, 16);
+      this.jobsTextBox.Name = "jobsTextBox";
+      this.jobsTextBox.Size = new System.Drawing.Size(53, 20);
+      this.jobsTextBox.TabIndex = 3;
+      // 
+      // finishedLabel
+      // 
+      this.finishedLabel.AutoSize = true;
+      this.finishedLabel.Location = new System.Drawing.Point(6, 67);
+      this.finishedLabel.Name = "finishedLabel";
+      this.finishedLabel.Size = new System.Drawing.Size(49, 13);
+      this.finishedLabel.TabIndex = 2;
+      this.finishedLabel.Text = "Finished:";
+      // 
+      // calculatingLabel
+      // 
+      this.calculatingLabel.AutoSize = true;
+      this.calculatingLabel.Location = new System.Drawing.Point(6, 43);
+      this.calculatingLabel.Name = "calculatingLabel";
+      this.calculatingLabel.Size = new System.Drawing.Size(62, 13);
+      this.calculatingLabel.TabIndex = 1;
+      this.calculatingLabel.Text = "Calculating:";
+      // 
+      // jobsLabel
+      // 
+      this.jobsLabel.AutoSize = true;
+      this.jobsLabel.Location = new System.Drawing.Point(6, 19);
+      this.jobsLabel.Name = "jobsLabel";
+      this.jobsLabel.Size = new System.Drawing.Size(46, 13);
+      this.jobsLabel.TabIndex = 0;
+      this.jobsLabel.Text = "Waiting:";
+      // 
+      // runCollectionViewHost
+      // 
+      this.runCollectionViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.runCollectionViewHost.Caption = "View";
+      this.runCollectionViewHost.Content = null;
+      this.runCollectionViewHost.Enabled = false;
+      this.runCollectionViewHost.Location = new System.Drawing.Point(3, 3);
+      this.runCollectionViewHost.Name = "runCollectionViewHost";
+      this.runCollectionViewHost.ReadOnly = false;
+      this.runCollectionViewHost.Size = new System.Drawing.Size(703, 420);
+      this.runCollectionViewHost.TabIndex = 2;
+      this.runCollectionViewHost.ViewsLabelVisible = true;
+      this.runCollectionViewHost.ViewType = null;
+      // 
+      // RefreshableHiveJobView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.isPrivilegedCheckBox);
+      this.Controls.Add(this.infoGroupBox);
+      this.Controls.Add(this.refreshAutomaticallyCheckBox);
+      this.Controls.Add(this.refreshButton);
+      this.Controls.Add(this.nameTextBox);
+      this.Controls.Add(this.nameLabel);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.startButton);
+      this.Controls.Add(this.executionTimeTextBox);
+      this.Controls.Add(this.executionTimeLabel);
+      this.Controls.Add(this.resourceNamesTextBox);
+      this.Controls.Add(this.pauseButton);
+      this.Controls.Add(this.resourceIdsLabel);
+      this.Controls.Add(this.stopButton);
+      this.Controls.Add(this.resetButton);
+      this.Name = "RefreshableHiveJobView";
+      this.Size = new System.Drawing.Size(717, 560);
+      this.tabControl.ResumeLayout(false);
+      this.tasksTabPage.ResumeLayout(false);
+      this.permissionTabPage.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
+      this.stateTabPage.ResumeLayout(false);
+      this.logTabPage.ResumeLayout(false);
+      this.infoGroupBox.ResumeLayout(false);
+      this.infoGroupBox.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+    #endregion
+
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.Button startButton;
+    private System.Windows.Forms.Button stopButton;
+    private System.Windows.Forms.Button resetButton;
+    private System.Windows.Forms.Label executionTimeLabel;
+    private System.Windows.Forms.TextBox executionTimeTextBox;
+    private System.Windows.Forms.Button pauseButton;
+    private System.Windows.Forms.Label resourceIdsLabel;
+    private System.Windows.Forms.TextBox resourceNamesTextBox;
+    private System.Windows.Forms.TabPage logTabPage;
+    private Core.Views.LogView logView;
+    private System.Windows.Forms.TabPage tasksTabPage;
+    private HeuristicLab.Clients.Hive.Views.ExperimentManager.HiveTaskItemTreeView jobsTreeView;
+    private System.Windows.Forms.Label nameLabel;
+    private System.Windows.Forms.TextBox nameTextBox;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.Button refreshButton;
+    private System.Windows.Forms.CheckBox refreshAutomaticallyCheckBox;
+    private System.Windows.Forms.GroupBox infoGroupBox;
+    private System.Windows.Forms.TextBox finishedTextBox;
+    private System.Windows.Forms.TextBox calculatingTextBox;
+    private System.Windows.Forms.TextBox jobsTextBox;
+    private System.Windows.Forms.Label finishedLabel;
+    private System.Windows.Forms.Label calculatingLabel;
+    private System.Windows.Forms.Label jobsLabel;
+    private System.Windows.Forms.CheckBox isPrivilegedCheckBox;
+    private System.Windows.Forms.TabPage stateTabPage;
+    private HeuristicLab.MainForm.WindowsForms.ViewHost stateLogViewHost;
+    private System.Windows.Forms.TabPage permissionTabPage;
+    private HiveJobPermissionListView hiveExperimentPermissionListView;
+    private System.Windows.Forms.Button refreshPermissionsButton;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private MainForm.WindowsForms.ViewHost runCollectionViewHost;
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 7085)
@@ -0,0 +1,495 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ComponentModel;
+using System.Linq;
+using System.Threading;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Hive.Views;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive.JobManager.Views {
+  /// <summary>
+  /// The base class for visual representations of items.
+  /// </summary>
+  [View("Hive Job View")]
+  [Content(typeof(RefreshableJob), true)]
+  public partial class RefreshableHiveJobView : HeuristicLab.Core.Views.ItemView {
+    private ProgressView progressView;
+
+    public new RefreshableJob Content {
+      get { return (RefreshableJob)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemBaseView"/>.
+    /// </summary>
+    public RefreshableHiveJobView() {
+      InitializeComponent();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.RefreshAutomaticallyChanged += new EventHandler(Content_RefreshAutomaticallyChanged);
+      Content.JobChanged += new EventHandler(Content_HiveExperimentChanged);
+      Content.IsControllableChanged += new EventHandler(Content_IsControllableChanged);
+      Content.JobStatisticsChanged += new EventHandler(Content_JobStatisticsChanged);
+      Content.ExceptionOccured += new EventHandler<EventArgs<Exception>>(Content_ExceptionOccured);
+      Content.StateLogListChanged += new EventHandler(Content_StateLogListChanged);
+      Content.IsProgressingChanged += new EventHandler(Content_IsProgressingChanged);
+      Content.HiveTasksChanged += new EventHandler(Content_HiveTasksChanged);
+      Content.ExecutionStateChanged += new EventHandler(Content_ExecutionStateChanged);
+      Content.ExecutionTimeChanged += new EventHandler(Content_ExecutionTimeChanged);
+      Content.IsAllowedPrivilegedChanged += new EventHandler(Content_IsAllowedPrivilegedChanged);
+      Content.Loaded += new EventHandler(Content_Loaded);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.RefreshAutomaticallyChanged -= new EventHandler(Content_RefreshAutomaticallyChanged);
+      Content.JobChanged -= new EventHandler(Content_HiveExperimentChanged);
+      Content.IsControllableChanged -= new EventHandler(Content_IsControllableChanged);
+      Content.JobStatisticsChanged -= new EventHandler(Content_JobStatisticsChanged);
+      Content.ExceptionOccured -= new EventHandler<EventArgs<Exception>>(Content_ExceptionOccured);
+      Content.StateLogListChanged -= new EventHandler(Content_StateLogListChanged);
+      Content.IsProgressingChanged -= new EventHandler(Content_IsProgressingChanged);
+      Content.HiveTasksChanged -= new EventHandler(Content_HiveTasksChanged);
+      Content.ExecutionStateChanged -= new EventHandler(Content_ExecutionStateChanged);
+      Content.ExecutionTimeChanged -= new EventHandler(Content_ExecutionTimeChanged);
+      Content.Loaded -= new EventHandler(Content_Loaded);
+      base.DeregisterContentEvents();
+    }
+
+    private void RegisterHiveExperimentEvents() {
+      Content.Job.PropertyChanged += new PropertyChangedEventHandler(HiveExperiment_PropertyChanged);
+    }
+
+    private void DeregisterHiveExperimentEvents() {
+      Content.Job.PropertyChanged -= new PropertyChangedEventHandler(HiveExperiment_PropertyChanged);
+    }
+
+    private void RegisterHiveJobEvents() {
+      Content.HiveTasks.ItemsAdded += new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_ItemsAdded);
+      Content.HiveTasks.ItemsRemoved += new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_ItemsRemoved);
+      Content.HiveTasks.CollectionReset += new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_CollectionReset);
+    }
+    private void DeregisterHiveJobEvents() {
+      Content.HiveTasks.ItemsAdded -= new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_ItemsAdded);
+      Content.HiveTasks.ItemsRemoved -= new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_ItemsRemoved);
+      Content.HiveTasks.CollectionReset -= new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_CollectionReset);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        nameTextBox.Text = string.Empty;
+        executionTimeTextBox.Text = string.Empty;
+        resourceNamesTextBox.Text = string.Empty;
+        isPrivilegedCheckBox.Checked = false;
+        logView.Content = null;
+        refreshAutomaticallyCheckBox.Checked = false;
+        logView.Content = null;
+        runCollectionViewHost.Content = null;
+      } else {
+        nameTextBox.Text = Content.Job.Name;
+        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
+        resourceNamesTextBox.Text = Content.Job.ResourceNames;
+        isPrivilegedCheckBox.Checked = Content.Job.IsPrivileged;
+        refreshAutomaticallyCheckBox.Checked = Content.RefreshAutomatically;
+        logView.Content = Content.Log;
+        runCollectionViewHost.Content = GetAllRunsFromJob(Content);
+      }
+      hiveExperimentPermissionListView.Content = null; // has to be filled by refresh button
+      Content_JobStatisticsChanged(this, EventArgs.Empty);
+      Content_HiveExperimentChanged(this, EventArgs.Empty);
+      Content_HiveTasksChanged(this, EventArgs.Empty);
+      Content_IsProgressingChanged(this, EventArgs.Empty);
+      Content_StateLogListChanged(this, EventArgs.Empty);
+      HiveExperiment_PropertyChanged(this, new PropertyChangedEventArgs("Id"));
+      SetEnabledStateOfControls();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      executionTimeTextBox.Enabled = Content != null;
+      jobsTextBox.ReadOnly = true;
+      calculatingTextBox.ReadOnly = true;
+      finishedTextBox.ReadOnly = true;
+
+      if (Content != null) {
+        bool alreadyUploaded = Content.Id != Guid.Empty;
+        bool jobsLoaded = Content.HiveTasks != null && Content.HiveTasks.All(x => x.Task.Id != Guid.Empty);
+
+        this.nameTextBox.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded;
+        this.resourceNamesTextBox.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded;
+        this.jobsTreeView.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded;
+
+        this.isPrivilegedCheckBox.Enabled = Content.IsAllowedPrivileged && Content.IsControllable && !(Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded); // TODO: check if user has the rights to do this        
+        this.refreshAutomaticallyCheckBox.Enabled = Content.IsControllable && alreadyUploaded && jobsLoaded && Content.ExecutionState == ExecutionState.Started;
+        this.refreshButton.Enabled = Content.IsDownloadable && alreadyUploaded;
+        this.Locked = !Content.IsControllable || Content.ExecutionState == ExecutionState.Started;
+      }
+      SetEnabledStateOfExecutableButtons();
+      tabControl_SelectedIndexChanged(this, EventArgs.Empty); // ensure sharing tabpage is disabled
+    }
+
+    protected override void OnClosed(FormClosedEventArgs e) {
+      if (Content != null) {
+        if (Content.RefreshAutomatically)
+          Content.StopResultPolling();
+      }
+      base.OnClosed(e);
+    }
+
+    #region Content Events
+    private void HiveTasks_ItemsAdded(object sender, CollectionItemsChangedEventArgs<HiveTask> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_ItemsAdded), sender, e);
+      else {
+        foreach (HiveTask t in e.Items) {
+          t.TaskStateChanged += new EventHandler(HiveTask_TaskStateChanged);
+        }
+        SetEnabledStateOfControls();
+      }
+    }
+
+    private void HiveTasks_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<HiveTask> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_ItemsRemoved), sender, e);
+      else {
+        foreach (HiveTask t in e.Items) {
+          t.TaskStateChanged -= new EventHandler(HiveTask_TaskStateChanged);
+        }
+        SetEnabledStateOfControls();
+      }
+    }
+
+    private void HiveTasks_CollectionReset(object sender, CollectionItemsChangedEventArgs<HiveTask> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_CollectionReset), sender, e);
+      else {
+        foreach (HiveTask t in e.Items) {
+          t.TaskStateChanged -= new EventHandler(HiveTask_TaskStateChanged);
+        }
+        SetEnabledStateOfControls();
+      }
+    }
+
+    void HiveTask_TaskStateChanged(object sender, EventArgs e) {
+      runCollectionViewHost.Content = GetAllRunsFromJob(Content);
+    }
+
+    private void Content_ExecutionStateChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ExecutionStateChanged), sender, e);
+      else
+        SetEnabledStateOfControls();
+    }
+    private void Content_Prepared(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Prepared), sender, e);
+      else {
+        nameTextBox.Enabled = true;
+        Locked = false;
+        SetEnabledStateOfControls();
+      }
+    }
+    private void Content_Started(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Started), sender, e);
+      else {
+        nameTextBox.Enabled = false;
+        SetEnabledStateOfControls();
+      }
+    }
+    private void Content_Paused(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Paused), sender, e);
+      else {
+        nameTextBox.Enabled = true;
+        SetEnabledStateOfControls();
+      }
+    }
+    private void Content_Stopped(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Stopped), sender, e);
+      else {
+        nameTextBox.Enabled = true;
+        Locked = false;
+        SetEnabledStateOfControls();
+      }
+    }
+    private void Content_ExecutionTimeChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ExecutionTimeChanged), sender, e);
+      else
+        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
+    }
+    private void Content_RefreshAutomaticallyChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_RefreshAutomaticallyChanged), sender, e);
+      else {
+        refreshAutomaticallyCheckBox.Checked = Content.RefreshAutomatically;
+        SetEnabledStateOfControls();
+      }
+    }
+    private void Content_HiveTasksChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_HiveTasksChanged), sender, e);
+      else {
+        if (Content != null && Content.HiveTasks != null) {
+          jobsTreeView.Content = Content.HiveTasks;
+          RegisterHiveJobEvents();
+        } else {
+          jobsTreeView.Content = null;
+        }
+        SetEnabledStateOfControls();
+      }
+    }
+
+    void Content_Loaded(object sender, EventArgs e) {
+      runCollectionViewHost.Content = GetAllRunsFromJob(Content);
+    }
+
+    private void Content_HiveExperimentChanged(object sender, EventArgs e) {
+      if (Content != null && Content.Job != null) {
+        RegisterHiveExperimentEvents();
+        Content_IsProgressingChanged(sender, e);
+      }
+    }
+    private void Content_IsControllableChanged(object sender, EventArgs e) {
+      SetEnabledStateOfControls();
+    }
+    private void Content_JobStatisticsChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_JobStatisticsChanged), sender, e);
+      else {
+        if (Content != null) {
+          jobsTextBox.Text = (Content.Job.JobCount - Content.Job.CalculatingCount - Content.Job.FinishedCount).ToString();
+          calculatingTextBox.Text = Content.Job.CalculatingCount.ToString();
+          finishedTextBox.Text = Content.Job.FinishedCount.ToString();
+        } else {
+          jobsTextBox.Text = "0";
+          calculatingTextBox.Text = "0";
+          finishedTextBox.Text = "0";
+        }
+      }
+    }
+    private void Content_ExceptionOccured(object sender, EventArgs<Exception> e) {
+      // don't show exception, it is logged anyway      
+    }
+    private void Content_StateLogListChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_StateLogListChanged), sender, e);
+      else {
+        UpdateStateLogList();
+      }
+    }
+    private void Content_IsAllowedPrivilegedChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_IsAllowedPrivilegedChanged), sender, e);
+      else {
+        SetEnabledStateOfControls();
+      }
+    }
+
+
+    private void UpdateStateLogList() {
+      if (Content != null && this.Content.Job != null) {
+        stateLogViewHost.Content = this.Content.StateLogList;
+      } else {
+        stateLogViewHost.Content = null;
+      }
+    }
+
+    private void HiveExperiment_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      if (this.Content != null && e.PropertyName == "Id") this.hiveExperimentPermissionListView.HiveExperimentId = this.Content.Job.Id;
+    }
+    #endregion
+
+    #region Control events
+    private void startButton_Click(object sender, EventArgs e) {
+      if (nameTextBox.Text.Trim() == string.Empty) {
+        MessageBox.Show("Please enter a name for the job before uploading it!", "HeuristicLab Hive Job Manager", MessageBoxButtons.OK, MessageBoxIcon.Information);
+      } else {
+        HiveClient.StartJob((Exception ex) => ErrorHandling.ShowErrorDialog(this, "Start failed.", ex), Content, new CancellationToken());
+      }
+    }
+    private void pauseButton_Click(object sender, EventArgs e) {
+      HiveClient.PauseJob(Content);
+    }
+    private void stopButton_Click(object sender, EventArgs e) {
+      HiveClient.StopJob(Content);
+    }
+    private void resetButton_Click(object sender, EventArgs e) { }
+
+    private void nameTextBox_Validated(object sender, EventArgs e) {
+      if (Content.Job.Name != nameTextBox.Text)
+        Content.Job.Name = nameTextBox.Text;
+    }
+
+    private void resourceNamesTextBox_Validated(object sender, EventArgs e) {
+      if (Content.Job.ResourceNames != resourceNamesTextBox.Text)
+        Content.Job.ResourceNames = resourceNamesTextBox.Text;
+    }
+
+    private void refreshAutomaticallyCheckBox_Validated(object sender, EventArgs e) {
+      if (Content != null) Content.RefreshAutomatically = refreshAutomaticallyCheckBox.Checked;
+    }
+
+    private void isPrivilegedCheckBox_Validated(object sender, EventArgs e) {
+      if (Content != null) Content.Job.IsPrivileged = isPrivilegedCheckBox.Checked;
+    }
+
+    private void refreshButton_Click(object sender, EventArgs e) {
+      var invoker = new Action<RefreshableJob>(HiveClient.LoadJob);
+      invoker.BeginInvoke(Content, (ar) => {
+        try {
+          invoker.EndInvoke(ar);
+        }
+        catch (Exception ex) {
+          ThreadPool.QueueUserWorkItem(delegate(object exception) { ErrorHandling.ShowErrorDialog(this, (Exception)exception); }, ex);
+        }
+      }, null);
+    }
+
+    private void refreshPermissionsButton_Click(object sender, EventArgs e) {
+      if (this.Content.Job.Id == Guid.Empty) {
+        MessageBox.Show("You have to upload the Job first before you can share it.", "HeuristicLab Hive Job Manager", MessageBoxButtons.OK, MessageBoxIcon.Information);
+      } else {
+        hiveExperimentPermissionListView.Content = HiveClient.GetJobPermissions(this.Content.Job.Id);
+      }
+    }
+
+
+    #endregion
+
+    #region Helpers
+    private void SetEnabledStateOfExecutableButtons() {
+      if (Content == null) {
+        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
+      } else {
+        startButton.Enabled = Content.IsControllable && Content.HiveTasks != null && Content.HiveTasks.Count > 0 && Content.ExecutionState == ExecutionState.Prepared;
+        pauseButton.Enabled = Content.IsControllable && Content.ExecutionState == ExecutionState.Started;
+        stopButton.Enabled = Content.IsControllable && Content.ExecutionState == ExecutionState.Started;
+        resetButton.Enabled = false;
+      }
+    }
+    #endregion
+
+    #region Progress reporting
+    private void Content_IsProgressingChanged(object sender, EventArgs e) {
+      if (this.InvokeRequired) {
+        Invoke(new EventHandler(Content_IsProgressingChanged), sender, e);
+      } else {
+        if (Content != null && Content.IsProgressing) {
+          SetProgressView();
+        } else {
+          FinishProgressView();
+        }
+      }
+    }
+
+    private void SetProgressView() {
+      if (progressView == null) {
+        progressView = new ProgressView(this, Content.Progress);
+      }
+      progressView.Progress = Content.Progress;
+    }
+
+    private void FinishProgressView() {
+      if (progressView != null) {
+        progressView.Finish();
+        progressView = null;
+        SetEnabledStateOfControls();
+      }
+    }
+    #endregion
+
+    #region Drag & Drop
+    private void jobsTreeView_DragOver(object sender, DragEventArgs e) {
+      jobsTreeView_DragEnter(sender, e);
+    }
+
+    private void jobsTreeView_DragEnter(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      var obj = e.Data.GetData(Constants.DragDropDataFormat);
+      if (obj is IOptimizer) {
+        if (Content.Id != Guid.Empty) e.Effect = DragDropEffects.None;
+        else if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
+      }
+    }
+
+    private void jobsTreeView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        var obj = e.Data.GetData(Constants.DragDropDataFormat);
+
+        var optimizer = obj as IOptimizer;
+        if (optimizer != null) {
+          IOptimizer newOptimizer = null;
+          if (e.Effect.HasFlag(DragDropEffects.Copy)) {
+            newOptimizer = (IOptimizer)optimizer.Clone();
+          } else {
+            newOptimizer = optimizer;
+          }
+          if (newOptimizer.ExecutionState != ExecutionState.Prepared) {
+            newOptimizer.Prepare();
+          }
+
+          Content.HiveTasks.Add(new OptimizerHiveTask(newOptimizer));
+        }
+      }
+    }
+    #endregion
+
+    private void tabControl_SelectedIndexChanged(object sender, EventArgs e) {
+      if (tabControl.SelectedTab == permissionTabPage) {
+        if (!Content.IsSharable) {
+          MessageBox.Show("Unable to load tab. You have insufficient access privileges.");
+          tabControl.SelectedTab = tasksTabPage;
+        }
+      }
+    }
+
+    private RunCollection GetAllRunsFromJob(RefreshableJob job) {
+      if (job != null) {
+        RunCollection runs = new RunCollection();
+
+        foreach (HiveTask subTask in job.HiveTasks) {
+          if (subTask is OptimizerHiveTask) {
+            OptimizerHiveTask ohTask = subTask as OptimizerHiveTask;
+            runs.AddRange(ohTask.ItemTask.Item.Runs);
+          }
+        }
+        return runs;
+      } else {
+        return null;
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.resx	(revision 7085)
@@ -0,0 +1,295 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="refreshPermissionsButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+</value>
+  </data>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="startButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA
+        Cv8BNGKaggAAALBJREFUOE9j+P//PwMlGKvmsv3ZbsQaitWAhBkR/4k1BKcBlmX6RBmC1YCoKUH/N9xa
+        /J8YQ7AaEDzBG2Q7UYZgNcCnyxlsAAhHLQrA6xKsBjg2W/zP2BAL1mzbrP9fp1jhv0QaN4hWQ48drAaY
+        1+ihaOZPYMGqGWQYVgP0SpXhNuPTjNMAlXwpsLMJacZpgHSGIFGacRogksyJ089EBSK20MaVNyjKiTi9
+        QGxOBKkDACT9xOni1RbMAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="stopButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA
+        Cv8BNGKaggAAAWtJREFUOE/Nkz9IAmEYxl0KGqKtMVpaIiEoipYIgnByCSGhSQiCNBqCMiqwsr8clChF
+        YmYSSikeWEbZH2qwEhKhwhAXjQwKEbw0zyue7nO7hgtyqOEbf7/ne5+XVwJAUsorCSbB/0xAeT+xSBcw
+        685B52QwYU9jdOMFw+ZnDK0+YtCUyHzvSzACge/jH7hLcAg8FHB4w8IbZOEKsLD4s5AqdnheWLpAQJKj
+        TxyCUa4IOi/yWPPlsOJlMGePoU6+JS4g376NczgKsdg+y8PIg3pnBmPWV6ipMGq61sUFZOarCAf3JZ98
+        8I75XQKnoDEmoRg5RXW7QVxACvOHWdhO8lim36C1ptFvSEI5E4NsYA9VLUviAtK255qFcT+LSXsKahMP
+        66OQa0Po7HOholEvLiCr2jxmMG2LQEOFoBw/55M96FA50NpjRlmDTlxA9tym8qGpl0Z9twO1Mktx7srm
+        BZRLp34W/Oao/v4WvgBcI/R+TmAaZAAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="resetButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA
+        Cv8BNGKaggAAAX9JREFUOE9j+P//PwMlmCLNIIupa0Dv5r//Ybht7bf/jSs+/69d/P5/xbxX/0tmP/9f
+        MP3x/9JZj4EWI7yN4oKuDb/+bzr57f/KQ1/+L9jz6f/lBz//965997956RuwIXnTX/zXDV2F2wCQrSsO
+        fvk/b9en/7ee/AIp/N+w5M3/0rkv/+dMff4/qffZf1W/RbgNADl5zo5P/x++/AHWDAIls1/+z5ry/H9C
+        79P/Ya2P/8u5zcJtAMi/Nx99hmtGZhy7/Oa/V+3D/2J2k3AbAPJn87I3/09deQnXG9355H9g0yMw36H0
+        /n9+s27cBoBCuhxoSM605/93HrkL1hTQ8Oi/W9UDMNss7+5/ToNW3AaAoikb6N9EoH/D2x7/n7Puwn/X
+        ivv/bYrvgQ3Qy7j1n1WnEbcBoDiO63n6P7Tl0X+fuof/ncrv/7cuvPffJPsO2AD1JCIMsEza9h+EjWM2
+        /NcKXv5fwWMuOOB4TTr/s+k24XcB0BKSkzbJGtAtodgAAJMl+qgyDSjjAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="pauseButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA
+        Cv8BNGKaggAAAL5JREFUOE9j+P//PwMlmCLNIIsHoQG9m//+79rw63/e1EefQE5E56OHF4YXQJqvPvzz
+        Xzd0FVDtfwZ0PkED2tZ++3/r6e//qn6LwAag8wka0Lji8//LD3//l3ObBTYAnU/QgNrF7/+fuP77v5jd
+        JLAB6HyCBlTMe/V/94Wf//nNusEGoPMJGlAy+/n/9Sd//uc0aAUbgM4naEDB9Mf/F+z5/J9VpxFsADqf
+        oAGg+GfTbYIbgM4naACpGWvg8wIAkX3yJyVePz4AAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="refreshButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+</value>
+  </data>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>25</value>
+  </metadata>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj	(revision 7085)
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E3B93D5C-3B6B-4657-9B3E-F4297BAC0AA5}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Hive.Slave.App</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Hive.Slave.App-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Core.Views-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3">
+      <HintPath>..\..\bin\HeuristicLab.MainForm-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
+      <HintPath>..\..\bin\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="HiveSlaveApplication.cs" />
+    <Compile Include="MainWindow.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainWindow.Designer.cs">
+      <DependentUpon>MainWindow.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="MainWindow.resx">
+      <DependentUpon>MainWindow.cs</DependentUpon>
+    </EmbeddedResource>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive.Slave.Views\3.3\HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj">
+      <Project>{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}</Project>
+      <Name>HeuristicLab.Clients.Hive.Slave.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive.Slave\3.3\HeuristicLab.Clients.Hive.Slave-3.3.csproj">
+      <Project>{989FE92B-484E-41EE-87E2-6A24AF0381D8}</Project>
+      <Name>HeuristicLab.Clients.Hive.Slave-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+set Platform=$(PlatformName)
+set Configuration=$(ConfigurationName)
+
+call $(SolutionDir)\MergeConfigs.cmd</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/HiveSlaveApplication.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/HiveSlaveApplication.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/HiveSlaveApplication.cs	(revision 7085)
@@ -0,0 +1,69 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.IO;
+using System.Threading;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Hive.SlaveCore.Properties;
+using HeuristicLab.Clients.Hive.SlaveCore.Views;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive.Slave.App {
+  [Application("Hive Slave", "Runs the Hive Slave as a HeuristicLab application")]
+  internal class HiveSlaveApplication : ApplicationBase {
+    private HeuristicLab.Clients.Hive.SlaveCore.Core core;
+    public override void Run() {
+      CheckWorkingDirectories();
+
+      core = new HeuristicLab.Clients.Hive.SlaveCore.Core();
+      Thread coreThread = new Thread(core.Start);
+      coreThread.IsBackground = true;
+      coreThread.Start();
+
+      MainWindow window = new MainWindow();
+      window.Content = new SlaveItem();
+      Application.ApplicationExit += new System.EventHandler(Application_ApplicationExit);
+      Application.Run(window);
+    }
+
+    void Application_ApplicationExit(object sender, System.EventArgs e) {
+      core.Shutdown();
+    }
+
+    /// <summary>
+    /// Normally the configuration file just contains the folder names of the PluginCache and the AppDomain working directory. 
+    /// This means that these folders are created in the current directory which is ok for the console client and the windows service. 
+    /// For the HL client we can't do that because the plugin infrastructure gets confused when starting HeuristicLab. 
+    /// Therefore if there is only a relative path in the config, we change that to the temp path. 
+    /// </summary>
+    void CheckWorkingDirectories() {
+      if (!Path.IsPathRooted(Settings.Default.PluginCacheDir)) {
+        Settings.Default.PluginCacheDir = Path.Combine(Path.GetTempPath(), Settings.Default.PluginCacheDir);
+        Settings.Default.Save();
+      }
+
+      if (!Path.IsPathRooted(Settings.Default.PluginTempBaseDir)) {
+        Settings.Default.PluginTempBaseDir = Path.Combine(Path.GetTempPath(), Settings.Default.PluginTempBaseDir);
+        Settings.Default.Save();
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/MainWindow.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/MainWindow.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/MainWindow.Designer.cs	(revision 7085)
@@ -0,0 +1,61 @@
+﻿namespace HeuristicLab.Clients.Hive.Slave.App {
+  partial class MainWindow {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
+      this.slaveMainView = new HeuristicLab.Clients.Hive.SlaveCore.Views.SlaveMainView();
+      this.SuspendLayout();
+      // 
+      // slaveMainView
+      // 
+      this.slaveMainView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.slaveMainView.Caption = "HeuristicLab Slave View";
+      this.slaveMainView.Content = null;
+      this.slaveMainView.Location = new System.Drawing.Point(12, 12);
+      this.slaveMainView.Name = "slaveMainView";
+      this.slaveMainView.ReadOnly = false;
+      this.slaveMainView.Size = new System.Drawing.Size(590, 488);
+      this.slaveMainView.TabIndex = 0;
+      // 
+      // MainWindow
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(614, 512);
+      this.Controls.Add(this.slaveMainView);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "MainWindow";
+      this.Text = "Hive Slave";
+      this.SizeChanged += new System.EventHandler(this.MainWindow_SizeChanged);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private SlaveCore.Views.SlaveMainView slaveMainView;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/MainWindow.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/MainWindow.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/MainWindow.cs	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Hive.SlaveCore.Views;
+
+namespace HeuristicLab.Clients.Hive.Slave.App {
+  public partial class MainWindow : Form {
+    public MainWindow() {
+      InitializeComponent();
+      slaveMainView.VisibilitySwitched += new System.EventHandler(slaveMainView_WindowStateChanged);
+    }
+
+    void slaveMainView_WindowStateChanged(object sender, EventArgs e) {
+      if (this.Visible) {
+        Hide();
+      } else {
+        Show();
+        if (WindowState == FormWindowState.Minimized) {
+          WindowState = FormWindowState.Normal;
+        }
+      }
+    }
+
+    public SlaveItem Content {
+      get { return slaveMainView.Content; }
+      set {
+        slaveMainView.Content = value;
+      }
+    }
+
+    private void MainWindow_SizeChanged(object sender, EventArgs e) {
+      if (WindowState == FormWindowState.Minimized) {
+        Hide();
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/MainWindow.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/MainWindow.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/MainWindow.resx	(revision 7085)
@@ -0,0 +1,1787 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAAAwMAAAAQAgAKglAABmFQAAQEAAAAEA
+        IAAoQgAADjsAAICAAAABACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR/gAbk/YAAAAAABuS9gAAAAAAGpD2AAAAAAAAAAAAAAAAABuQ
+        9QAAAAAAAAAAAByS9QAAAAAAAAAAAAAAAAAakfUAAAAAABuR9QIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJD2QAAAAAAAAAAAGo/4CBuR9f8akPVCAAAAABuT9gAAAAAAG5H1/xuR9YEbkPYUG5H1/xqR
+        9v8bkfX/G5H1/xuS9P8bkfX/GpH1QwAAAAAbkfX/G5H1eQAAAAAAAAAAAAAAABuR9cgbkPSjAAAAABuR
+        9f8dkfWZG5H1QRyR9kAbkfWrG5L1TwAAAAAAAAAAHJH1zhuR9p4AAAAAAAAAAAAAAAAckvaHG5H15QAA
+        AAAbkfXkHJH2hgAAAAAAAAAAAAAAAAAAAAAbkvUAAAAAABuS9YwbkfXiGpHzJhuS9TQbkfQwG5H1fhuR
+        9f8AAAAAG5L1qhuR9cUAAAAAHJD2AAAAAAAbkfYAAAAAAAAAAAAbkfVqG5H1/xuR9f8akfX/G5H1/xuR
+        9f8bkfX/GpLzFhuQ9n0bkfX/AAAAABiQ9gAAAAAAAAAAAAAAAAAAAAAAG5H2KRuR9f8ckfYcI5D3Ax+U
+        /AUAAAAAG5H1/xyR9VEckvVBG5H1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckfX/GpH1TgAA
+        AAAAAAAAAAAAABuR9esakfWBGI7xBhyR9f8akfQwAAAAAAAAAAAAAAAAAAAAABuS9QAAAAAAG5L1+huR
+        9YAAAAAAGpH1AAAAAAAbkfalG5H0ugAAAAAbkfX/HJL1bwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9ccbkfXIAAAAAAAAAAAAAAAAG5L17BuR9f8dkvMXG5H17BqR9Z0AAAAAAAAAAAAAAAAAAAAAAAAAABuR
+        9QEAAAAAAAAAABuR9QEbkfQAAAAAAB6P9w8akfXwAAAAAAAAAAAAAAAAG5H1AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9gAAAAAAAAAAABqR9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5L1AAAAAAAckvQAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//AAD//wAA//8AALyBAAC8mwAAnJ8AAJ6fAADA3wAA3t8AAN5fAADOXwAAzk8AAP9/
+        AAD//wAA//8AAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqQ
+        9gAAAAAAAAAAABuT9wAAAAAAAAAAAAAAAAAckvYAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAAAAAAAAA
+        AAAAAAAAHZb2ABuP9QAAAAAAAAAAAAAAAAAckvUAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuQ9QIAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAckfQDGpr/AxqS+Qcckf8BAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJP2AQAAAAAAAAAAAAAAABuR9gEckfYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9v8ckvU/AAAAAAAAAAAbk/QAAAAAABuR9lkckvX/HJL1/xuR
+        9ocAAAAAAAAAAAAAAAAAAAAAAAAAAB2W9wAAAAAAHJH1/xuS9v8ckfXvAAAAAAAAAAAbkfZwG5L1/xyS
+        9v8bkvb/G5L2/xuR9v8bkvb/G5H1/xyS9v8bkvX/G5L1/ByR9f8bkvbBHJjtBgAAAAAAAAAAHpL3BxuR
+        9f8bkfb/G5H1owAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckfXIG5H2/xuS9v8AAAAAAAAAAByS
+        9SMbkfb/G5H1/huR9v8bkfb/HJH1/xuS9v8ckfb/G5L2/xyS9f8bkvX+G5H2/hyR9v8bkfb/AAAAABuS
+        9QAAAAAAHJL2/xuS9f8ckvbjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9ogckvX/HJH1/xqT
+        9hgAAAAAAAAAAByR9v8bkvX/HZH17h2S95UbkfWdHJL2nBuR9podkvaaG5L2ihyR9f8ckvb/G5L1YgAA
+        AAAbkvYAAAAAAAAAAAAbkfXSG5H1/xuR9f8AAAAAG5L2AAAAAAAAAAAAAAAAAAAAAAAAAAAAG5H2YhyR
+        9f8bkfX/HJH1XAAAAAAAAAAAHJL2+BuR9f8ckvX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5L13QAA
+        AAAAAAAAG5L1AAAAAAAAAAAAAAAAABuR948dkvX/HJL2/xyR9xMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAbk/UgHJL2/xyR9v8ckfWIAAAAAAAAAAAckfa+HJL1/xyS9v8AAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9gEAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAG5H1bhyS9f8ckvb/G5H1UgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZHyAAAAAAAckvb/G5L1/xuS9cAAAAAAAAAAABuR9Ycckvb/HJL2/x2R9SIAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckfQtG5L2/xuS9f8bkfV9AAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9egbkfb/HJL2/wAAAAAAAAAAHJL2YhuS9v8bkvX/G5H1XAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvX/HJL2/xyS
+        980bkfV6G5L1fxyS9n8bkvV/HJL1fxuR9X8bkfV6G5L20ByS9v8bkfX/AAAAAAAAAAAakvYlHJL1/xyS
+        9v8bkfaDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbkfQAAAAAAByR
+        9vkckfX/HJL1/xuR9v8ckfb/G5H1/xuS9f8bkfb/HJL2/xyR9f8ckvX/G5H1/huS9v8bkfU6AAAAAAAA
+        AAAckfb/HJH1/xuR9rQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAG5L1thuR9v8ckvb9G5H1/xuS9v8bkfb/G5L2/xuR9f8bkvX/G5L2/xuS9v8bkfX9HJH2/xuS
+        9XMAAAAAAAAAABuR9vcbkfb/G5L18AAAAAAfkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckfaFG5L1/xyR9f8ckvZdHZL3LRyS9i8ckfYvHJP2LxyR9y8ckvcvHJH2JxyR
+        9f8bkvb/HJH1lgAAAAAAAAAAHJL2txuS9f8ckfb/AAAAAACK9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9lQbkfb/HJL1/xuR9XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAG5L2/xuR9f8ckvbYAAAAAAAAAAAckvWGG5H2/xyS9f8ZkPYmAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL1EhyR9f8ckvb/G5L2kAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkfXLHJL2/xuR9f8AAAAAAAAAABuR9V4ckfX/HJL2/xyR9WkAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+R+gAAAAAAG5H1/x2S9v8bkfXLAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9pEckvb/G5L2/xyQ8QgAAAAAHZL1HRyS9v8dkvb/G5L1iAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5P0AAAAAAAckvblG5L1/xyS
+        9v8AAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAG5H1cxuS9v8ckfX/G5H2SQAAAAAAAAAAHJH1/xuS
+        9f8ckvbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS
+        9qMckvb/G5H1/wAAAAAAAAAAAAAAAAAAAAAAAAAAHJL1AAAAAAAbkfckHJL2/xuS9f8bkvV2AAAAAAAA
+        AAAbkvXyHJL2/xyS9f4AAAAAG5H3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJH2eByS9f8bkfb/G5L0MAAAAAAAAAAAAAAAAAAAAAAAAAAAG5H1ChyS9e8ckvb/G5H1/xuS
+        9vAckvWPAAAAABuS9rMckfX/G5H1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvVFHJL2/xuS9f8ckvZ0AAAAAAAAAAAAAAAAAAAAAByS9QAAAAAAHJH1QhuS
+        9v8ckfb+G5L2/x2S9SgAAAAAG5H1ghyS9v8bkvb/HJL2LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL1AAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAAAAAAAAAAAAAAAAAByR
+        9QAAAAAAHJH2oRuS9f8bkfXWAAAAABuS9QAAAAAAAAAAAAAAAAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbkvYAAAAAAByS9gAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAG5H26xuS9lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvUVAAAAABqR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2AAAAAAAbkfYAJZTtAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//////////////////////////////78fxwAPH8cABx/HAB8f5x+/H+Mf/5/jH/+f4
+        5//j+OP/4ADj/+AA4//j/GP/8/xj//H8c//x/HH/8f5x//H+cf/5/BH/+f4x///+P////3//////////
+        ////////////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpD2AByX+AAAAAAAAAAAABuT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2AByT9gAbkvcAHJL2AByS9wAAAAAAHJL3AAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL1AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAbkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJH2AByS9gIAAAAAHJH1TRuS
+        9v8bkfb/G5H1TgAAAAAAAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2AByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAek/YAAAAAABuR9ocbkvXlGpL2DgAAAAAakPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvUAAAAAABuR9hEbkvUuAAAAAByR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAakfgAHJL1AQAAAAAAAAAAHZH2ABuS9QAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR9gAckvUBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP//
+        /////wAA////////AAD///////8AAP///////wAA////////AAD//////x8AAMH/w8AADwAA4f/D4AAD
+        AADh/8HgAAMAAOH/4eAADwAA4f/h4f8fAADg/+Hh//8AAPD/4eD//wAA8P/h8P//AADw//Dw//8AAPD/
+        8PD//wAA8P/w8P//AADwAADw//8AAPgAAPD//wAA+AAAeH//AAD4AAB4f/8AAPg/+Hh//wAA+D/4eH//
+        AAD8P/h4f/8AAPw/+Hg//wAA/D/8PD//AAD8P/w8P/8AAPw//Dw//wAA/B/8PD//AAD+H/w8P/8AAP4f
+        +Awf/wAA/h/4Dh//AAD+H/weH/8AAP///h///wAA////P///AAD///8///8AAP///////wAA////////
+        AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AACgA
+        AABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/YAAAAAAB2T9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvcAAAAAAAAAAAAbk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqQ9gQbk/cUAAAAAEac7AAckvYAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9wAckvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AByS
+        9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2U9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZP2AAAAAAAAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2/xyR
+        9oEAAAAAAAAAAByS9gAfkPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9ikdk/crG5P3LhyS
+        9zEck/c0HJL3LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZb3ARyS9hQckvcSHZP3Eh2R9hIbkfcTIJX0BAAAAAAck/cAAAAAAAAAAAAAAAAAHJL2ExyQ
+        9hIckvUSHZP3EhyS9hIdkvYSHJL2Eh2T9xIdkfYSHZP3EhyU9xIck/YSHZH2EhyT9xIck/cSG5D2EhyT
+        9xIckfYSG5r9AhyS9/8ckvb/HJL2+hyS9kAAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAHZP2AAAA
+        AAAckvbSHJL2/xyS9v8ckvb/HZP2/xyS9v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvb/HJL2/xyS9v8ck/f/HZL2/xuS9ooAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9u4ck/b/HJL2/x2S9/8ck/f/HJP3/xyS9/8ckvb/HJP3/xyS9v8ckff/HJL2/xyT
+        9/8ckvb/HJL2/x2T9/8ckfb/HJL2/xyS9v8ckvb9HJL2/xyS9v0ckvb/HJL2xR+R+AcAAAAAAAAAAByS
+        9wAAAAAAAAAAAByS9gAAAAAAG5H3hh2T9v8ckvb+HJL2/hyS9v4ckvb/IZ3/AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9gAAAAAAHJL2zRyS9v8ckvb+HJL2/hyS
+        9v8ckfbAAAAAAAAAAAAAAAAAG5H1AAAAAAAckvevHJL1/xyS9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvf+HJL2/hyS9v4ck/b9HJL2/hyS9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyT
+        9v8ckvb/HJP1ggAAAAAAAAAAHZL2AAAAAAAAAAAAAAAAAB2S91Yckvb/HJL2/hyS9v4ckvb/HJL2/xyS
+        9ikAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdlPQAAAAAAByS
+        9pYckvb/HJL3/hyS9/4ckvf/HJL29AAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2fByS9v8ckvb+HJL2/hyS
+        9v8ckvf/HJL2/hyS9/4ckvf+HJL2/xyR9v8ckvb/HJL3/hyS9v8ckvf/HJP2/hyR9/8ckvb/HJL2/hyS
+        9v4ckvb/HJL3/xyS9v4ckvf+HZL2/hyS9/8ckvb/HZH1IQAAAAAAAAAAHJL2AAAAAAAakvQYHJL2/xyS
+        9v8ckvb+HJL2/xyS9v8bkvZXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvZhHJL2/xyS9v4ckvb+HJL2/hyS9v8dk/cJAAAAAAAAAAAAAAAAAAAAAB2S
+        9kwckvb/HJL2/hyS9v4ckvb/HJL2/xyS9v4ckvb+HJL2/hyS9v8ckfb/HJL2/xyS9/4ckvb/HJL2/xyT
+        9/4ckvb/HJL2/xyS9v4ckvb+HJL2/xyS9v8ckvb+HJL2/hyS9v8ckvb+HJL2RgAAAAAckvUAAAAAAAAA
+        AAAAAAAAAAAAAByS9v8dkvb+HJP2/hyS9f8ckvb/HZP2kQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        9v8dk/b+HZP2/hyS9v4dk/f/HZL3KwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJP2SxyS9v8ckvb+HJL2/hyS9v4ckvb/AAAAAAAAAAAAAAAAAAAAAAAA
+        AAAbkvaCHZL2/x2T9v4dk/b+HJL2/hyS9v8AAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvb/HJL2/xyS9/8ckvb/HZL3/RyS9/8ckvb/HJH2/xyS9v8ckvb/HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8ckvb+HJL2/xyS9v8ckvb/HJL2/xyS
+        9j0AAAAAAAAAAAAAAAAAAAAAHZP3TB2S9v8ckvb/HJL3/xyS9v8ckvf/HJL2DwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL26R2S9v8dkvb/HJL2/hyS9v4dkvb+HJH2/hyR
+        9v8ckfb/HZL2/hyR9v8ckfb/HJL2/hyR9v8ckfb/HJL2/h2S9v4dkvb/HZL2/xyS9v4ckvb+HZL2/hyR
+        9v8ckfb/HJH2/xyT9/8ckfVrAAAAAAAAAAAAAAAAAAAAABuR9R8ckvb/HZL2/x2S9v8ckvb+HJL2/xyS
+        9kUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAByS9q0ckvb/HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS9/4ckvb+HJL2/hyT9v0ckvb+HJL2/hyS9v4ckvb+HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS9v4ck/f/HJL2pwAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2/xyS
+        9v4ckvb+HJL2/hyS9v8ckvdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvZ+HJL2/xyS9/8ckvb+HJL3/hyS9/4ckvb/HJH2/xyS9v8ckvf+HJL2/xyS9/8ck/b+HJH3/xyS
+        9v8ckvb+HJL2/hyS9v8ckvf/HJL2/hyS9/4ckvf+HJL2/xyR9v8ckvb/HJL3/xyS9tIAAAAAHJL2AAAA
+        AAAAAAAAAAAAAByS9uYckvb/HJL3/xyS9v4ck/b/HJL1qAAAAAAdkvYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAG5L2QByS9v8ckvb/HJL2/hyS9v4dk/b+HJL2/xyR9v8ckvb/HJP2/xyS
+        9v8ckvb/HJP2/xyS9v8ckvb/HJL2/xyS9v8ck/b/HJP2/xyS9v8ckvb/HJP3/xyS9v0ckfb/HJL2/xyS
+        9/8ckvb/AAAAAAAAAAAdk/YAHJP3AAAAAAAckvesHJL2/xyS9v8ckvb+HJL2/xyS9tMAAAAAHJL2AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9hUckvb/HJL1/xyS9v4dkvb+HJL2/x2S
+        9rYckvd1HZL3eB2T93gck/Z4HZL3eByS9ngdkvd4HJP2eB2T93gdkvd4HJL3eByT93gdkvd4HJP2dx2R
+        944dk/b/HJH1/xyS9v8ck/f+HJL2/x6V+A0AAAAAAAAAAAAAAAAAAAAAHJL2fxyS9v8ckvX/HJL2/h2S
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbk/YAAAAAAByS9tcckvb/G5L2/hyS
+        9v8bkfVEAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAII34AAAA
+        AAAAAAAAHJL2/xyS9v8ckvbyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdkvcAAAAAABqR+CIckvb/G5L2agAAAAAck/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL2ABqS+AAAAAAAHJL2cCWU7gEAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YAHJL2AAAA
+        AAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////8//////////x/4H//A+AAAB/gf/8D4AAAB/B//wPwAAAD8H//g/AAAAfwP/+D8AAAD/A/
+        /4PwP/w/8D//gfA//P/4P/+B8D/9//g//8HwP///+D//wfg////4H//B+D////gf/8D4P///+B//wPgf
+        ///8H//A+B////wf/+D4H////AAAAPwf///8AAAA/B////wAAAB8H////gAAAHwP///+AAAAfA////4H
+        /+B+D////gf/8H4P///+B//wfg////4H//A+B////wf/8D4H////B//4Pgf///8H//g/B////wP/+D8H
+        ////A//4Hwf///8D//gfA////4P/+B8D////g//8HwP///+D//AHg////4H/8AeD////gf/4B4P////B
+        //wPg////////A/////////+H/////////8f/////////7//////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////8oAAAAgAAAAAABAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAIJX1AB2T9gIclvsAHYvvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOY9AAAAAAAAAAAAAAAAAAAAAAAHZL3AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuS9xgck/d9HZT4BwAAAAAAAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5P2ExyT9v8dkvfnHJP2VQAA
+        AAAAAAAAHZP2ARqR9gAdkvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvYSHJL39R2T9v8dkvf/HZL3shyS9yQAAAAAAAAAAB2S9wAdk/YAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI3xAB2T
+        9wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZT2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR9wAdk/YAAID/AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByV9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeT9wYck/f2HZL3/x2T
+        9/8dk/b/HJL3/xyT9oEck/UKAAAAAB+R9wEbk/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9kQdk/d5HZP3bh2T93Ick/d0HJP3dx2T
+        93kckvd8HZP3fhyT94AckveLHZP4RQAAAAAckvgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZT3Cx2T90AckvZHHJP3RR2S90Udk/dFHZP3RR2S90Udk/dFHZP3RRyS
+        90cdk/Y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByn7QAck/Y0HZL3SRyS
+        9kUdkvdFHJL2RR2T9kUdk/dFHZP3RR2T90Uck/dFHZP3RR2T90Uck/dFHZL3RR2T90Udk/dFHZL3RR2T
+        90Udk/dFHZP3RRyT90Udk/dFHJP2RR2T90UdkvdFHZP3RRyT90Udk/dFHJP3RR2T90UdkvdFHJL3RR2S
+        90Uck/dFHJL2RR2S90Udk/dCHJP3UxyT9/kdk/f/HZP2/hyS9/8dk/b/HZL3/x2S990ck/ZWAAAAAAAA
+        AAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2jR2T9/8dk/f/HZP2/x2T9v8dkvb/HZP3/x2T9/8dk/b/HZP3/xyS9/8dk/e0AAAAAByS
+        9wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/YXHJP21h2S
+        9/8ckvb6HZP3+h2T9/ockvb6HZP3+hyT9/odk/f6HZP3/RyS9u8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9qsckvf/HJP2+h2T9/odk/f6HJL2+h2S9/odk/f6HZP3+hyT
+        9/odk/f6HJP3+hyS9/odk/f6HZP3+hyS9vodk/f6HJP3+h2T9/ockvb6HJL3+h2S9/ock/b6HZL3+h2T
+        9/ock/f6HJL2+h2T9/ockvb6HZP3+h2T9/odk/f6HZL2+hyS9/ockvb6HZP3+hyT9/odkvb7HZP3/hyT
+        9/8dk/f/HJL2/x2S9/4ck/b6HZL2/xyT9/8ck/ezHJL2IgAAAAAAAAAAHpL3ABuT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI3xAAAAAAAdk/dZHJP2/xyS9/8dk/b/HJP3/xyS
+        9v8dkvf/HJP2/x2T9v8dk/b/HZP3/xyS9tMAAAAAHpT3AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvbBHZP3/x2S9/8dk/f/HZP3/x2S9v8dk/f/HZP3/x2T
+        9/8dkvb/HJP3/xyT9yMAAAAAHJP3AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACue8QAAAAAAHJL3jh2T
+        9v8dk/f/HZP3/x2T9/8dkvb/HZL3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZL2/x2T
+        9/8dk/f/HZP3/xyS9v8dkvf/HZL3/x2T9/8dkvf/HZP3/x2T9/8ckvb/HZP3/xyS9v8dk/f/HZP3/x2T
+        9/8dkvb/HZL3/x2S9/8dk/f/HJP2/xyS9v8dkvf/HZP2/h2S9v8dkvb/HZL2/xyT9/8ck/f+HZL2/x2S
+        9v8ckvf/HZL3gBuT9ggAAAAAAAAAAAAAAAAckvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9y4ckvf8HZP2/x2T9/8dk/f+HJL2/x2T9/4ckvb/HJL2/xyS9v8dkvb/HJP34xyU
+        +BYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95wck/b/HJL2/x2T9/4dk/f+HJL2/x2T9/4ckvb/HJL3/xyT9v8dkvf/HZL3VAAAAAAdkvcCAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/ZlHJL3/x2T9v8ckvb/HZP3/hyS9v8dk/f+HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8ckvb/HZP3/h2T9/4ckvb/HZP3/hyS9v8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS
+        9/8dk/f+HJL3/xyS9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8ckvb/HJL3/xyS9v8dk/f+HJL2/x2T
+        9/4ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8dk/f/HZP3/RyT9v8dk/b/HJL32xyT9lMAAAAAAAAAAAAA
+        AAAck/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxmNYAAH7/AByS9/Adk/b/HZP2/xyT
+        9v4dk/f/HZP3/h2T9v4dk/b+HZP3/hyS9v8dk/f2HZP3PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9QAAAAAAHZP3ax2T9v8dkvf/HJP3/h2T9/4dk/f/HZP3/h2T
+        9/4dk/f+HZP3/xyS9v8dk/aIAAAAAByT9gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T
+        9zsdk/f/HJL2/xyS9v4ck/b+HZP3/x2T9/4dk/b+HZP2/h2T9/4dk/f+HZP3/h2T9v4ck/f+HZP3/h2T
+        9/8dk/f+HZP3/h2T9/4dk/b/HJP3/h2T9v4ck/b+HZL3/x2T9/4dk/f+HJP2/x2T9/4dk/f/HZP3/hyT
+        9/4ck/b+HZP3/x2T9/4dk/f/HZP2/hyT9v4dk/f/HZP3/h2T9v4dk/b+HZP3/h2T9/4dk/f+HZP2/hyT
+        9/4dk/f+HZP2/hyS9v8dkvf/HZP2/x2T9rYdkvcrAAAAAAAAAAAek/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gIAAAAAHZP30RyS9v8dkvf+HZP2/x2S9/8dkvf/HZP2/x2T9v8dk/f/HZP3/x2S
+        9v8ck/ZdAAAAAB2S9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdkvZAHZL2/xyT9/8dk/f/HZP3/x2S9/8dk/f/HZP3/x2T9/8dk/f/HZP2/xyT97YAAAAAHZP2BQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2FRyS9vYdk/f/HZL2/x2T9v8dkvf/HZL3/x2T
+        9v8dk/b/HZP3/x2T9/8dk/f/HZL2/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyS9v8dkvf/HZL2/x2T
+        9v8dkvf/HZP3/x2T9/8ckvb/HZP3/xyS9/8dk/f/HZP3/x2T9v8dkvf/HZL3/x2S9/8dk/b/HZP2/x2S
+        9/8dkvf/HZP2/x2T9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9/8dkvf/HZP3/x2T9v4ckvf/HZP3/xyS
+        9vwdk/eEH5L2EAAAAAAWmP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3AQAAAAAdkvefHJP2/x2S
+        9/0ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvb/HJP2/x2S938AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9xIck/f8HZL2/xyT9/8dk/f+HJL3/x2T
+        9/4ckvf/HJL3/xyT9/4dkvb/HJP30gqT+AAgkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9QEAAAAAHZP36RyS9v8ckvb+HJP3/hyS9/8dk/f+HJL2/xyT9v8ckvf/HJL3/xyT9/8ckvb/HJP3/h2T
+        9/4ckvf/HZP3/hyS9/8ckvf/HJL2/xyS9/8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS9v8ckvf/HJL3/xyS
+        9/8ck/f+HJP3/hyS9/8ckvf/HJL3/xyS9v8ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvf/HJP3/xyS
+        9v8ck/f+HZP3/hyS9/8dk/f+HZL3/x2T9/8ckvf7HJP3/x2T9v8dkvaOAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAck/YAAAAAAByT9modkvf/HJP2/ByT9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyT
+        9v4dkvf/HJP2pgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAelPUBAAAAAByS9+Mdk/b/HJL3/h2T9/8dk/f/HZP3/x2T9/8dk/f/HZP3/h2S9/8ck/bpHJL2JgAA
+        AAAAqv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP3AgAAAAAdkva+HJP3/x2T9v0ck/f/HZP3/x2S
+        9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2S9/8ck/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL3/x2S
+        9/8ck/f/HZL3/x2T9/8dk/f/HJP3/x2T9/8dk/f/HZP3/xyT9/8ck/f/HZP3/x2S9/8dk/f/HZP3/xyT
+        9/8dk/f/HZL3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL3/xyT9/8dk/f/HZP3/x2T9v4dk/f+HZL2/xyT
+        9/8dk/fkHJL2VQAAAAAolP8AHZH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9gAAAAAAHJL2Ox2T
+        9/8ckvb6HZP3/hyS9v8dk/f+HJL2/xyT9v8ckvb/HJL2/x2T9v8ckvfJHJL3CwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP2sxyS9/8dk/f9HZP3/hyS
+        9v8dk/f+HJL2/xyS9/8ckvb/HJP3/x2S9v8dk/dIAAAAAByR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvYBAAAAAB2T95Mckvb/HZL3/B2T9/4ckvb/HZP3/hyS9v8ck/b/HJL2/xyS9v8ck/b/HJL2/x2T
+        9/4dk/f+HJL2/x2T9/4ckvb/HJL3/xyS9v8ckvb/HJL2/xyS9v8ckvb/HZP3/hyS9/8ckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/4ckvb/HJL2/xyS9v8ckvb/HZP3/hyS9v8dk/f+HJL2/xyT9v8ckvb/HJL2/xyT
+        9v8ckvb/HZP3/h2T9/8ckvb+HJL3/x2T9/8ck/f/HZL2kR2S9hIAAAAAH5L4AQBVuAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvcbHJL2+x2T9/4dk/f+HZL2/x2T9/4dk/b/HZP2/x2T
+        9v8dk/b/HJP3/x2T9vEdk/ccAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2AAAAAAAdk/Z9HJL3/x2T9vsdk/f+HZL2/x2T9/4dk/b/HZP3/xyS9v8dk/f/HZL2/xyT
+        924AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHJL2Yx2T9/8ckvb7HZP3/h2S
+        9v8dk/f+HZP2/x2T9v8dk/b/HZP2/x2T9/4dkvf/HZP3/R2T9/0dk/f9HZP3/R2T9/0dk/f9HZP3/R2S
+        9/0dkvf9HJP2/R2S9/0dk/f9HZP2/RyS9/0dk/b9HZL3/R2T9/0dk/f9HZP3/R2S9/0dkvf9HZP3/R2T
+        9/0dk/b9HZP2/R2S9/4dk/b/HZP2/x2T9v8dk/b/HZP2/x2S9/8ck/b/HZP3/RyS9/8dkvb/HJL2yRyS
+        9zcAAAAAAAAAAB+V9gAakfcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2U
+        9g4dk/bUHJL3/x2T9/4dk/b/HZP3/hyT9v8dkvb/HJP2/x2T9v8ckvb6HZP3/xyT9i4AAAAAGpP2AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cAAAAAAByT904dkvb/HJP3+h2T
+        9/4dk/b/HZP3/hyT9v8dk/f/HJP2/x2S9v4dk/f/HJL2lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZT3AAAAAAAdk/c4HJL3/x2T9vodk/f+HZP2/x2T9/4ck/b/HZL2/xyT9v8dk/b/HZL3/x2T
+        9v0dkvf/HZL3/x2S9/8dk/f/HZP3/x2T9/8ckvb/HJL2/x2S9v8dk/b/HJL3/x2T9/8dk/f/HJP2/xyT
+        9/8ck/b/HJP2/x2T9v8dk/b/HZP2/x2S9v8ck/b/HZL2/xyT9/8dkvb/HZP3/xyT9v4dkvb/HJP2/x2T
+        9v8dk/f/HJP3/h2S9/8dkvb/HJP3+hyT928AAAAAAAAAAB+V+gAAAAAAHpH2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT96kdkvb/HJP3/x2S9/8dk/f+HJL2/x2T
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6Q+QEAAAAAAAAAAAAAAAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvYDAAAAAByT9ngckvf/HJP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyS
+        9v8dk/f/HJL3kQAAAAAdk/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdkPgBAAAAAByT9tsckvf/HZL2/x2T9/4dk/f+HZP3/hyS9v8dk/f+HZL3/xyT9v8dkvf1HZH3HAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9g4dkvbeHZP3/x2S9v8dk/f+HZP3/h2T
+        9/4dk/f+HZP3/h2T9/4dk/b/HJL3+xyR9yYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAekPkAAAAAAByT
+        9wIdkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wEAAAAAHJL3QxyS
+        9/8ckvf+HZL3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HJL3/hyT9v8dkve2AAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wQAAAAAHJL2thyT9/8ckvb+HZP3/h2T
+        9/4dk/f+HJL2/x2S9/4dkvf+HJP3/xyS9v8dkvZLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/cEAAAAAB2S9sgdk/f/HZL2/h2S9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyS9/8dk/b/HZP2TQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZP2AAAAAAAdk/YVHZP3/x2T9/4dkvf/HZP2/x2T9v8dk/f/HZP3/x2T
+        9/8dkvb/HJL2/x2T99Adk/kOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL3AgAAAAAdk/aFHZL3/x2S9v4dk/f/HZP3/x2T9/8dk/b+HZL3/x2S9v8dk/b/HJP3/x2S
+        9nQAAAAAHJT3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9gQAAAAAHJP3pR2S9v8dk/f+HZL3/x2T
+        9v8dk/b/HZP3/x2T9/8dk/f/HZP2/xyS9v8ckvdxAAAAAB2T9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/bmHZP3/x2S9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2S9/8dkvb/HJP37hyS9yoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cBAAAAAByT91Ack/f/HJP3/R2T
+        9/8dk/f/HZP3/xyT9v8ckvf/HZL3/xyT9v4ckvb/HZP3nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2AwAAAAAckvZzHJL2/xyS9v4dkvf/HZP3/x2T9/8dk/f/HZP3/x2T9/8ckvb/HJP3/x2T
+        9poAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS97gckvb/HZL3/h2T9v8dk/b/HZP2/x2T
+        9v8dk/b/HZL2/x2T9/8ckvb/HZP3QQAAAAAZkfYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2IByS9v8ckvb9HZP3/h2T9v8dk/b/HZP2/x2S9v8dkvb/HZP2/h2S
+        9v8ck/e/HJb6AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cBAAAAAB2T90cdk/f/HZP3/h2S
+        9/4dk/b/HZP2/x2T9v8dk/b/HZP2/xyS9v4ckvb/HJL3tgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL2jByT9/8dk/f+HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL2/hyS9v8dk/dhAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvYHHZL28x2S
+        9v8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJP3/x2S9t8ckvYaAAAAADOZ/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuS9gAAAAAAHJL2GRyS9v8ckvb+HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZP3/xyT
+        9v8dkvfOHZP3DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/dbHZL2/x2S9/8dk/b/HZP2/x2T
+        9/8dk/f/HZP3/x2S9v8ck/f+HZP2/xyS95EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvfCHJP2/x2T9/8dk/f/HZP3/xyS9v8ckvf/HZL2/xyT
+        9v8dkvf/HJP2/x2S9zMAAAAAGZP0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL27hyS
+        9v8dkvf/HZP2/x2T9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9ukdkvYlAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAij/UAAAAAAByT9z0dkvb/HZP3/xyT9v8dk/b/HJP3/x2T9/8ck/f/HJL2/x2T9/4dk/f/HZP2ugAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95gck/b/HZP3/hyT9/8dk/f/HJP2/xyS9/8dkvb/HJP2/x2T9/4ckvf/HZP2UQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAakvYAAAAAAAAAAAAck/bDHJL3/x2T9/4ck/b/HZP2/xyT9/8dk/f/HJP3/xyS
+        9v8dk/f/HJP2/x2S9zsAAAAAHZP2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACq/gAAAAAAHZL2IByS9uQdk/f/HZP2/x2T
+        9v8dk/b/HZP2/x2T9v8dkvb/HZP3/hyS9/8ckvfqF4T/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL3aByT9v8ck/b/HZP2/x2T9/8ckvb/HZL2/x2S
+        9v8dk/b/HJL3/h2S9/8ck/aFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95Qck/b/HZL3/x2T9v8dk/b/HZP2/x2T9v8dk/b/HZL2/x2T9/4ck/b/HZL3WwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdlfkGHZP3yByS9v8dk/b+HZP2/xyT9v8dk/b/HJP2/xyS9v8ck/f+HJL3/hyS
+        9/8bkvcSAAAAABqR9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL3AAAA
+        AAAck/ZHHZL3/x2T9/8ck/b/HZP2/xyS9v8ckvb/HZL2/xyT9v8ckvb/HZP2/xyS97QAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3ah2T9v8dk/f+HJP2/x2T9v8ck/b/HZP2/xyT
+        9v8ckvb/HJP3/h2S9v8ck/eDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/asHZL3/x2S
+        9v4dk/f+HZP3/h2T9/4dk/f+HZL3/hyT9/4ck/b+HJP2/xyT9j8AAAAAHJP2AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9ysdk/btHJL3/x2T9/4dk/f+HJL2/xyS
+        9/4dkvf+HJP3/h2S9/8ck/f/HZL25QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAck/ZHHZL3/x2S9/8dk/f+HZP3/h2T9/4dk/f+HZP3/h2S9/4ck/f/HZP2/xyS96sAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdk/gAAAAAAByS9oEdk/f/HZP2/x2T9v8dk/b/HZP2/x2T9v8dkvb/HJP2/x2T
+        9/4dk/f/HZL3cQAAAAAdk/cDHZP3AByT9wAdk/YAHJL3AB+V8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGpn2BxyT9s8dkvf/HZP2/x2T9/8dk/b/HJL2/x2S9v8ck/b/HZL3/xyS9v8dk/f/HpP3EgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAakvgAAAAAAB2T9iwckvfxHZL3/x2T9v8dk/b/HZP2/x2T
+        9v8dk/b/HZL2/xyT9v8ckvf/HZL22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2Vh2S
+        9/8dk/f/HZP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/h2T9/8dk/ecAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfmPkEH5v5BB+a+QQfmvkEH5r5BCCd
+        +gQdkfcIHo/zCx6P8wsej/MLHo/zCx6P8woekPQLHpL4EB6Q+A84hP8AHZP3uxyS9v8dk/f+HZP3/hyS
+        9v8dk/f+HZP3/h2T9/4ckvf/HZP2/xyS9/8ckvdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2FByT9tYdkvf/HZP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyT9/8ck/f/GpT3BgAA
+        AAAPmvcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YnHZP2/ByS9/8dk/f/HZP3/x2T9/8dk/f/HZP3/xyT
+        9/8dk/f/HZP3/x2T9/4dk/fxHZP3+B2T9/kckvf4HZL2+B2T9vgckvf4HJL2+R2T9vkdk/b5HZP2+R2T
+        9vkdk/b5HZP2+R2T9/odk/f6HZP3+h2T9/odk/f6HZP3+h2S9/sdkvb7HZL2+x2S9vsdkvb7HZL2+x2S
+        9vsdkvf8HZL3/B2S9/odkvf8HJP2/x2T9/8dk/f/HJL2/xyT9/8dk/f/HJP3/x2S9/8ck/f/HZL2/xyS
+        9nUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3uB2S9v8dk/f+HZP3/x2T
+        9/8dk/f/HZP3/x2T9/8ck/f/HJP3/hyT9/8ck/YtAAAAAByT9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZHvAAAA
+        AAAck/fyHZL2/x2T9v8ckvf/HZL3/xyT9/8ckvb/HJL3/x2S9/8dkvf+HZP3/xyS9/8ckvb/HZP3/xyS
+        9/8dkvb/HJL3/x2T9v8dk/f/HJL3/xyS9/8ckvf/HJL3/xyS9/8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS
+        9v8ckvb/HJP2/xyT9/8ck/f/HJP3/xyT9/8ck/f/HJP3/xyT9v8ck/b/HJP2/xyS9v8dkvf+HJL3/x2S
+        9/8ckvb/HJL3/x2S9v8ckvb/HZL3/x2S9/8ckvb/HZP3pQAAAAAbjfMAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdk/eaHZL2/x2S9v8dk/b/HJL3/x2S9/8ck/f/HJL2/xyS9/8dkvf+HZL3/x2S
+        91kAAAAAHZL3AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YBAAAAAByS980dk/b/HZP3/h2S9/8dkvf/HZP3/x2S
+        9/8dk/f+HZP3/hyS9v8dk/f+HZL3/h2S9/4ckvb/HZL3/x2S9/8dkvf/HJL3/x2T9/4dkvf/HJL2/x2S
+        9/8ckvb/HZL3/x2T9/4dk/f+HJL2/x2S9/8ckvf/HZL3/x2T9/4ckvb/HZP3/h2S9/8dk/f/HZL3/x2S
+        9/8dk/f/HZL3/x2T9/4dk/f+HJL2/x2T9/4dkvf/HZL3/xyS9v8dkvf/HZL3/x2S9/8ckvf/HZP3/hyT
+        9/8dkvbHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdm/8AAAAAAByS9nMdk/f/HJP2/x2T
+        9/8dkvf/HZL3/x2T9/8dkvf/HZP3/h2T9v4ck/b/HZL3gwAAAAAck/YDAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9wEAAAAAHZP2mByS9/8dk/f8HZL2/x2S9v8dkvb/HZL2/xyS9v8dkvb/HJL2/x2S9v8dkvb/HZL3/xyS
+        9v8ckvb/HZL2/xyS9v8ckvf/HZL2/x2S9/8ckvb/HZL2/xyS9v8dkvb/HJL2/xyS9v8ckvb/HZL2/xyS
+        9v8dkvb/HJL2/xyS9v8dkvb/HZL2/x2S9v8dkvb/HZL2/x2S9v8dkvb/HJL2/x2S9v8ckvb/HZL2/x2S
+        9v8dkvf/HJL2/xyS9v8dkvb/HJL2/xyS9/8dk/f+HZP3/xyS9t8ckvYYAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZL2Rh2S9v8ck/f/HZL2/x2S9v8dkvb/HZL2/x2S9v8ckvb/HZP3/h2S
+        9/8ck/a0AAAAAB2S9wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2AAAAAAAckvZpHZP3/xyS9vsckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/4ckvb/HZP3/hyS9v8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS
+        9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8ckvb/HJL3/xyS9v8dk/f+HJL2/x2T9/4ckvb/HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8dk/f+HJL2/xyS9/8ckvb/HJL2/xyS9v8ckvb/HJL3/x2T
+        9/4dk/f/HJP29B2S9zYAAAAAHJf2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cdHJP3+x2S
+        9v8ck/b/HJL2/xyS9v8ckvb/HJL2/x2T9/4dk/b/HZL2/xyT99AAAAAAHZL2AgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAaj/UAAAAAAByS9jYdk/f/HJL2+h2T9/4dk/f+HZP3/h2T9v4ck/f+HZP3/h2T9/8dk/f+HZP3/h2T
+        9/4dk/b/HJP3/h2T9v4ck/b+HZL3/x2T9/4dk/f+HJP2/x2T9/4dk/f/HZP3/hyT9/4ck/b+HZP3/x2T
+        9/4dk/f/HZP2/hyT9v4dk/f/HZP3/h2T9v4dk/b+HZP3/h2T9/4dk/f+HZP2/hyT9/4dk/f+HZP3/x2T
+        9/4dk/f+HZP3/h2T9v8ck/f+HZP2/hyT9v4dkvf/HZP3/hyT9/8ckvf/HZP2WAAAAAAbjPcAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAH5H1AQAAAAAck/fsHZL2/x2T9v4dk/f+HZP3/h2T9/4dk/b+HJP3/h2T
+        9/8ck/b/HZL35B2S9xsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3HhyS9vgdk/f/HZP3/x2T
+        9/8dk/f/HZL2/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyS9v8dkvf/HZL2/x2T9v8dkvf/HZP3/x2T
+        9/8ckvb/HZP3/xyS9/8dk/f/HZP3/x2T9v8dkvf/HZL3/x2S9/8dk/b/HZP2/x2S9/8dkvf/HZP2/x2T
+        9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9/8dkvf/HZP3/x2T9/8dk/f/HJL2/x2S9/8dkvb/HZP2/x2S
+        9/8dk/f/HJL3/h2S9/8ck/Z6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cBAAAAAB2S
+        9sQck/f/HZP2/R2T9/8dk/f/HZP3/x2S9v8dk/f/HZP3/x2T9/8ck/b1HZL2OgAAAAAVlf8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGo/2AAAAAAAdkvYPHZP30RyS9v8ckvf/HJL3/xyT9/8ckvb/HJP3/h2T9/4ckvf/HZP3/hyS
+        9/8ckvf/HJL2/xyS9/8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS9v8ckvf/HJL3/xyS9/8ck/f+HJP3/hyS
+        9/8ckvf/HJL3/xyS9v8ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvf/HJP3/xyS9v8ck/f+HZP3/hyS
+        9/8dk/f+HJL3/xyS9/8ckvb/HJL3/xyS9v8ckvb/HJL3/x2T9/4dk/f/HZP2/xyS96IAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9gAAAAAAHJL3lR2T9v8ckvb8HJL3/xyS9/8ck/f/HJL2/xyT
+        9/4dk/f+HJP2/x2S9v8ck/dZAAAAAB+S9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckveoHZP2/xyT
+        9/4dk/f/HZP3/x2S9/8ck/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL3/x2S9/8ck/f/HZL3/x2T
+        9/8dk/f/HJP3/x2T9/8dk/f/HZP3/xyT9/8ck/f/HZP3/x2S9/8dk/f/HZP3/xyT9/8dk/f/HZL3/x2T
+        9/8dk/f/HZP3/x2T9/8dk/f/HZL3/xyT9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8ckvf/HZL3/xyT
+        9/8dkvf/HZP3/x2T9/8ckvf/HZP2zh2S9gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3AAAA
+        AAAdk/dkHJL3/x2T9/sdk/f/HZP3/x2T9/8dkvf/HJP3/x2T9/8dk/f/HJL3/x2T9n0AAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9oQdkvf/HJP3/hyS9v8ck/b/HJL2/x2T9/4dk/f+HJL2/x2T
+        9/4dk/b+HZP3/xyS9v8ckvb/HZL2/xyT9v8ckvb/HZP3/xyT9v8ckvb/HJP2/xyS9v8ck/b/HZP3/x2T
+        9v8ckvb/HJL2/xyS9v8dk/b/HZP2/xyS9v8dkvf/HJP2/x2T9v8ck/b/HZP2/xyT9v8ckvb/HZP3/x2T
+        9/8ckvb/HZP3/xyT9/8dkvf+HJP2/hyS9v8ckvb/HJL2/xyS9v8dk/f+HJL3/xyS9v8dk/f2HJL2DQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbk/cAAAAAAByT9jgdkvf/HJP2+hyS9v8ckvb/HJP2/xyS
+        9v8dk/f+HZP3/hyS9v4ck/f/HZL2nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP3XByT
+        9/8dkvb/HZP2/x2T9v8dkvb/HZP3/h2T9/4dkvb/HZP3/h2T9/8dkvb8HZL22x2T990dkvfdHZP33R2S
+        990dk/fdHZP33RyT9t0dk/fdHZP33R2T990dk/fdHZP33R2T990dkvfdHZP23R2T990dk/fdHZP33R2S
+        990dk/fdHZP33R2T990dk/fdHZP33R2S990dk/fdHZP33R2T9t0dkvfaHZL38R2T9v8dk/f+HJL2/x2S
+        9v8ck/b/HZL3/x2T9/4dk/f/HZP3+xyS9v8dk/cpAAAAAB2U9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2Hh2T9/gckvb/HZP2/x2T9v8dk/b/HZL2/x2T9/4dk/f+HZL2/x2S9v8ck/fGHJL3CQAA
+        AAAkkv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJf2AAAAAAAdkvY5HZL29RyT9/8dk/b/HJL2/xyS9v8dk/f+HZP3/h2T
+        9v8dk/f+HJL2/x2T9/Mck/ceHJL2FRyT9xYckvcWHJP2Fh2T9xYck/YWHZP3FhyT9hYckvYWHJL2Fh2S
+        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
+        AAAAAAAAAAAAACGT/QAAAAAAHJL2aB2T9/8dk/f/HJL2/xyT9v8ckvb/HJP2/x2T9v8ckvb/HJL2/B2S
+        9/8ck/aLAAAAAByS9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AgAAAAAdk/dwHZL3/x2T9/4ck/f/HJL2/x2T
+        9/4dk/f+HZL3/x2T9/4ck/b+HZL2/xyT96QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL2BAAAAAAdk/fLHJL2/xyT9/4dkvb/HJL2/x2S9/8dk/f+HJL3/xyS
+        9v8ckvb/HZP27hyU9h8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJHyAAAAAAAdk/dCHJL2+R2T
+        9/8dkvf/HJP3/xyS9v8dk/f+HZP3/h2S9/8dk/f+HZP2/xyS98UAAAAAHZP2AgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvYBAAAAAByS9kEckvb/HJL2/hyT9v8ckvb/HZP3/h2T9/4dkvb/HZP3/h2T9/4ck/f/HZL3vx2E
+        9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cDAAAAAByS
+        9qAdk/f/HJP2/h2S9v8ckvb/HZL3/x2T9/4ckvb/HJL2/x2T9/8dkvf6HJL2RgAAAAAkkv8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9iEdk/bpHJL3/x2S9/8ck/b/HJL2/x2T9/4dk/f+HZL2/x2T
+        9/4dk/b/HJL37QAAAAAhlvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6V+gAAAAAAHZP4EB2T9/8ckvf+HZP2/x2S
+        9v8dk/f+HZP3/h2S9v8dk/f+HZP2/xyT9v8ckvfdHZL2GgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9wIAAAAAHZL3bhyT9v8dkvf9HZL2/x2T9v8dkvf/HZP3/h2T
+        9/8ckvb/HZP3/xyT9v8dkvdxAAAAABmV8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YBAAAAAByS
+        99Ydk/b/HZP2/x2T9v8dkvb/HZP3/h2T9/4dkvb/HZP3/x2T9/8ckvb7HJL2KQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckfYBHJL25B2T9v8dk/f/HZL2/xyT9/8dk/f/HZP3/x2T9/8dk/f/HZL3/x2T
+        9vkck/cvAAAAAB2R9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP2AQAA
+        AAAck/ZCHZL3/xyT9vwdkvb/HJP2/x2S9/8dk/f/HZP3/xyT9v8dk/f/HZL3/xyT9pUAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9gUAAAAAHJL3uh2T9v8ckvb+HZP3/x2S9v8ck/f/HZP3/x2T
+        9/8dk/f/HJL3/x2T9/8dk/ZWAAAAAB6U9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAglfkAAAAAAAAAAAAdk/a5HJL3/x2T
+        9/4dk/f+HZP3/h2T9/4dkvb/HZP3/h2T9/4ckvf/HJP3/x2S9kUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdlvkAAAAAAB2T9xkckvb/HZP3/B2T9/4dk/f+HZL3/x2T
+        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
+        AAAAAAAAAAAAABaO8QAAAAAAHZP3TxyS9v8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL2/ByT
+        9/8dkvacAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSS/gAAAAAAAAAAAB2S96wckvf/HZP3/x2T
+        9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8ck/b/HZL3TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2sRyS9/8dk/b+HJP3/x2T9/8dkvb/HZP3/x2T9/8dk/f/HZP3/xyS9v8ckvZDAAAAAByS
+        9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIpn/AAAAAAAckvYwHZP38B2S
+        9/8ck/b/HZL3/x2T9/8dk/f/HJL2/x2T9/8dkvb9HZP3/xyS9s8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL2fh2T9/8dkvf+HZL2/xyT9/8dk/f/HZL2/x2T9/8dk/f/HZP3/hyT
+        9v8dkvd6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGW+Agdk/eUHJL2rx2T
+        96gdk/eoHZP2qB2T96gck/eoHJP2qB2S96gdkvauHJP3kgAAAAAejvYCAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP2RxyS9v8dk/b/HZP3/hyT9/8ckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/8ckvb/HZL3/xyT9kMAAAAAHZH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR
+        9gYckveCHZP3rhyT96gdk/eoHZP3qB2T9qgdk/eoHJP3qByT9qgckvanHJP3qR2T9hIAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdlPYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGpr3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AAAA
+        AAAAAAAAHJL3cx2S9/8ck/b/HZL3/xyS9v8dk/b/HJL2/x2T9v8dk/f+HJP3/hyS9v8dk/fCAAAAAByS
+        9wMamfIAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACua/gAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfivYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAglfQAHJL2ABuS0QAAAAAAHJP3rB2S9v8ck/f9HJP2/hyT
+        9v8ck/b/HJP2/x2T9/4dkvb8HZP3/xyT9kwAAAAAHZP2AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP3AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL4AAAAAAAgjfgEHJP32x2T9v8ckvb+HJP3/xyS9/8ckvf/HJP3/h2T9/8ckvbVAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL1AAAAAAAdkvcvHJL2+xyT
+        9v8dk/b+HJP2/xyT9/4dkvb/HJP3/xyS9mwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACuA/wAAAAAAHZX2AAAAAAAdkvdhHZP2/xyT9/8ckvb+HZL3/hyT9/8dkvbmHZP3GAAA
+        AAAdkfUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAAAA
+        AAAck/eZHZL2/xyT9/4ck/b/HJP3/x2S9owAAAAAG5T6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvYAAAAAABWU/AIckvfMHZP2/x2S9v8ck/f/HJP2GgAA
+        AAAekPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuU
+        +AAdkvYBAAAAAByT9xockvbuHZL3/xyS9qIAAAAAHpL3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9wAdk/YBAAAAAB2T904ck/f/HZP2NgAA
+        AAAZlPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9kYckvYOAAAAAByS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wAAAAAAAAAAAAAA
+        AAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2S/wAdkvYAHJL1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////////////////P////////////////////w
+        ////////////////////8D////5///////////////Af//wAP////wAf/AAAAAAAB//+AD////8AH/wA
+        AAAAAAH//gA/////AB/+AAAAAAAA//4AP////4AP/gAAAAAAAD/+AD////+AD/4AAAAAAAAP/gA/////
+        gA/+AAAAAAAAB/8AH////4AP/gAAAAAAAB//AB////+AD/4AAAAAAAA//wAf////wA//AAAAAAAA//8A
+        H////8AH/wAAAAAAA///AB/////AB/8ACD//8Af//wAP////wAf/AB////Af//+AD////8AH/wAf///w
+        P///gA/////AB/8AD///8P///4AP////4AP/gA////P///+AD////+AD/4AP///3////gA/////gA/+A
+        D////////8AH////4AP/gA/////////AB////+AD/4AP////////wAf////gA/+AD////////8AH////
+        8AH/wAf////////AB/////AB/8AH////////wAf////wAf/AB////////+AD////8AH/wAf////////g
+        A/////AB/8AH////////4AP////4AP/AB////////+AD////+AD/4AP////////gA/////gA/+AD////
+        ////4AP////4AP/gA/////////AB////+AD/4AP////////wAAAAAAAA/+AD////////8AAAAAAAAH/g
+        A/////////AAAAAAAAB/8AH////////wAAAAAAAAf/AB////////+AAAAAAAAH/wAf////////gAAAAA
+        AAB/8AH////////4AAAAAAAAf/AB////////+AAAAAAAAD/wAf////////gAAAAAAAA/+AH////////4
+        AAAAAAAAP/gA/////////AAAAAAAAD/4AP////////wAf////gA/+AD////////8AH////8AH/gA////
+        /////AB/////AB/4AP////////wAf////wAf/AB////////+AD////8AH/wAf////////gA/////AB/8
+        AH////////4AP////4Af/AB////////+AD////+AD/wAf////////gA/////gA/8AD////////4AP///
+        /4AP/gA/////////AB////+AD/4AP////////wAf////gA/+AD////////8AH////8AP/gA/////////
+        AB/////AB/4AP////////wAf////wAf/AD////////8AH////8AH/wAf////////gA/////AB/8AH///
+        /////4AP////wAf/AB////////+AD////+AD/wAf////////gA/////gA/8AH////////4AP////4AP/
+        AB/////////AD////+AD/4AP////////wAf////gA/+AD////////8AH////4AP/gA/////////AB///
+        /gAAH4AP////////wAf///8AAD+AD////////8AH////gAA/wA/////////gB////4AAP8AH////////
+        4AP////AAH/AB////////+AD////4AB/wAf////////gA/////AA/8AH///////////////4AP//////
+        ////////////+AH///////////////////wB///////////////////+A////////////////////wP/
+        //////////////////8D////////////////////h////////////////////8f/////////////////
+        ///v////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////
+</value>
+  </data>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive.Slave.App {
+  [Plugin("HeuristicLab.Clients.Hive.Slave.App", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Clients.Hive.Slave.App-3.3.dll", PluginFileType.Assembly)]      
+  [PluginDependency("HeuristicLab.Clients.Hive.SlaveCore", "3.3")]  
+  [PluginDependency("HeuristicLab.Clients.Hive.Slave.Views", "3.3")]  
+  [PluginDependency("HeuristicLab.Core", "3.3")]  
+  [PluginDependency("HeuristicLab.Common", "3.3")]  
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  public class HeuristicLabClientsHiveSlaveAppPlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.App/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Clients.Hive.Slave.App")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("360abd06-33ae-41f5-a5b1-ca9e89b167f7")]
+
+// 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("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj	(revision 7085)
@@ -0,0 +1,130 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{464D70B8-2D91-485C-B622-22E4A4891C68}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Hive.SlaveCore.ConsoleClient</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>false</SignAssembly>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Clients.Hive-3.3, Version=3.3.5.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\HeuristicLab.Clients.Hive-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Hive-3.3, Version=3.3.5.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\HeuristicLab.Hive-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="SlaveCommListener.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive.Slave\3.3\HeuristicLab.Clients.Hive.Slave-3.3.csproj">
+      <Project>{989FE92B-484E-41EE-87E2-6A24AF0381D8}</Project>
+      <Name>HeuristicLab.Clients.Hive.Slave-3.3</Name>
+      <Private>True</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config">
+      <SubType>Designer</SubType>
+    </None>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/Program.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/Program.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/Program.cs	(revision 7085)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Diagnostics;
+using System.Threading;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.ConsoleClient {
+  public class Program {
+    static void Main(string[] args) {
+      EventLog eventLog = null;
+      try {
+        if (!System.Diagnostics.EventLog.SourceExists("HLHive")) {
+          System.Diagnostics.EventLog.CreateEventSource("HLHive", "HiveSlave");
+        }
+        eventLog = new EventLog();
+        eventLog.Source = "HLHive";
+        eventLog.Log = "HiveSlave";
+      }
+      catch (Exception) { }
+
+      //slave part
+      Core core = new Core();
+      core.ServiceEventLog = eventLog;
+      Console.WriteLine("Starting core ...");
+      Thread coreThread = new Thread(core.Start);
+      coreThread.IsBackground = true; //dont keep app alive
+      coreThread.Start();
+      Thread.Sleep(1000);
+
+      //mock a slave client
+      SlaveCommListener listener = new SlaveCommListener();
+      listener.Open();
+
+      Console.WriteLine("Press a key to quit");
+      Console.ReadLine();
+      listener.Close();
+      core.Shutdown();
+      Console.ReadLine();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Clients.Hive.Slave.ConsoleClient")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("360abd06-33ae-41f5-a5b1-ca9e89b167f7")]
+
+// 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("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/SlaveCommListener.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/SlaveCommListener.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/SlaveCommListener.cs	(revision 7085)
@@ -0,0 +1,96 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.IO;
+using System.ServiceModel;
+using System.Threading;
+using HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.ConsoleClient {
+
+  /// <summary>
+  /// Mock a client, simply print out messages
+  /// </summary>
+  [CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
+  public class SlaveCommListener : ISlaveCommunicationCallbacks, IDisposable {
+    private ISlaveCommunication pipeProxy;
+    private DuplexChannelFactory<ISlaveCommunication> pipeFactory;
+    private StreamWriter debugOutput;
+
+    public void Open() {
+      pipeFactory = new DuplexChannelFactory<ISlaveCommunication>(this, "SlaveCommunicationServiceEndpoint");
+      debugOutput = new StreamWriter("slave-debug.txt");
+      debugOutput.AutoFlush = true;
+
+      while (!ReconnectToSlaveCore()) {
+        Thread.Sleep(700);
+      }
+    }
+
+    public bool ReconnectToSlaveCore() {
+      try {
+        pipeProxy = pipeFactory.CreateChannel();
+        pipeProxy.Subscribe();
+        return true;
+      }
+      catch (Exception) {
+        OnMessageLogged("Couldn't connect to Slave Core. Waiting for the Core to start.");
+        return false;
+      }
+    }
+
+    public void Close() {
+      if (pipeFactory.State != CommunicationState.Closed &&
+          pipeFactory.State != CommunicationState.Closing &&
+          pipeFactory.State != CommunicationState.Faulted) {
+        pipeProxy.Unsubscribe();
+      }
+      try {
+        pipeFactory.Close();
+      }
+      catch (Exception) {
+        pipeFactory.Abort();
+      }
+      debugOutput.Close();
+    }
+
+    public void OnStatusChanged(StatusCommons status) {
+      string msg = string.Format("{0}: {1}", DateTime.Now.ToString("HH:mm:ss"), status);
+      Console.WriteLine(msg);
+      debugOutput.WriteLine(msg);
+    }
+
+    public void OnMessageLogged(string message) {
+      string msg = string.Format("{0}: {1}", DateTime.Now.ToString("HH:mm:ss"), message);
+      Console.WriteLine(msg);
+      debugOutput.WriteLine(msg);
+    }
+
+    public void OnShutdown() {
+      Console.WriteLine("SlaveCommListner: Slave quit");
+    }
+
+    public void Dispose() {
+      Close();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/app.config
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/app.config	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/app.config	(revision 7085)
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<configuration>
+  <runtime>
+    <gcServer enabled="true" />
+  </runtime>
+  
+  <system.serviceModel>
+    <behaviors>
+      <endpointBehaviors>
+        <behavior name="HiveBehaviorConfiguration">
+          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
+        </behavior>
+      </endpointBehaviors>
+    </behaviors>
+    <bindings>
+      <wsHttpBinding>
+        <binding name="wsHttpBinding_Hive" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
+          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
+            <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+    
+    <services>
+      <service name="HeuristicLab.Clients.Hive.SlaveCore.SlaveCommunicationService">        
+        <endpoint address="net.pipe://localhost/HeuristicLabSlaveCom" binding="netNamedPipeBinding" contract="HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts.ISlaveCommunication"/>
+      </service>
+    </services>
+ 
+   <client>
+     <endpoint name="SlaveCommunicationServiceEndpoint" address="net.pipe://localhost/HeuristicLabSlaveCom" binding="netNamedPipeBinding" contract="HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts.ISlaveCommunication"/>
+    <endpoint address="http://services.heuristiclab.com/Hive-3.3/HiveService.svc" 
+              binding="wsHttpBinding" 
+              bindingConfiguration="wsHttpBinding_Hive" 
+              contract="HeuristicLab.Clients.Hive.IHiveService" 
+              name="wsHttpBinding_IHiveService" behaviorConfiguration="HiveBehaviorConfiguration">
+      <identity>
+        <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ==" />
+      </identity>
+    </endpoint>
+   </client>
+   
+ </system.serviceModel>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj	(revision 7085)
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Hive.SlaveCore.TrayIcon</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\trunk\sources\bin\HeuristicLab.Core.Views-3.3.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\trunk\sources\bin\HeuristicLab.MainForm-3.3.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration.Install" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="MainWindow.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainWindow.designer.cs">
+      <DependentUpon>MainWindow.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="TrayIconInstaller.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="TrayIconInstaller.Designer.cs">
+      <DependentUpon>TrayIconInstaller.cs</DependentUpon>
+    </Compile>
+    <EmbeddedResource Include="MainWindow.resx">
+      <DependentUpon>MainWindow.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive.Slave.Views\3.3\HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj">
+      <Project>{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}</Project>
+      <Name>HeuristicLab.Clients.Hive.Slave.Views-3.3</Name>
+      <Private>True</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive.Slave\3.3\HeuristicLab.Clients.Hive.Slave-3.3.csproj">
+      <Project>{989FE92B-484E-41EE-87E2-6A24AF0381D8}</Project>
+      <Name>HeuristicLab.Clients.Hive.Slave-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/MainWindow.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/MainWindow.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/MainWindow.Designer.cs	(revision 7085)
@@ -0,0 +1,64 @@
+﻿
+namespace HeuristicLab.Clients.Hive.SlaveCore.SlaveTrayIcon {
+  partial class MainWindow {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
+      this.slaveMainView = new HeuristicLab.Clients.Hive.SlaveCore.Views.SlaveMainViewTray();
+      this.SuspendLayout();
+      // 
+      // slaveMainView
+      // 
+      this.slaveMainView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.slaveMainView.Caption = "HeuristicLab Slave Main View";
+      this.slaveMainView.Content = null;
+      this.slaveMainView.Location = new System.Drawing.Point(12, 12);
+      this.slaveMainView.Name = "slaveMainView";
+      this.slaveMainView.ReadOnly = false;
+      this.slaveMainView.Size = new System.Drawing.Size(590, 488);
+      this.slaveMainView.TabIndex = 0;
+      // 
+      // MainWindow
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(614, 512);
+      this.Controls.Add(this.slaveMainView);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "MainWindow";
+      this.Text = "HeuristicLab Hive Slave";
+      this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainWindow_FormClosing);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private Views.SlaveMainViewTray slaveMainView;
+
+  }
+}
+
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/MainWindow.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/MainWindow.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/MainWindow.cs	(revision 7085)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Hive.SlaveCore.Views;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.SlaveTrayIcon {
+  public partial class MainWindow : Form {
+
+    public SlaveItem Content {
+      get { return slaveMainView.Content; }
+      set {
+        slaveMainView.Content = value;
+      }
+    }
+
+    public MainWindow() {
+      InitializeComponent();
+      slaveMainView.VisibilitySwitched += new System.EventHandler(slaveMainView_WindowStateChanged);
+    }
+
+    void slaveMainView_WindowStateChanged(object sender, EventArgs e) {
+      if (this.Visible) {
+        Hide();
+      } else {
+        Show();
+      }
+    }
+
+    private void MainWindow_FormClosing(object sender, FormClosingEventArgs e) {
+      if (e.CloseReason == CloseReason.UserClosing) {
+        e.Cancel = true;
+        Hide();
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/MainWindow.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/MainWindow.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/MainWindow.resx	(revision 7085)
@@ -0,0 +1,1787 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAAAwMAAAAQAgAKglAABmFQAAQEAAAAEA
+        IAAoQgAADjsAAICAAAABACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR/gAbk/YAAAAAABuS9gAAAAAAGpD2AAAAAAAAAAAAAAAAABuQ
+        9QAAAAAAAAAAAByS9QAAAAAAAAAAAAAAAAAakfUAAAAAABuR9QIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJD2QAAAAAAAAAAAGo/4CBuR9f8akPVCAAAAABuT9gAAAAAAG5H1/xuR9YEbkPYUG5H1/xqR
+        9v8bkfX/G5H1/xuS9P8bkfX/GpH1QwAAAAAbkfX/G5H1eQAAAAAAAAAAAAAAABuR9cgbkPSjAAAAABuR
+        9f8dkfWZG5H1QRyR9kAbkfWrG5L1TwAAAAAAAAAAHJH1zhuR9p4AAAAAAAAAAAAAAAAckvaHG5H15QAA
+        AAAbkfXkHJH2hgAAAAAAAAAAAAAAAAAAAAAbkvUAAAAAABuS9YwbkfXiGpHzJhuS9TQbkfQwG5H1fhuR
+        9f8AAAAAG5L1qhuR9cUAAAAAHJD2AAAAAAAbkfYAAAAAAAAAAAAbkfVqG5H1/xuR9f8akfX/G5H1/xuR
+        9f8bkfX/GpLzFhuQ9n0bkfX/AAAAABiQ9gAAAAAAAAAAAAAAAAAAAAAAG5H2KRuR9f8ckfYcI5D3Ax+U
+        /AUAAAAAG5H1/xyR9VEckvVBG5H1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckfX/GpH1TgAA
+        AAAAAAAAAAAAABuR9esakfWBGI7xBhyR9f8akfQwAAAAAAAAAAAAAAAAAAAAABuS9QAAAAAAG5L1+huR
+        9YAAAAAAGpH1AAAAAAAbkfalG5H0ugAAAAAbkfX/HJL1bwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9ccbkfXIAAAAAAAAAAAAAAAAG5L17BuR9f8dkvMXG5H17BqR9Z0AAAAAAAAAAAAAAAAAAAAAAAAAABuR
+        9QEAAAAAAAAAABuR9QEbkfQAAAAAAB6P9w8akfXwAAAAAAAAAAAAAAAAG5H1AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9gAAAAAAAAAAABqR9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5L1AAAAAAAckvQAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//AAD//wAA//8AALyBAAC8mwAAnJ8AAJ6fAADA3wAA3t8AAN5fAADOXwAAzk8AAP9/
+        AAD//wAA//8AAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//////////////////////////////78fxwAPH8cABx/HAB8f5x+/H+Mf/5/jH/+f4
+        5//j+OP/4ADj/+AA4//j/GP/8/xj//H8c//x/HH/8f5x//H+cf/5/BH/+f4x///+P////3//////////
+        ////////////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpD2AByX+AAAAAAAAAAAABuT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2AByT9gAbkvcAHJL2AByS9wAAAAAAHJL3AAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL1AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAbkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJH2AByS9gIAAAAAHJH1TRuS
+        9v8bkfb/G5H1TgAAAAAAAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2AByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAek/YAAAAAABuR9ocbkvXlGpL2DgAAAAAakPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvUAAAAAABuR9hEbkvUuAAAAAByR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAakfgAHJL1AQAAAAAAAAAAHZH2ABuS9QAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR9gAckvUBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP//
+        /////wAA////////AAD///////8AAP///////wAA////////AAD//////x8AAMH/w8AADwAA4f/D4AAD
+        AADh/8HgAAMAAOH/4eAADwAA4f/h4f8fAADg/+Hh//8AAPD/4eD//wAA8P/h8P//AADw//Dw//8AAPD/
+        8PD//wAA8P/w8P//AADwAADw//8AAPgAAPD//wAA+AAAeH//AAD4AAB4f/8AAPg/+Hh//wAA+D/4eH//
+        AAD8P/h4f/8AAPw/+Hg//wAA/D/8PD//AAD8P/w8P/8AAPw//Dw//wAA/B/8PD//AAD+H/w8P/8AAP4f
+        +Awf/wAA/h/4Dh//AAD+H/weH/8AAP///h///wAA////P///AAD///8///8AAP///////wAA////////
+        AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AACgA
+        AABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/YAAAAAAB2T9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvcAAAAAAAAAAAAbk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqQ9gQbk/cUAAAAAEac7AAckvYAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9wAckvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AByS
+        9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2U9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZP2AAAAAAAAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2/xyR
+        9oEAAAAAAAAAAByS9gAfkPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9ikdk/crG5P3LhyS
+        9zEck/c0HJL3LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZb3ARyS9hQckvcSHZP3Eh2R9hIbkfcTIJX0BAAAAAAck/cAAAAAAAAAAAAAAAAAHJL2ExyQ
+        9hIckvUSHZP3EhyS9hIdkvYSHJL2Eh2T9xIdkfYSHZP3EhyU9xIck/YSHZH2EhyT9xIck/cSG5D2EhyT
+        9xIckfYSG5r9AhyS9/8ckvb/HJL2+hyS9kAAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAHZP2AAAA
+        AAAckvbSHJL2/xyS9v8ckvb/HZP2/xyS9v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvb/HJL2/xyS9v8ck/f/HZL2/xuS9ooAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9u4ck/b/HJL2/x2S9/8ck/f/HJP3/xyS9/8ckvb/HJP3/xyS9v8ckff/HJL2/xyT
+        9/8ckvb/HJL2/x2T9/8ckfb/HJL2/xyS9v8ckvb9HJL2/xyS9v0ckvb/HJL2xR+R+AcAAAAAAAAAAByS
+        9wAAAAAAAAAAAByS9gAAAAAAG5H3hh2T9v8ckvb+HJL2/hyS9v4ckvb/IZ3/AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9gAAAAAAHJL2zRyS9v8ckvb+HJL2/hyS
+        9v8ckfbAAAAAAAAAAAAAAAAAG5H1AAAAAAAckvevHJL1/xyS9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvf+HJL2/hyS9v4ck/b9HJL2/hyS9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyT
+        9v8ckvb/HJP1ggAAAAAAAAAAHZL2AAAAAAAAAAAAAAAAAB2S91Yckvb/HJL2/hyS9v4ckvb/HJL2/xyS
+        9ikAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdlPQAAAAAAByS
+        9pYckvb/HJL3/hyS9/4ckvf/HJL29AAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2fByS9v8ckvb+HJL2/hyS
+        9v8ckvf/HJL2/hyS9/4ckvf+HJL2/xyR9v8ckvb/HJL3/hyS9v8ckvf/HJP2/hyR9/8ckvb/HJL2/hyS
+        9v4ckvb/HJL3/xyS9v4ckvf+HZL2/hyS9/8ckvb/HZH1IQAAAAAAAAAAHJL2AAAAAAAakvQYHJL2/xyS
+        9v8ckvb+HJL2/xyS9v8bkvZXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvZhHJL2/xyS9v4ckvb+HJL2/hyS9v8dk/cJAAAAAAAAAAAAAAAAAAAAAB2S
+        9kwckvb/HJL2/hyS9v4ckvb/HJL2/xyS9v4ckvb+HJL2/hyS9v8ckfb/HJL2/xyS9/4ckvb/HJL2/xyT
+        9/4ckvb/HJL2/xyS9v4ckvb+HJL2/xyS9v8ckvb+HJL2/hyS9v8ckvb+HJL2RgAAAAAckvUAAAAAAAAA
+        AAAAAAAAAAAAAByS9v8dkvb+HJP2/hyS9f8ckvb/HZP2kQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        9v8dk/b+HZP2/hyS9v4dk/f/HZL3KwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJP2SxyS9v8ckvb+HJL2/hyS9v4ckvb/AAAAAAAAAAAAAAAAAAAAAAAA
+        AAAbkvaCHZL2/x2T9v4dk/b+HJL2/hyS9v8AAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvb/HJL2/xyS9/8ckvb/HZL3/RyS9/8ckvb/HJH2/xyS9v8ckvb/HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8ckvb+HJL2/xyS9v8ckvb/HJL2/xyS
+        9j0AAAAAAAAAAAAAAAAAAAAAHZP3TB2S9v8ckvb/HJL3/xyS9v8ckvf/HJL2DwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL26R2S9v8dkvb/HJL2/hyS9v4dkvb+HJH2/hyR
+        9v8ckfb/HZL2/hyR9v8ckfb/HJL2/hyR9v8ckfb/HJL2/h2S9v4dkvb/HZL2/xyS9v4ckvb+HZL2/hyR
+        9v8ckfb/HJH2/xyT9/8ckfVrAAAAAAAAAAAAAAAAAAAAABuR9R8ckvb/HZL2/x2S9v8ckvb+HJL2/xyS
+        9kUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAByS9q0ckvb/HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS9/4ckvb+HJL2/hyT9v0ckvb+HJL2/hyS9v4ckvb+HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS9v4ck/f/HJL2pwAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2/xyS
+        9v4ckvb+HJL2/hyS9v8ckvdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvZ+HJL2/xyS9/8ckvb+HJL3/hyS9/4ckvb/HJH2/xyS9v8ckvf+HJL2/xyS9/8ck/b+HJH3/xyS
+        9v8ckvb+HJL2/hyS9v8ckvf/HJL2/hyS9/4ckvf+HJL2/xyR9v8ckvb/HJL3/xyS9tIAAAAAHJL2AAAA
+        AAAAAAAAAAAAAByS9uYckvb/HJL3/xyS9v4ck/b/HJL1qAAAAAAdkvYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAG5L2QByS9v8ckvb/HJL2/hyS9v4dk/b+HJL2/xyR9v8ckvb/HJP2/xyS
+        9v8ckvb/HJP2/xyS9v8ckvb/HJL2/xyS9v8ck/b/HJP2/xyS9v8ckvb/HJP3/xyS9v0ckfb/HJL2/xyS
+        9/8ckvb/AAAAAAAAAAAdk/YAHJP3AAAAAAAckvesHJL2/xyS9v8ckvb+HJL2/xyS9tMAAAAAHJL2AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9hUckvb/HJL1/xyS9v4dkvb+HJL2/x2S
+        9rYckvd1HZL3eB2T93gck/Z4HZL3eByS9ngdkvd4HJP2eB2T93gdkvd4HJL3eByT93gdkvd4HJP2dx2R
+        944dk/b/HJH1/xyS9v8ck/f+HJL2/x6V+A0AAAAAAAAAAAAAAAAAAAAAHJL2fxyS9v8ckvX/HJL2/h2S
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbk/YAAAAAAByS9tcckvb/G5L2/hyS
+        9v8bkfVEAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAII34AAAA
+        AAAAAAAAHJL2/xyS9v8ckvbyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdkvcAAAAAABqR+CIckvb/G5L2agAAAAAck/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL2ABqS+AAAAAAAHJL2cCWU7gEAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YAHJL2AAAA
+        AAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////8//////////x/4H//A+AAAB/gf/8D4AAAB/B//wPwAAAD8H//g/AAAAfwP/+D8AAAD/A/
+        /4PwP/w/8D//gfA//P/4P/+B8D/9//g//8HwP///+D//wfg////4H//B+D////gf/8D4P///+B//wPgf
+        ///8H//A+B////wf/+D4H////AAAAPwf///8AAAA/B////wAAAB8H////gAAAHwP///+AAAAfA////4H
+        /+B+D////gf/8H4P///+B//wfg////4H//A+B////wf/8D4H////B//4Pgf///8H//g/B////wP/+D8H
+        ////A//4Hwf///8D//gfA////4P/+B8D////g//8HwP///+D//AHg////4H/8AeD////gf/4B4P////B
+        //wPg////////A/////////+H/////////8f/////////7//////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////8oAAAAgAAAAAABAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAIJX1AB2T9gIclvsAHYvvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOY9AAAAAAAAAAAAAAAAAAAAAAAHZL3AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuS9xgck/d9HZT4BwAAAAAAAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5P2ExyT9v8dkvfnHJP2VQAA
+        AAAAAAAAHZP2ARqR9gAdkvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvYSHJL39R2T9v8dkvf/HZL3shyS9yQAAAAAAAAAAB2S9wAdk/YAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI3xAB2T
+        9wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZT2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR9wAdk/YAAID/AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByV9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeT9wYck/f2HZL3/x2T
+        9/8dk/b/HJL3/xyT9oEck/UKAAAAAB+R9wEbk/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9kQdk/d5HZP3bh2T93Ick/d0HJP3dx2T
+        93kckvd8HZP3fhyT94AckveLHZP4RQAAAAAckvgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZT3Cx2T90AckvZHHJP3RR2S90Udk/dFHZP3RR2S90Udk/dFHZP3RRyS
+        90cdk/Y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByn7QAck/Y0HZL3SRyS
+        9kUdkvdFHJL2RR2T9kUdk/dFHZP3RR2T90Uck/dFHZP3RR2T90Uck/dFHZL3RR2T90Udk/dFHZL3RR2T
+        90Udk/dFHZP3RRyT90Udk/dFHJP2RR2T90UdkvdFHZP3RRyT90Udk/dFHJP3RR2T90UdkvdFHJL3RR2S
+        90Uck/dFHJL2RR2S90Udk/dCHJP3UxyT9/kdk/f/HZP2/hyS9/8dk/b/HZL3/x2S990ck/ZWAAAAAAAA
+        AAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2jR2T9/8dk/f/HZP2/x2T9v8dkvb/HZP3/x2T9/8dk/b/HZP3/xyS9/8dk/e0AAAAAByS
+        9wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/YXHJP21h2S
+        9/8ckvb6HZP3+h2T9/ockvb6HZP3+hyT9/odk/f6HZP3/RyS9u8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9qsckvf/HJP2+h2T9/odk/f6HJL2+h2S9/odk/f6HZP3+hyT
+        9/odk/f6HJP3+hyS9/odk/f6HZP3+hyS9vodk/f6HJP3+h2T9/ockvb6HJL3+h2S9/ock/b6HZL3+h2T
+        9/ock/f6HJL2+h2T9/ockvb6HZP3+h2T9/odk/f6HZL2+hyS9/ockvb6HZP3+hyT9/odkvb7HZP3/hyT
+        9/8dk/f/HJL2/x2S9/4ck/b6HZL2/xyT9/8ck/ezHJL2IgAAAAAAAAAAHpL3ABuT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI3xAAAAAAAdk/dZHJP2/xyS9/8dk/b/HJP3/xyS
+        9v8dkvf/HJP2/x2T9v8dk/b/HZP3/xyS9tMAAAAAHpT3AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvbBHZP3/x2S9/8dk/f/HZP3/x2S9v8dk/f/HZP3/x2T
+        9/8dkvb/HJP3/xyT9yMAAAAAHJP3AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACue8QAAAAAAHJL3jh2T
+        9v8dk/f/HZP3/x2T9/8dkvb/HZL3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZL2/x2T
+        9/8dk/f/HZP3/xyS9v8dkvf/HZL3/x2T9/8dkvf/HZP3/x2T9/8ckvb/HZP3/xyS9v8dk/f/HZP3/x2T
+        9/8dkvb/HZL3/x2S9/8dk/f/HJP2/xyS9v8dkvf/HZP2/h2S9v8dkvb/HZL2/xyT9/8ck/f+HZL2/x2S
+        9v8ckvf/HZL3gBuT9ggAAAAAAAAAAAAAAAAckvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9y4ckvf8HZP2/x2T9/8dk/f+HJL2/x2T9/4ckvb/HJL2/xyS9v8dkvb/HJP34xyU
+        +BYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95wck/b/HJL2/x2T9/4dk/f+HJL2/x2T9/4ckvb/HJL3/xyT9v8dkvf/HZL3VAAAAAAdkvcCAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/ZlHJL3/x2T9v8ckvb/HZP3/hyS9v8dk/f+HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8ckvb/HZP3/h2T9/4ckvb/HZP3/hyS9v8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS
+        9/8dk/f+HJL3/xyS9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8ckvb/HJL3/xyS9v8dk/f+HJL2/x2T
+        9/4ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8dk/f/HZP3/RyT9v8dk/b/HJL32xyT9lMAAAAAAAAAAAAA
+        AAAck/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxmNYAAH7/AByS9/Adk/b/HZP2/xyT
+        9v4dk/f/HZP3/h2T9v4dk/b+HZP3/hyS9v8dk/f2HZP3PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9QAAAAAAHZP3ax2T9v8dkvf/HJP3/h2T9/4dk/f/HZP3/h2T
+        9/4dk/f+HZP3/xyS9v8dk/aIAAAAAByT9gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T
+        9zsdk/f/HJL2/xyS9v4ck/b+HZP3/x2T9/4dk/b+HZP2/h2T9/4dk/f+HZP3/h2T9v4ck/f+HZP3/h2T
+        9/8dk/f+HZP3/h2T9/4dk/b/HJP3/h2T9v4ck/b+HZL3/x2T9/4dk/f+HJP2/x2T9/4dk/f/HZP3/hyT
+        9/4ck/b+HZP3/x2T9/4dk/f/HZP2/hyT9v4dk/f/HZP3/h2T9v4dk/b+HZP3/h2T9/4dk/f+HZP2/hyT
+        9/4dk/f+HZP2/hyS9v8dkvf/HZP2/x2T9rYdkvcrAAAAAAAAAAAek/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gIAAAAAHZP30RyS9v8dkvf+HZP2/x2S9/8dkvf/HZP2/x2T9v8dk/f/HZP3/x2S
+        9v8ck/ZdAAAAAB2S9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdkvZAHZL2/xyT9/8dk/f/HZP3/x2S9/8dk/f/HZP3/x2T9/8dk/f/HZP2/xyT97YAAAAAHZP2BQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2FRyS9vYdk/f/HZL2/x2T9v8dkvf/HZL3/x2T
+        9v8dk/b/HZP3/x2T9/8dk/f/HZL2/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyS9v8dkvf/HZL2/x2T
+        9v8dkvf/HZP3/x2T9/8ckvb/HZP3/xyS9/8dk/f/HZP3/x2T9v8dkvf/HZL3/x2S9/8dk/b/HZP2/x2S
+        9/8dkvf/HZP2/x2T9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9/8dkvf/HZP3/x2T9v4ckvf/HZP3/xyS
+        9vwdk/eEH5L2EAAAAAAWmP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3AQAAAAAdkvefHJP2/x2S
+        9/0ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvb/HJP2/x2S938AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9xIck/f8HZL2/xyT9/8dk/f+HJL3/x2T
+        9/4ckvf/HJL3/xyT9/4dkvb/HJP30gqT+AAgkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9QEAAAAAHZP36RyS9v8ckvb+HJP3/hyS9/8dk/f+HJL2/xyT9v8ckvf/HJL3/xyT9/8ckvb/HJP3/h2T
+        9/4ckvf/HZP3/hyS9/8ckvf/HJL2/xyS9/8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS9v8ckvf/HJL3/xyS
+        9/8ck/f+HJP3/hyS9/8ckvf/HJL3/xyS9v8ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvf/HJP3/xyS
+        9v8ck/f+HZP3/hyS9/8dk/f+HZL3/x2T9/8ckvf7HJP3/x2T9v8dkvaOAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAck/YAAAAAAByT9modkvf/HJP2/ByT9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyT
+        9v4dkvf/HJP2pgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAelPUBAAAAAByS9+Mdk/b/HJL3/h2T9/8dk/f/HZP3/x2T9/8dk/f/HZP3/h2S9/8ck/bpHJL2JgAA
+        AAAAqv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP3AgAAAAAdkva+HJP3/x2T9v0ck/f/HZP3/x2S
+        9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2S9/8ck/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL3/x2S
+        9/8ck/f/HZL3/x2T9/8dk/f/HJP3/x2T9/8dk/f/HZP3/xyT9/8ck/f/HZP3/x2S9/8dk/f/HZP3/xyT
+        9/8dk/f/HZL3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL3/xyT9/8dk/f/HZP3/x2T9v4dk/f+HZL2/xyT
+        9/8dk/fkHJL2VQAAAAAolP8AHZH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9gAAAAAAHJL2Ox2T
+        9/8ckvb6HZP3/hyS9v8dk/f+HJL2/xyT9v8ckvb/HJL2/x2T9v8ckvfJHJL3CwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP2sxyS9/8dk/f9HZP3/hyS
+        9v8dk/f+HJL2/xyS9/8ckvb/HJP3/x2S9v8dk/dIAAAAAByR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvYBAAAAAB2T95Mckvb/HZL3/B2T9/4ckvb/HZP3/hyS9v8ck/b/HJL2/xyS9v8ck/b/HJL2/x2T
+        9/4dk/f+HJL2/x2T9/4ckvb/HJL3/xyS9v8ckvb/HJL2/xyS9v8ckvb/HZP3/hyS9/8ckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/4ckvb/HJL2/xyS9v8ckvb/HZP3/hyS9v8dk/f+HJL2/xyT9v8ckvb/HJL2/xyT
+        9v8ckvb/HZP3/h2T9/8ckvb+HJL3/x2T9/8ck/f/HZL2kR2S9hIAAAAAH5L4AQBVuAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvcbHJL2+x2T9/4dk/f+HZL2/x2T9/4dk/b/HZP2/x2T
+        9v8dk/b/HJP3/x2T9vEdk/ccAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2AAAAAAAdk/Z9HJL3/x2T9vsdk/f+HZL2/x2T9/4dk/b/HZP3/xyS9v8dk/f/HZL2/xyT
+        924AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHJL2Yx2T9/8ckvb7HZP3/h2S
+        9v8dk/f+HZP2/x2T9v8dk/b/HZP2/x2T9/4dkvf/HZP3/R2T9/0dk/f9HZP3/R2T9/0dk/f9HZP3/R2S
+        9/0dkvf9HJP2/R2S9/0dk/f9HZP2/RyS9/0dk/b9HZL3/R2T9/0dk/f9HZP3/R2S9/0dkvf9HZP3/R2T
+        9/0dk/b9HZP2/R2S9/4dk/b/HZP2/x2T9v8dk/b/HZP2/x2S9/8ck/b/HZP3/RyS9/8dkvb/HJL2yRyS
+        9zcAAAAAAAAAAB+V9gAakfcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2U
+        9g4dk/bUHJL3/x2T9/4dk/b/HZP3/hyT9v8dkvb/HJP2/x2T9v8ckvb6HZP3/xyT9i4AAAAAGpP2AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cAAAAAAByT904dkvb/HJP3+h2T
+        9/4dk/b/HZP3/hyT9v8dk/f/HJP2/x2S9v4dk/f/HJL2lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZT3AAAAAAAdk/c4HJL3/x2T9vodk/f+HZP2/x2T9/4ck/b/HZL2/xyT9v8dk/b/HZL3/x2T
+        9v0dkvf/HZL3/x2S9/8dk/f/HZP3/x2T9/8ckvb/HJL2/x2S9v8dk/b/HJL3/x2T9/8dk/f/HJP2/xyT
+        9/8ck/b/HJP2/x2T9v8dk/b/HZP2/x2S9v8ck/b/HZL2/xyT9/8dkvb/HZP3/xyT9v4dkvb/HJP2/x2T
+        9v8dk/f/HJP3/h2S9/8dkvb/HJP3+hyT928AAAAAAAAAAB+V+gAAAAAAHpH2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT96kdkvb/HJP3/x2S9/8dk/f+HJL2/x2T
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6Q+QEAAAAAAAAAAAAAAAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvYDAAAAAByT9ngckvf/HJP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyS
+        9v8dk/f/HJL3kQAAAAAdk/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdkPgBAAAAAByT9tsckvf/HZL2/x2T9/4dk/f+HZP3/hyS9v8dk/f+HZL3/xyT9v8dkvf1HZH3HAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9g4dkvbeHZP3/x2S9v8dk/f+HZP3/h2T
+        9/4dk/f+HZP3/h2T9/4dk/b/HJL3+xyR9yYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAekPkAAAAAAByT
+        9wIdkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wEAAAAAHJL3QxyS
+        9/8ckvf+HZL3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HJL3/hyT9v8dkve2AAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wQAAAAAHJL2thyT9/8ckvb+HZP3/h2T
+        9/4dk/f+HJL2/x2S9/4dkvf+HJP3/xyS9v8dkvZLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/cEAAAAAB2S9sgdk/f/HZL2/h2S9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyS9/8dk/b/HZP2TQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZP2AAAAAAAdk/YVHZP3/x2T9/4dkvf/HZP2/x2T9v8dk/f/HZP3/x2T
+        9/8dkvb/HJL2/x2T99Adk/kOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL3AgAAAAAdk/aFHZL3/x2S9v4dk/f/HZP3/x2T9/8dk/b+HZL3/x2S9v8dk/b/HJP3/x2S
+        9nQAAAAAHJT3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9gQAAAAAHJP3pR2S9v8dk/f+HZL3/x2T
+        9v8dk/b/HZP3/x2T9/8dk/f/HZP2/xyS9v8ckvdxAAAAAB2T9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/bmHZP3/x2S9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2S9/8dkvb/HJP37hyS9yoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cBAAAAAByT91Ack/f/HJP3/R2T
+        9/8dk/f/HZP3/xyT9v8ckvf/HZL3/xyT9v4ckvb/HZP3nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2AwAAAAAckvZzHJL2/xyS9v4dkvf/HZP3/x2T9/8dk/f/HZP3/x2T9/8ckvb/HJP3/x2T
+        9poAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS97gckvb/HZL3/h2T9v8dk/b/HZP2/x2T
+        9v8dk/b/HZL2/x2T9/8ckvb/HZP3QQAAAAAZkfYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2IByS9v8ckvb9HZP3/h2T9v8dk/b/HZP2/x2S9v8dkvb/HZP2/h2S
+        9v8ck/e/HJb6AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cBAAAAAB2T90cdk/f/HZP3/h2S
+        9/4dk/b/HZP2/x2T9v8dk/b/HZP2/xyS9v4ckvb/HJL3tgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL2jByT9/8dk/f+HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL2/hyS9v8dk/dhAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvYHHZL28x2S
+        9v8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJP3/x2S9t8ckvYaAAAAADOZ/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuS9gAAAAAAHJL2GRyS9v8ckvb+HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZP3/xyT
+        9v8dkvfOHZP3DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/dbHZL2/x2S9/8dk/b/HZP2/x2T
+        9/8dk/f/HZP3/x2S9v8ck/f+HZP2/xyS95EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvfCHJP2/x2T9/8dk/f/HZP3/xyS9v8ckvf/HZL2/xyT
+        9v8dkvf/HJP2/x2S9zMAAAAAGZP0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL27hyS
+        9v8dkvf/HZP2/x2T9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9ukdkvYlAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAij/UAAAAAAByT9z0dkvb/HZP3/xyT9v8dk/b/HJP3/x2T9/8ck/f/HJL2/x2T9/4dk/f/HZP2ugAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95gck/b/HZP3/hyT9/8dk/f/HJP2/xyS9/8dkvb/HJP2/x2T9/4ckvf/HZP2UQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAakvYAAAAAAAAAAAAck/bDHJL3/x2T9/4ck/b/HZP2/xyT9/8dk/f/HJP3/xyS
+        9v8dk/f/HJP2/x2S9zsAAAAAHZP2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACq/gAAAAAAHZL2IByS9uQdk/f/HZP2/x2T
+        9v8dk/b/HZP2/x2T9v8dkvb/HZP3/hyS9/8ckvfqF4T/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL3aByT9v8ck/b/HZP2/x2T9/8ckvb/HZL2/x2S
+        9v8dk/b/HJL3/h2S9/8ck/aFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95Qck/b/HZL3/x2T9v8dk/b/HZP2/x2T9v8dk/b/HZL2/x2T9/4ck/b/HZL3WwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdlfkGHZP3yByS9v8dk/b+HZP2/xyT9v8dk/b/HJP2/xyS9v8ck/f+HJL3/hyS
+        9/8bkvcSAAAAABqR9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL3AAAA
+        AAAck/ZHHZL3/x2T9/8ck/b/HZP2/xyS9v8ckvb/HZL2/xyT9v8ckvb/HZP2/xyS97QAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3ah2T9v8dk/f+HJP2/x2T9v8ck/b/HZP2/xyT
+        9v8ckvb/HJP3/h2S9v8ck/eDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/asHZL3/x2S
+        9v4dk/f+HZP3/h2T9/4dk/f+HZL3/hyT9/4ck/b+HJP2/xyT9j8AAAAAHJP2AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9ysdk/btHJL3/x2T9/4dk/f+HJL2/xyS
+        9/4dkvf+HJP3/h2S9/8ck/f/HZL25QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAck/ZHHZL3/x2S9/8dk/f+HZP3/h2T9/4dk/f+HZP3/h2S9/4ck/f/HZP2/xyS96sAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdk/gAAAAAAByS9oEdk/f/HZP2/x2T9v8dk/b/HZP2/x2T9v8dkvb/HJP2/x2T
+        9/4dk/f/HZL3cQAAAAAdk/cDHZP3AByT9wAdk/YAHJL3AB+V8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGpn2BxyT9s8dkvf/HZP2/x2T9/8dk/b/HJL2/x2S9v8ck/b/HZL3/xyS9v8dk/f/HpP3EgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAakvgAAAAAAB2T9iwckvfxHZL3/x2T9v8dk/b/HZP2/x2T
+        9v8dk/b/HZL2/xyT9v8ckvf/HZL22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2Vh2S
+        9/8dk/f/HZP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/h2T9/8dk/ecAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfmPkEH5v5BB+a+QQfmvkEH5r5BCCd
+        +gQdkfcIHo/zCx6P8wsej/MLHo/zCx6P8woekPQLHpL4EB6Q+A84hP8AHZP3uxyS9v8dk/f+HZP3/hyS
+        9v8dk/f+HZP3/h2T9/4ckvf/HZP2/xyS9/8ckvdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2FByT9tYdkvf/HZP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyT9/8ck/f/GpT3BgAA
+        AAAPmvcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YnHZP2/ByS9/8dk/f/HZP3/x2T9/8dk/f/HZP3/xyT
+        9/8dk/f/HZP3/x2T9/4dk/fxHZP3+B2T9/kckvf4HZL2+B2T9vgckvf4HJL2+R2T9vkdk/b5HZP2+R2T
+        9vkdk/b5HZP2+R2T9/odk/f6HZP3+h2T9/odk/f6HZP3+h2S9/sdkvb7HZL2+x2S9vsdkvb7HZL2+x2S
+        9vsdkvf8HZL3/B2S9/odkvf8HJP2/x2T9/8dk/f/HJL2/xyT9/8dk/f/HJP3/x2S9/8ck/f/HZL2/xyS
+        9nUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3uB2S9v8dk/f+HZP3/x2T
+        9/8dk/f/HZP3/x2T9/8ck/f/HJP3/hyT9/8ck/YtAAAAAByT9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZHvAAAA
+        AAAck/fyHZL2/x2T9v8ckvf/HZL3/xyT9/8ckvb/HJL3/x2S9/8dkvf+HZP3/xyS9/8ckvb/HZP3/xyS
+        9/8dkvb/HJL3/x2T9v8dk/f/HJL3/xyS9/8ckvf/HJL3/xyS9/8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS
+        9v8ckvb/HJP2/xyT9/8ck/f/HJP3/xyT9/8ck/f/HJP3/xyT9v8ck/b/HJP2/xyS9v8dkvf+HJL3/x2S
+        9/8ckvb/HJL3/x2S9v8ckvb/HZL3/x2S9/8ckvb/HZP3pQAAAAAbjfMAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdk/eaHZL2/x2S9v8dk/b/HJL3/x2S9/8ck/f/HJL2/xyS9/8dkvf+HZL3/x2S
+        91kAAAAAHZL3AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YBAAAAAByS980dk/b/HZP3/h2S9/8dkvf/HZP3/x2S
+        9/8dk/f+HZP3/hyS9v8dk/f+HZL3/h2S9/4ckvb/HZL3/x2S9/8dkvf/HJL3/x2T9/4dkvf/HJL2/x2S
+        9/8ckvb/HZL3/x2T9/4dk/f+HJL2/x2S9/8ckvf/HZL3/x2T9/4ckvb/HZP3/h2S9/8dk/f/HZL3/x2S
+        9/8dk/f/HZL3/x2T9/4dk/f+HJL2/x2T9/4dkvf/HZL3/xyS9v8dkvf/HZL3/x2S9/8ckvf/HZP3/hyT
+        9/8dkvbHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdm/8AAAAAAByS9nMdk/f/HJP2/x2T
+        9/8dkvf/HZL3/x2T9/8dkvf/HZP3/h2T9v4ck/b/HZL3gwAAAAAck/YDAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9wEAAAAAHZP2mByS9/8dk/f8HZL2/x2S9v8dkvb/HZL2/xyS9v8dkvb/HJL2/x2S9v8dkvb/HZL3/xyS
+        9v8ckvb/HZL2/xyS9v8ckvf/HZL2/x2S9/8ckvb/HZL2/xyS9v8dkvb/HJL2/xyS9v8ckvb/HZL2/xyS
+        9v8dkvb/HJL2/xyS9v8dkvb/HZL2/x2S9v8dkvb/HZL2/x2S9v8dkvb/HJL2/x2S9v8ckvb/HZL2/x2S
+        9v8dkvf/HJL2/xyS9v8dkvb/HJL2/xyS9/8dk/f+HZP3/xyS9t8ckvYYAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZL2Rh2S9v8ck/f/HZL2/x2S9v8dkvb/HZL2/x2S9v8ckvb/HZP3/h2S
+        9/8ck/a0AAAAAB2S9wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2AAAAAAAckvZpHZP3/xyS9vsckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/4ckvb/HZP3/hyS9v8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS
+        9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8ckvb/HJL3/xyS9v8dk/f+HJL2/x2T9/4ckvb/HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8dk/f+HJL2/xyS9/8ckvb/HJL2/xyS9v8ckvb/HJL3/x2T
+        9/4dk/f/HJP29B2S9zYAAAAAHJf2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cdHJP3+x2S
+        9v8ck/b/HJL2/xyS9v8ckvb/HJL2/x2T9/4dk/b/HZL2/xyT99AAAAAAHZL2AgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAaj/UAAAAAAByS9jYdk/f/HJL2+h2T9/4dk/f+HZP3/h2T9v4ck/f+HZP3/h2T9/8dk/f+HZP3/h2T
+        9/4dk/b/HJP3/h2T9v4ck/b+HZL3/x2T9/4dk/f+HJP2/x2T9/4dk/f/HZP3/hyT9/4ck/b+HZP3/x2T
+        9/4dk/f/HZP2/hyT9v4dk/f/HZP3/h2T9v4dk/b+HZP3/h2T9/4dk/f+HZP2/hyT9/4dk/f+HZP3/x2T
+        9/4dk/f+HZP3/h2T9v8ck/f+HZP2/hyT9v4dkvf/HZP3/hyT9/8ckvf/HZP2WAAAAAAbjPcAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAH5H1AQAAAAAck/fsHZL2/x2T9v4dk/f+HZP3/h2T9/4dk/b+HJP3/h2T
+        9/8ck/b/HZL35B2S9xsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3HhyS9vgdk/f/HZP3/x2T
+        9/8dk/f/HZL2/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyS9v8dkvf/HZL2/x2T9v8dkvf/HZP3/x2T
+        9/8ckvb/HZP3/xyS9/8dk/f/HZP3/x2T9v8dkvf/HZL3/x2S9/8dk/b/HZP2/x2S9/8dkvf/HZP2/x2T
+        9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9/8dkvf/HZP3/x2T9/8dk/f/HJL2/x2S9/8dkvb/HZP2/x2S
+        9/8dk/f/HJL3/h2S9/8ck/Z6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cBAAAAAB2S
+        9sQck/f/HZP2/R2T9/8dk/f/HZP3/x2S9v8dk/f/HZP3/x2T9/8ck/b1HZL2OgAAAAAVlf8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGo/2AAAAAAAdkvYPHZP30RyS9v8ckvf/HJL3/xyT9/8ckvb/HJP3/h2T9/4ckvf/HZP3/hyS
+        9/8ckvf/HJL2/xyS9/8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS9v8ckvf/HJL3/xyS9/8ck/f+HJP3/hyS
+        9/8ckvf/HJL3/xyS9v8ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvf/HJP3/xyS9v8ck/f+HZP3/hyS
+        9/8dk/f+HJL3/xyS9/8ckvb/HJL3/xyS9v8ckvb/HJL3/x2T9/4dk/f/HZP2/xyS96IAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9gAAAAAAHJL3lR2T9v8ckvb8HJL3/xyS9/8ck/f/HJL2/xyT
+        9/4dk/f+HJP2/x2S9v8ck/dZAAAAAB+S9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckveoHZP2/xyT
+        9/4dk/f/HZP3/x2S9/8ck/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL3/x2S9/8ck/f/HZL3/x2T
+        9/8dk/f/HJP3/x2T9/8dk/f/HZP3/xyT9/8ck/f/HZP3/x2S9/8dk/f/HZP3/xyT9/8dk/f/HZL3/x2T
+        9/8dk/f/HZP3/x2T9/8dk/f/HZL3/xyT9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8ckvf/HZL3/xyT
+        9/8dkvf/HZP3/x2T9/8ckvf/HZP2zh2S9gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3AAAA
+        AAAdk/dkHJL3/x2T9/sdk/f/HZP3/x2T9/8dkvf/HJP3/x2T9/8dk/f/HJL3/x2T9n0AAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9oQdkvf/HJP3/hyS9v8ck/b/HJL2/x2T9/4dk/f+HJL2/x2T
+        9/4dk/b+HZP3/xyS9v8ckvb/HZL2/xyT9v8ckvb/HZP3/xyT9v8ckvb/HJP2/xyS9v8ck/b/HZP3/x2T
+        9v8ckvb/HJL2/xyS9v8dk/b/HZP2/xyS9v8dkvf/HJP2/x2T9v8ck/b/HZP2/xyT9v8ckvb/HZP3/x2T
+        9/8ckvb/HZP3/xyT9/8dkvf+HJP2/hyS9v8ckvb/HJL2/xyS9v8dk/f+HJL3/xyS9v8dk/f2HJL2DQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbk/cAAAAAAByT9jgdkvf/HJP2+hyS9v8ckvb/HJP2/xyS
+        9v8dk/f+HZP3/hyS9v4ck/f/HZL2nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP3XByT
+        9/8dkvb/HZP2/x2T9v8dkvb/HZP3/h2T9/4dkvb/HZP3/h2T9/8dkvb8HZL22x2T990dkvfdHZP33R2S
+        990dk/fdHZP33RyT9t0dk/fdHZP33R2T990dk/fdHZP33R2T990dkvfdHZP23R2T990dk/fdHZP33R2S
+        990dk/fdHZP33R2T990dk/fdHZP33R2S990dk/fdHZP33R2T9t0dkvfaHZL38R2T9v8dk/f+HJL2/x2S
+        9v8ck/b/HZL3/x2T9/4dk/f/HZP3+xyS9v8dk/cpAAAAAB2U9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2Hh2T9/gckvb/HZP2/x2T9v8dk/b/HZL2/x2T9/4dk/f+HZL2/x2S9v8ck/fGHJL3CQAA
+        AAAkkv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJf2AAAAAAAdkvY5HZL29RyT9/8dk/b/HJL2/xyS9v8dk/f+HZP3/h2T
+        9v8dk/f+HJL2/x2T9/Mck/ceHJL2FRyT9xYckvcWHJP2Fh2T9xYck/YWHZP3FhyT9hYckvYWHJL2Fh2S
+        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
+        AAAAAAAAAAAAACGT/QAAAAAAHJL2aB2T9/8dk/f/HJL2/xyT9v8ckvb/HJP2/x2T9v8ckvb/HJL2/B2S
+        9/8ck/aLAAAAAByS9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AgAAAAAdk/dwHZL3/x2T9/4ck/f/HJL2/x2T
+        9/4dk/f+HZL3/x2T9/4ck/b+HZL2/xyT96QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL2BAAAAAAdk/fLHJL2/xyT9/4dkvb/HJL2/x2S9/8dk/f+HJL3/xyS
+        9v8ckvb/HZP27hyU9h8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJHyAAAAAAAdk/dCHJL2+R2T
+        9/8dkvf/HJP3/xyS9v8dk/f+HZP3/h2S9/8dk/f+HZP2/xyS98UAAAAAHZP2AgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvYBAAAAAByS9kEckvb/HJL2/hyT9v8ckvb/HZP3/h2T9/4dkvb/HZP3/h2T9/4ck/f/HZL3vx2E
+        9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cDAAAAAByS
+        9qAdk/f/HJP2/h2S9v8ckvb/HZL3/x2T9/4ckvb/HJL2/x2T9/8dkvf6HJL2RgAAAAAkkv8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9iEdk/bpHJL3/x2S9/8ck/b/HJL2/x2T9/4dk/f+HZL2/x2T
+        9/4dk/b/HJL37QAAAAAhlvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6V+gAAAAAAHZP4EB2T9/8ckvf+HZP2/x2S
+        9v8dk/f+HZP3/h2S9v8dk/f+HZP2/xyT9v8ckvfdHZL2GgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9wIAAAAAHZL3bhyT9v8dkvf9HZL2/x2T9v8dkvf/HZP3/h2T
+        9/8ckvb/HZP3/xyT9v8dkvdxAAAAABmV8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YBAAAAAByS
+        99Ydk/b/HZP2/x2T9v8dkvb/HZP3/h2T9/4dkvb/HZP3/x2T9/8ckvb7HJL2KQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckfYBHJL25B2T9v8dk/f/HZL2/xyT9/8dk/f/HZP3/x2T9/8dk/f/HZL3/x2T
+        9vkck/cvAAAAAB2R9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP2AQAA
+        AAAck/ZCHZL3/xyT9vwdkvb/HJP2/x2S9/8dk/f/HZP3/xyT9v8dk/f/HZL3/xyT9pUAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9gUAAAAAHJL3uh2T9v8ckvb+HZP3/x2S9v8ck/f/HZP3/x2T
+        9/8dk/f/HJL3/x2T9/8dk/ZWAAAAAB6U9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAglfkAAAAAAAAAAAAdk/a5HJL3/x2T
+        9/4dk/f+HZP3/h2T9/4dkvb/HZP3/h2T9/4ckvf/HJP3/x2S9kUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdlvkAAAAAAB2T9xkckvb/HZP3/B2T9/4dk/f+HZL3/x2T
+        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
+        AAAAAAAAAAAAABaO8QAAAAAAHZP3TxyS9v8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL2/ByT
+        9/8dkvacAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSS/gAAAAAAAAAAAB2S96wckvf/HZP3/x2T
+        9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8ck/b/HZL3TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2sRyS9/8dk/b+HJP3/x2T9/8dkvb/HZP3/x2T9/8dk/f/HZP3/xyS9v8ckvZDAAAAAByS
+        9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIpn/AAAAAAAckvYwHZP38B2S
+        9/8ck/b/HZL3/x2T9/8dk/f/HJL2/x2T9/8dkvb9HZP3/xyS9s8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL2fh2T9/8dkvf+HZL2/xyT9/8dk/f/HZL2/x2T9/8dk/f/HZP3/hyT
+        9v8dkvd6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGW+Agdk/eUHJL2rx2T
+        96gdk/eoHZP2qB2T96gck/eoHJP2qB2S96gdkvauHJP3kgAAAAAejvYCAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP2RxyS9v8dk/b/HZP3/hyT9/8ckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/8ckvb/HZL3/xyT9kMAAAAAHZH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR
+        9gYckveCHZP3rhyT96gdk/eoHZP3qB2T9qgdk/eoHJP3qByT9qgckvanHJP3qR2T9hIAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdlPYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGpr3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AAAA
+        AAAAAAAAHJL3cx2S9/8ck/b/HZL3/xyS9v8dk/b/HJL2/x2T9v8dk/f+HJP3/hyS9v8dk/fCAAAAAByS
+        9wMamfIAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACua/gAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfivYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAglfQAHJL2ABuS0QAAAAAAHJP3rB2S9v8ck/f9HJP2/hyT
+        9v8ck/b/HJP2/x2T9/4dkvb8HZP3/xyT9kwAAAAAHZP2AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP3AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL4AAAAAAAgjfgEHJP32x2T9v8ckvb+HJP3/xyS9/8ckvf/HJP3/h2T9/8ckvbVAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL1AAAAAAAdkvcvHJL2+xyT
+        9v8dk/b+HJP2/xyT9/4dkvb/HJP3/xyS9mwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACuA/wAAAAAAHZX2AAAAAAAdkvdhHZP2/xyT9/8ckvb+HZL3/hyT9/8dkvbmHZP3GAAA
+        AAAdkfUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAAAA
+        AAAck/eZHZL2/xyT9/4ck/b/HJP3/x2S9owAAAAAG5T6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvYAAAAAABWU/AIckvfMHZP2/x2S9v8ck/f/HJP2GgAA
+        AAAekPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuU
+        +AAdkvYBAAAAAByT9xockvbuHZL3/xyS9qIAAAAAHpL3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9wAdk/YBAAAAAB2T904ck/f/HZP2NgAA
+        AAAZlPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9kYckvYOAAAAAByS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wAAAAAAAAAAAAAA
+        AAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2S/wAdkvYAHJL1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////////////////P////////////////////w
+        ////////////////////8D////5///////////////Af//wAP////wAf/AAAAAAAB//+AD////8AH/wA
+        AAAAAAH//gA/////AB/+AAAAAAAA//4AP////4AP/gAAAAAAAD/+AD////+AD/4AAAAAAAAP/gA/////
+        gA/+AAAAAAAAB/8AH////4AP/gAAAAAAAB//AB////+AD/4AAAAAAAA//wAf////wA//AAAAAAAA//8A
+        H////8AH/wAAAAAAA///AB/////AB/8ACD//8Af//wAP////wAf/AB////Af//+AD////8AH/wAf///w
+        P///gA/////AB/8AD///8P///4AP////4AP/gA////P///+AD////+AD/4AP///3////gA/////gA/+A
+        D////////8AH////4AP/gA/////////AB////+AD/4AP////////wAf////gA/+AD////////8AH////
+        8AH/wAf////////AB/////AB/8AH////////wAf////wAf/AB////////+AD////8AH/wAf////////g
+        A/////AB/8AH////////4AP////4AP/AB////////+AD////+AD/4AP////////gA/////gA/+AD////
+        ////4AP////4AP/gA/////////AB////+AD/4AP////////wAAAAAAAA/+AD////////8AAAAAAAAH/g
+        A/////////AAAAAAAAB/8AH////////wAAAAAAAAf/AB////////+AAAAAAAAH/wAf////////gAAAAA
+        AAB/8AH////////4AAAAAAAAf/AB////////+AAAAAAAAD/wAf////////gAAAAAAAA/+AH////////4
+        AAAAAAAAP/gA/////////AAAAAAAAD/4AP////////wAf////gA/+AD////////8AH////8AH/gA////
+        /////AB/////AB/4AP////////wAf////wAf/AB////////+AD////8AH/wAf////////gA/////AB/8
+        AH////////4AP////4Af/AB////////+AD////+AD/wAf////////gA/////gA/8AD////////4AP///
+        /4AP/gA/////////AB////+AD/4AP////////wAf////gA/+AD////////8AH////8AP/gA/////////
+        AB/////AB/4AP////////wAf////wAf/AD////////8AH////8AH/wAf////////gA/////AB/8AH///
+        /////4AP////wAf/AB////////+AD////+AD/wAf////////gA/////gA/8AH////////4AP////4AP/
+        AB/////////AD////+AD/4AP////////wAf////gA/+AD////////8AH////4AP/gA/////////AB///
+        /gAAH4AP////////wAf///8AAD+AD////////8AH////gAA/wA/////////gB////4AAP8AH////////
+        4AP////AAH/AB////////+AD////4AB/wAf////////gA/////AA/8AH///////////////4AP//////
+        ////////////+AH///////////////////wB///////////////////+A////////////////////wP/
+        //////////////////8D////////////////////h////////////////////8f/////////////////
+        ///v////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////
+</value>
+  </data>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Program.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Program.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Program.cs	(revision 7085)
@@ -0,0 +1,105 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Diagnostics;
+using System.Management;
+using System.Security.Principal;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Hive.SlaveCore.Views;
+using HeuristicLab.Clients.Hive.SlaveCore.Views.Properties;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.SlaveTrayIcon {
+  static class Program {
+    /// <summary>
+    /// The main entry point for the application.
+    /// </summary>
+    [STAThread]
+    static void Main(string[] args) {
+      if (args.Length < 1 || (args.Length > 0 && args[0] != Settings.Default.ShowUICmd)) {
+        KillOtherInstances();
+      }
+
+      Application.EnableVisualStyles();
+      Application.SetCompatibleTextRenderingDefault(false);
+      MainWindow mw = new MainWindow();
+      if (args.Length < 1 || (args.Length > 0 && args[0] != Settings.Default.ShowUICmd)) {
+        mw.Hide();
+      } else if (args.Length > 0 && args[0] == Settings.Default.ShowUICmd) {
+        mw.Show();
+      }
+
+      mw.Content = new SlaveItem();
+      Application.Run();
+    }
+
+    /// <summary>
+    /// Gets the owner of a process
+    /// (based on http://www.codeproject.com/KB/cs/processownersid.aspx)
+    /// </summary>    
+    private static string GetProcessOwner(int pid) {
+      string ownerSID = String.Empty;
+      string processName = String.Empty;
+      try {
+        ObjectQuery sq = new ObjectQuery
+            ("Select * from Win32_Process Where ProcessID = '" + pid + "'");
+        ManagementObjectSearcher searcher = new ManagementObjectSearcher(sq);
+        if (searcher.Get().Count == 0)
+          return ownerSID;
+        foreach (ManagementObject oReturn in searcher.Get()) {
+          string[] sid = new String[1];
+          oReturn.InvokeMethod("GetOwnerSid", (object[])sid);
+          ownerSID = sid[0];
+          return ownerSID;
+        }
+      }
+      catch {
+        return ownerSID;
+      }
+      return ownerSID;
+    }
+
+    /// <summary>
+    /// Kill all other slave tray icons, we only want 1 running at a time
+    /// (and if a newer version is installed the older one should be killed)
+    /// </summary>
+    private static void KillOtherInstances() {
+      String currentUserSID = WindowsIdentity.GetCurrent().User.Value;
+      Process curProc = Process.GetCurrentProcess();
+
+      try {
+        Process[] procs = Process.GetProcessesByName(curProc.ProcessName);
+        foreach (Process p in procs) {
+          if (p.Id != curProc.Id) {
+            String procUserSID = GetProcessOwner(p.Id);
+            if (procUserSID == currentUserSID) {
+              p.Kill();
+            }
+          }
+        }
+      }
+      catch (InvalidOperationException) { }
+      catch (Exception) {
+        MessageBox.Show("There is another instance of the Hive Slave tray icon running which can't be closed.", "HeuristicLab Hive Slave");
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Clients.Hive.Slave.TrayIcon")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7c14407e-6980-465b-ba3a-4a916d48989b")]
+
+// 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("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Properties/Resources.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Properties/Resources.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Properties/Resources.Designer.cs	(revision 7085)
@@ -0,0 +1,63 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.235
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.TrayIcon.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // 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() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Clients.Hive.SlaveCore.TrayIcon.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Properties/Resources.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Properties/Resources.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/Properties/Resources.resx	(revision 7085)
@@ -0,0 +1,117 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/TrayIconInstaller.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/TrayIconInstaller.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/TrayIconInstaller.Designer.cs	(revision 7085)
@@ -0,0 +1,31 @@
+﻿namespace HeuristicLab.Clients.Hive.SlaveCore.SlaveTrayIcon {
+  partial class TrayIconInstaller {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+    }
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/TrayIconInstaller.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/TrayIconInstaller.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/TrayIconInstaller.cs	(revision 7085)
@@ -0,0 +1,20 @@
+﻿using System.Collections;
+using System.ComponentModel;
+using System.Diagnostics;
+
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.SlaveTrayIcon {
+  [RunInstaller(true)]
+  public partial class TrayIconInstaller : System.Configuration.Install.Installer {
+
+    public TrayIconInstaller() {
+      InitializeComponent();
+    }
+
+    public override void Commit(IDictionary savedState) {
+      base.Commit(savedState);
+      //TODO: disable on quiet install (for admins)?
+      Process.Start(Context.Parameters["TARGETDIR"].ToString() + "HeuristicLab.Clients.Hive.Slave.SlaveTrayIcon.exe");
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/app.config
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/app.config	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/app.config	(revision 7085)
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<configuration>
+  <configSections>
+  </configSections>
+  <system.serviceModel>
+  
+    <services>
+      <service name="HeuristicLab.Clients.Hive.SlaveCore.SlaveCommunicationService">
+        <endpoint address="net.pipe://localhost/HeuristicLabSlaveCom" binding="netNamedPipeBinding" contract="HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts.ISlaveCommunication"/>
+      </service>
+    </services>
+    <client>
+      <endpoint name="SlaveCommunicationServiceEndpoint" address="net.pipe://localhost/HeuristicLabSlaveCom" binding="netNamedPipeBinding" contract="HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts.ISlaveCommunication"/>
+    </client>
+
+  </system.serviceModel>
+  <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
+</configuration>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIconSetup/HeuristicLab.Clients.Hive.Slave.TrayIconSetup.vdproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIconSetup/HeuristicLab.Clients.Hive.Slave.TrayIconSetup.vdproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.TrayIconSetup/HeuristicLab.Clients.Hive.Slave.TrayIconSetup.vdproj	(revision 7085)
@@ -0,0 +1,2155 @@
+﻿"DeployProject"
+{
+"VSVersion" = "3:800"
+"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
+"IsWebType" = "8:FALSE"
+"ProjectName" = "8:HeuristicLab.Clients.Hive.Slave.TrayIconSetup-3.3"
+"LanguageId" = "3:1033"
+"CodePage" = "3:1252"
+"UILanguageId" = "3:1033"
+"SccProjectName" = "8:"
+"SccLocalPath" = "8:"
+"SccAuxPath" = "8:"
+"SccProvider" = "8:"
+    "Hierarchy"
+    {
+        "Entry"
+        {
+        "MsmKey" = "8:_38DF717B65E1351C44810C96F6DD0BF5"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3FC55DFBABC44BD5971B6C3616847CB5"
+        "OwnerKey" = "8:_5306CCFBDD32C7AE70BAD9067FD8A0B4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3FC55DFBABC44BD5971B6C3616847CB5"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3FC55DFBABC44BD5971B6C3616847CB5"
+        "OwnerKey" = "8:_38DF717B65E1351C44810C96F6DD0BF5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3FC55DFBABC44BD5971B6C3616847CB5"
+        "OwnerKey" = "8:_B170EC2FCE9FD06471A01B823D01D257"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_498E9DF6B769EC33F76D24DF373563C4"
+        "OwnerKey" = "8:_7B9911913C754B67B03FAB1F2965E3F4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_498E9DF6B769EC33F76D24DF373563C4"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "OwnerKey" = "8:_4F596DDAD9A476954B5FDC96EE9B6F78"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "OwnerKey" = "8:_B170EC2FCE9FD06471A01B823D01D257"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "OwnerKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "OwnerKey" = "8:_7B9911913C754B67B03FAB1F2965E3F4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "OwnerKey" = "8:_498E9DF6B769EC33F76D24DF373563C4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "OwnerKey" = "8:_9B009598B39B86C73DADAE1A56DC2F64"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "OwnerKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4F596DDAD9A476954B5FDC96EE9B6F78"
+        "OwnerKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4F596DDAD9A476954B5FDC96EE9B6F78"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4F596DDAD9A476954B5FDC96EE9B6F78"
+        "OwnerKey" = "8:_B170EC2FCE9FD06471A01B823D01D257"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4F596DDAD9A476954B5FDC96EE9B6F78"
+        "OwnerKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4F596DDAD9A476954B5FDC96EE9B6F78"
+        "OwnerKey" = "8:_7B9911913C754B67B03FAB1F2965E3F4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4F596DDAD9A476954B5FDC96EE9B6F78"
+        "OwnerKey" = "8:_498E9DF6B769EC33F76D24DF373563C4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_5306CCFBDD32C7AE70BAD9067FD8A0B4"
+        "OwnerKey" = "8:_38DF717B65E1351C44810C96F6DD0BF5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_5306CCFBDD32C7AE70BAD9067FD8A0B4"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_5306CCFBDD32C7AE70BAD9067FD8A0B4"
+        "OwnerKey" = "8:_B170EC2FCE9FD06471A01B823D01D257"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_640A7525E7974E7BAE45D8D70EF04E26"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_66725C283366F164FE78620727BC1CCC"
+        "OwnerKey" = "8:_5306CCFBDD32C7AE70BAD9067FD8A0B4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_66725C283366F164FE78620727BC1CCC"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_743A627C859C09137E05A713D9ED1BC0"
+        "OwnerKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_743A627C859C09137E05A713D9ED1BC0"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_743A627C859C09137E05A713D9ED1BC0"
+        "OwnerKey" = "8:_B170EC2FCE9FD06471A01B823D01D257"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_743A627C859C09137E05A713D9ED1BC0"
+        "OwnerKey" = "8:_5306CCFBDD32C7AE70BAD9067FD8A0B4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_743A627C859C09137E05A713D9ED1BC0"
+        "OwnerKey" = "8:_38DF717B65E1351C44810C96F6DD0BF5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_743A627C859C09137E05A713D9ED1BC0"
+        "OwnerKey" = "8:_498E9DF6B769EC33F76D24DF373563C4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_743A627C859C09137E05A713D9ED1BC0"
+        "OwnerKey" = "8:_9B009598B39B86C73DADAE1A56DC2F64"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_743A627C859C09137E05A713D9ED1BC0"
+        "OwnerKey" = "8:_7B9911913C754B67B03FAB1F2965E3F4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_743A627C859C09137E05A713D9ED1BC0"
+        "OwnerKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_7B9911913C754B67B03FAB1F2965E3F4"
+        "OwnerKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_7B9911913C754B67B03FAB1F2965E3F4"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "OwnerKey" = "8:_987B72C2E9B1BD0D5FDD184F353CEA92"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_987B72C2E9B1BD0D5FDD184F353CEA92"
+        "OwnerKey" = "8:_38DF717B65E1351C44810C96F6DD0BF5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_987B72C2E9B1BD0D5FDD184F353CEA92"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_9B009598B39B86C73DADAE1A56DC2F64"
+        "OwnerKey" = "8:_7B9911913C754B67B03FAB1F2965E3F4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_9B009598B39B86C73DADAE1A56DC2F64"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B170EC2FCE9FD06471A01B823D01D257"
+        "OwnerKey" = "8:_38DF717B65E1351C44810C96F6DD0BF5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B170EC2FCE9FD06471A01B823D01D257"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_EFA4FDAC6BB7A68ED7833B12158B41BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_B170EC2FCE9FD06471A01B823D01D257"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_38DF717B65E1351C44810C96F6DD0BF5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_3FC55DFBABC44BD5971B6C3616847CB5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_5306CCFBDD32C7AE70BAD9067FD8A0B4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_987B72C2E9B1BD0D5FDD184F353CEA92"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_7B9911913C754B67B03FAB1F2965E3F4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_498E9DF6B769EC33F76D24DF373563C4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_9B009598B39B86C73DADAE1A56DC2F64"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_F40F540BBA06E1DEAC09E434664409E6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_4F596DDAD9A476954B5FDC96EE9B6F78"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_FDEE2CBFE337B946196A0BC752B28220"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_743A627C859C09137E05A713D9ED1BC0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "OwnerKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E0AAFF764DB56215CA366F0D1A40117C"
+        "OwnerKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E0AAFF764DB56215CA366F0D1A40117C"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E0AAFF764DB56215CA366F0D1A40117C"
+        "OwnerKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_B170EC2FCE9FD06471A01B823D01D257"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_3FC55DFBABC44BD5971B6C3616847CB5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_5306CCFBDD32C7AE70BAD9067FD8A0B4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_38DF717B65E1351C44810C96F6DD0BF5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_987B72C2E9B1BD0D5FDD184F353CEA92"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_498E9DF6B769EC33F76D24DF373563C4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_9B009598B39B86C73DADAE1A56DC2F64"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_7B9911913C754B67B03FAB1F2965E3F4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "OwnerKey" = "8:_FDEE2CBFE337B946196A0BC752B28220"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "OwnerKey" = "8:_FDEE2CBFE337B946196A0BC752B28220"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "OwnerKey" = "8:_B170EC2FCE9FD06471A01B823D01D257"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "OwnerKey" = "8:_38DF717B65E1351C44810C96F6DD0BF5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "OwnerKey" = "8:_987B72C2E9B1BD0D5FDD184F353CEA92"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "OwnerKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "OwnerKey" = "8:_7B9911913C754B67B03FAB1F2965E3F4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "OwnerKey" = "8:_498E9DF6B769EC33F76D24DF373563C4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "OwnerKey" = "8:_9B009598B39B86C73DADAE1A56DC2F64"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EFA4FDAC6BB7A68ED7833B12158B41BD"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_EFA4FDAC6BB7A68ED7833B12158B41BD"
+        "OwnerKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_F010F086FC3D4C1EA55A80E7D9230283"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_F40F540BBA06E1DEAC09E434664409E6"
+        "OwnerKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_F40F540BBA06E1DEAC09E434664409E6"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_FDEE2CBFE337B946196A0BC752B28220"
+        "OwnerKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_FDEE2CBFE337B946196A0BC752B28220"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_FDEE2CBFE337B946196A0BC752B28220"
+        "OwnerKey" = "8:_987B72C2E9B1BD0D5FDD184F353CEA92"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_38DF717B65E1351C44810C96F6DD0BF5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_B170EC2FCE9FD06471A01B823D01D257"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_5306CCFBDD32C7AE70BAD9067FD8A0B4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_3FC55DFBABC44BD5971B6C3616847CB5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_66725C283366F164FE78620727BC1CCC"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_987B72C2E9B1BD0D5FDD184F353CEA92"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_859EAFAB8FA5973A5035A126634B77BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_7B9911913C754B67B03FAB1F2965E3F4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_498E9DF6B769EC33F76D24DF373563C4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_9B009598B39B86C73DADAE1A56DC2F64"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_FDEE2CBFE337B946196A0BC752B28220"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_4F596DDAD9A476954B5FDC96EE9B6F78"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_4AA58796DE6D77F4BBD8A8B47793F65F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_F40F540BBA06E1DEAC09E434664409E6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_743A627C859C09137E05A713D9ED1BC0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_E25F372D4E04E85F7FF83F3AD5D10747"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_EFA4FDAC6BB7A68ED7833B12158B41BD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_B664DB364428725F047AE1CDE260F79E"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_E0AAFF764DB56215CA366F0D1A40117C"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+    }
+    "Configurations"
+    {
+        "Debug"
+        {
+        "DisplayName" = "8:Debug"
+        "IsDebugOnly" = "11:TRUE"
+        "IsReleaseOnly" = "11:FALSE"
+        "OutputFilename" = "8:Debug\\HeuristicLab.Clients.Hive.Slave.TrayIconInstaller.msi"
+        "PackageFilesAs" = "3:2"
+        "PackageFileSize" = "3:-2147483648"
+        "CabType" = "3:1"
+        "Compression" = "3:2"
+        "SignOutput" = "11:FALSE"
+        "CertificateFile" = "8:"
+        "PrivateKeyFile" = "8:"
+        "TimeStampServer" = "8:"
+        "InstallerBootstrapper" = "3:2"
+            "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
+            {
+            "Enabled" = "11:TRUE"
+            "PromptEnabled" = "11:TRUE"
+            "PrerequisitesLocation" = "2:1"
+            "Url" = "8:"
+            "ComponentsUrl" = "8:"
+                "Items"
+                {
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.0"
+                    {
+                    "Name" = "8:Microsoft .NET Framework 4 (x86 and x64)"
+                    "ProductCode" = "8:.NETFramework,Version=v4.0"
+                    }
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"
+                    {
+                    "Name" = "8:Windows Installer 3.1"
+                    "ProductCode" = "8:Microsoft.Windows.Installer.3.1"
+                    }
+                }
+            }
+        }
+        "Release"
+        {
+        "DisplayName" = "8:Release"
+        "IsDebugOnly" = "11:FALSE"
+        "IsReleaseOnly" = "11:TRUE"
+        "OutputFilename" = "8:Release\\HeuristicLab.Clients.Hive.Slave.TrayIconInstaller.msi"
+        "PackageFilesAs" = "3:2"
+        "PackageFileSize" = "3:-2147483648"
+        "CabType" = "3:1"
+        "Compression" = "3:2"
+        "SignOutput" = "11:FALSE"
+        "CertificateFile" = "8:"
+        "PrivateKeyFile" = "8:"
+        "TimeStampServer" = "8:"
+        "InstallerBootstrapper" = "3:2"
+            "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
+            {
+            "Enabled" = "11:TRUE"
+            "PromptEnabled" = "11:TRUE"
+            "PrerequisitesLocation" = "2:1"
+            "Url" = "8:"
+            "ComponentsUrl" = "8:"
+                "Items"
+                {
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.0,Profile=Client"
+                    {
+                    "Name" = "8:Microsoft .NET Framework 4 Client Profile (x86 and x64)"
+                    "ProductCode" = "8:.NETFramework,Version=v4.0,Profile=Client"
+                    }
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"
+                    {
+                    "Name" = "8:Windows Installer 3.1"
+                    "ProductCode" = "8:Microsoft.Windows.Installer.3.1"
+                    }
+                }
+            }
+        }
+    }
+    "Deployable"
+    {
+        "CustomAction"
+        {
+        }
+        "DefaultFeature"
+        {
+        "Name" = "8:DefaultFeature"
+        "Title" = "8:"
+        "Description" = "8:"
+        }
+        "ExternalPersistence"
+        {
+            "LaunchCondition"
+            {
+                "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_10DD3CCD5720424B8FD078DB5871CD9D"
+                {
+                "Name" = "8:.NET Framework"
+                "Message" = "8:[VSDNETMSG]"
+                "FrameworkVersion" = "8:.NETFramework,Version=v4.0,Profile=Client"
+                "AllowLaterVersions" = "11:FALSE"
+                "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=131000"
+                }
+            }
+        }
+        "File"
+        {
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_38DF717B65E1351C44810C96F6DD0BF5"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Clients.Hive.Slave.Views-3.3, Version=3.3.5.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_38DF717B65E1351C44810C96F6DD0BF5"
+                    {
+                    "Name" = "8:HeuristicLab.Clients.Hive.Slave.Views-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Clients.Hive.Slave.Views-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3FC55DFBABC44BD5971B6C3616847CB5"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_3FC55DFBABC44BD5971B6C3616847CB5"
+                    {
+                    "Name" = "8:HeuristicLab.MainForm-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.MainForm-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_498E9DF6B769EC33F76D24DF373563C4"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_498E9DF6B769EC33F76D24DF373563C4"
+                    {
+                    "Name" = "8:HeuristicLab.Parameters-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Parameters-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_4AA58796DE6D77F4BBD8A8B47793F65F"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_4AA58796DE6D77F4BBD8A8B47793F65F"
+                    {
+                    "Name" = "8:HeuristicLab.Persistence-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Persistence-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_4F596DDAD9A476954B5FDC96EE9B6F78"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_4F596DDAD9A476954B5FDC96EE9B6F78"
+                    {
+                    "Name" = "8:HeuristicLab.Collections-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Collections-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5306CCFBDD32C7AE70BAD9067FD8A0B4"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.MainForm.WindowsForms-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_5306CCFBDD32C7AE70BAD9067FD8A0B4"
+                    {
+                    "Name" = "8:HeuristicLab.MainForm.WindowsForms-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.MainForm.WindowsForms-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_640A7525E7974E7BAE45D8D70EF04E26"
+            {
+            "SourcePath" = "8:hl_logo.jpg"
+            "TargetName" = "8:hl_logo.jpg"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_66725C283366F164FE78620727BC1CCC"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:WeifenLuo.WinFormsUI.Docking-2.3.1, Version=2.3.1.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_66725C283366F164FE78620727BC1CCC"
+                    {
+                    "Name" = "8:WeifenLuo.WinFormsUI.Docking-2.3.1.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:WeifenLuo.WinFormsUI.Docking-2.3.1.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_743A627C859C09137E05A713D9ED1BC0"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_743A627C859C09137E05A713D9ED1BC0"
+                    {
+                    "Name" = "8:HeuristicLab.Common.Resources-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Common.Resources-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_7B9911913C754B67B03FAB1F2965E3F4"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_7B9911913C754B67B03FAB1F2965E3F4"
+                    {
+                    "Name" = "8:HeuristicLab.Optimization-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Optimization-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_859EAFAB8FA5973A5035A126634B77BD"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Clients.Hive-3.3, Version=3.3.5.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_859EAFAB8FA5973A5035A126634B77BD"
+                    {
+                    "Name" = "8:HeuristicLab.Clients.Hive-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Clients.Hive-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_987B72C2E9B1BD0D5FDD184F353CEA92"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Clients.Hive.SlaveCore-3.3, Version=3.3.5.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_987B72C2E9B1BD0D5FDD184F353CEA92"
+                    {
+                    "Name" = "8:HeuristicLab.Clients.Hive.SlaveCore-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Clients.Hive.SlaveCore-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9B009598B39B86C73DADAE1A56DC2F64"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_9B009598B39B86C73DADAE1A56DC2F64"
+                    {
+                    "Name" = "8:HeuristicLab.Data-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Data-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_B170EC2FCE9FD06471A01B823D01D257"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Core.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_B170EC2FCE9FD06471A01B823D01D257"
+                    {
+                    "Name" = "8:HeuristicLab.Core.Views-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Core.Views-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_B664DB364428725F047AE1CDE260F79E"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_B664DB364428725F047AE1CDE260F79E"
+                    {
+                    "Name" = "8:HeuristicLab.PluginInfrastructure-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.PluginInfrastructure-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E0AAFF764DB56215CA366F0D1A40117C"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:ICSharpCode.SharpZipLib, Version=0.85.4.369, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_E0AAFF764DB56215CA366F0D1A40117C"
+                    {
+                    "Name" = "8:ICSharpCode.SharpZipLib.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:ICSharpCode.SharpZipLib.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E25F372D4E04E85F7FF83F3AD5D10747"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_E25F372D4E04E85F7FF83F3AD5D10747"
+                    {
+                    "Name" = "8:HeuristicLab.Common-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Common-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_EC9CFCC75CC9F20DAABC7C9EA02F2EBA"
+                    {
+                    "Name" = "8:HeuristicLab.Core-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Core-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_EFA4FDAC6BB7A68ED7833B12158B41BD"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Clients.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_EFA4FDAC6BB7A68ED7833B12158B41BD"
+                    {
+                    "Name" = "8:HeuristicLab.Clients.Common-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Clients.Common-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F010F086FC3D4C1EA55A80E7D9230283"
+            {
+            "SourcePath" = "8:HeuristicLab.ico"
+            "TargetName" = "8:HeuristicLab.ico"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F40F540BBA06E1DEAC09E434664409E6"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Tracing-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_F40F540BBA06E1DEAC09E434664409E6"
+                    {
+                    "Name" = "8:HeuristicLab.Tracing-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Tracing-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FDEE2CBFE337B946196A0BC752B28220"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Hive-3.3, Version=3.3.5.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_FDEE2CBFE337B946196A0BC752B28220"
+                    {
+                    "Name" = "8:HeuristicLab.Hive-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Hive-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+        }
+        "FileType"
+        {
+        }
+        "Folder"
+        {
+            "{1525181F-901A-416C-8A58-119130FE478E}:_8A578AA8E3DF4BD8A5D93959EC6D95C1"
+            {
+            "Name" = "8:#1919"
+            "AlwaysCreate" = "11:FALSE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:ProgramMenuFolder"
+                "Folders"
+                {
+                    "{9EF0B969-E518-4E46-987F-47570745A589}:_2074822F0C2F49BBA487C5016D949BAE"
+                    {
+                    "Name" = "8:HeuristicLab Hive Slave"
+                    "AlwaysCreate" = "11:FALSE"
+                    "Condition" = "8:"
+                    "Transitive" = "11:FALSE"
+                    "Property" = "8:_C5AB2B7E75D549E198AC5CC52CBA1217"
+                        "Folders"
+                        {
+                        }
+                    }
+                    "{9EF0B969-E518-4E46-987F-47570745A589}:_7D8B58D522994338BB453896AF8BEA71"
+                    {
+                    "Name" = "8:Startup"
+                    "AlwaysCreate" = "11:FALSE"
+                    "Condition" = "8:"
+                    "Transitive" = "11:FALSE"
+                    "Property" = "8:_B7A720D82DCA4A6A85C6592F24CD09F3"
+                        "Folders"
+                        {
+                        }
+                    }
+                }
+            }
+            "{3C67513D-01DD-4637-8A68-80971EB9504F}:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            {
+            "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
+            "Name" = "8:#1925"
+            "AlwaysCreate" = "11:FALSE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:TARGETDIR"
+                "Folders"
+                {
+                }
+            }
+            "{1525181F-901A-416C-8A58-119130FE478E}:_B867BFC82FAE44B39AAFFF06DFCD3245"
+            {
+            "Name" = "8:#1916"
+            "AlwaysCreate" = "11:FALSE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:DesktopFolder"
+                "Folders"
+                {
+                }
+            }
+        }
+        "LaunchCondition"
+        {
+        }
+        "Locator"
+        {
+        }
+        "MsiBootstrapper"
+        {
+        "LangId" = "3:1033"
+        "RequiresElevation" = "11:FALSE"
+        }
+        "Product"
+        {
+        "Name" = "8:Microsoft Visual Studio"
+        "ProductName" = "8:HeuristicLab Hive Slave TrayIcon"
+        "ProductCode" = "8:{F7015771-3F03-4688-B662-00E0C85DB523}"
+        "PackageCode" = "8:{307ECBF7-B9E4-44DB-B806-4F5C961A6C98}"
+        "UpgradeCode" = "8:{0C2D9DD1-798B-40F2-8F5B-D3F9540685EE}"
+        "AspNetVersion" = "8:4.0.30319.0"
+        "RestartWWWService" = "11:FALSE"
+        "RemovePreviousVersions" = "11:TRUE"
+        "DetectNewerInstalledVersion" = "11:FALSE"
+        "InstallAllUsers" = "11:TRUE"
+        "ProductVersion" = "8:3.3.6"
+        "Manufacturer" = "8:HEAL"
+        "ARPHELPTELEPHONE" = "8:"
+        "ARPHELPLINK" = "8:"
+        "Title" = "8:HeuristicLab Hive Slave TrayIcon"
+        "Subject" = "8:"
+        "ARPCONTACT" = "8:HEAL"
+        "Keywords" = "8:"
+        "ARPCOMMENTS" = "8:"
+        "ARPURLINFOABOUT" = "8:http://dev.heuristiclab.com"
+        "ARPPRODUCTICON" = "8:_F010F086FC3D4C1EA55A80E7D9230283"
+        "ARPIconIndex" = "3:0"
+        "SearchPath" = "8:"
+        "UseSystemSearchPath" = "11:TRUE"
+        "TargetPlatform" = "3:0"
+        "PreBuildEvent" = "8:"
+        "PostBuildEvent" = "8:"
+        "RunPostBuildEvent" = "3:0"
+        }
+        "Registry"
+        {
+            "HKLM"
+            {
+                "Keys"
+                {
+                    "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_7142EB12E530400DB1E029241DC4B259"
+                    {
+                    "Name" = "8:Software"
+                    "Condition" = "8:"
+                    "AlwaysCreate" = "11:FALSE"
+                    "DeleteAtUninstall" = "11:FALSE"
+                    "Transitive" = "11:FALSE"
+                        "Keys"
+                        {
+                            "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_69E160221EAB48E7877525AFB34DC114"
+                            {
+                            "Name" = "8:[Manufacturer]"
+                            "Condition" = "8:"
+                            "AlwaysCreate" = "11:FALSE"
+                            "DeleteAtUninstall" = "11:FALSE"
+                            "Transitive" = "11:FALSE"
+                                "Keys"
+                                {
+                                }
+                                "Values"
+                                {
+                                }
+                            }
+                        }
+                        "Values"
+                        {
+                        }
+                    }
+                }
+            }
+            "HKCU"
+            {
+                "Keys"
+                {
+                    "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_CCCDFBD817E24B0599DE050ED6E24D9E"
+                    {
+                    "Name" = "8:Software"
+                    "Condition" = "8:"
+                    "AlwaysCreate" = "11:FALSE"
+                    "DeleteAtUninstall" = "11:FALSE"
+                    "Transitive" = "11:FALSE"
+                        "Keys"
+                        {
+                            "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_60E4B6FC591A4A4D98598CD06027CFBA"
+                            {
+                            "Name" = "8:[Manufacturer]"
+                            "Condition" = "8:"
+                            "AlwaysCreate" = "11:FALSE"
+                            "DeleteAtUninstall" = "11:FALSE"
+                            "Transitive" = "11:FALSE"
+                                "Keys"
+                                {
+                                }
+                                "Values"
+                                {
+                                }
+                            }
+                        }
+                        "Values"
+                        {
+                        }
+                    }
+                }
+            }
+            "HKCR"
+            {
+                "Keys"
+                {
+                }
+            }
+            "HKU"
+            {
+                "Keys"
+                {
+                }
+            }
+            "HKPU"
+            {
+                "Keys"
+                {
+                }
+            }
+        }
+        "Sequences"
+        {
+        }
+        "Shortcut"
+        {
+            "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_3D2F3060518A4890822772ADED2E653E"
+            {
+            "Name" = "8:HeuristicLab Hive Slave Tray Icon"
+            "Arguments" = "8:"
+            "Description" = "8:"
+            "ShowCmd" = "3:1"
+            "IconIndex" = "3:0"
+            "Transitive" = "11:FALSE"
+            "Target" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+            "Folder" = "8:_2074822F0C2F49BBA487C5016D949BAE"
+            "WorkingFolder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Icon" = "8:_F010F086FC3D4C1EA55A80E7D9230283"
+            "Feature" = "8:"
+            }
+            "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_D3402947889C4281992BD6DF7C193483"
+            {
+            "Name" = "8:HeuristicLab Hive Slave Tray Icon"
+            "Arguments" = "8:"
+            "Description" = "8:"
+            "ShowCmd" = "3:1"
+            "IconIndex" = "3:0"
+            "Transitive" = "11:FALSE"
+            "Target" = "8:_6CD51DC1E0B04C549D20FB6860C52139"
+            "Folder" = "8:_7D8B58D522994338BB453896AF8BEA71"
+            "WorkingFolder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Icon" = "8:_F010F086FC3D4C1EA55A80E7D9230283"
+            "Feature" = "8:"
+            }
+        }
+        "UserInterface"
+        {
+            "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_253ABB1A197A44D7B0811C75A1C7FDA4"
+            {
+            "UseDynamicProperties" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_43D67E0D75F544C9AD30F2C5E333AB08"
+            {
+            "Name" = "8:#1902"
+            "Sequence" = "3:1"
+            "Attributes" = "3:3"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F05611AA48244E559170A2902066FEDF"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Finished"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_640A7525E7974E7BAE45D8D70EF04E26"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "UpdateText"
+                            {
+                            "Name" = "8:UpdateText"
+                            "DisplayName" = "8:#1058"
+                            "Description" = "8:#1158"
+                            "Type" = "3:15"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1258"
+                            "DefaultValue" = "8:#1258"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_4B9250FF61F84DC1AC48C2DB00A77065"
+            {
+            "Name" = "8:#1901"
+            "Sequence" = "3:1"
+            "Attributes" = "3:2"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C8E11E1A11A248199CD84445260D50C0"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Progress"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_640A7525E7974E7BAE45D8D70EF04E26"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "ShowProgress"
+                            {
+                            "Name" = "8:ShowProgress"
+                            "DisplayName" = "8:#1009"
+                            "Description" = "8:#1109"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_6056D194B58F402AB9930ECBA193BC4C"
+            {
+            "Name" = "8:#1900"
+            "Sequence" = "3:2"
+            "Attributes" = "3:1"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_0CD7B37A7E4D4CF6AE015287F0F318E5"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Welcome"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_640A7525E7974E7BAE45D8D70EF04E26"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "CopyrightWarning"
+                            {
+                            "Name" = "8:CopyrightWarning"
+                            "DisplayName" = "8:#1002"
+                            "Description" = "8:#1102"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:2"
+                            "Value" = "8:This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. "
+                            "DefaultValue" = "8:#1202"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "Welcome"
+                            {
+                            "Name" = "8:Welcome"
+                            "DisplayName" = "8:#1003"
+                            "Description" = "8:#1103"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1203"
+                            "DefaultValue" = "8:#1203"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_CFEE000B15BB4320B946D253CEEEFA86"
+                    {
+                    "Sequence" = "3:300"
+                    "DisplayName" = "8:Confirm Installation"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_640A7525E7974E7BAE45D8D70EF04E26"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E1D81584375541408F7437429038B680"
+                    {
+                    "Sequence" = "3:200"
+                    "DisplayName" = "8:Installation Folder"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_640A7525E7974E7BAE45D8D70EF04E26"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_63520741585642418240FE9FC69F1DB3"
+            {
+            "Name" = "8:#1900"
+            "Sequence" = "3:1"
+            "Attributes" = "3:1"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_27E2D6CA534A4D1DBF75C70DB62897DF"
+                    {
+                    "Sequence" = "3:300"
+                    "DisplayName" = "8:Confirm Installation"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_640A7525E7974E7BAE45D8D70EF04E26"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FB39F5E4FC094AE18344B972C9E91525"
+                    {
+                    "Sequence" = "3:200"
+                    "DisplayName" = "8:Installation Folder"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_640A7525E7974E7BAE45D8D70EF04E26"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "InstallAllUsersVisible"
+                            {
+                            "Name" = "8:InstallAllUsersVisible"
+                            "DisplayName" = "8:#1059"
+                            "Description" = "8:#1159"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FBB25A792D0342CE86F28A2DAF97FA55"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Welcome"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_640A7525E7974E7BAE45D8D70EF04E26"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "CopyrightWarning"
+                            {
+                            "Name" = "8:CopyrightWarning"
+                            "DisplayName" = "8:#1002"
+                            "Description" = "8:#1102"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:2"
+                            "Value" = "8:This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. "
+                            "DefaultValue" = "8:#1202"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "Welcome"
+                            {
+                            "Name" = "8:Welcome"
+                            "DisplayName" = "8:#1003"
+                            "Description" = "8:#1103"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1203"
+                            "DefaultValue" = "8:#1203"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_A7006C02861B41AEBD0A06883F47BFA1"
+            {
+            "Name" = "8:#1902"
+            "Sequence" = "3:2"
+            "Attributes" = "3:3"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7330D345C88341A6980439429BA0B932"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Finished"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_640A7525E7974E7BAE45D8D70EF04E26"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_BEA47ACFECEA442BAA352522F11DFAA5"
+            {
+            "Name" = "8:#1901"
+            "Sequence" = "3:2"
+            "Attributes" = "3:2"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2D835A8BFBF2423DBF18D018E0175DF4"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Progress"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_640A7525E7974E7BAE45D8D70EF04E26"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "ShowProgress"
+                            {
+                            "Name" = "8:ShowProgress"
+                            "DisplayName" = "8:#1009"
+                            "Description" = "8:#1109"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_F8EAB75EDA0C4D24B296A5FDE0550DE4"
+            {
+            "UseDynamicProperties" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
+            }
+        }
+        "MergeModule"
+        {
+        }
+        "ProjectOutput"
+        {
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_6CD51DC1E0B04C549D20FB6860C52139"
+            {
+            "SourcePath" = "8:..\\HeuristicLab.Clients.Hive.Slave.TrayIcon\\3.3\\obj\\Debug\\HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.exe"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_B1DFCCA68C7D4DFDAC136FAC678F2E8D"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutDialog.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutDialog.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutDialog.Designer.cs	(revision 7085)
@@ -0,0 +1,78 @@
+﻿namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  partial class AboutDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutDialog));
+      this.okButton = new System.Windows.Forms.Button();
+      this.aboutView = new HeuristicLab.Clients.Hive.SlaveCore.Views.AboutView();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
+      this.okButton.Location = new System.Drawing.Point(493, 296);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 1;
+      this.okButton.Text = "&Close";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // aboutView
+      // 
+      this.aboutView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.aboutView.Caption = "About View: Show some information about HeursticLab Hive";
+      this.aboutView.Content = null;
+      this.aboutView.Location = new System.Drawing.Point(12, 12);
+      this.aboutView.Name = "aboutView";
+      this.aboutView.ReadOnly = false;
+      this.aboutView.Size = new System.Drawing.Size(556, 278);
+      this.aboutView.TabIndex = 0;
+      // 
+      // AboutDialog
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(580, 331);
+      this.Controls.Add(this.okButton);
+      this.Controls.Add(this.aboutView);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "AboutDialog";
+      this.ShowInTaskbar = false;
+      this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
+      this.Text = "About HeuristicLab Hive";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private AboutView aboutView;
+    private System.Windows.Forms.Button okButton;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutDialog.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutDialog.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutDialog.cs	(revision 7085)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  public partial class AboutDialog : Form {
+    public AboutDialog() {
+      InitializeComponent();
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      Close();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutDialog.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutDialog.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutDialog.resx	(revision 7085)
@@ -0,0 +1,1787 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAAAwMAAAAQAgAKglAABmFQAAQEAAAAEA
+        IAAoQgAADjsAAICAAAABACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR/gAbk/YAAAAAABuS9gAAAAAAGpD2AAAAAAAAAAAAAAAAABuQ
+        9QAAAAAAAAAAAByS9QAAAAAAAAAAAAAAAAAakfUAAAAAABuR9QIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJD2QAAAAAAAAAAAGo/4CBuR9f8akPVCAAAAABuT9gAAAAAAG5H1/xuR9YEbkPYUG5H1/xqR
+        9v8bkfX/G5H1/xuS9P8bkfX/GpH1QwAAAAAbkfX/G5H1eQAAAAAAAAAAAAAAABuR9cgbkPSjAAAAABuR
+        9f8dkfWZG5H1QRyR9kAbkfWrG5L1TwAAAAAAAAAAHJH1zhuR9p4AAAAAAAAAAAAAAAAckvaHG5H15QAA
+        AAAbkfXkHJH2hgAAAAAAAAAAAAAAAAAAAAAbkvUAAAAAABuS9YwbkfXiGpHzJhuS9TQbkfQwG5H1fhuR
+        9f8AAAAAG5L1qhuR9cUAAAAAHJD2AAAAAAAbkfYAAAAAAAAAAAAbkfVqG5H1/xuR9f8akfX/G5H1/xuR
+        9f8bkfX/GpLzFhuQ9n0bkfX/AAAAABiQ9gAAAAAAAAAAAAAAAAAAAAAAG5H2KRuR9f8ckfYcI5D3Ax+U
+        /AUAAAAAG5H1/xyR9VEckvVBG5H1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckfX/GpH1TgAA
+        AAAAAAAAAAAAABuR9esakfWBGI7xBhyR9f8akfQwAAAAAAAAAAAAAAAAAAAAABuS9QAAAAAAG5L1+huR
+        9YAAAAAAGpH1AAAAAAAbkfalG5H0ugAAAAAbkfX/HJL1bwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9ccbkfXIAAAAAAAAAAAAAAAAG5L17BuR9f8dkvMXG5H17BqR9Z0AAAAAAAAAAAAAAAAAAAAAAAAAABuR
+        9QEAAAAAAAAAABuR9QEbkfQAAAAAAB6P9w8akfXwAAAAAAAAAAAAAAAAG5H1AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9gAAAAAAAAAAABqR9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5L1AAAAAAAckvQAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//AAD//wAA//8AALyBAAC8mwAAnJ8AAJ6fAADA3wAA3t8AAN5fAADOXwAAzk8AAP9/
+        AAD//wAA//8AAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//////////////////////////////78fxwAPH8cABx/HAB8f5x+/H+Mf/5/jH/+f4
+        5//j+OP/4ADj/+AA4//j/GP/8/xj//H8c//x/HH/8f5x//H+cf/5/BH/+f4x///+P////3//////////
+        ////////////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpD2AByX+AAAAAAAAAAAABuT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2AByT9gAbkvcAHJL2AByS9wAAAAAAHJL3AAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL1AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAbkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJH2AByS9gIAAAAAHJH1TRuS
+        9v8bkfb/G5H1TgAAAAAAAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2AByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAek/YAAAAAABuR9ocbkvXlGpL2DgAAAAAakPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvUAAAAAABuR9hEbkvUuAAAAAByR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAakfgAHJL1AQAAAAAAAAAAHZH2ABuS9QAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR9gAckvUBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP//
+        /////wAA////////AAD///////8AAP///////wAA////////AAD//////x8AAMH/w8AADwAA4f/D4AAD
+        AADh/8HgAAMAAOH/4eAADwAA4f/h4f8fAADg/+Hh//8AAPD/4eD//wAA8P/h8P//AADw//Dw//8AAPD/
+        8PD//wAA8P/w8P//AADwAADw//8AAPgAAPD//wAA+AAAeH//AAD4AAB4f/8AAPg/+Hh//wAA+D/4eH//
+        AAD8P/h4f/8AAPw/+Hg//wAA/D/8PD//AAD8P/w8P/8AAPw//Dw//wAA/B/8PD//AAD+H/w8P/8AAP4f
+        +Awf/wAA/h/4Dh//AAD+H/weH/8AAP///h///wAA////P///AAD///8///8AAP///////wAA////////
+        AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AACgA
+        AABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/YAAAAAAB2T9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvcAAAAAAAAAAAAbk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqQ9gQbk/cUAAAAAEac7AAckvYAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9wAckvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AByS
+        9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2U9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZP2AAAAAAAAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2/xyR
+        9oEAAAAAAAAAAByS9gAfkPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9ikdk/crG5P3LhyS
+        9zEck/c0HJL3LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZb3ARyS9hQckvcSHZP3Eh2R9hIbkfcTIJX0BAAAAAAck/cAAAAAAAAAAAAAAAAAHJL2ExyQ
+        9hIckvUSHZP3EhyS9hIdkvYSHJL2Eh2T9xIdkfYSHZP3EhyU9xIck/YSHZH2EhyT9xIck/cSG5D2EhyT
+        9xIckfYSG5r9AhyS9/8ckvb/HJL2+hyS9kAAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAHZP2AAAA
+        AAAckvbSHJL2/xyS9v8ckvb/HZP2/xyS9v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvb/HJL2/xyS9v8ck/f/HZL2/xuS9ooAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9u4ck/b/HJL2/x2S9/8ck/f/HJP3/xyS9/8ckvb/HJP3/xyS9v8ckff/HJL2/xyT
+        9/8ckvb/HJL2/x2T9/8ckfb/HJL2/xyS9v8ckvb9HJL2/xyS9v0ckvb/HJL2xR+R+AcAAAAAAAAAAByS
+        9wAAAAAAAAAAAByS9gAAAAAAG5H3hh2T9v8ckvb+HJL2/hyS9v4ckvb/IZ3/AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9gAAAAAAHJL2zRyS9v8ckvb+HJL2/hyS
+        9v8ckfbAAAAAAAAAAAAAAAAAG5H1AAAAAAAckvevHJL1/xyS9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvf+HJL2/hyS9v4ck/b9HJL2/hyS9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyT
+        9v8ckvb/HJP1ggAAAAAAAAAAHZL2AAAAAAAAAAAAAAAAAB2S91Yckvb/HJL2/hyS9v4ckvb/HJL2/xyS
+        9ikAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdlPQAAAAAAByS
+        9pYckvb/HJL3/hyS9/4ckvf/HJL29AAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2fByS9v8ckvb+HJL2/hyS
+        9v8ckvf/HJL2/hyS9/4ckvf+HJL2/xyR9v8ckvb/HJL3/hyS9v8ckvf/HJP2/hyR9/8ckvb/HJL2/hyS
+        9v4ckvb/HJL3/xyS9v4ckvf+HZL2/hyS9/8ckvb/HZH1IQAAAAAAAAAAHJL2AAAAAAAakvQYHJL2/xyS
+        9v8ckvb+HJL2/xyS9v8bkvZXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvZhHJL2/xyS9v4ckvb+HJL2/hyS9v8dk/cJAAAAAAAAAAAAAAAAAAAAAB2S
+        9kwckvb/HJL2/hyS9v4ckvb/HJL2/xyS9v4ckvb+HJL2/hyS9v8ckfb/HJL2/xyS9/4ckvb/HJL2/xyT
+        9/4ckvb/HJL2/xyS9v4ckvb+HJL2/xyS9v8ckvb+HJL2/hyS9v8ckvb+HJL2RgAAAAAckvUAAAAAAAAA
+        AAAAAAAAAAAAAByS9v8dkvb+HJP2/hyS9f8ckvb/HZP2kQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        9v8dk/b+HZP2/hyS9v4dk/f/HZL3KwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJP2SxyS9v8ckvb+HJL2/hyS9v4ckvb/AAAAAAAAAAAAAAAAAAAAAAAA
+        AAAbkvaCHZL2/x2T9v4dk/b+HJL2/hyS9v8AAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvb/HJL2/xyS9/8ckvb/HZL3/RyS9/8ckvb/HJH2/xyS9v8ckvb/HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8ckvb+HJL2/xyS9v8ckvb/HJL2/xyS
+        9j0AAAAAAAAAAAAAAAAAAAAAHZP3TB2S9v8ckvb/HJL3/xyS9v8ckvf/HJL2DwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL26R2S9v8dkvb/HJL2/hyS9v4dkvb+HJH2/hyR
+        9v8ckfb/HZL2/hyR9v8ckfb/HJL2/hyR9v8ckfb/HJL2/h2S9v4dkvb/HZL2/xyS9v4ckvb+HZL2/hyR
+        9v8ckfb/HJH2/xyT9/8ckfVrAAAAAAAAAAAAAAAAAAAAABuR9R8ckvb/HZL2/x2S9v8ckvb+HJL2/xyS
+        9kUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAByS9q0ckvb/HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS9/4ckvb+HJL2/hyT9v0ckvb+HJL2/hyS9v4ckvb+HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS9v4ck/f/HJL2pwAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2/xyS
+        9v4ckvb+HJL2/hyS9v8ckvdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvZ+HJL2/xyS9/8ckvb+HJL3/hyS9/4ckvb/HJH2/xyS9v8ckvf+HJL2/xyS9/8ck/b+HJH3/xyS
+        9v8ckvb+HJL2/hyS9v8ckvf/HJL2/hyS9/4ckvf+HJL2/xyR9v8ckvb/HJL3/xyS9tIAAAAAHJL2AAAA
+        AAAAAAAAAAAAAByS9uYckvb/HJL3/xyS9v4ck/b/HJL1qAAAAAAdkvYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAG5L2QByS9v8ckvb/HJL2/hyS9v4dk/b+HJL2/xyR9v8ckvb/HJP2/xyS
+        9v8ckvb/HJP2/xyS9v8ckvb/HJL2/xyS9v8ck/b/HJP2/xyS9v8ckvb/HJP3/xyS9v0ckfb/HJL2/xyS
+        9/8ckvb/AAAAAAAAAAAdk/YAHJP3AAAAAAAckvesHJL2/xyS9v8ckvb+HJL2/xyS9tMAAAAAHJL2AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9hUckvb/HJL1/xyS9v4dkvb+HJL2/x2S
+        9rYckvd1HZL3eB2T93gck/Z4HZL3eByS9ngdkvd4HJP2eB2T93gdkvd4HJL3eByT93gdkvd4HJP2dx2R
+        944dk/b/HJH1/xyS9v8ck/f+HJL2/x6V+A0AAAAAAAAAAAAAAAAAAAAAHJL2fxyS9v8ckvX/HJL2/h2S
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbk/YAAAAAAByS9tcckvb/G5L2/hyS
+        9v8bkfVEAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAII34AAAA
+        AAAAAAAAHJL2/xyS9v8ckvbyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdkvcAAAAAABqR+CIckvb/G5L2agAAAAAck/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL2ABqS+AAAAAAAHJL2cCWU7gEAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YAHJL2AAAA
+        AAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////8//////////x/4H//A+AAAB/gf/8D4AAAB/B//wPwAAAD8H//g/AAAAfwP/+D8AAAD/A/
+        /4PwP/w/8D//gfA//P/4P/+B8D/9//g//8HwP///+D//wfg////4H//B+D////gf/8D4P///+B//wPgf
+        ///8H//A+B////wf/+D4H////AAAAPwf///8AAAA/B////wAAAB8H////gAAAHwP///+AAAAfA////4H
+        /+B+D////gf/8H4P///+B//wfg////4H//A+B////wf/8D4H////B//4Pgf///8H//g/B////wP/+D8H
+        ////A//4Hwf///8D//gfA////4P/+B8D////g//8HwP///+D//AHg////4H/8AeD////gf/4B4P////B
+        //wPg////////A/////////+H/////////8f/////////7//////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////8oAAAAgAAAAAABAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAIJX1AB2T9gIclvsAHYvvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOY9AAAAAAAAAAAAAAAAAAAAAAAHZL3AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuS9xgck/d9HZT4BwAAAAAAAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5P2ExyT9v8dkvfnHJP2VQAA
+        AAAAAAAAHZP2ARqR9gAdkvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvYSHJL39R2T9v8dkvf/HZL3shyS9yQAAAAAAAAAAB2S9wAdk/YAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI3xAB2T
+        9wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZT2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR9wAdk/YAAID/AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByV9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeT9wYck/f2HZL3/x2T
+        9/8dk/b/HJL3/xyT9oEck/UKAAAAAB+R9wEbk/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9kQdk/d5HZP3bh2T93Ick/d0HJP3dx2T
+        93kckvd8HZP3fhyT94AckveLHZP4RQAAAAAckvgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZT3Cx2T90AckvZHHJP3RR2S90Udk/dFHZP3RR2S90Udk/dFHZP3RRyS
+        90cdk/Y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByn7QAck/Y0HZL3SRyS
+        9kUdkvdFHJL2RR2T9kUdk/dFHZP3RR2T90Uck/dFHZP3RR2T90Uck/dFHZL3RR2T90Udk/dFHZL3RR2T
+        90Udk/dFHZP3RRyT90Udk/dFHJP2RR2T90UdkvdFHZP3RRyT90Udk/dFHJP3RR2T90UdkvdFHJL3RR2S
+        90Uck/dFHJL2RR2S90Udk/dCHJP3UxyT9/kdk/f/HZP2/hyS9/8dk/b/HZL3/x2S990ck/ZWAAAAAAAA
+        AAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2jR2T9/8dk/f/HZP2/x2T9v8dkvb/HZP3/x2T9/8dk/b/HZP3/xyS9/8dk/e0AAAAAByS
+        9wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/YXHJP21h2S
+        9/8ckvb6HZP3+h2T9/ockvb6HZP3+hyT9/odk/f6HZP3/RyS9u8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9qsckvf/HJP2+h2T9/odk/f6HJL2+h2S9/odk/f6HZP3+hyT
+        9/odk/f6HJP3+hyS9/odk/f6HZP3+hyS9vodk/f6HJP3+h2T9/ockvb6HJL3+h2S9/ock/b6HZL3+h2T
+        9/ock/f6HJL2+h2T9/ockvb6HZP3+h2T9/odk/f6HZL2+hyS9/ockvb6HZP3+hyT9/odkvb7HZP3/hyT
+        9/8dk/f/HJL2/x2S9/4ck/b6HZL2/xyT9/8ck/ezHJL2IgAAAAAAAAAAHpL3ABuT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI3xAAAAAAAdk/dZHJP2/xyS9/8dk/b/HJP3/xyS
+        9v8dkvf/HJP2/x2T9v8dk/b/HZP3/xyS9tMAAAAAHpT3AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvbBHZP3/x2S9/8dk/f/HZP3/x2S9v8dk/f/HZP3/x2T
+        9/8dkvb/HJP3/xyT9yMAAAAAHJP3AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACue8QAAAAAAHJL3jh2T
+        9v8dk/f/HZP3/x2T9/8dkvb/HZL3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZL2/x2T
+        9/8dk/f/HZP3/xyS9v8dkvf/HZL3/x2T9/8dkvf/HZP3/x2T9/8ckvb/HZP3/xyS9v8dk/f/HZP3/x2T
+        9/8dkvb/HZL3/x2S9/8dk/f/HJP2/xyS9v8dkvf/HZP2/h2S9v8dkvb/HZL2/xyT9/8ck/f+HZL2/x2S
+        9v8ckvf/HZL3gBuT9ggAAAAAAAAAAAAAAAAckvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9y4ckvf8HZP2/x2T9/8dk/f+HJL2/x2T9/4ckvb/HJL2/xyS9v8dkvb/HJP34xyU
+        +BYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95wck/b/HJL2/x2T9/4dk/f+HJL2/x2T9/4ckvb/HJL3/xyT9v8dkvf/HZL3VAAAAAAdkvcCAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/ZlHJL3/x2T9v8ckvb/HZP3/hyS9v8dk/f+HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8ckvb/HZP3/h2T9/4ckvb/HZP3/hyS9v8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS
+        9/8dk/f+HJL3/xyS9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8ckvb/HJL3/xyS9v8dk/f+HJL2/x2T
+        9/4ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8dk/f/HZP3/RyT9v8dk/b/HJL32xyT9lMAAAAAAAAAAAAA
+        AAAck/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxmNYAAH7/AByS9/Adk/b/HZP2/xyT
+        9v4dk/f/HZP3/h2T9v4dk/b+HZP3/hyS9v8dk/f2HZP3PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9QAAAAAAHZP3ax2T9v8dkvf/HJP3/h2T9/4dk/f/HZP3/h2T
+        9/4dk/f+HZP3/xyS9v8dk/aIAAAAAByT9gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T
+        9zsdk/f/HJL2/xyS9v4ck/b+HZP3/x2T9/4dk/b+HZP2/h2T9/4dk/f+HZP3/h2T9v4ck/f+HZP3/h2T
+        9/8dk/f+HZP3/h2T9/4dk/b/HJP3/h2T9v4ck/b+HZL3/x2T9/4dk/f+HJP2/x2T9/4dk/f/HZP3/hyT
+        9/4ck/b+HZP3/x2T9/4dk/f/HZP2/hyT9v4dk/f/HZP3/h2T9v4dk/b+HZP3/h2T9/4dk/f+HZP2/hyT
+        9/4dk/f+HZP2/hyS9v8dkvf/HZP2/x2T9rYdkvcrAAAAAAAAAAAek/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gIAAAAAHZP30RyS9v8dkvf+HZP2/x2S9/8dkvf/HZP2/x2T9v8dk/f/HZP3/x2S
+        9v8ck/ZdAAAAAB2S9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdkvZAHZL2/xyT9/8dk/f/HZP3/x2S9/8dk/f/HZP3/x2T9/8dk/f/HZP2/xyT97YAAAAAHZP2BQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2FRyS9vYdk/f/HZL2/x2T9v8dkvf/HZL3/x2T
+        9v8dk/b/HZP3/x2T9/8dk/f/HZL2/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyS9v8dkvf/HZL2/x2T
+        9v8dkvf/HZP3/x2T9/8ckvb/HZP3/xyS9/8dk/f/HZP3/x2T9v8dkvf/HZL3/x2S9/8dk/b/HZP2/x2S
+        9/8dkvf/HZP2/x2T9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9/8dkvf/HZP3/x2T9v4ckvf/HZP3/xyS
+        9vwdk/eEH5L2EAAAAAAWmP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3AQAAAAAdkvefHJP2/x2S
+        9/0ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvb/HJP2/x2S938AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9xIck/f8HZL2/xyT9/8dk/f+HJL3/x2T
+        9/4ckvf/HJL3/xyT9/4dkvb/HJP30gqT+AAgkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9QEAAAAAHZP36RyS9v8ckvb+HJP3/hyS9/8dk/f+HJL2/xyT9v8ckvf/HJL3/xyT9/8ckvb/HJP3/h2T
+        9/4ckvf/HZP3/hyS9/8ckvf/HJL2/xyS9/8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS9v8ckvf/HJL3/xyS
+        9/8ck/f+HJP3/hyS9/8ckvf/HJL3/xyS9v8ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvf/HJP3/xyS
+        9v8ck/f+HZP3/hyS9/8dk/f+HZL3/x2T9/8ckvf7HJP3/x2T9v8dkvaOAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAck/YAAAAAAByT9modkvf/HJP2/ByT9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyT
+        9v4dkvf/HJP2pgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAelPUBAAAAAByS9+Mdk/b/HJL3/h2T9/8dk/f/HZP3/x2T9/8dk/f/HZP3/h2S9/8ck/bpHJL2JgAA
+        AAAAqv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP3AgAAAAAdkva+HJP3/x2T9v0ck/f/HZP3/x2S
+        9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2S9/8ck/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL3/x2S
+        9/8ck/f/HZL3/x2T9/8dk/f/HJP3/x2T9/8dk/f/HZP3/xyT9/8ck/f/HZP3/x2S9/8dk/f/HZP3/xyT
+        9/8dk/f/HZL3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL3/xyT9/8dk/f/HZP3/x2T9v4dk/f+HZL2/xyT
+        9/8dk/fkHJL2VQAAAAAolP8AHZH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9gAAAAAAHJL2Ox2T
+        9/8ckvb6HZP3/hyS9v8dk/f+HJL2/xyT9v8ckvb/HJL2/x2T9v8ckvfJHJL3CwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP2sxyS9/8dk/f9HZP3/hyS
+        9v8dk/f+HJL2/xyS9/8ckvb/HJP3/x2S9v8dk/dIAAAAAByR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvYBAAAAAB2T95Mckvb/HZL3/B2T9/4ckvb/HZP3/hyS9v8ck/b/HJL2/xyS9v8ck/b/HJL2/x2T
+        9/4dk/f+HJL2/x2T9/4ckvb/HJL3/xyS9v8ckvb/HJL2/xyS9v8ckvb/HZP3/hyS9/8ckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/4ckvb/HJL2/xyS9v8ckvb/HZP3/hyS9v8dk/f+HJL2/xyT9v8ckvb/HJL2/xyT
+        9v8ckvb/HZP3/h2T9/8ckvb+HJL3/x2T9/8ck/f/HZL2kR2S9hIAAAAAH5L4AQBVuAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvcbHJL2+x2T9/4dk/f+HZL2/x2T9/4dk/b/HZP2/x2T
+        9v8dk/b/HJP3/x2T9vEdk/ccAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2AAAAAAAdk/Z9HJL3/x2T9vsdk/f+HZL2/x2T9/4dk/b/HZP3/xyS9v8dk/f/HZL2/xyT
+        924AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHJL2Yx2T9/8ckvb7HZP3/h2S
+        9v8dk/f+HZP2/x2T9v8dk/b/HZP2/x2T9/4dkvf/HZP3/R2T9/0dk/f9HZP3/R2T9/0dk/f9HZP3/R2S
+        9/0dkvf9HJP2/R2S9/0dk/f9HZP2/RyS9/0dk/b9HZL3/R2T9/0dk/f9HZP3/R2S9/0dkvf9HZP3/R2T
+        9/0dk/b9HZP2/R2S9/4dk/b/HZP2/x2T9v8dk/b/HZP2/x2S9/8ck/b/HZP3/RyS9/8dkvb/HJL2yRyS
+        9zcAAAAAAAAAAB+V9gAakfcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2U
+        9g4dk/bUHJL3/x2T9/4dk/b/HZP3/hyT9v8dkvb/HJP2/x2T9v8ckvb6HZP3/xyT9i4AAAAAGpP2AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cAAAAAAByT904dkvb/HJP3+h2T
+        9/4dk/b/HZP3/hyT9v8dk/f/HJP2/x2S9v4dk/f/HJL2lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZT3AAAAAAAdk/c4HJL3/x2T9vodk/f+HZP2/x2T9/4ck/b/HZL2/xyT9v8dk/b/HZL3/x2T
+        9v0dkvf/HZL3/x2S9/8dk/f/HZP3/x2T9/8ckvb/HJL2/x2S9v8dk/b/HJL3/x2T9/8dk/f/HJP2/xyT
+        9/8ck/b/HJP2/x2T9v8dk/b/HZP2/x2S9v8ck/b/HZL2/xyT9/8dkvb/HZP3/xyT9v4dkvb/HJP2/x2T
+        9v8dk/f/HJP3/h2S9/8dkvb/HJP3+hyT928AAAAAAAAAAB+V+gAAAAAAHpH2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT96kdkvb/HJP3/x2S9/8dk/f+HJL2/x2T
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6Q+QEAAAAAAAAAAAAAAAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvYDAAAAAByT9ngckvf/HJP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyS
+        9v8dk/f/HJL3kQAAAAAdk/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdkPgBAAAAAByT9tsckvf/HZL2/x2T9/4dk/f+HZP3/hyS9v8dk/f+HZL3/xyT9v8dkvf1HZH3HAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9g4dkvbeHZP3/x2S9v8dk/f+HZP3/h2T
+        9/4dk/f+HZP3/h2T9/4dk/b/HJL3+xyR9yYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAekPkAAAAAAByT
+        9wIdkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wEAAAAAHJL3QxyS
+        9/8ckvf+HZL3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HJL3/hyT9v8dkve2AAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wQAAAAAHJL2thyT9/8ckvb+HZP3/h2T
+        9/4dk/f+HJL2/x2S9/4dkvf+HJP3/xyS9v8dkvZLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/cEAAAAAB2S9sgdk/f/HZL2/h2S9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyS9/8dk/b/HZP2TQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZP2AAAAAAAdk/YVHZP3/x2T9/4dkvf/HZP2/x2T9v8dk/f/HZP3/x2T
+        9/8dkvb/HJL2/x2T99Adk/kOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL3AgAAAAAdk/aFHZL3/x2S9v4dk/f/HZP3/x2T9/8dk/b+HZL3/x2S9v8dk/b/HJP3/x2S
+        9nQAAAAAHJT3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9gQAAAAAHJP3pR2S9v8dk/f+HZL3/x2T
+        9v8dk/b/HZP3/x2T9/8dk/f/HZP2/xyS9v8ckvdxAAAAAB2T9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/bmHZP3/x2S9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2S9/8dkvb/HJP37hyS9yoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cBAAAAAByT91Ack/f/HJP3/R2T
+        9/8dk/f/HZP3/xyT9v8ckvf/HZL3/xyT9v4ckvb/HZP3nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2AwAAAAAckvZzHJL2/xyS9v4dkvf/HZP3/x2T9/8dk/f/HZP3/x2T9/8ckvb/HJP3/x2T
+        9poAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS97gckvb/HZL3/h2T9v8dk/b/HZP2/x2T
+        9v8dk/b/HZL2/x2T9/8ckvb/HZP3QQAAAAAZkfYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2IByS9v8ckvb9HZP3/h2T9v8dk/b/HZP2/x2S9v8dkvb/HZP2/h2S
+        9v8ck/e/HJb6AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cBAAAAAB2T90cdk/f/HZP3/h2S
+        9/4dk/b/HZP2/x2T9v8dk/b/HZP2/xyS9v4ckvb/HJL3tgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL2jByT9/8dk/f+HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL2/hyS9v8dk/dhAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvYHHZL28x2S
+        9v8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJP3/x2S9t8ckvYaAAAAADOZ/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuS9gAAAAAAHJL2GRyS9v8ckvb+HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZP3/xyT
+        9v8dkvfOHZP3DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/dbHZL2/x2S9/8dk/b/HZP2/x2T
+        9/8dk/f/HZP3/x2S9v8ck/f+HZP2/xyS95EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvfCHJP2/x2T9/8dk/f/HZP3/xyS9v8ckvf/HZL2/xyT
+        9v8dkvf/HJP2/x2S9zMAAAAAGZP0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL27hyS
+        9v8dkvf/HZP2/x2T9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9ukdkvYlAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAij/UAAAAAAByT9z0dkvb/HZP3/xyT9v8dk/b/HJP3/x2T9/8ck/f/HJL2/x2T9/4dk/f/HZP2ugAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95gck/b/HZP3/hyT9/8dk/f/HJP2/xyS9/8dkvb/HJP2/x2T9/4ckvf/HZP2UQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAakvYAAAAAAAAAAAAck/bDHJL3/x2T9/4ck/b/HZP2/xyT9/8dk/f/HJP3/xyS
+        9v8dk/f/HJP2/x2S9zsAAAAAHZP2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACq/gAAAAAAHZL2IByS9uQdk/f/HZP2/x2T
+        9v8dk/b/HZP2/x2T9v8dkvb/HZP3/hyS9/8ckvfqF4T/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL3aByT9v8ck/b/HZP2/x2T9/8ckvb/HZL2/x2S
+        9v8dk/b/HJL3/h2S9/8ck/aFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95Qck/b/HZL3/x2T9v8dk/b/HZP2/x2T9v8dk/b/HZL2/x2T9/4ck/b/HZL3WwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdlfkGHZP3yByS9v8dk/b+HZP2/xyT9v8dk/b/HJP2/xyS9v8ck/f+HJL3/hyS
+        9/8bkvcSAAAAABqR9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL3AAAA
+        AAAck/ZHHZL3/x2T9/8ck/b/HZP2/xyS9v8ckvb/HZL2/xyT9v8ckvb/HZP2/xyS97QAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3ah2T9v8dk/f+HJP2/x2T9v8ck/b/HZP2/xyT
+        9v8ckvb/HJP3/h2S9v8ck/eDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/asHZL3/x2S
+        9v4dk/f+HZP3/h2T9/4dk/f+HZL3/hyT9/4ck/b+HJP2/xyT9j8AAAAAHJP2AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9ysdk/btHJL3/x2T9/4dk/f+HJL2/xyS
+        9/4dkvf+HJP3/h2S9/8ck/f/HZL25QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAck/ZHHZL3/x2S9/8dk/f+HZP3/h2T9/4dk/f+HZP3/h2S9/4ck/f/HZP2/xyS96sAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdk/gAAAAAAByS9oEdk/f/HZP2/x2T9v8dk/b/HZP2/x2T9v8dkvb/HJP2/x2T
+        9/4dk/f/HZL3cQAAAAAdk/cDHZP3AByT9wAdk/YAHJL3AB+V8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGpn2BxyT9s8dkvf/HZP2/x2T9/8dk/b/HJL2/x2S9v8ck/b/HZL3/xyS9v8dk/f/HpP3EgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAakvgAAAAAAB2T9iwckvfxHZL3/x2T9v8dk/b/HZP2/x2T
+        9v8dk/b/HZL2/xyT9v8ckvf/HZL22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2Vh2S
+        9/8dk/f/HZP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/h2T9/8dk/ecAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfmPkEH5v5BB+a+QQfmvkEH5r5BCCd
+        +gQdkfcIHo/zCx6P8wsej/MLHo/zCx6P8woekPQLHpL4EB6Q+A84hP8AHZP3uxyS9v8dk/f+HZP3/hyS
+        9v8dk/f+HZP3/h2T9/4ckvf/HZP2/xyS9/8ckvdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2FByT9tYdkvf/HZP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyT9/8ck/f/GpT3BgAA
+        AAAPmvcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YnHZP2/ByS9/8dk/f/HZP3/x2T9/8dk/f/HZP3/xyT
+        9/8dk/f/HZP3/x2T9/4dk/fxHZP3+B2T9/kckvf4HZL2+B2T9vgckvf4HJL2+R2T9vkdk/b5HZP2+R2T
+        9vkdk/b5HZP2+R2T9/odk/f6HZP3+h2T9/odk/f6HZP3+h2S9/sdkvb7HZL2+x2S9vsdkvb7HZL2+x2S
+        9vsdkvf8HZL3/B2S9/odkvf8HJP2/x2T9/8dk/f/HJL2/xyT9/8dk/f/HJP3/x2S9/8ck/f/HZL2/xyS
+        9nUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3uB2S9v8dk/f+HZP3/x2T
+        9/8dk/f/HZP3/x2T9/8ck/f/HJP3/hyT9/8ck/YtAAAAAByT9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZHvAAAA
+        AAAck/fyHZL2/x2T9v8ckvf/HZL3/xyT9/8ckvb/HJL3/x2S9/8dkvf+HZP3/xyS9/8ckvb/HZP3/xyS
+        9/8dkvb/HJL3/x2T9v8dk/f/HJL3/xyS9/8ckvf/HJL3/xyS9/8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS
+        9v8ckvb/HJP2/xyT9/8ck/f/HJP3/xyT9/8ck/f/HJP3/xyT9v8ck/b/HJP2/xyS9v8dkvf+HJL3/x2S
+        9/8ckvb/HJL3/x2S9v8ckvb/HZL3/x2S9/8ckvb/HZP3pQAAAAAbjfMAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdk/eaHZL2/x2S9v8dk/b/HJL3/x2S9/8ck/f/HJL2/xyS9/8dkvf+HZL3/x2S
+        91kAAAAAHZL3AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YBAAAAAByS980dk/b/HZP3/h2S9/8dkvf/HZP3/x2S
+        9/8dk/f+HZP3/hyS9v8dk/f+HZL3/h2S9/4ckvb/HZL3/x2S9/8dkvf/HJL3/x2T9/4dkvf/HJL2/x2S
+        9/8ckvb/HZL3/x2T9/4dk/f+HJL2/x2S9/8ckvf/HZL3/x2T9/4ckvb/HZP3/h2S9/8dk/f/HZL3/x2S
+        9/8dk/f/HZL3/x2T9/4dk/f+HJL2/x2T9/4dkvf/HZL3/xyS9v8dkvf/HZL3/x2S9/8ckvf/HZP3/hyT
+        9/8dkvbHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdm/8AAAAAAByS9nMdk/f/HJP2/x2T
+        9/8dkvf/HZL3/x2T9/8dkvf/HZP3/h2T9v4ck/b/HZL3gwAAAAAck/YDAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9wEAAAAAHZP2mByS9/8dk/f8HZL2/x2S9v8dkvb/HZL2/xyS9v8dkvb/HJL2/x2S9v8dkvb/HZL3/xyS
+        9v8ckvb/HZL2/xyS9v8ckvf/HZL2/x2S9/8ckvb/HZL2/xyS9v8dkvb/HJL2/xyS9v8ckvb/HZL2/xyS
+        9v8dkvb/HJL2/xyS9v8dkvb/HZL2/x2S9v8dkvb/HZL2/x2S9v8dkvb/HJL2/x2S9v8ckvb/HZL2/x2S
+        9v8dkvf/HJL2/xyS9v8dkvb/HJL2/xyS9/8dk/f+HZP3/xyS9t8ckvYYAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZL2Rh2S9v8ck/f/HZL2/x2S9v8dkvb/HZL2/x2S9v8ckvb/HZP3/h2S
+        9/8ck/a0AAAAAB2S9wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2AAAAAAAckvZpHZP3/xyS9vsckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/4ckvb/HZP3/hyS9v8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS
+        9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8ckvb/HJL3/xyS9v8dk/f+HJL2/x2T9/4ckvb/HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8dk/f+HJL2/xyS9/8ckvb/HJL2/xyS9v8ckvb/HJL3/x2T
+        9/4dk/f/HJP29B2S9zYAAAAAHJf2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cdHJP3+x2S
+        9v8ck/b/HJL2/xyS9v8ckvb/HJL2/x2T9/4dk/b/HZL2/xyT99AAAAAAHZL2AgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAaj/UAAAAAAByS9jYdk/f/HJL2+h2T9/4dk/f+HZP3/h2T9v4ck/f+HZP3/h2T9/8dk/f+HZP3/h2T
+        9/4dk/b/HJP3/h2T9v4ck/b+HZL3/x2T9/4dk/f+HJP2/x2T9/4dk/f/HZP3/hyT9/4ck/b+HZP3/x2T
+        9/4dk/f/HZP2/hyT9v4dk/f/HZP3/h2T9v4dk/b+HZP3/h2T9/4dk/f+HZP2/hyT9/4dk/f+HZP3/x2T
+        9/4dk/f+HZP3/h2T9v8ck/f+HZP2/hyT9v4dkvf/HZP3/hyT9/8ckvf/HZP2WAAAAAAbjPcAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAH5H1AQAAAAAck/fsHZL2/x2T9v4dk/f+HZP3/h2T9/4dk/b+HJP3/h2T
+        9/8ck/b/HZL35B2S9xsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3HhyS9vgdk/f/HZP3/x2T
+        9/8dk/f/HZL2/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyS9v8dkvf/HZL2/x2T9v8dkvf/HZP3/x2T
+        9/8ckvb/HZP3/xyS9/8dk/f/HZP3/x2T9v8dkvf/HZL3/x2S9/8dk/b/HZP2/x2S9/8dkvf/HZP2/x2T
+        9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9/8dkvf/HZP3/x2T9/8dk/f/HJL2/x2S9/8dkvb/HZP2/x2S
+        9/8dk/f/HJL3/h2S9/8ck/Z6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cBAAAAAB2S
+        9sQck/f/HZP2/R2T9/8dk/f/HZP3/x2S9v8dk/f/HZP3/x2T9/8ck/b1HZL2OgAAAAAVlf8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGo/2AAAAAAAdkvYPHZP30RyS9v8ckvf/HJL3/xyT9/8ckvb/HJP3/h2T9/4ckvf/HZP3/hyS
+        9/8ckvf/HJL2/xyS9/8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS9v8ckvf/HJL3/xyS9/8ck/f+HJP3/hyS
+        9/8ckvf/HJL3/xyS9v8ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvf/HJP3/xyS9v8ck/f+HZP3/hyS
+        9/8dk/f+HJL3/xyS9/8ckvb/HJL3/xyS9v8ckvb/HJL3/x2T9/4dk/f/HZP2/xyS96IAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9gAAAAAAHJL3lR2T9v8ckvb8HJL3/xyS9/8ck/f/HJL2/xyT
+        9/4dk/f+HJP2/x2S9v8ck/dZAAAAAB+S9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckveoHZP2/xyT
+        9/4dk/f/HZP3/x2S9/8ck/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL3/x2S9/8ck/f/HZL3/x2T
+        9/8dk/f/HJP3/x2T9/8dk/f/HZP3/xyT9/8ck/f/HZP3/x2S9/8dk/f/HZP3/xyT9/8dk/f/HZL3/x2T
+        9/8dk/f/HZP3/x2T9/8dk/f/HZL3/xyT9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8ckvf/HZL3/xyT
+        9/8dkvf/HZP3/x2T9/8ckvf/HZP2zh2S9gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3AAAA
+        AAAdk/dkHJL3/x2T9/sdk/f/HZP3/x2T9/8dkvf/HJP3/x2T9/8dk/f/HJL3/x2T9n0AAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9oQdkvf/HJP3/hyS9v8ck/b/HJL2/x2T9/4dk/f+HJL2/x2T
+        9/4dk/b+HZP3/xyS9v8ckvb/HZL2/xyT9v8ckvb/HZP3/xyT9v8ckvb/HJP2/xyS9v8ck/b/HZP3/x2T
+        9v8ckvb/HJL2/xyS9v8dk/b/HZP2/xyS9v8dkvf/HJP2/x2T9v8ck/b/HZP2/xyT9v8ckvb/HZP3/x2T
+        9/8ckvb/HZP3/xyT9/8dkvf+HJP2/hyS9v8ckvb/HJL2/xyS9v8dk/f+HJL3/xyS9v8dk/f2HJL2DQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbk/cAAAAAAByT9jgdkvf/HJP2+hyS9v8ckvb/HJP2/xyS
+        9v8dk/f+HZP3/hyS9v4ck/f/HZL2nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP3XByT
+        9/8dkvb/HZP2/x2T9v8dkvb/HZP3/h2T9/4dkvb/HZP3/h2T9/8dkvb8HZL22x2T990dkvfdHZP33R2S
+        990dk/fdHZP33RyT9t0dk/fdHZP33R2T990dk/fdHZP33R2T990dkvfdHZP23R2T990dk/fdHZP33R2S
+        990dk/fdHZP33R2T990dk/fdHZP33R2S990dk/fdHZP33R2T9t0dkvfaHZL38R2T9v8dk/f+HJL2/x2S
+        9v8ck/b/HZL3/x2T9/4dk/f/HZP3+xyS9v8dk/cpAAAAAB2U9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2Hh2T9/gckvb/HZP2/x2T9v8dk/b/HZL2/x2T9/4dk/f+HZL2/x2S9v8ck/fGHJL3CQAA
+        AAAkkv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJf2AAAAAAAdkvY5HZL29RyT9/8dk/b/HJL2/xyS9v8dk/f+HZP3/h2T
+        9v8dk/f+HJL2/x2T9/Mck/ceHJL2FRyT9xYckvcWHJP2Fh2T9xYck/YWHZP3FhyT9hYckvYWHJL2Fh2S
+        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
+        AAAAAAAAAAAAACGT/QAAAAAAHJL2aB2T9/8dk/f/HJL2/xyT9v8ckvb/HJP2/x2T9v8ckvb/HJL2/B2S
+        9/8ck/aLAAAAAByS9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AgAAAAAdk/dwHZL3/x2T9/4ck/f/HJL2/x2T
+        9/4dk/f+HZL3/x2T9/4ck/b+HZL2/xyT96QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL2BAAAAAAdk/fLHJL2/xyT9/4dkvb/HJL2/x2S9/8dk/f+HJL3/xyS
+        9v8ckvb/HZP27hyU9h8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJHyAAAAAAAdk/dCHJL2+R2T
+        9/8dkvf/HJP3/xyS9v8dk/f+HZP3/h2S9/8dk/f+HZP2/xyS98UAAAAAHZP2AgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvYBAAAAAByS9kEckvb/HJL2/hyT9v8ckvb/HZP3/h2T9/4dkvb/HZP3/h2T9/4ck/f/HZL3vx2E
+        9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cDAAAAAByS
+        9qAdk/f/HJP2/h2S9v8ckvb/HZL3/x2T9/4ckvb/HJL2/x2T9/8dkvf6HJL2RgAAAAAkkv8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9iEdk/bpHJL3/x2S9/8ck/b/HJL2/x2T9/4dk/f+HZL2/x2T
+        9/4dk/b/HJL37QAAAAAhlvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6V+gAAAAAAHZP4EB2T9/8ckvf+HZP2/x2S
+        9v8dk/f+HZP3/h2S9v8dk/f+HZP2/xyT9v8ckvfdHZL2GgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9wIAAAAAHZL3bhyT9v8dkvf9HZL2/x2T9v8dkvf/HZP3/h2T
+        9/8ckvb/HZP3/xyT9v8dkvdxAAAAABmV8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YBAAAAAByS
+        99Ydk/b/HZP2/x2T9v8dkvb/HZP3/h2T9/4dkvb/HZP3/x2T9/8ckvb7HJL2KQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckfYBHJL25B2T9v8dk/f/HZL2/xyT9/8dk/f/HZP3/x2T9/8dk/f/HZL3/x2T
+        9vkck/cvAAAAAB2R9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP2AQAA
+        AAAck/ZCHZL3/xyT9vwdkvb/HJP2/x2S9/8dk/f/HZP3/xyT9v8dk/f/HZL3/xyT9pUAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9gUAAAAAHJL3uh2T9v8ckvb+HZP3/x2S9v8ck/f/HZP3/x2T
+        9/8dk/f/HJL3/x2T9/8dk/ZWAAAAAB6U9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAglfkAAAAAAAAAAAAdk/a5HJL3/x2T
+        9/4dk/f+HZP3/h2T9/4dkvb/HZP3/h2T9/4ckvf/HJP3/x2S9kUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdlvkAAAAAAB2T9xkckvb/HZP3/B2T9/4dk/f+HZL3/x2T
+        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
+        AAAAAAAAAAAAABaO8QAAAAAAHZP3TxyS9v8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL2/ByT
+        9/8dkvacAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSS/gAAAAAAAAAAAB2S96wckvf/HZP3/x2T
+        9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8ck/b/HZL3TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2sRyS9/8dk/b+HJP3/x2T9/8dkvb/HZP3/x2T9/8dk/f/HZP3/xyS9v8ckvZDAAAAAByS
+        9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIpn/AAAAAAAckvYwHZP38B2S
+        9/8ck/b/HZL3/x2T9/8dk/f/HJL2/x2T9/8dkvb9HZP3/xyS9s8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL2fh2T9/8dkvf+HZL2/xyT9/8dk/f/HZL2/x2T9/8dk/f/HZP3/hyT
+        9v8dkvd6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGW+Agdk/eUHJL2rx2T
+        96gdk/eoHZP2qB2T96gck/eoHJP2qB2S96gdkvauHJP3kgAAAAAejvYCAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP2RxyS9v8dk/b/HZP3/hyT9/8ckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/8ckvb/HZL3/xyT9kMAAAAAHZH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR
+        9gYckveCHZP3rhyT96gdk/eoHZP3qB2T9qgdk/eoHJP3qByT9qgckvanHJP3qR2T9hIAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdlPYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGpr3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AAAA
+        AAAAAAAAHJL3cx2S9/8ck/b/HZL3/xyS9v8dk/b/HJL2/x2T9v8dk/f+HJP3/hyS9v8dk/fCAAAAAByS
+        9wMamfIAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACua/gAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfivYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAglfQAHJL2ABuS0QAAAAAAHJP3rB2S9v8ck/f9HJP2/hyT
+        9v8ck/b/HJP2/x2T9/4dkvb8HZP3/xyT9kwAAAAAHZP2AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP3AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL4AAAAAAAgjfgEHJP32x2T9v8ckvb+HJP3/xyS9/8ckvf/HJP3/h2T9/8ckvbVAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL1AAAAAAAdkvcvHJL2+xyT
+        9v8dk/b+HJP2/xyT9/4dkvb/HJP3/xyS9mwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACuA/wAAAAAAHZX2AAAAAAAdkvdhHZP2/xyT9/8ckvb+HZL3/hyT9/8dkvbmHZP3GAAA
+        AAAdkfUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAAAA
+        AAAck/eZHZL2/xyT9/4ck/b/HJP3/x2S9owAAAAAG5T6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvYAAAAAABWU/AIckvfMHZP2/x2S9v8ck/f/HJP2GgAA
+        AAAekPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuU
+        +AAdkvYBAAAAAByT9xockvbuHZL3/xyS9qIAAAAAHpL3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9wAdk/YBAAAAAB2T904ck/f/HZP2NgAA
+        AAAZlPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9kYckvYOAAAAAByS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wAAAAAAAAAAAAAA
+        AAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2S/wAdkvYAHJL1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////////////////P////////////////////w
+        ////////////////////8D////5///////////////Af//wAP////wAf/AAAAAAAB//+AD////8AH/wA
+        AAAAAAH//gA/////AB/+AAAAAAAA//4AP////4AP/gAAAAAAAD/+AD////+AD/4AAAAAAAAP/gA/////
+        gA/+AAAAAAAAB/8AH////4AP/gAAAAAAAB//AB////+AD/4AAAAAAAA//wAf////wA//AAAAAAAA//8A
+        H////8AH/wAAAAAAA///AB/////AB/8ACD//8Af//wAP////wAf/AB////Af//+AD////8AH/wAf///w
+        P///gA/////AB/8AD///8P///4AP////4AP/gA////P///+AD////+AD/4AP///3////gA/////gA/+A
+        D////////8AH////4AP/gA/////////AB////+AD/4AP////////wAf////gA/+AD////////8AH////
+        8AH/wAf////////AB/////AB/8AH////////wAf////wAf/AB////////+AD////8AH/wAf////////g
+        A/////AB/8AH////////4AP////4AP/AB////////+AD////+AD/4AP////////gA/////gA/+AD////
+        ////4AP////4AP/gA/////////AB////+AD/4AP////////wAAAAAAAA/+AD////////8AAAAAAAAH/g
+        A/////////AAAAAAAAB/8AH////////wAAAAAAAAf/AB////////+AAAAAAAAH/wAf////////gAAAAA
+        AAB/8AH////////4AAAAAAAAf/AB////////+AAAAAAAAD/wAf////////gAAAAAAAA/+AH////////4
+        AAAAAAAAP/gA/////////AAAAAAAAD/4AP////////wAf////gA/+AD////////8AH////8AH/gA////
+        /////AB/////AB/4AP////////wAf////wAf/AB////////+AD////8AH/wAf////////gA/////AB/8
+        AH////////4AP////4Af/AB////////+AD////+AD/wAf////////gA/////gA/8AD////////4AP///
+        /4AP/gA/////////AB////+AD/4AP////////wAf////gA/+AD////////8AH////8AP/gA/////////
+        AB/////AB/4AP////////wAf////wAf/AD////////8AH////8AH/wAf////////gA/////AB/8AH///
+        /////4AP////wAf/AB////////+AD////+AD/wAf////////gA/////gA/8AH////////4AP////4AP/
+        AB/////////AD////+AD/4AP////////wAf////gA/+AD////////8AH////4AP/gA/////////AB///
+        /gAAH4AP////////wAf///8AAD+AD////////8AH////gAA/wA/////////gB////4AAP8AH////////
+        4AP////AAH/AB////////+AD////4AB/wAf////////gA/////AA/8AH///////////////4AP//////
+        ////////////+AH///////////////////wB///////////////////+A////////////////////wP/
+        //////////////////8D////////////////////h////////////////////8f/////////////////
+        ///v////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////
+</value>
+  </data>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutView.Designer.cs	(revision 7085)
@@ -0,0 +1,224 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  partial class AboutView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutView));
+      this.pictureBox1 = new System.Windows.Forms.PictureBox();
+      this.mailLinkLabel = new System.Windows.Forms.LinkLabel();
+      this.webLinkLabel = new System.Windows.Forms.LinkLabel();
+      this.label4 = new System.Windows.Forms.Label();
+      this.label2 = new System.Windows.Forms.Label();
+      this.licenseTextBox = new System.Windows.Forms.RichTextBox();
+      this.txtCopyright = new System.Windows.Forms.TextBox();
+      this.versionTextBox = new System.Windows.Forms.TextBox();
+      this.productTextBox = new System.Windows.Forms.TextBox();
+      this.label3 = new System.Windows.Forms.Label();
+      this.label1 = new System.Windows.Forms.Label();
+      this.label = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // pictureBox1
+      // 
+      this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
+      this.pictureBox1.Location = new System.Drawing.Point(3, 3);
+      this.pictureBox1.Name = "pictureBox1";
+      this.pictureBox1.Size = new System.Drawing.Size(163, 165);
+      this.pictureBox1.TabIndex = 36;
+      this.pictureBox1.TabStop = false;
+      // 
+      // mailLinkLabel
+      // 
+      this.mailLinkLabel.AutoSize = true;
+      this.mailLinkLabel.Location = new System.Drawing.Point(241, 80);
+      this.mailLinkLabel.Name = "mailLinkLabel";
+      this.mailLinkLabel.Size = new System.Drawing.Size(129, 13);
+      this.mailLinkLabel.TabIndex = 34;
+      this.mailLinkLabel.TabStop = true;
+      this.mailLinkLabel.Text = "support@heuristiclab.com";
+      this.mailLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.mailLinkLabel_LinkClicked);
+      // 
+      // webLinkLabel
+      // 
+      this.webLinkLabel.AutoSize = true;
+      this.webLinkLabel.Location = new System.Drawing.Point(241, 61);
+      this.webLinkLabel.Name = "webLinkLabel";
+      this.webLinkLabel.Size = new System.Drawing.Size(135, 13);
+      this.webLinkLabel.TabIndex = 32;
+      this.webLinkLabel.TabStop = true;
+      this.webLinkLabel.Text = "http://dev.heuristiclab.com";
+      this.webLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.webLinkLabel_LinkClicked);
+      // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(169, 80);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(47, 13);
+      this.label4.TabIndex = 33;
+      this.label4.Text = "Contact:";
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(169, 61);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(49, 13);
+      this.label2.TabIndex = 31;
+      this.label2.Text = "Website:";
+      // 
+      // licenseTextBox
+      // 
+      this.licenseTextBox.BackColor = System.Drawing.SystemColors.HighlightText;
+      this.licenseTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
+      this.licenseTextBox.Location = new System.Drawing.Point(172, 100);
+      this.licenseTextBox.Name = "licenseTextBox";
+      this.licenseTextBox.ReadOnly = true;
+      this.licenseTextBox.Size = new System.Drawing.Size(380, 173);
+      this.licenseTextBox.TabIndex = 35;
+      this.licenseTextBox.Text = resources.GetString("licenseTextBox.Text");
+      this.licenseTextBox.WordWrap = false;
+      // 
+      // txtCopyright
+      // 
+      this.txtCopyright.BackColor = System.Drawing.SystemColors.HighlightText;
+      this.txtCopyright.BorderStyle = System.Windows.Forms.BorderStyle.None;
+      this.txtCopyright.Location = new System.Drawing.Point(244, 42);
+      this.txtCopyright.Name = "txtCopyright";
+      this.txtCopyright.ReadOnly = true;
+      this.txtCopyright.Size = new System.Drawing.Size(308, 13);
+      this.txtCopyright.TabIndex = 30;
+      this.txtCopyright.Text = "(c) 2002-2011 HEAL";
+      // 
+      // versionTextBox
+      // 
+      this.versionTextBox.BackColor = System.Drawing.SystemColors.HighlightText;
+      this.versionTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
+      this.versionTextBox.Location = new System.Drawing.Point(244, 23);
+      this.versionTextBox.Name = "versionTextBox";
+      this.versionTextBox.ReadOnly = true;
+      this.versionTextBox.Size = new System.Drawing.Size(308, 13);
+      this.versionTextBox.TabIndex = 28;
+      // 
+      // productTextBox
+      // 
+      this.productTextBox.BackColor = System.Drawing.SystemColors.HighlightText;
+      this.productTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
+      this.productTextBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.productTextBox.Location = new System.Drawing.Point(244, 4);
+      this.productTextBox.Name = "productTextBox";
+      this.productTextBox.ReadOnly = true;
+      this.productTextBox.Size = new System.Drawing.Size(308, 13);
+      this.productTextBox.TabIndex = 26;
+      this.productTextBox.Text = "HeuristicLab Hive";
+      // 
+      // label3
+      // 
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(169, 42);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(54, 13);
+      this.label3.TabIndex = 29;
+      this.label3.Text = "Copyright:";
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(169, 23);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(45, 13);
+      this.label1.TabIndex = 27;
+      this.label1.Text = "Version:";
+      // 
+      // label
+      // 
+      this.label.AutoSize = true;
+      this.label.Location = new System.Drawing.Point(169, 4);
+      this.label.Name = "label";
+      this.label.Size = new System.Drawing.Size(47, 13);
+      this.label.TabIndex = 25;
+      this.label.Text = "Product:";
+      // 
+      // AboutView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.pictureBox1);
+      this.Controls.Add(this.mailLinkLabel);
+      this.Controls.Add(this.webLinkLabel);
+      this.Controls.Add(this.label4);
+      this.Controls.Add(this.label2);
+      this.Controls.Add(this.licenseTextBox);
+      this.Controls.Add(this.txtCopyright);
+      this.Controls.Add(this.versionTextBox);
+      this.Controls.Add(this.productTextBox);
+      this.Controls.Add(this.label3);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.label);
+      this.Name = "AboutView";
+      this.Size = new System.Drawing.Size(559, 279);
+      this.Load += new System.EventHandler(this.AboutView_Load);
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.PictureBox pictureBox1;
+    private System.Windows.Forms.LinkLabel mailLinkLabel;
+    private System.Windows.Forms.LinkLabel webLinkLabel;
+    private System.Windows.Forms.Label label4;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.RichTextBox licenseTextBox;
+    private System.Windows.Forms.TextBox txtCopyright;
+    private System.Windows.Forms.TextBox versionTextBox;
+    private System.Windows.Forms.TextBox productTextBox;
+    private System.Windows.Forms.Label label3;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.Label label;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutView.cs	(revision 7085)
@@ -0,0 +1,69 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  [View("About View: Show some information about HeursticLab Hive")]
+  public partial class AboutView : ItemView {
+    public new Item Content {
+      get { return (Item)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public AboutView() {
+      InitializeComponent();
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    private void AboutView_Load(object sender, System.EventArgs e) {
+      versionTextBox.Text = Assembly.GetExecutingAssembly().GetName().Version.ToString();
+    }
+
+    private void webLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
+      System.Diagnostics.Process.Start(webLinkLabel.Text);
+    }
+
+    private void mailLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
+      System.Diagnostics.Process.Start("mailto:" + mailLinkLabel.Text);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/AboutView.resx	(revision 7085)
@@ -0,0 +1,245 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        AAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="licenseTextBox.Text" xml:space="preserve">
+    <value>HeuristicLab is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+HeuristicLab is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with HeuristicLab. If not, see http://www.gnu.org/licenses.
+</value>
+  </data>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj	(revision 7085)
@@ -0,0 +1,307 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{8C0D9F39-397F-4DBE-856F-BC4DC0FE23F8}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Hive.SlaveCore.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Hive.Slave.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\bin\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Core.Views-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Data-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Data.Views-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Data.Views-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3">
+      <HintPath>..\..\bin\HeuristicLab.MainForm-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
+      <HintPath>..\..\bin\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimizer-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Optimizer-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.ServiceProcess" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AboutDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AboutDialog.Designer.cs">
+      <DependentUpon>AboutDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AboutView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AboutView.Designer.cs">
+      <DependentUpon>AboutView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="SlaveMainViewTray.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SlaveMainViewTray.Designer.cs">
+      <DependentUpon>SlaveMainViewTray.cs</DependentUpon>
+    </Compile>
+    <Compile Include="SlaveMainView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SlaveMainView.Designer.cs">
+      <DependentUpon>SlaveMainView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="SlaveMainViewBase.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SlaveMainViewBase.Designer.cs">
+      <DependentUpon>SlaveMainViewBase.cs</DependentUpon>
+    </Compile>
+    <Compile Include="SlaveCmdsWithKill.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SlaveCmdsWithKill.Designer.cs">
+      <DependentUpon>SlaveCmdsWithKill.cs</DependentUpon>
+    </Compile>
+    <Compile Include="SlaveCmdsBase.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SlaveCmdsBase.Designer.cs">
+      <DependentUpon>SlaveCmdsBase.cs</DependentUpon>
+    </Compile>
+    <Compile Include="SlaveView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SlaveView.Designer.cs">
+      <DependentUpon>SlaveView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="SlaveStats.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SlaveStats.Designer.cs">
+      <DependentUpon>SlaveStats.cs</DependentUpon>
+    </Compile>
+    <Compile Include="TaskView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TaskView.Designer.cs">
+      <DependentUpon>TaskView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LogView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LogView.Designer.cs">
+      <DependentUpon>LogView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Include="SlaveItem.cs" />
+    <None Include="app.config" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\Settings.settings">
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="AboutDialog.resx">
+      <DependentUpon>AboutDialog.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AboutView.resx">
+      <DependentUpon>AboutView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SlaveMainViewTray.resx">
+      <DependentUpon>SlaveMainViewTray.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SlaveMainView.resx">
+      <DependentUpon>SlaveMainView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SlaveMainViewBase.resx">
+      <DependentUpon>SlaveMainViewBase.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SlaveCmdsWithKill.resx">
+      <DependentUpon>SlaveCmdsWithKill.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SlaveCmdsBase.resx">
+      <DependentUpon>SlaveCmdsBase.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SlaveView.resx">
+      <DependentUpon>SlaveView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SlaveStats.resx">
+      <DependentUpon>SlaveStats.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="TaskView.resx">
+      <DependentUpon>TaskView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LogView.resx">
+      <DependentUpon>LogView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive.Slave\3.3\HeuristicLab.Clients.Hive.Slave-3.3.csproj">
+      <Project>{989FE92B-484E-41EE-87E2-6A24AF0381D8}</Project>
+      <Name>HeuristicLab.Clients.Hive.Slave-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/LogView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/LogView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/LogView.Designer.cs	(revision 7085)
@@ -0,0 +1,96 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  partial class LogView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.txtLog = new System.Windows.Forms.TextBox();
+      this.chkShowBalloonTips = new System.Windows.Forms.CheckBox();
+      this.SuspendLayout();
+      // 
+      // txtLog
+      // 
+      this.txtLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtLog.BackColor = System.Drawing.Color.White;
+      this.txtLog.Location = new System.Drawing.Point(3, 3);
+      this.txtLog.Multiline = true;
+      this.txtLog.Name = "txtLog";
+      this.txtLog.ReadOnly = true;
+      this.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.txtLog.Size = new System.Drawing.Size(480, 238);
+      this.txtLog.TabIndex = 2;
+      // 
+      // chkShowBalloonTips
+      // 
+      this.chkShowBalloonTips.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.chkShowBalloonTips.AutoSize = true;
+      this.chkShowBalloonTips.Location = new System.Drawing.Point(3, 247);
+      this.chkShowBalloonTips.Name = "chkShowBalloonTips";
+      this.chkShowBalloonTips.Size = new System.Drawing.Size(291, 17);
+      this.chkShowBalloonTips.TabIndex = 3;
+      this.chkShowBalloonTips.Text = "Show Ballon Tips in System Tray on important messages";
+      this.chkShowBalloonTips.UseVisualStyleBackColor = true;
+      this.chkShowBalloonTips.CheckedChanged += new System.EventHandler(this.chkShowBalloonTips_CheckedChanged);
+      // 
+      // LogView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.chkShowBalloonTips);
+      this.Controls.Add(this.txtLog);
+      this.Name = "LogView";
+      this.Size = new System.Drawing.Size(486, 267);
+      this.Load += new System.EventHandler(this.LogView_Load);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox txtLog;
+    private System.Windows.Forms.CheckBox chkShowBalloonTips;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/LogView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/LogView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/LogView.cs	(revision 7085)
@@ -0,0 +1,92 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Hive.SlaveCore.Views.Properties;
+using HeuristicLab.Common;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  [View("LogView: Displays logged messages from the slave core.")]
+  [Content(typeof(SlaveItem), IsDefaultView = false)]
+  public partial class LogView : ItemView {
+    public new SlaveItem Content {
+      get { return (SlaveItem)base.Content; }
+      set {
+        if (base.Content != value) {
+          base.Content = value;
+        }
+      }
+    }
+
+    public LogView() {
+      InitializeComponent();
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      Content.SlaveMessageLogged -= new System.EventHandler<EventArgs<string>>(Content_SlaveMessageLogged);
+
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+
+      Content.SlaveMessageLogged += new System.EventHandler<EventArgs<string>>(Content_SlaveMessageLogged);
+    }
+    #endregion
+
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    #region Event Handlers
+    void Content_SlaveMessageLogged(object sender, EventArgs<string> e) {
+      string msg = string.Format("{0}: {1} {2}", DateTime.Now.ToString("HH:mm:ss"), e.Value, Environment.NewLine);
+
+      if (txtLog.InvokeRequired) {
+        txtLog.Invoke(new Action<string>(txtLog.AppendText), msg);
+      } else {
+        txtLog.AppendText(msg);
+      }
+    }
+
+    private void LogView_Load(object sender, EventArgs e) {
+      chkShowBalloonTips.Checked = Settings.Default.ShowBalloonTips;
+    }
+
+    private void chkShowBalloonTips_CheckedChanged(object sender, EventArgs e) {
+      if (Settings.Default.ShowBalloonTips != chkShowBalloonTips.Checked) {
+        Settings.Default.ShowBalloonTips = chkShowBalloonTips.Checked;
+        Settings.Default.Save();
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/LogView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/LogView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/LogView.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,46 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive.Slave.Views {
+  [Plugin("HeuristicLab.Clients.Hive.Slave.Views", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Clients.Hive.Slave.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Clients.Hive.SlaveCore", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Data.Views", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Optimizer", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabClientsHiveSlaveViewsPlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Clients.Hive.Slave.Views")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("a5114d90-9d18-4504-bcb7-1e24734f428d")]
+
+// 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("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Resources.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Resources.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Resources.Designer.cs	(revision 7085)
@@ -0,0 +1,63 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.225
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // 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() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Clients.Hive.SlaveCore.Views.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Resources.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Resources.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Resources.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Settings.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Settings.Designer.cs	(revision 7085)
@@ -0,0 +1,74 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.235
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    public 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;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]
+        public bool ShowBalloonTips {
+            get {
+                return ((bool)(this["ShowBalloonTips"]));
+            }
+            set {
+                this["ShowBalloonTips"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("showui")]
+        public string ShowUICmd {
+            get {
+                return ((string)(this["ShowUICmd"]));
+            }
+            set {
+                this["ShowUICmd"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("SlaveCommunicationServiceEndpoint")]
+        public string SlaveCommunicationServiceEndpoint {
+            get {
+                return ((string)(this["SlaveCommunicationServiceEndpoint"]));
+            }
+            set {
+                this["SlaveCommunicationServiceEndpoint"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("HeuristicLab.Clients.Hive.SlaveCore.WindowsService")]
+        public string ServiceName {
+            get {
+                return ((string)(this["ServiceName"]));
+            }
+            set {
+                this["ServiceName"] = value;
+            }
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Settings.settings
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Settings.settings	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/Properties/Settings.settings	(revision 7085)
@@ -0,0 +1,18 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Clients.Hive.SlaveCore.Views.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="ShowBalloonTips" Type="System.Boolean" Scope="User">
+      <Value Profile="(Default)">False</Value>
+    </Setting>
+    <Setting Name="ShowUICmd" Type="System.String" Scope="User">
+      <Value Profile="(Default)">showui</Value>
+    </Setting>
+    <Setting Name="SlaveCommunicationServiceEndpoint" Type="System.String" Scope="User">
+      <Value Profile="(Default)">SlaveCommunicationServiceEndpoint</Value>
+    </Setting>
+    <Setting Name="ServiceName" Type="System.String" Scope="User">
+      <Value Profile="(Default)">HeuristicLab.Clients.Hive.SlaveCore.WindowsService</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsBase.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsBase.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsBase.Designer.cs	(revision 7085)
@@ -0,0 +1,94 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  partial class SlaveCmdsBase {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SlaveCmdsBase));
+      this.btnStart = new System.Windows.Forms.Button();
+      this.btnStop = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.SuspendLayout();
+      // 
+      // btnStart
+      // 
+      this.btnStart.Image = ((System.Drawing.Image)(resources.GetObject("btnStart.Image")));
+      this.btnStart.Location = new System.Drawing.Point(3, 3);
+      this.btnStart.Name = "btnStart";
+      this.btnStart.Size = new System.Drawing.Size(24, 24);
+      this.btnStart.TabIndex = 10;
+      this.toolTip.SetToolTip(this.btnStart, "Start/Resume the slave");
+      this.btnStart.UseVisualStyleBackColor = true;
+      this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+      // 
+      // btnStop
+      // 
+      this.btnStop.Image = ((System.Drawing.Image)(resources.GetObject("btnStop.Image")));
+      this.btnStop.Location = new System.Drawing.Point(33, 3);
+      this.btnStop.Name = "btnStop";
+      this.btnStop.Size = new System.Drawing.Size(24, 24);
+      this.btnStop.TabIndex = 11;
+      this.toolTip.SetToolTip(this.btnStop, "Pause slave");
+      this.btnStop.UseVisualStyleBackColor = true;
+      this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+      // 
+      // SlaveCmdsBase
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.btnStop);
+      this.Controls.Add(this.btnStart);
+      this.Name = "SlaveCmdsBase";
+      this.Size = new System.Drawing.Size(92, 30);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button btnStart;
+    private System.Windows.Forms.Button btnStop;
+    protected System.Windows.Forms.ToolTip toolTip;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsBase.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsBase.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsBase.cs	(revision 7085)
@@ -0,0 +1,117 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+
+  [View("HeuristicLab Slave Cmds View")]
+  [Content(typeof(SlaveItem), IsDefaultView = false)]
+  public partial class SlaveCmdsBase : ItemView {
+    protected SlaveDisplayStat lastSlaveDisplayStat;
+
+    public new SlaveItem Content {
+      get { return (SlaveItem)base.Content; }
+      set {
+        if (base.Content != value) {
+          base.Content = value;
+        }
+      }
+    }
+
+    public SlaveCmdsBase() {
+      InitializeComponent();
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+
+      Content.SlaveDisplayStateChanged -= new EventHandler<EventArgs<SlaveDisplayStat>>(Content_SlaveDisplayStateChanged);
+      Content.CoreConnectionChanged -= new EventHandler<EventArgs<CoreConnection>>(Content_CoreConnectionChanged);
+
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+
+      Content.SlaveDisplayStateChanged += new EventHandler<EventArgs<SlaveDisplayStat>>(Content_SlaveDisplayStateChanged);
+      Content.CoreConnectionChanged += new EventHandler<EventArgs<CoreConnection>>(Content_CoreConnectionChanged);
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      btnStart.Enabled = false;
+      btnStop.Enabled = false;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    #region Event Handlers
+    protected virtual void Content_SlaveDisplayStateChanged(object sender, EventArgs<SlaveDisplayStat> e) {
+      if (this.InvokeRequired) {
+        Action<object, EventArgs<SlaveDisplayStat>> action = new Action<object, EventArgs<SlaveDisplayStat>>(Content_SlaveDisplayStateChanged);
+        Invoke(action, sender, e);
+      } else {
+        lastSlaveDisplayStat = e.Value;
+        if (e.Value == SlaveDisplayStat.Asleep || e.Value == SlaveDisplayStat.NoService) {
+          btnStart.Enabled = true;
+          btnStop.Enabled = false;
+        }
+
+        if (e.Value == SlaveDisplayStat.Busy || e.Value == SlaveDisplayStat.Idle || e.Value == SlaveDisplayStat.Offline) {
+          btnStart.Enabled = false;
+          btnStop.Enabled = true;
+        }
+      }
+    }
+
+    protected virtual void Content_CoreConnectionChanged(object sender, EventArgs<CoreConnection> e) {
+      if (e.Value == CoreConnection.Offline) {
+        btnStart.Enabled = false;
+        btnStop.Enabled = false;
+      }
+    }
+    #endregion
+
+    protected virtual void btnStop_Click(object sender, EventArgs e) {
+      if (Content != null) {
+        Content.Sleep();
+      }
+    }
+
+    protected virtual void btnStart_Click(object sender, EventArgs e) {
+      if (Content != null) {
+        if (lastSlaveDisplayStat == SlaveDisplayStat.Asleep) {
+          Content.RestartCore();
+        }
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsBase.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsBase.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsBase.resx	(revision 7085)
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="btnStart.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
+        JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAAsElE
+        QVQ4T2P4//8/AyUYq+ay/dluxBqK1YCEGRH/iTUEpwGWZfpEGYLVgKgpQf833Fr8nxhDsBoQPMEbZDtR
+        hmA1wKfLGWwACEctCsDrEqwGODZb/M/YEAvWbNus/1+nWOG/RBo3iFZDjx2sBpjX6KFo5k9gwaoZZBhW
+        A/RKleE249OM0wCVfCmwswlpxmmAdIYgUZpxGiCSzInTz0QFIrbQxpU3KMqJOL1AbE4EqQMAJP3E6eLV
+        FswAAAAASUVORK5CYII=
+</value>
+  </data>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="btnStop.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
+        JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAAvklE
+        QVQ4T2P4//8/AyWYIs0giwehAb2b//7v2vDrf97UR59ATkTno4cXhhdAmq8+/PNfN3QVUO1/BnQ+QQPa
+        1n77f+vp7/+qfovABqDzCRrQuOLz/8sPf/+Xc5sFNgCdT9CA2sXv/5+4/vu/mN0ksAHofIIGVMx79X/3
+        hZ//+c26wQag8wkaUDL7+f/1J3/+5zRoBRuAzidoQMH0x/8X7Pn8n1WnEWwAOp+gAaD4Z9NtghuAzido
+        AKkZa+DzAgCRffInJV4/PgAAAABJRU5ErkJggg==
+</value>
+  </data>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsWithKill.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsWithKill.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsWithKill.Designer.cs	(revision 7085)
@@ -0,0 +1,77 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  partial class SlaveCmdsWithKill {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.btnKill = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // btnKill
+      // 
+      this.btnKill.Location = new System.Drawing.Point(63, 3);
+      this.btnKill.Name = "btnKill";
+      this.btnKill.Size = new System.Drawing.Size(24, 24);
+      this.btnKill.TabIndex = 13;
+      this.toolTip.SetToolTip(this.btnKill, "Stop the Slave Windows Service. \r\nNote that you must have Administrator rights on" +
+              " your \r\nmachine to be able to do this. ");
+      this.btnKill.UseVisualStyleBackColor = true;
+      this.btnKill.Click += new System.EventHandler(this.btnKill_Click);
+      // 
+      // SlaveCmdsWithKill
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.btnKill);
+      this.Name = "SlaveCmdsWithKill";
+      this.Controls.SetChildIndex(this.btnKill, 0);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button btnKill;
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsWithKill.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsWithKill.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsWithKill.cs	(revision 7085)
@@ -0,0 +1,197 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using System.Security.Principal;
+using System.ServiceProcess;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Hive.SlaveCore.Views.Properties;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+
+  [View("HeuristicLab Slave Cmds with Kill View")]
+  [Content(typeof(SlaveItem), IsDefaultView = false)]
+  public partial class SlaveCmdsWithKill : SlaveCmdsBase {
+    private string serviceName = Settings.Default.ServiceName;
+
+    private const UInt32 BCM_SETSHIELD = 0x160C;
+    [DllImport("user32", CharSet = CharSet.Auto, SetLastError = true)]
+    static extern int SendMessage(IntPtr hWnd, UInt32 Msg, int wParam, IntPtr lParam);
+
+
+    public new SlaveItem Content {
+      get { return (SlaveItem)base.Content; }
+      set {
+        if (base.Content != value) {
+          base.Content = value;
+        }
+      }
+    }
+
+    public SlaveCmdsWithKill() {
+      InitializeComponent();
+
+      if (CheckRunAsAdmin()) {
+        btnKill.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+        btnKill.Image = HeuristicLab.Common.Resources.VSImageLibrary.Stop;
+      } else {
+        this.btnKill.FlatStyle = FlatStyle.System;
+        SendMessage(btnKill.Handle, BCM_SETSHIELD, 0, (IntPtr)1);
+      }
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+    }
+    #endregion
+
+    protected override void Content_SlaveDisplayStateChanged(object sender, EventArgs<SlaveDisplayStat> e) {
+      base.Content_SlaveDisplayStateChanged(sender, e);
+
+      if (e.Value == SlaveDisplayStat.Asleep || e.Value == SlaveDisplayStat.NoService) {
+        btnKill.Enabled = false;
+      }
+
+      if (e.Value == SlaveDisplayStat.Busy || e.Value == SlaveDisplayStat.Idle || e.Value == SlaveDisplayStat.Offline) {
+        btnKill.Enabled = true;
+      }
+    }
+
+    protected override void Content_CoreConnectionChanged(object sender, EventArgs<CoreConnection> e) {
+      base.Content_CoreConnectionChanged(sender, e);
+      if (e.Value == CoreConnection.Offline) {
+        btnKill.Enabled = false;
+      }
+    }
+
+    private bool CheckRunAsAdmin() {
+      bool isRunAsAdmin = false;
+      WindowsIdentity user = WindowsIdentity.GetCurrent();
+      WindowsPrincipal principal = new WindowsPrincipal(user);
+
+      try {
+        isRunAsAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
+      }
+      catch { }
+      return isRunAsAdmin;
+    }
+
+    /// <summary>
+    /// Shows the windows UAC dialog and restarts tray icon app
+    /// </summary>
+    private void ElevateApplication() {
+      // launch itself as administrator
+      ProcessStartInfo proc = new ProcessStartInfo(Application.ExecutablePath, Settings.Default.ShowUICmd);
+      proc.UseShellExecute = true;
+      proc.WorkingDirectory = Environment.CurrentDirectory;
+      proc.FileName = Application.ExecutablePath;
+      proc.Verb = "runas";
+
+      try {
+        Process.Start(proc);
+      }
+      catch {
+        // user refused to allow privileges elevation       
+        return;
+      }
+      Application.Exit();
+    }
+
+    private void StartService() {
+      TimeSpan timeout = TimeSpan.FromMilliseconds(5000);
+
+      ServiceController service = new ServiceController(serviceName);
+      try {
+        if (service.Status == ServiceControllerStatus.Running) {
+          service.Stop();
+          service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
+        }
+
+        service.Start();
+        service.WaitForStatus(ServiceControllerStatus.Running, timeout);
+      }
+      catch (InvalidOperationException ex) {
+        MessageBox.Show("Error starting service: Hive Slave Service not found!" + Environment.NewLine + ex.ToString());
+      }
+      catch (Exception ex) {
+        MessageBox.Show("Error starting service, exception is: " + Environment.NewLine + ex.ToString());
+      }
+    }
+
+    private void StopService() {
+      TimeSpan timeout = TimeSpan.FromMilliseconds(7000);
+
+      ServiceController service = new ServiceController(serviceName);
+      try {
+        if (service.Status == ServiceControllerStatus.Running) {
+          service.Stop();
+          service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
+        }
+      }
+      catch (InvalidOperationException ex) {
+        MessageBox.Show("Error starting service: Hive Slave Service not found!" + Environment.NewLine + ex.ToString());
+      }
+      catch (Exception ex) {
+        MessageBox.Show("Error starting service, exception is: " + Environment.NewLine + ex.ToString());
+      }
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      btnKill.Enabled = false;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    private void btnKill_Click(object sender, EventArgs e) {
+      if (CheckRunAsAdmin()) {
+        StopService();
+      } else {
+        ElevateApplication();
+      }
+    }
+
+    protected override void btnStart_Click(object sender, EventArgs e) {
+      if (Content != null) {
+        if (lastSlaveDisplayStat == SlaveDisplayStat.Asleep) {
+          Content.RestartCore();
+        } else if (lastSlaveDisplayStat == SlaveDisplayStat.NoService) {
+          if (CheckRunAsAdmin()) {
+            StartService();
+          } else {
+            ElevateApplication();
+          }
+        }
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsWithKill.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsWithKill.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveCmdsWithKill.resx	(revision 7085)
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveItem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveItem.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveItem.cs	(revision 7085)
@@ -0,0 +1,238 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ServiceModel;
+using HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts;
+using HeuristicLab.Clients.Hive.SlaveCore.Views.Properties;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+
+  public enum SlaveDisplayStat {
+    Offline,  // not connected to Hive
+    Idle,     // slave has no jobs to calculate
+    Busy,     // jobs are currently running on slave
+    Asleep,   // we are not accepting jobs at the moment
+    NoService // the slave windows service is currently not running
+  }
+
+  public enum CoreConnection {
+    Connected,
+    Offline
+  }
+
+  [CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
+  [Item("SlaveItem", "Represents a slave which receives messages from the core")]
+  public class SlaveItem : Item, ISlaveCommunicationCallbacks, IDisposable {
+    private ISlaveCommunication pipeProxy;
+    private DuplexChannelFactory<ISlaveCommunication> pipeFactory;
+    private int lastJobsFetched = 0;
+
+    public SlaveItem() {
+    }
+
+    private void RegisterEvents() {
+      pipeFactory.Faulted += new EventHandler(pipeFactory_Faulted);
+      pipeFactory.Closed += new EventHandler(pipeFactory_Closed);
+      pipeFactory.Opened += new EventHandler(pipeFactory_Opened);
+    }
+
+    private void DeregisterEvents() {
+      pipeFactory.Faulted -= new EventHandler(pipeFactory_Faulted);
+      pipeFactory.Closed -= new EventHandler(pipeFactory_Closed);
+      pipeFactory.Opened -= new EventHandler(pipeFactory_Opened);
+    }
+
+    void pipeFactory_Opened(object sender, EventArgs e) {
+      OnMessageLogged("Connection to Slave core opened");
+      OnCoreConnectionChanged(CoreConnection.Connected);
+    }
+
+    void pipeFactory_Closed(object sender, EventArgs e) {
+      OnMessageLogged("Connection to Slave core closed");
+      OnCoreConnectionChanged(CoreConnection.Offline);
+    }
+
+    void pipeFactory_Faulted(object sender, EventArgs e) {
+      OnMessageLogged("Connection to Slave core faulted");
+      OnCoreConnectionChanged(CoreConnection.Offline);
+    }
+
+    public void Open() {
+      try {
+        pipeFactory = new DuplexChannelFactory<ISlaveCommunication>(this, Settings.Default.SlaveCommunicationServiceEndpoint);
+        RegisterEvents();
+      }
+      catch (Exception ex) {
+        OnMessageLogged("Error establishing connection to Core. Are you missing a configuration file?" + Environment.NewLine + ex.ToString());
+      }
+    }
+
+    public bool ReconnectToSlaveCore() {
+      try {
+        pipeProxy = pipeFactory.CreateChannel();
+        StatusCommons st = pipeProxy.Subscribe();
+        if (st != null) {
+          OnStatusChanged(st);
+          return true;
+        } else {
+          return false;
+        }
+      }
+      catch (Exception) {
+        OnMessageLogged("Couldn't connect to Slave core. Is it possible that the core isn't running?");
+        return false;
+      }
+    }
+
+    public bool IsClosed() {
+      if (pipeFactory == null) return true;
+      return pipeFactory.State == CommunicationState.Closed || pipeFactory.State == CommunicationState.Faulted;
+    }
+
+    public void PauseAll() {
+      try {
+        if (pipeFactory.State != CommunicationState.Faulted && pipeFactory.State != CommunicationState.Closed)
+          pipeProxy.PauseAll();
+      }
+      catch (Exception e) {
+        OnMessageLogged("Error soft pausening core: " + e.ToString());
+      }
+    }
+
+    public void StopAll() {
+      try {
+        if (pipeFactory.State != CommunicationState.Faulted && pipeFactory.State != CommunicationState.Closed)
+          pipeProxy.StopAll();
+      }
+      catch (Exception e) {
+        OnMessageLogged("Error hard pausening core: " + e.ToString());
+      }
+    }
+
+    public void RestartCore() {
+      try {
+        if (pipeFactory.State != CommunicationState.Faulted && pipeFactory.State != CommunicationState.Closed)
+          pipeProxy.Restart();
+      }
+      catch (Exception e) {
+        OnMessageLogged("Error restarting core: " + e.ToString());
+      }
+    }
+
+    public void Sleep() {
+      try {
+        if (pipeFactory.State != CommunicationState.Faulted && pipeFactory.State != CommunicationState.Closed) {
+          pipeProxy.Sleep();
+        }
+      }
+      catch (Exception e) {
+        OnMessageLogged("Error sending core to sleep: " + e.ToString());
+      }
+    }
+
+    public void Close() {
+      if (pipeFactory.State != CommunicationState.Closed) {
+        pipeProxy.Unsubscribe();
+        pipeFactory.Close();
+      }
+    }
+
+    public event EventHandler<EventArgs<string>> UserVisibleMessageFired;
+    public void OnUserVisibleMessageFired(string msg) {
+      var handler = UserVisibleMessageFired;
+      if (handler != null) handler(this, new EventArgs<string>(msg));
+    }
+
+    public event EventHandler<EventArgs<SlaveDisplayStat>> SlaveDisplayStateChanged;
+    public void OnSlaveDisplayStateChanged(StatusCommons status) {
+      SlaveDisplayStat stat;
+
+      if (status.Jobs.Count > 0) {
+        stat = SlaveDisplayStat.Busy;
+      } else {
+        stat = SlaveDisplayStat.Idle;
+      }
+      if (status.Asleep) {
+        stat = SlaveDisplayStat.Asleep;
+      }
+      if (status.Status == NetworkEnum.WcfConnState.Disconnected || status.Status == NetworkEnum.WcfConnState.Failed) {
+        stat = SlaveDisplayStat.Offline;
+      }
+
+      var handler = SlaveDisplayStateChanged;
+      if (handler != null) handler(this, new EventArgs<SlaveDisplayStat>(stat));
+    }
+
+    public void OnSlaveDisplayStateChanged(SlaveDisplayStat stat) {
+      var handler = SlaveDisplayStateChanged;
+      if (handler != null) handler(this, new EventArgs<SlaveDisplayStat>(stat));
+    }
+
+    public event EventHandler<EventArgs<StatusCommons>> SlaveStatusChanged;
+    public void OnStatusChanged(StatusCommons status) {
+      var handler = SlaveStatusChanged;
+      if (handler != null) handler(this, new EventArgs<StatusCommons>(status));
+
+      OnSlaveDisplayStateChanged(status);
+
+      int diff = status.JobsFetched - lastJobsFetched;
+      lastJobsFetched = status.JobsFetched;
+      if (diff > 0) {
+        if (diff == 1) {
+          OnUserVisibleMessageFired("HeuristicLab Hive received 1 new task!");
+        } else {
+          OnUserVisibleMessageFired(string.Format("HeuristicLab Hive received {0} new jobs!", diff));
+        }
+      }
+    }
+
+    public event EventHandler<EventArgs<string>> SlaveMessageLogged;
+    public void OnMessageLogged(string message) {
+      var handler = SlaveMessageLogged;
+      if (handler != null) handler(this, new EventArgs<string>(message));
+    }
+
+    public event EventHandler SlaveShutdown;
+    public void OnShutdown() {
+      var handler = SlaveShutdown;
+      if (handler != null) handler(this, EventArgs.Empty);
+      OnSlaveDisplayStateChanged(SlaveDisplayStat.NoService);
+    }
+
+    public event EventHandler<EventArgs<CoreConnection>> CoreConnectionChanged;
+    public void OnCoreConnectionChanged(CoreConnection conn) {
+      var handler = CoreConnectionChanged;
+      if (handler != null) handler(this, new EventArgs<CoreConnection>(conn));
+    }
+
+    public void Dispose() {
+      DeregisterEvents();
+      Close();
+    }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      throw new NotImplementedException("It's not allowed to clone a SlaveItem!");
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainView.Designer.cs	(revision 7085)
@@ -0,0 +1,96 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  partial class SlaveMainView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.slaveCmdsBase = new HeuristicLab.Clients.Hive.SlaveCore.Views.SlaveCmdsBase();
+      this.tabSlaveView.SuspendLayout();
+      this.mainTabControl.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer
+      // 
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.slaveCmdsBase);
+      // 
+      // slaveCmdsBase
+      // 
+      this.slaveCmdsBase.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.slaveCmdsBase.Caption = "HeuristicLab Slave Cmds View";
+      this.slaveCmdsBase.Content = null;
+      this.slaveCmdsBase.Location = new System.Drawing.Point(3, 3);
+      this.slaveCmdsBase.Name = "slaveCmdsBase";
+      this.slaveCmdsBase.ReadOnly = false;
+      this.slaveCmdsBase.Size = new System.Drawing.Size(92, 32);
+      this.slaveCmdsBase.TabIndex = 0;
+      // 
+      // SlaveMainView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "SlaveMainView";
+      this.tabSlaveView.ResumeLayout(false);
+      this.mainTabControl.ResumeLayout(false);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private SlaveCmdsBase slaveCmdsBase;
+
+
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainView.cs	(revision 7085)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+
+  [View("HeuristicLab Slave Main View")]
+  [Content(typeof(SlaveItem), IsDefaultView = false)]
+  public partial class SlaveMainView : SlaveMainViewBase {
+
+    public new SlaveItem Content {
+      get { return (SlaveItem)base.Content; }
+      set {
+        if (base.Content != value) {
+          base.Content = value;
+        }
+      }
+    }
+
+    public SlaveMainView() {
+      InitializeComponent();
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      slaveCmdsBase.Content = Content;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainView.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewBase.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewBase.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewBase.Designer.cs	(revision 7085)
@@ -0,0 +1,241 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  partial class SlaveMainViewBase {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SlaveMainViewBase));
+      this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.notifyIcon = new System.Windows.Forms.NotifyIcon(this.components);
+      this.contextMenuNotifyIcon = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.homepageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.mainTabControl = new System.Windows.Forms.TabControl();
+      this.tabSlaveView = new System.Windows.Forms.TabPage();
+      this.tabLog = new System.Windows.Forms.TabPage();
+      this.btnAbout = new System.Windows.Forms.Button();
+      this.slaveView = new HeuristicLab.Clients.Hive.SlaveCore.Views.SlaveView();
+      this.logView = new HeuristicLab.Clients.Hive.SlaveCore.Views.LogView();
+      this.contextMenuNotifyIcon.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.mainTabControl.SuspendLayout();
+      this.tabSlaveView.SuspendLayout();
+      this.tabLog.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // closeToolStripMenuItem
+      // 
+      this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
+      this.closeToolStripMenuItem.Size = new System.Drawing.Size(209, 22);
+      this.closeToolStripMenuItem.Text = "Close";
+      this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
+      // 
+      // notifyIcon
+      // 
+      this.notifyIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info;
+      this.notifyIcon.BalloonTipText = "A client for computing jobs sent from HeuristicLab Hive";
+      this.notifyIcon.BalloonTipTitle = "HeuristicLab Hive Slave";
+      this.notifyIcon.ContextMenuStrip = this.contextMenuNotifyIcon;
+      this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon")));
+      this.notifyIcon.Text = "HeuristicLab Hive Slave";
+      this.notifyIcon.Visible = true;
+      this.notifyIcon.BalloonTipClicked += new System.EventHandler(this.notifyIcon_BalloonTipClicked);
+      this.notifyIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon_Click);
+      // 
+      // contextMenuNotifyIcon
+      // 
+      this.contextMenuNotifyIcon.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.homepageToolStripMenuItem,
+            this.toolStripSeparator,
+            this.closeToolStripMenuItem});
+      this.contextMenuNotifyIcon.Name = "contextMenuNotifyIcon";
+      this.contextMenuNotifyIcon.Size = new System.Drawing.Size(210, 54);
+      // 
+      // homepageToolStripMenuItem
+      // 
+      this.homepageToolStripMenuItem.ForeColor = System.Drawing.Color.Blue;
+      this.homepageToolStripMenuItem.Name = "homepageToolStripMenuItem";
+      this.homepageToolStripMenuItem.Size = new System.Drawing.Size(209, 22);
+      this.homepageToolStripMenuItem.Text = "Visit dev.heuristiclab.com";
+      this.homepageToolStripMenuItem.Click += new System.EventHandler(this.homepageToolStripMenuItem_Click);
+      // 
+      // toolStripSeparator
+      // 
+      this.toolStripSeparator.Name = "toolStripSeparator";
+      this.toolStripSeparator.Size = new System.Drawing.Size(206, 6);
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.splitContainer.Location = new System.Drawing.Point(3, 3);
+      this.splitContainer.Name = "splitContainer";
+      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.mainTabControl);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.btnAbout);
+      this.splitContainer.Size = new System.Drawing.Size(647, 438);
+      this.splitContainer.SplitterDistance = 392;
+      this.splitContainer.TabIndex = 3;
+      // 
+      // mainTabControl
+      // 
+      this.mainTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.mainTabControl.Controls.Add(this.tabSlaveView);
+      this.mainTabControl.Controls.Add(this.tabLog);
+      this.mainTabControl.Location = new System.Drawing.Point(1, 1);
+      this.mainTabControl.Margin = new System.Windows.Forms.Padding(1);
+      this.mainTabControl.Name = "mainTabControl";
+      this.mainTabControl.SelectedIndex = 0;
+      this.mainTabControl.Size = new System.Drawing.Size(645, 390);
+      this.mainTabControl.TabIndex = 2;
+      // 
+      // tabSlaveView
+      // 
+      this.tabSlaveView.Controls.Add(this.slaveView);
+      this.tabSlaveView.Location = new System.Drawing.Point(4, 22);
+      this.tabSlaveView.Name = "tabSlaveView";
+      this.tabSlaveView.Padding = new System.Windows.Forms.Padding(3);
+      this.tabSlaveView.Size = new System.Drawing.Size(637, 364);
+      this.tabSlaveView.TabIndex = 0;
+      this.tabSlaveView.Text = "Summary";
+      this.tabSlaveView.UseVisualStyleBackColor = true;
+      // 
+      // tabLog
+      // 
+      this.tabLog.Controls.Add(this.logView);
+      this.tabLog.Location = new System.Drawing.Point(4, 22);
+      this.tabLog.Name = "tabLog";
+      this.tabLog.Padding = new System.Windows.Forms.Padding(3);
+      this.tabLog.Size = new System.Drawing.Size(637, 364);
+      this.tabLog.TabIndex = 1;
+      this.tabLog.Text = "Log";
+      this.tabLog.UseVisualStyleBackColor = true;
+      // 
+      // btnAbout
+      // 
+      this.btnAbout.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.btnAbout.Image = ((System.Drawing.Image)(resources.GetObject("btnAbout.Image")));
+      this.btnAbout.Location = new System.Drawing.Point(618, 15);
+      this.btnAbout.Name = "btnAbout";
+      this.btnAbout.Size = new System.Drawing.Size(24, 24);
+      this.btnAbout.TabIndex = 0;
+      this.btnAbout.UseVisualStyleBackColor = true;
+      this.btnAbout.Click += new System.EventHandler(this.btnAbout_Click);
+      // 
+      // slaveView
+      // 
+      this.slaveView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.slaveView.Caption = "HeuristicLab Slave View";
+      this.slaveView.Content = null;
+      this.slaveView.Location = new System.Drawing.Point(6, 6);
+      this.slaveView.Name = "slaveView";
+      this.slaveView.ReadOnly = false;
+      this.slaveView.Size = new System.Drawing.Size(625, 352);
+      this.slaveView.TabIndex = 0;
+      // 
+      // logView
+      // 
+      this.logView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.logView.Caption = "LogView: Displays logged messages from the slave core.";
+      this.logView.Content = null;
+      this.logView.Location = new System.Drawing.Point(7, 7);
+      this.logView.Name = "logView";
+      this.logView.ReadOnly = false;
+      this.logView.Size = new System.Drawing.Size(624, 351);
+      this.logView.TabIndex = 0;
+      // 
+      // SlaveMainViewBase
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer);
+      this.Name = "SlaveMainViewBase";
+      this.Size = new System.Drawing.Size(653, 444);
+      this.contextMenuNotifyIcon.ResumeLayout(false);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.mainTabControl.ResumeLayout(false);
+      this.tabSlaveView.ResumeLayout(false);
+      this.tabLog.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TabPage tabLog;
+    private LogView logView;
+    private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem;
+    private System.Windows.Forms.NotifyIcon notifyIcon;
+    private System.Windows.Forms.ContextMenuStrip contextMenuNotifyIcon;
+    private System.Windows.Forms.ToolStripMenuItem homepageToolStripMenuItem;
+    private System.Windows.Forms.ToolStripSeparator toolStripSeparator;
+    protected System.Windows.Forms.TabPage tabSlaveView;
+    protected System.Windows.Forms.TabControl mainTabControl;
+    protected SlaveView slaveView;
+    protected System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.Button btnAbout;
+
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewBase.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewBase.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewBase.cs	(revision 7085)
@@ -0,0 +1,132 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Hive.SlaveCore.Views.Properties;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+
+  [View("HeuristicLab Slave Main View Base")]
+  [Content(typeof(SlaveItem), IsDefaultView = false)]
+  public partial class SlaveMainViewBase : ItemView {
+
+    public event EventHandler VisibilitySwitched;
+    public void OnVisibilitySwitched() {
+      var handler = VisibilitySwitched;
+      if (handler != null) handler(this, new EventArgs());
+    }
+
+    public new SlaveItem Content {
+      get { return (SlaveItem)base.Content; }
+      set {
+        if (base.Content != value) {
+          base.Content = value;
+        }
+      }
+    }
+
+    void Content_UserVisibleMessageFired(object sender, Common.EventArgs<string> e) {
+      if (Settings.Default.ShowBalloonTips) {
+        notifyIcon.ShowBalloonTip(2000, "HeuristicLab Hive", e.Value, ToolTipIcon.Info);
+      }
+    }
+
+    public SlaveMainViewBase() {
+      InitializeComponent();
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      Content.CoreConnectionChanged -= new EventHandler<Common.EventArgs<CoreConnection>>(Content_CoreConnectionChanged);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.CoreConnectionChanged += new EventHandler<Common.EventArgs<CoreConnection>>(Content_CoreConnectionChanged);
+    }
+
+    void Content_CoreConnectionChanged(object sender, Common.EventArgs<CoreConnection> e) {
+      if (e.Value == CoreConnection.Offline) {
+        Connector();
+      }
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      logView.Content = Content;
+      slaveView.Content = Content;
+      if (Content != null) {
+        Content.UserVisibleMessageFired += new System.EventHandler<Common.EventArgs<string>>(Content_UserVisibleMessageFired);
+        Task.Factory.StartNew(Connector);
+      } else {
+        Content.UserVisibleMessageFired -= new System.EventHandler<Common.EventArgs<string>>(Content_UserVisibleMessageFired);
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    private void notifyIcon_Click(object sender, MouseEventArgs e) {
+      if (e.Button == MouseButtons.Left) {
+        OnVisibilitySwitched();
+      }
+    }
+
+    private void closeToolStripMenuItem_Click(object sender, EventArgs e) {
+      Application.Exit();
+    }
+
+    private void homepageToolStripMenuItem_Click(object sender, EventArgs e) {
+      System.Diagnostics.Process.Start("http://dev.heuristiclab.com");
+    }
+
+    private void notifyIcon_BalloonTipClicked(object sender, EventArgs e) {
+      OnVisibilitySwitched();
+    }
+
+    private void Connector() {
+      ((SlaveItem)base.Content).Open();
+      bool connected = false;
+      while (!connected) {
+        connected = ((SlaveItem)base.Content).ReconnectToSlaveCore();
+
+        if (!connected) {
+          Thread.Sleep(1000);
+        }
+      }
+      this.Invoke(new Action(SetEnabledStateOfControls));
+    }
+
+    private void btnAbout_Click(object sender, EventArgs e) {
+      AboutDialog dialog = new AboutDialog();
+      dialog.ShowDialog();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewBase.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewBase.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewBase.resx	(revision 7085)
@@ -0,0 +1,1856 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="notifyIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>303, 17</value>
+  </metadata>
+  <metadata name="contextMenuNotifyIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>409, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="notifyIcon.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAAAwMAAAAQAgAKglAABmFQAAQEAAAAEA
+        IAAoQgAADjsAAICAAAABACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR/gAbk/YAAAAAABuS9gAAAAAAGpD2AAAAAAAAAAAAAAAAABuQ
+        9QAAAAAAAAAAAByS9QAAAAAAAAAAAAAAAAAakfUAAAAAABuR9QIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJD2QAAAAAAAAAAAGo/4CBuR9f8akPVCAAAAABuT9gAAAAAAG5H1/xuR9YEbkPYUG5H1/xqR
+        9v8bkfX/G5H1/xuS9P8bkfX/GpH1QwAAAAAbkfX/G5H1eQAAAAAAAAAAAAAAABuR9cgbkPSjAAAAABuR
+        9f8dkfWZG5H1QRyR9kAbkfWrG5L1TwAAAAAAAAAAHJH1zhuR9p4AAAAAAAAAAAAAAAAckvaHG5H15QAA
+        AAAbkfXkHJH2hgAAAAAAAAAAAAAAAAAAAAAbkvUAAAAAABuS9YwbkfXiGpHzJhuS9TQbkfQwG5H1fhuR
+        9f8AAAAAG5L1qhuR9cUAAAAAHJD2AAAAAAAbkfYAAAAAAAAAAAAbkfVqG5H1/xuR9f8akfX/G5H1/xuR
+        9f8bkfX/GpLzFhuQ9n0bkfX/AAAAABiQ9gAAAAAAAAAAAAAAAAAAAAAAG5H2KRuR9f8ckfYcI5D3Ax+U
+        /AUAAAAAG5H1/xyR9VEckvVBG5H1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckfX/GpH1TgAA
+        AAAAAAAAAAAAABuR9esakfWBGI7xBhyR9f8akfQwAAAAAAAAAAAAAAAAAAAAABuS9QAAAAAAG5L1+huR
+        9YAAAAAAGpH1AAAAAAAbkfalG5H0ugAAAAAbkfX/HJL1bwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9ccbkfXIAAAAAAAAAAAAAAAAG5L17BuR9f8dkvMXG5H17BqR9Z0AAAAAAAAAAAAAAAAAAAAAAAAAABuR
+        9QEAAAAAAAAAABuR9QEbkfQAAAAAAB6P9w8akfXwAAAAAAAAAAAAAAAAG5H1AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9gAAAAAAAAAAABqR9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5L1AAAAAAAckvQAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//AAD//wAA//8AALyBAAC8mwAAnJ8AAJ6fAADA3wAA3t8AAN5fAADOXwAAzk8AAP9/
+        AAD//wAA//8AAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqQ
+        9gAAAAAAAAAAABuT9wAAAAAAAAAAAAAAAAAckvYAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAAAAAAAAA
+        AAAAAAAAHZb2ABuP9QAAAAAAAAAAAAAAAAAckvUAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuQ9QIAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAckfQDGpr/AxqS+Qcckf8BAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJP2AQAAAAAAAAAAAAAAABuR9gEckfYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9v8ckvU/AAAAAAAAAAAbk/QAAAAAABuR9lkckvX/HJL1/xuR
+        9ocAAAAAAAAAAAAAAAAAAAAAAAAAAB2W9wAAAAAAHJH1/xuS9v8ckfXvAAAAAAAAAAAbkfZwG5L1/xyS
+        9v8bkvb/G5L2/xuR9v8bkvb/G5H1/xyS9v8bkvX/G5L1/ByR9f8bkvbBHJjtBgAAAAAAAAAAHpL3BxuR
+        9f8bkfb/G5H1owAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckfXIG5H2/xuS9v8AAAAAAAAAAByS
+        9SMbkfb/G5H1/huR9v8bkfb/HJH1/xuS9v8ckfb/G5L2/xyS9f8bkvX+G5H2/hyR9v8bkfb/AAAAABuS
+        9QAAAAAAHJL2/xuS9f8ckvbjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9ogckvX/HJH1/xqT
+        9hgAAAAAAAAAAByR9v8bkvX/HZH17h2S95UbkfWdHJL2nBuR9podkvaaG5L2ihyR9f8ckvb/G5L1YgAA
+        AAAbkvYAAAAAAAAAAAAbkfXSG5H1/xuR9f8AAAAAG5L2AAAAAAAAAAAAAAAAAAAAAAAAAAAAG5H2YhyR
+        9f8bkfX/HJH1XAAAAAAAAAAAHJL2+BuR9f8ckvX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5L13QAA
+        AAAAAAAAG5L1AAAAAAAAAAAAAAAAABuR948dkvX/HJL2/xyR9xMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAbk/UgHJL2/xyR9v8ckfWIAAAAAAAAAAAckfa+HJL1/xyS9v8AAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9gEAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAG5H1bhyS9f8ckvb/G5H1UgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZHyAAAAAAAckvb/G5L1/xuS9cAAAAAAAAAAABuR9Ycckvb/HJL2/x2R9SIAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckfQtG5L2/xuS9f8bkfV9AAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9egbkfb/HJL2/wAAAAAAAAAAHJL2YhuS9v8bkvX/G5H1XAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvX/HJL2/xyS
+        980bkfV6G5L1fxyS9n8bkvV/HJL1fxuR9X8bkfV6G5L20ByS9v8bkfX/AAAAAAAAAAAakvYlHJL1/xyS
+        9v8bkfaDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbkfQAAAAAAByR
+        9vkckfX/HJL1/xuR9v8ckfb/G5H1/xuS9f8bkfb/HJL2/xyR9f8ckvX/G5H1/huS9v8bkfU6AAAAAAAA
+        AAAckfb/HJH1/xuR9rQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAG5L1thuR9v8ckvb9G5H1/xuS9v8bkfb/G5L2/xuR9f8bkvX/G5L2/xuS9v8bkfX9HJH2/xuS
+        9XMAAAAAAAAAABuR9vcbkfb/G5L18AAAAAAfkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckfaFG5L1/xyR9f8ckvZdHZL3LRyS9i8ckfYvHJP2LxyR9y8ckvcvHJH2JxyR
+        9f8bkvb/HJH1lgAAAAAAAAAAHJL2txuS9f8ckfb/AAAAAACK9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9lQbkfb/HJL1/xuR9XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAG5L2/xuR9f8ckvbYAAAAAAAAAAAckvWGG5H2/xyS9f8ZkPYmAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL1EhyR9f8ckvb/G5L2kAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkfXLHJL2/xuR9f8AAAAAAAAAABuR9V4ckfX/HJL2/xyR9WkAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+R+gAAAAAAG5H1/x2S9v8bkfXLAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9pEckvb/G5L2/xyQ8QgAAAAAHZL1HRyS9v8dkvb/G5L1iAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5P0AAAAAAAckvblG5L1/xyS
+        9v8AAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAG5H1cxuS9v8ckfX/G5H2SQAAAAAAAAAAHJH1/xuS
+        9f8ckvbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS
+        9qMckvb/G5H1/wAAAAAAAAAAAAAAAAAAAAAAAAAAHJL1AAAAAAAbkfckHJL2/xuS9f8bkvV2AAAAAAAA
+        AAAbkvXyHJL2/xyS9f4AAAAAG5H3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJH2eByS9f8bkfb/G5L0MAAAAAAAAAAAAAAAAAAAAAAAAAAAG5H1ChyS9e8ckvb/G5H1/xuS
+        9vAckvWPAAAAABuS9rMckfX/G5H1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvVFHJL2/xuS9f8ckvZ0AAAAAAAAAAAAAAAAAAAAAByS9QAAAAAAHJH1QhuS
+        9v8ckfb+G5L2/x2S9SgAAAAAG5H1ghyS9v8bkvb/HJL2LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL1AAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAAAAAAAAAAAAAAAAAByR
+        9QAAAAAAHJH2oRuS9f8bkfXWAAAAABuS9QAAAAAAAAAAAAAAAAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbkvYAAAAAAByS9gAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAG5H26xuS9lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvUVAAAAABqR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2AAAAAAAbkfYAJZTtAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//////////////////////////////78fxwAPH8cABx/HAB8f5x+/H+Mf/5/jH/+f4
+        5//j+OP/4ADj/+AA4//j/GP/8/xj//H8c//x/HH/8f5x//H+cf/5/BH/+f4x///+P////3//////////
+        ////////////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpD2AByX+AAAAAAAAAAAABuT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2AByT9gAbkvcAHJL2AByS9wAAAAAAHJL3AAAAAAAAAAAAAAAAAAAA
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL1AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAbkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJH2AByS9gIAAAAAHJH1TRuS
+        9v8bkfb/G5H1TgAAAAAAAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2AByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAek/YAAAAAABuR9ocbkvXlGpL2DgAAAAAakPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvUAAAAAABuR9hEbkvUuAAAAAByR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAakfgAHJL1AQAAAAAAAAAAHZH2ABuS9QAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR9gAckvUBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP//
+        /////wAA////////AAD///////8AAP///////wAA////////AAD//////x8AAMH/w8AADwAA4f/D4AAD
+        AADh/8HgAAMAAOH/4eAADwAA4f/h4f8fAADg/+Hh//8AAPD/4eD//wAA8P/h8P//AADw//Dw//8AAPD/
+        8PD//wAA8P/w8P//AADwAADw//8AAPgAAPD//wAA+AAAeH//AAD4AAB4f/8AAPg/+Hh//wAA+D/4eH//
+        AAD8P/h4f/8AAPw/+Hg//wAA/D/8PD//AAD8P/w8P/8AAPw//Dw//wAA/B/8PD//AAD+H/w8P/8AAP4f
+        +Awf/wAA/h/4Dh//AAD+H/weH/8AAP///h///wAA////P///AAD///8///8AAP///////wAA////////
+        AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AACgA
+        AABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/YAAAAAAB2T9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvcAAAAAAAAAAAAbk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqQ9gQbk/cUAAAAAEac7AAckvYAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9wAckvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AByS
+        9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2U9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZP2AAAAAAAAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2/xyR
+        9oEAAAAAAAAAAByS9gAfkPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9ikdk/crG5P3LhyS
+        9zEck/c0HJL3LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZb3ARyS9hQckvcSHZP3Eh2R9hIbkfcTIJX0BAAAAAAck/cAAAAAAAAAAAAAAAAAHJL2ExyQ
+        9hIckvUSHZP3EhyS9hIdkvYSHJL2Eh2T9xIdkfYSHZP3EhyU9xIck/YSHZH2EhyT9xIck/cSG5D2EhyT
+        9xIckfYSG5r9AhyS9/8ckvb/HJL2+hyS9kAAAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAHZP2AAAA
+        AAAckvbSHJL2/xyS9v8ckvb/HZP2/xyS9v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvb/HJL2/xyS9v8ck/f/HZL2/xuS9ooAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9u4ck/b/HJL2/x2S9/8ck/f/HJP3/xyS9/8ckvb/HJP3/xyS9v8ckff/HJL2/xyT
+        9/8ckvb/HJL2/x2T9/8ckfb/HJL2/xyS9v8ckvb9HJL2/xyS9v0ckvb/HJL2xR+R+AcAAAAAAAAAAByS
+        9wAAAAAAAAAAAByS9gAAAAAAG5H3hh2T9v8ckvb+HJL2/hyS9v4ckvb/IZ3/AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9gAAAAAAHJL2zRyS9v8ckvb+HJL2/hyS
+        9v8ckfbAAAAAAAAAAAAAAAAAG5H1AAAAAAAckvevHJL1/xyS9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvf+HJL2/hyS9v4ck/b9HJL2/hyS9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyT
+        9v8ckvb/HJP1ggAAAAAAAAAAHZL2AAAAAAAAAAAAAAAAAB2S91Yckvb/HJL2/hyS9v4ckvb/HJL2/xyS
+        9ikAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdlPQAAAAAAByS
+        9pYckvb/HJL3/hyS9/4ckvf/HJL29AAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2fByS9v8ckvb+HJL2/hyS
+        9v8ckvf/HJL2/hyS9/4ckvf+HJL2/xyR9v8ckvb/HJL3/hyS9v8ckvf/HJP2/hyR9/8ckvb/HJL2/hyS
+        9v4ckvb/HJL3/xyS9v4ckvf+HZL2/hyS9/8ckvb/HZH1IQAAAAAAAAAAHJL2AAAAAAAakvQYHJL2/xyS
+        9v8ckvb+HJL2/xyS9v8bkvZXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvZhHJL2/xyS9v4ckvb+HJL2/hyS9v8dk/cJAAAAAAAAAAAAAAAAAAAAAB2S
+        9kwckvb/HJL2/hyS9v4ckvb/HJL2/xyS9v4ckvb+HJL2/hyS9v8ckfb/HJL2/xyS9/4ckvb/HJL2/xyT
+        9/4ckvb/HJL2/xyS9v4ckvb+HJL2/xyS9v8ckvb+HJL2/hyS9v8ckvb+HJL2RgAAAAAckvUAAAAAAAAA
+        AAAAAAAAAAAAAByS9v8dkvb+HJP2/hyS9f8ckvb/HZP2kQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        9v8dk/b+HZP2/hyS9v4dk/f/HZL3KwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJP2SxyS9v8ckvb+HJL2/hyS9v4ckvb/AAAAAAAAAAAAAAAAAAAAAAAA
+        AAAbkvaCHZL2/x2T9v4dk/b+HJL2/hyS9v8AAAAAAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvb/HJL2/xyS9/8ckvb/HZL3/RyS9/8ckvb/HJH2/xyS9v8ckvb/HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8ckvb+HJL2/xyS9v8ckvb/HJL2/xyS
+        9j0AAAAAAAAAAAAAAAAAAAAAHZP3TB2S9v8ckvb/HJL3/xyS9v8ckvf/HJL2DwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL26R2S9v8dkvb/HJL2/hyS9v4dkvb+HJH2/hyR
+        9v8ckfb/HZL2/hyR9v8ckfb/HJL2/hyR9v8ckfb/HJL2/h2S9v4dkvb/HZL2/xyS9v4ckvb+HZL2/hyR
+        9v8ckfb/HJH2/xyT9/8ckfVrAAAAAAAAAAAAAAAAAAAAABuR9R8ckvb/HZL2/x2S9v8ckvb+HJL2/xyS
+        9kUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAByS9q0ckvb/HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS9/4ckvb+HJL2/hyT9v0ckvb+HJL2/hyS9v4ckvb+HJL2/hyS
+        9v4ckvb+HJL2/hyS9v4ckvb+HJL2/hyS9v4ck/f/HJL2pwAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2/xyS
+        9v4ckvb+HJL2/hyS9v8ckvdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvZ+HJL2/xyS9/8ckvb+HJL3/hyS9/4ckvb/HJH2/xyS9v8ckvf+HJL2/xyS9/8ck/b+HJH3/xyS
+        9v8ckvb+HJL2/hyS9v8ckvf/HJL2/hyS9/4ckvf+HJL2/xyR9v8ckvb/HJL3/xyS9tIAAAAAHJL2AAAA
+        AAAAAAAAAAAAAByS9uYckvb/HJL3/xyS9v4ck/b/HJL1qAAAAAAdkvYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAG5L2QByS9v8ckvb/HJL2/hyS9v4dk/b+HJL2/xyR9v8ckvb/HJP2/xyS
+        9v8ckvb/HJP2/xyS9v8ckvb/HJL2/xyS9v8ck/b/HJP2/xyS9v8ckvb/HJP3/xyS9v0ckfb/HJL2/xyS
+        9/8ckvb/AAAAAAAAAAAdk/YAHJP3AAAAAAAckvesHJL2/xyS9v8ckvb+HJL2/xyS9tMAAAAAHJL2AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9hUckvb/HJL1/xyS9v4dkvb+HJL2/x2S
+        9rYckvd1HZL3eB2T93gck/Z4HZL3eByS9ngdkvd4HJP2eB2T93gdkvd4HJL3eByT93gdkvd4HJP2dx2R
+        944dk/b/HJH1/xyS9v8ck/f+HJL2/x6V+A0AAAAAAAAAAAAAAAAAAAAAHJL2fxyS9v8ckvX/HJL2/h2S
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbk/YAAAAAAByS9tcckvb/G5L2/hyS
+        9v8bkfVEAAAAAByS9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAII34AAAA
+        AAAAAAAAHJL2/xyS9v8ckvbyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdkvcAAAAAABqR+CIckvb/G5L2agAAAAAck/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL2ABqS+AAAAAAAHJL2cCWU7gEAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YAHJL2AAAA
+        AAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////8//////////x/4H//A+AAAB/gf/8D4AAAB/B//wPwAAAD8H//g/AAAAfwP/+D8AAAD/A/
+        /4PwP/w/8D//gfA//P/4P/+B8D/9//g//8HwP///+D//wfg////4H//B+D////gf/8D4P///+B//wPgf
+        ///8H//A+B////wf/+D4H////AAAAPwf///8AAAA/B////wAAAB8H////gAAAHwP///+AAAAfA////4H
+        /+B+D////gf/8H4P///+B//wfg////4H//A+B////wf/8D4H////B//4Pgf///8H//g/B////wP/+D8H
+        ////A//4Hwf///8D//gfA////4P/+B8D////g//8HwP///+D//AHg////4H/8AeD////gf/4B4P////B
+        //wPg////////A/////////+H/////////8f/////////7//////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////8oAAAAgAAAAAABAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAIJX1AB2T9gIclvsAHYvvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOY9AAAAAAAAAAAAAAAAAAAAAAAHZL3AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuS9xgck/d9HZT4BwAAAAAAAAAAHJH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5P2ExyT9v8dkvfnHJP2VQAA
+        AAAAAAAAHZP2ARqR9gAdkvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAbkvYSHJL39R2T9v8dkvf/HZL3shyS9yQAAAAAAAAAAB2S9wAdk/YAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI3xAB2T
+        9wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZT2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR9wAdk/YAAID/AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByV9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeT9wYck/f2HZL3/x2T
+        9/8dk/b/HJL3/xyT9oEck/UKAAAAAB+R9wEbk/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9kQdk/d5HZP3bh2T93Ick/d0HJP3dx2T
+        93kckvd8HZP3fhyT94AckveLHZP4RQAAAAAckvgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZT3Cx2T90AckvZHHJP3RR2S90Udk/dFHZP3RR2S90Udk/dFHZP3RRyS
+        90cdk/Y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByn7QAck/Y0HZL3SRyS
+        9kUdkvdFHJL2RR2T9kUdk/dFHZP3RR2T90Uck/dFHZP3RR2T90Uck/dFHZL3RR2T90Udk/dFHZL3RR2T
+        90Udk/dFHZP3RRyT90Udk/dFHJP2RR2T90UdkvdFHZP3RRyT90Udk/dFHJP3RR2T90UdkvdFHJL3RR2S
+        90Uck/dFHJL2RR2S90Udk/dCHJP3UxyT9/kdk/f/HZP2/hyS9/8dk/b/HZL3/x2S990ck/ZWAAAAAAAA
+        AAAAAAAAHJL2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2jR2T9/8dk/f/HZP2/x2T9v8dkvb/HZP3/x2T9/8dk/b/HZP3/xyS9/8dk/e0AAAAAByS
+        9wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/YXHJP21h2S
+        9/8ckvb6HZP3+h2T9/ockvb6HZP3+hyT9/odk/f6HZP3/RyS9u8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9qsckvf/HJP2+h2T9/odk/f6HJL2+h2S9/odk/f6HZP3+hyT
+        9/odk/f6HJP3+hyS9/odk/f6HZP3+hyS9vodk/f6HJP3+h2T9/ockvb6HJL3+h2S9/ock/b6HZL3+h2T
+        9/ock/f6HJL2+h2T9/ockvb6HZP3+h2T9/odk/f6HZL2+hyS9/ockvb6HZP3+hyT9/odkvb7HZP3/hyT
+        9/8dk/f/HJL2/x2S9/4ck/b6HZL2/xyT9/8ck/ezHJL2IgAAAAAAAAAAHpL3ABuT9wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI3xAAAAAAAdk/dZHJP2/xyS9/8dk/b/HJP3/xyS
+        9v8dkvf/HJP2/x2T9v8dk/b/HZP3/xyS9tMAAAAAHpT3AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvbBHZP3/x2S9/8dk/f/HZP3/x2S9v8dk/f/HZP3/x2T
+        9/8dkvb/HJP3/xyT9yMAAAAAHJP3AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACue8QAAAAAAHJL3jh2T
+        9v8dk/f/HZP3/x2T9/8dkvb/HZL3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZL2/x2T
+        9/8dk/f/HZP3/xyS9v8dkvf/HZL3/x2T9/8dkvf/HZP3/x2T9/8ckvb/HZP3/xyS9v8dk/f/HZP3/x2T
+        9/8dkvb/HZL3/x2S9/8dk/f/HJP2/xyS9v8dkvf/HZP2/h2S9v8dkvb/HZL2/xyT9/8ck/f+HZL2/x2S
+        9v8ckvf/HZL3gBuT9ggAAAAAAAAAAAAAAAAckvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9y4ckvf8HZP2/x2T9/8dk/f+HJL2/x2T9/4ckvb/HJL2/xyS9v8dkvb/HJP34xyU
+        +BYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95wck/b/HJL2/x2T9/4dk/f+HJL2/x2T9/4ckvb/HJL3/xyT9v8dkvf/HZL3VAAAAAAdkvcCAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/ZlHJL3/x2T9v8ckvb/HZP3/hyS9v8dk/f+HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8ckvb/HZP3/h2T9/4ckvb/HZP3/hyS9v8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS
+        9/8dk/f+HJL3/xyS9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8ckvb/HJL3/xyS9v8dk/f+HJL2/x2T
+        9/4ckvb/HJL2/xyS9v8ckvb/HJL2/xyS9v8dk/f/HZP3/RyT9v8dk/b/HJL32xyT9lMAAAAAAAAAAAAA
+        AAAck/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxmNYAAH7/AByS9/Adk/b/HZP2/xyT
+        9v4dk/f/HZP3/h2T9v4dk/b+HZP3/hyS9v8dk/f2HZP3PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9QAAAAAAHZP3ax2T9v8dkvf/HJP3/h2T9/4dk/f/HZP3/h2T
+        9/4dk/f+HZP3/xyS9v8dk/aIAAAAAByT9gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T
+        9zsdk/f/HJL2/xyS9v4ck/b+HZP3/x2T9/4dk/b+HZP2/h2T9/4dk/f+HZP3/h2T9v4ck/f+HZP3/h2T
+        9/8dk/f+HZP3/h2T9/4dk/b/HJP3/h2T9v4ck/b+HZL3/x2T9/4dk/f+HJP2/x2T9/4dk/f/HZP3/hyT
+        9/4ck/b+HZP3/x2T9/4dk/f/HZP2/hyT9v4dk/f/HZP3/h2T9v4dk/b+HZP3/h2T9/4dk/f+HZP2/hyT
+        9/4dk/f+HZP2/hyS9v8dkvf/HZP2/x2T9rYdkvcrAAAAAAAAAAAek/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gIAAAAAHZP30RyS9v8dkvf+HZP2/x2S9/8dkvf/HZP2/x2T9v8dk/f/HZP3/x2S
+        9v8ck/ZdAAAAAB2S9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdkvZAHZL2/xyT9/8dk/f/HZP3/x2S9/8dk/f/HZP3/x2T9/8dk/f/HZP2/xyT97YAAAAAHZP2BQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2FRyS9vYdk/f/HZL2/x2T9v8dkvf/HZL3/x2T
+        9v8dk/b/HZP3/x2T9/8dk/f/HZL2/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyS9v8dkvf/HZL2/x2T
+        9v8dkvf/HZP3/x2T9/8ckvb/HZP3/xyS9/8dk/f/HZP3/x2T9v8dkvf/HZL3/x2S9/8dk/b/HZP2/x2S
+        9/8dkvf/HZP2/x2T9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9/8dkvf/HZP3/x2T9v4ckvf/HZP3/xyS
+        9vwdk/eEH5L2EAAAAAAWmP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3AQAAAAAdkvefHJP2/x2S
+        9/0ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvb/HJP2/x2S938AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9xIck/f8HZL2/xyT9/8dk/f+HJL3/x2T
+        9/4ckvf/HJL3/xyT9/4dkvb/HJP30gqT+AAgkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR
+        9QEAAAAAHZP36RyS9v8ckvb+HJP3/hyS9/8dk/f+HJL2/xyT9v8ckvf/HJL3/xyT9/8ckvb/HJP3/h2T
+        9/4ckvf/HZP3/hyS9/8ckvf/HJL2/xyS9/8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS9v8ckvf/HJL3/xyS
+        9/8ck/f+HJP3/hyS9/8ckvf/HJL3/xyS9v8ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvf/HJP3/xyS
+        9v8ck/f+HZP3/hyS9/8dk/f+HZL3/x2T9/8ckvf7HJP3/x2T9v8dkvaOAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAck/YAAAAAAByT9modkvf/HJP2/ByT9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyT
+        9v4dkvf/HJP2pgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAelPUBAAAAAByS9+Mdk/b/HJL3/h2T9/8dk/f/HZP3/x2T9/8dk/f/HZP3/h2S9/8ck/bpHJL2JgAA
+        AAAAqv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP3AgAAAAAdkva+HJP3/x2T9v0ck/f/HZP3/x2S
+        9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2S9/8ck/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL3/x2S
+        9/8ck/f/HZL3/x2T9/8dk/f/HJP3/x2T9/8dk/f/HZP3/xyT9/8ck/f/HZP3/x2S9/8dk/f/HZP3/xyT
+        9/8dk/f/HZL3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL3/xyT9/8dk/f/HZP3/x2T9v4dk/f+HZL2/xyT
+        9/8dk/fkHJL2VQAAAAAolP8AHZH2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9gAAAAAAHJL2Ox2T
+        9/8ckvb6HZP3/hyS9v8dk/f+HJL2/xyT9v8ckvb/HJL2/x2T9v8ckvfJHJL3CwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP2sxyS9/8dk/f9HZP3/hyS
+        9v8dk/f+HJL2/xyS9/8ckvb/HJP3/x2S9v8dk/dIAAAAAByR9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvYBAAAAAB2T95Mckvb/HZL3/B2T9/4ckvb/HZP3/hyS9v8ck/b/HJL2/xyS9v8ck/b/HJL2/x2T
+        9/4dk/f+HJL2/x2T9/4ckvb/HJL3/xyS9v8ckvb/HJL2/xyS9v8ckvb/HZP3/hyS9/8ckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/4ckvb/HJL2/xyS9v8ckvb/HZP3/hyS9v8dk/f+HJL2/xyT9v8ckvb/HJL2/xyT
+        9v8ckvb/HZP3/h2T9/8ckvb+HJL3/x2T9/8ck/f/HZL2kR2S9hIAAAAAH5L4AQBVuAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvcbHJL2+x2T9/4dk/f+HZL2/x2T9/4dk/b/HZP2/x2T
+        9v8dk/b/HJP3/x2T9vEdk/ccAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2AAAAAAAdk/Z9HJL3/x2T9vsdk/f+HZL2/x2T9/4dk/b/HZP3/xyS9v8dk/f/HZL2/xyT
+        924AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHJL2Yx2T9/8ckvb7HZP3/h2S
+        9v8dk/f+HZP2/x2T9v8dk/b/HZP2/x2T9/4dkvf/HZP3/R2T9/0dk/f9HZP3/R2T9/0dk/f9HZP3/R2S
+        9/0dkvf9HJP2/R2S9/0dk/f9HZP2/RyS9/0dk/b9HZL3/R2T9/0dk/f9HZP3/R2S9/0dkvf9HZP3/R2T
+        9/0dk/b9HZP2/R2S9/4dk/b/HZP2/x2T9v8dk/b/HZP2/x2S9/8ck/b/HZP3/RyS9/8dkvb/HJL2yRyS
+        9zcAAAAAAAAAAB+V9gAakfcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2U
+        9g4dk/bUHJL3/x2T9/4dk/b/HZP3/hyT9v8dkvb/HJP2/x2T9v8ckvb6HZP3/xyT9i4AAAAAGpP2AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cAAAAAAByT904dkvb/HJP3+h2T
+        9/4dk/b/HZP3/hyT9v8dk/f/HJP2/x2S9v4dk/f/HJL2lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZT3AAAAAAAdk/c4HJL3/x2T9vodk/f+HZP2/x2T9/4ck/b/HZL2/xyT9v8dk/b/HZL3/x2T
+        9v0dkvf/HZL3/x2S9/8dk/f/HZP3/x2T9/8ckvb/HJL2/x2S9v8dk/b/HJL3/x2T9/8dk/f/HJP2/xyT
+        9/8ck/b/HJP2/x2T9v8dk/b/HZP2/x2S9v8ck/b/HZL2/xyT9/8dkvb/HZP3/xyT9v4dkvb/HJP2/x2T
+        9v8dk/f/HJP3/h2S9/8dkvb/HJP3+hyT928AAAAAAAAAAB+V+gAAAAAAHpH2AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT96kdkvb/HJP3/x2S9/8dk/f+HJL2/x2T
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6Q+QEAAAAAAAAAAAAAAAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvYDAAAAAByT9ngckvf/HJP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyS
+        9v8dk/f/HJL3kQAAAAAdk/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdkPgBAAAAAByT9tsckvf/HZL2/x2T9/4dk/f+HZP3/hyS9v8dk/f+HZL3/xyT9v8dkvf1HZH3HAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByR9g4dkvbeHZP3/x2S9v8dk/f+HZP3/h2T
+        9/4dk/f+HZP3/h2T9/4dk/b/HJL3+xyR9yYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAekPkAAAAAAByT
+        9wIdkvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wEAAAAAHJL3QxyS
+        9/8ckvf+HZL3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HJL3/hyT9v8dkve2AAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wQAAAAAHJL2thyT9/8ckvb+HZP3/h2T
+        9/4dk/f+HJL2/x2S9/4dkvf+HJP3/xyS9v8dkvZLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/cEAAAAAB2S9sgdk/f/HZL2/h2S9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyS9/8dk/b/HZP2TQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZP2AAAAAAAdk/YVHZP3/x2T9/4dkvf/HZP2/x2T9v8dk/f/HZP3/x2T
+        9/8dkvb/HJL2/x2T99Adk/kOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL3AgAAAAAdk/aFHZL3/x2S9v4dk/f/HZP3/x2T9/8dk/b+HZL3/x2S9v8dk/b/HJP3/x2S
+        9nQAAAAAHJT3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9gQAAAAAHJP3pR2S9v8dk/f+HZL3/x2T
+        9v8dk/b/HZP3/x2T9/8dk/f/HZP2/xyS9v8ckvdxAAAAAB2T9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAdk/bmHZP3/x2S9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2S9/8dkvb/HJP37hyS9yoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cBAAAAAByT91Ack/f/HJP3/R2T
+        9/8dk/f/HZP3/xyT9v8ckvf/HZL3/xyT9v4ckvb/HZP3nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2AwAAAAAckvZzHJL2/xyS9v4dkvf/HZP3/x2T9/8dk/f/HZP3/x2T9/8ckvb/HJP3/x2T
+        9poAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS97gckvb/HZL3/h2T9v8dk/b/HZP2/x2T
+        9v8dk/b/HZL2/x2T9/8ckvb/HZP3QQAAAAAZkfYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAByS9gAAAAAAHJL2IByS9v8ckvb9HZP3/h2T9v8dk/b/HZP2/x2S9v8dkvb/HZP2/h2S
+        9v8ck/e/HJb6AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cBAAAAAB2T90cdk/f/HZP3/h2S
+        9/4dk/b/HZP2/x2T9v8dk/b/HZP2/xyS9v4ckvb/HJL3tgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL2jByT9/8dk/f+HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL2/hyS9v8dk/dhAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvYHHZL28x2S
+        9v8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJP3/x2S9t8ckvYaAAAAADOZ/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABuS9gAAAAAAHJL2GRyS9v8ckvb+HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZP3/xyT
+        9v8dkvfOHZP3DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/dbHZL2/x2S9/8dk/b/HZP2/x2T
+        9/8dk/f/HZP3/x2S9v8ck/f+HZP2/xyS95EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvfCHJP2/x2T9/8dk/f/HZP3/xyS9v8ckvf/HZL2/xyT
+        9v8dkvf/HJP2/x2S9zMAAAAAGZP0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL27hyS
+        9v8dkvf/HZP2/x2T9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9ukdkvYlAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAij/UAAAAAAByT9z0dkvb/HZP3/xyT9v8dk/b/HJP3/x2T9/8ck/f/HJL2/x2T9/4dk/f/HZP2ugAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95gck/b/HZP3/hyT9/8dk/f/HJP2/xyS9/8dkvb/HJP2/x2T9/4ckvf/HZP2UQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAakvYAAAAAAAAAAAAck/bDHJL3/x2T9/4ck/b/HZP2/xyT9/8dk/f/HJP3/xyS
+        9v8dk/f/HJP2/x2S9zsAAAAAHZP2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACq/gAAAAAAHZL2IByS9uQdk/f/HZP2/x2T
+        9v8dk/b/HZP2/x2T9v8dkvb/HZP3/hyS9/8ckvfqF4T/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL3aByT9v8ck/b/HZP2/x2T9/8ckvb/HZL2/x2S
+        9v8dk/b/HJL3/h2S9/8ck/aFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S
+        95Qck/b/HZL3/x2T9v8dk/b/HZP2/x2T9v8dk/b/HZL2/x2T9/4ck/b/HZL3WwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdlfkGHZP3yByS9v8dk/b+HZP2/xyT9v8dk/b/HJP2/xyS9v8ck/f+HJL3/hyS
+        9/8bkvcSAAAAABqR9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL3AAAA
+        AAAck/ZHHZL3/x2T9/8ck/b/HZP2/xyS9v8ckvb/HZL2/xyT9v8ckvb/HZP2/xyS97QAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3ah2T9v8dk/f+HJP2/x2T9v8ck/b/HZP2/xyT
+        9v8ckvb/HJP3/h2S9v8ck/eDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/asHZL3/x2S
+        9v4dk/f+HZP3/h2T9/4dk/f+HZL3/hyT9/4ck/b+HJP2/xyT9j8AAAAAHJP2AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9ysdk/btHJL3/x2T9/4dk/f+HJL2/xyS
+        9/4dkvf+HJP3/h2S9/8ck/f/HZL25QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAck/ZHHZL3/x2S9/8dk/f+HZP3/h2T9/4dk/f+HZP3/h2S9/4ck/f/HZP2/xyS96sAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdk/gAAAAAAByS9oEdk/f/HZP2/x2T9v8dk/b/HZP2/x2T9v8dkvb/HJP2/x2T
+        9/4dk/f/HZL3cQAAAAAdk/cDHZP3AByT9wAdk/YAHJL3AB+V8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGpn2BxyT9s8dkvf/HZP2/x2T9/8dk/b/HJL2/x2S9v8ck/b/HZL3/xyS9v8dk/f/HpP3EgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAakvgAAAAAAB2T9iwckvfxHZL3/x2T9v8dk/b/HZP2/x2T
+        9v8dk/b/HZL2/xyT9v8ckvf/HZL22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2Vh2S
+        9/8dk/f/HZP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/h2T9/8dk/ecAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfmPkEH5v5BB+a+QQfmvkEH5r5BCCd
+        +gQdkfcIHo/zCx6P8wsej/MLHo/zCx6P8woekPQLHpL4EB6Q+A84hP8AHZP3uxyS9v8dk/f+HZP3/hyS
+        9v8dk/f+HZP3/h2T9/4ckvf/HZP2/xyS9/8ckvdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2FByT9tYdkvf/HZP3/h2T9/4dk/f+HZP3/h2T9/4dk/f+HZP3/hyT9/8ck/f/GpT3BgAA
+        AAAPmvcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YnHZP2/ByS9/8dk/f/HZP3/x2T9/8dk/f/HZP3/xyT
+        9/8dk/f/HZP3/x2T9/4dk/fxHZP3+B2T9/kckvf4HZL2+B2T9vgckvf4HJL2+R2T9vkdk/b5HZP2+R2T
+        9vkdk/b5HZP2+R2T9/odk/f6HZP3+h2T9/odk/f6HZP3+h2S9/sdkvb7HZL2+x2S9vsdkvb7HZL2+x2S
+        9vsdkvf8HZL3/B2S9/odkvf8HJP2/x2T9/8dk/f/HJL2/xyT9/8dk/f/HJP3/x2S9/8ck/f/HZL2/xyS
+        9nUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3uB2S9v8dk/f+HZP3/x2T
+        9/8dk/f/HZP3/x2T9/8ck/f/HJP3/hyT9/8ck/YtAAAAAByT9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZHvAAAA
+        AAAck/fyHZL2/x2T9v8ckvf/HZL3/xyT9/8ckvb/HJL3/x2S9/8dkvf+HZP3/xyS9/8ckvb/HZP3/xyS
+        9/8dkvb/HJL3/x2T9v8dk/f/HJL3/xyS9/8ckvf/HJL3/xyS9/8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS
+        9v8ckvb/HJP2/xyT9/8ck/f/HJP3/xyT9/8ck/f/HJP3/xyT9v8ck/b/HJP2/xyS9v8dkvf+HJL3/x2S
+        9/8ckvb/HJL3/x2S9v8ckvb/HZL3/x2S9/8ckvb/HZP3pQAAAAAbjfMAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdk/eaHZL2/x2S9v8dk/b/HJL3/x2S9/8ck/f/HJL2/xyS9/8dkvf+HZL3/x2S
+        91kAAAAAHZL3AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YBAAAAAByS980dk/b/HZP3/h2S9/8dkvf/HZP3/x2S
+        9/8dk/f+HZP3/hyS9v8dk/f+HZL3/h2S9/4ckvb/HZL3/x2S9/8dkvf/HJL3/x2T9/4dkvf/HJL2/x2S
+        9/8ckvb/HZL3/x2T9/4dk/f+HJL2/x2S9/8ckvf/HZL3/x2T9/4ckvb/HZP3/h2S9/8dk/f/HZL3/x2S
+        9/8dk/f/HZL3/x2T9/4dk/f+HJL2/x2T9/4dkvf/HZL3/xyS9v8dkvf/HZL3/x2S9/8ckvf/HZP3/hyT
+        9/8dkvbHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdm/8AAAAAAByS9nMdk/f/HJP2/x2T
+        9/8dkvf/HZL3/x2T9/8dkvf/HZP3/h2T9v4ck/b/HZL3gwAAAAAck/YDAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9wEAAAAAHZP2mByS9/8dk/f8HZL2/x2S9v8dkvb/HZL2/xyS9v8dkvb/HJL2/x2S9v8dkvb/HZL3/xyS
+        9v8ckvb/HZL2/xyS9v8ckvf/HZL2/x2S9/8ckvb/HZL2/xyS9v8dkvb/HJL2/xyS9v8ckvb/HZL2/xyS
+        9v8dkvb/HJL2/xyS9v8dkvb/HZL2/x2S9v8dkvb/HZL2/x2S9v8dkvb/HJL2/x2S9v8ckvb/HZL2/x2S
+        9v8dkvf/HJL2/xyS9v8dkvb/HJL2/xyS9/8dk/f+HZP3/xyS9t8ckvYYAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZL2Rh2S9v8ck/f/HZL2/x2S9v8dkvb/HZL2/x2S9v8ckvb/HZP3/h2S
+        9/8ck/a0AAAAAB2S9wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2AAAAAAAckvZpHZP3/xyS9vsckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/4ckvb/HZP3/hyS9v8ckvf/HJL2/xyS9v8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS
+        9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8ckvb/HJL3/xyS9v8dk/f+HJL2/x2T9/4ckvb/HJL2/xyS
+        9v8ckvb/HJL2/xyS9v8dk/f+HZP3/hyS9v8dk/f+HJL2/xyS9/8ckvb/HJL2/xyS9v8ckvb/HJL3/x2T
+        9/4dk/f/HJP29B2S9zYAAAAAHJf2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cdHJP3+x2S
+        9v8ck/b/HJL2/xyS9v8ckvb/HJL2/x2T9/4dk/b/HZL2/xyT99AAAAAAHZL2AgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAaj/UAAAAAAByS9jYdk/f/HJL2+h2T9/4dk/f+HZP3/h2T9v4ck/f+HZP3/h2T9/8dk/f+HZP3/h2T
+        9/4dk/b/HJP3/h2T9v4ck/b+HZL3/x2T9/4dk/f+HJP2/x2T9/4dk/f/HZP3/hyT9/4ck/b+HZP3/x2T
+        9/4dk/f/HZP2/hyT9v4dk/f/HZP3/h2T9v4dk/b+HZP3/h2T9/4dk/f+HZP2/hyT9/4dk/f+HZP3/x2T
+        9/4dk/f+HZP3/h2T9v8ck/f+HZP2/hyT9v4dkvf/HZP3/hyT9/8ckvf/HZP2WAAAAAAbjPcAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAH5H1AQAAAAAck/fsHZL2/x2T9v4dk/f+HZP3/h2T9/4dk/b+HJP3/h2T
+        9/8ck/b/HZL35B2S9xsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3HhyS9vgdk/f/HZP3/x2T
+        9/8dk/f/HZL2/x2T9/8dk/f/HZL3/x2T9/8dk/f/HZP3/xyS9v8dkvf/HZL2/x2T9v8dkvf/HZP3/x2T
+        9/8ckvb/HZP3/xyS9/8dk/f/HZP3/x2T9v8dkvf/HZL3/x2S9/8dk/b/HZP2/x2S9/8dkvf/HZP2/x2T
+        9v8dk/f/HZP3/x2T9/8dkvb/HZP3/x2T9/8dkvf/HZP3/x2T9/8dk/f/HJL2/x2S9/8dkvb/HZP2/x2S
+        9/8dk/f/HJL3/h2S9/8ck/Z6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/cBAAAAAB2S
+        9sQck/f/HZP2/R2T9/8dk/f/HZP3/x2S9v8dk/f/HZP3/x2T9/8ck/b1HZL2OgAAAAAVlf8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGo/2AAAAAAAdkvYPHZP30RyS9v8ckvf/HJL3/xyT9/8ckvb/HJP3/h2T9/4ckvf/HZP3/hyS
+        9/8ckvf/HJL2/xyS9/8ckvb/HJL2/xyS9/8dk/f+HJL3/xyS9v8ckvf/HJL3/xyS9/8ck/f+HJP3/hyS
+        9/8ckvf/HJL3/xyS9v8ck/f+HJL3/x2T9/4ckvb/HJP2/xyS9/8ckvf/HJP3/xyS9v8ck/f+HZP3/hyS
+        9/8dk/f+HJL3/xyS9/8ckvb/HJL3/xyS9v8ckvb/HJL3/x2T9/4dk/f/HZP2/xyS96IAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9gAAAAAAHJL3lR2T9v8ckvb8HJL3/xyS9/8ck/f/HJL2/xyT
+        9/4dk/f+HJP2/x2S9v8ck/dZAAAAAB+S9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckveoHZP2/xyT
+        9/4dk/f/HZP3/x2S9/8ck/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HJL3/x2S9/8ck/f/HZL3/x2T
+        9/8dk/f/HJP3/x2T9/8dk/f/HZP3/xyT9/8ck/f/HZP3/x2S9/8dk/f/HZP3/xyT9/8dk/f/HZL3/x2T
+        9/8dk/f/HZP3/x2T9/8dk/f/HZL3/xyT9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8ckvf/HZL3/xyT
+        9/8dkvf/HZP3/x2T9/8ckvf/HZP2zh2S9gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3AAAA
+        AAAdk/dkHJL3/x2T9/sdk/f/HZP3/x2T9/8dkvf/HJP3/x2T9/8dk/f/HJL3/x2T9n0AAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9oQdkvf/HJP3/hyS9v8ck/b/HJL2/x2T9/4dk/f+HJL2/x2T
+        9/4dk/b+HZP3/xyS9v8ckvb/HZL2/xyT9v8ckvb/HZP3/xyT9v8ckvb/HJP2/xyS9v8ck/b/HZP3/x2T
+        9v8ckvb/HJL2/xyS9v8dk/b/HZP2/xyS9v8dkvf/HJP2/x2T9v8ck/b/HZP2/xyT9v8ckvb/HZP3/x2T
+        9/8ckvb/HZP3/xyT9/8dkvf+HJP2/hyS9v8ckvb/HJL2/xyS9v8dk/f+HJL3/xyS9v8dk/f2HJL2DQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbk/cAAAAAAByT9jgdkvf/HJP2+hyS9v8ckvb/HJP2/xyS
+        9v8dk/f+HZP3/hyS9v4ck/f/HZL2nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP3XByT
+        9/8dkvb/HZP2/x2T9v8dkvb/HZP3/h2T9/4dkvb/HZP3/h2T9/8dkvb8HZL22x2T990dkvfdHZP33R2S
+        990dk/fdHZP33RyT9t0dk/fdHZP33R2T990dk/fdHZP33R2T990dkvfdHZP23R2T990dk/fdHZP33R2S
+        990dk/fdHZP33R2T990dk/fdHZP33R2S990dk/fdHZP33R2T9t0dkvfaHZL38R2T9v8dk/f+HJL2/x2S
+        9v8ck/b/HZL3/x2T9/4dk/f/HZP3+xyS9v8dk/cpAAAAAB2U9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL2Hh2T9/gckvb/HZP2/x2T9v8dk/b/HZL2/x2T9/4dk/f+HZL2/x2S9v8ck/fGHJL3CQAA
+        AAAkkv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJf2AAAAAAAdkvY5HZL29RyT9/8dk/b/HJL2/xyS9v8dk/f+HZP3/h2T
+        9v8dk/f+HJL2/x2T9/Mck/ceHJL2FRyT9xYckvcWHJP2Fh2T9xYck/YWHZP3FhyT9hYckvYWHJL2Fh2S
+        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
+        AAAAAAAAAAAAACGT/QAAAAAAHJL2aB2T9/8dk/f/HJL2/xyT9v8ckvb/HJP2/x2T9v8ckvb/HJL2/B2S
+        9/8ck/aLAAAAAByS9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AgAAAAAdk/dwHZL3/x2T9/4ck/f/HJL2/x2T
+        9/4dk/f+HZL3/x2T9/4ck/b+HZL2/xyT96QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL2BAAAAAAdk/fLHJL2/xyT9/4dkvb/HJL2/x2S9/8dk/f+HJL3/xyS
+        9v8ckvb/HZP27hyU9h8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJHyAAAAAAAdk/dCHJL2+R2T
+        9/8dkvf/HJP3/xyS9v8dk/f+HZP3/h2S9/8dk/f+HZP2/xyS98UAAAAAHZP2AgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvYBAAAAAByS9kEckvb/HJL2/hyT9v8ckvb/HZP3/h2T9/4dkvb/HZP3/h2T9/4ck/f/HZL3vx2E
+        9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cDAAAAAByS
+        9qAdk/f/HJP2/h2S9v8ckvb/HZL3/x2T9/4ckvb/HJL2/x2T9/8dkvf6HJL2RgAAAAAkkv8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9iEdk/bpHJL3/x2S9/8ck/b/HJL2/x2T9/4dk/f+HZL2/x2T
+        9/4dk/b/HJL37QAAAAAhlvYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6V+gAAAAAAHZP4EB2T9/8ckvf+HZP2/x2S
+        9v8dk/f+HZP3/h2S9v8dk/f+HZP2/xyT9v8ckvfdHZL2GgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9wIAAAAAHZL3bhyT9v8dkvf9HZL2/x2T9v8dkvf/HZP3/h2T
+        9/8ckvb/HZP3/xyT9v8dkvdxAAAAABmV8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YBAAAAAByS
+        99Ydk/b/HZP2/x2T9v8dkvb/HZP3/h2T9/4dkvb/HZP3/x2T9/8ckvb7HJL2KQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckfYBHJL25B2T9v8dk/f/HZL2/xyT9/8dk/f/HZP3/x2T9/8dk/f/HZL3/x2T
+        9vkck/cvAAAAAB2R9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP2AQAA
+        AAAck/ZCHZL3/xyT9vwdkvb/HJP2/x2S9/8dk/f/HZP3/xyT9v8dk/f/HZL3/xyT9pUAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9gUAAAAAHJL3uh2T9v8ckvb+HZP3/x2S9v8ck/f/HZP3/x2T
+        9/8dk/f/HJL3/x2T9/8dk/ZWAAAAAB6U9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAglfkAAAAAAAAAAAAdk/a5HJL3/x2T
+        9/4dk/f+HZP3/h2T9/4dkvb/HZP3/h2T9/4ckvf/HJP3/x2S9kUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdlvkAAAAAAB2T9xkckvb/HZP3/B2T9/4dk/f+HZL3/x2T
+        9/4dk/f+HJL2/x2T9/4dkvf/HJP2tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AwAA
+        AAAdk/eNHJL3/xyT9/4dk/f+HZP3/h2T9/4dk/f+HZL2/x2T9/4ck/f/HZL3/xyT9oMAAAAAHpL4AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T94ockvb/HZP3/h2S9/4dk/f+HZP3/hyS9v8dk/f+HZP3/h2T
+        9/4ck/f/HZL2bwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL3BxyT9ugdkvf/HZL3/h2T9/4ckvb/HZP3/h2T9/4ckvb/HZP3/h2T9v8ckvfZHJL3FQAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvYCAAAAAB2S9lsdkvb/HZL2/h2T9/4dkvf+HZP3/h2T
+        9/4ckvb/HZP3/h2T9/4ckvb/HZP3qwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP3YRyS
+        9v8dk/b+HZL2/x2T9/8dk/f/HZP3/h2T9/8dk/f/HZP3/x2T9/8ckvaXAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIZn+AAAAAAAAAAAAHZL2wByT9/8dkvb/HZP2/x2T
+        9/4dk/f/HZP3/x2T9v4dk/f/HZL2/xyT9/kdkvYoAAAAAByT9wAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9gAAAAAAHJL2LhyS9v8ckvb9HZP3/x2S9v8dk/f/HZP3/x2T9/4dk/f/HZP3/xyT9v8dkvfFHpL4BwAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHZL5AAAAAAAck/Y/HJL3/x2T9v8dkvf/HJP3/x2T9/8dk/b/HZP3/x2T
+        9/8dk/f/HZL3/xyT9sQAAAAAAAAAABad8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAckvaVHZP3/x2S9/8ck/f/HZL3/x2T9/8dk/f/HJP2/x2T9/8dk/b5HJL3/x2T
+        9kQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/kHHZP3/x2T9/8dk/f/HZL3/xyT
+        9/8dk/f/HZP2/x2T9/8dk/f/HZP3/xyT9uQckvYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAglfQAAAAAAB2S
+        9yYdkvfpHJP2/x2S9v8dk/f+HZP3/h2T9v8dk/f+HZP2/x2T9v8ck/b/HZL37wAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT924dkvb/HZL2/h2T
+        9v8dkvf/HZP3/h2T9v8dk/b/HZP2/xyT9/odkvb/HJP3bwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAB2U2AAdk/bWHZP2/x2T9v8dkvb/HZP3/h2T9/4dk/b/HZP3/h2T9v8dk/f/HZL3/xyT
+        9jQAAAAAHZH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpP2CxyT9s8dkvf/HZL2/h2T9/8dk/f/HZP3/x2T
+        9/8dk/f/HZP3/xyS9v8dk/f/HZP3FQAAAAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAABaO8QAAAAAAHZP3TxyS9v8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8dk/f/HZL2/ByT
+        9/8dkvacAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSS/gAAAAAAAAAAAB2S96wckvf/HZP3/x2T
+        9/8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T9/8ck/b/HZL3TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZP2sRyS9/8dk/b+HJP3/x2T9/8dkvb/HZP3/x2T9/8dk/f/HZP3/xyS9v8ckvZDAAAAAByS
+        9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIpn/AAAAAAAckvYwHZP38B2S
+        9/8ck/b/HZL3/x2T9/8dk/f/HJL2/x2T9/8dkvb9HZP3/xyS9s8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJL2fh2T9/8dkvf+HZL2/xyT9/8dk/f/HZL2/x2T9/8dk/f/HZP3/hyT
+        9v8dkvd6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpTyAAAAAAAdkveOHJL2/xyT9/8dk/f+HZP3/h2T
+        9/8dk/f+HJP3/x2T9/8dkvf/HZP2/x2T9m0AAAAAHZP2AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9hQck/baHZL3/x2T9/4dkvf/HZP3/hyT9/8ck/b/HJP3/xyT
+        9v4ckvb/HZP39wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/dYHZL2/x2T
+        9/8ckvb/HZP3/h2T9/4dk/f/HZP3/hyT9/8dk/f/HJP2/x2S96IAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAkkv8AAAAAAB2T918dk/f/HJL2/x2T9/4dk/f+HJL2/x2T9/4dk/b/HZP3/x2T9/8ck/f/HZL2nAAA
+        AAAck/cEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        98Idk/b/HZP2/hyS9/8dk/f+HZP3/xyS9v8dk/b/HJP2/x2S9v8ck/f/HJP3JwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdkfYAAAAAAByT9zkdkvb+HZP2/x2S9v8dk/f+HZP3/hyS9v8dk/f+HZP2/x2T
+        9/8dkvb/HJP20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP3NRyT9/8dkvb/HZP3/x2T
+        9/4ckvb/HZP3/hyT9v8dk/b/HZP2/x2S9v8ck/fBAAAAAB2S9gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAABSU7gAAAAAAHZL3oxyT9v8ck/f/HJL2/x2T9/4ck/b/HJL2/xyT
+        9v8ckvb/HJP3/x2S9v8dkvZVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACq/wAAAAAAHZL2IB2S
+        9+Mck/f/HJL2/xyT9/4dk/f+HJL2/x2T9/4ck/b/HZP2/xyT9v8dkvf5IIH3AQAAAAA9APYAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAYk/YJHJP2+h2S9/8dk/f/HZP3/h2S9/8dk/f+HZP3/h2T9/4ck/b+HJP2/x2S
+        99Ygj/gHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAck/Z5HZP3/xyS9/8dkvf/HZP3/h2T9/4ckvb/HZP3/hyS9/8dk/b/HZL2/xyT94EAAAAAIJL2AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAck/YFHJP3yh2S9v8dkvf+HJP3/h2T9/4dkvf/HZP3/h2T
+        9/4dk/f+HJP2/x2S9/8dkvYgAAAAAB2S9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2AQAAAAAdk/fcHJL2/xyS
+        9v4dk/b/HZP2/x2T9v8dk/b/HZP3/x2T9v8ck/b/HZL36x2S9ykAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S90odkvf/HJP2/xyS9v4dk/b/HZP3/xyT
+        9v8dk/b/HZP2/x2T9/8ck/f/HZL2rwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAck/asHZL2/x2T9v8ck/b/HZP2/x2T9v8dk/b/HZP2/x2T9/8dkvf/HJP3/xyT91AAAAAAHJP3AgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdkvYAAAAAAByT9q0dkvf/HZP2/R2T9/4ckvf/HZP3/h2T9/4dk/f+HJL2/xyT
+        9/8dkvb+HJL2RgAAAAAelPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHJL3HxyS9/8dk/b/HJL3/x2T9/4dk/f+HJL2/x2T9/4ckvf/HZP3/hyT9/8dkvbKAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalfcAAAAAAB2S94gck/f/HZP2/x2T9/4dk/f+HJL3/x2T
+        9/4dk/f+HZP3/h2S9v8dk/b/HJL3eQAAAAAdk/YDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9wAAAAAAHZL3exyT
+        9v8dkvf7HZP3/x2S9v8dk/f/HZP3/x2T9/8ckvb/HZP3/xyS9/8dk/ZoAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAXi/8AAAAAABuR+gAelvcAHZX4AAAAAAAAAAAAHZP38xyS9v8dk/f+HZP3/x2T
+        9/8ckvb/HZP3/xyS9v8dk/f/HZL2/xyT9+QclPcgAAAAAB6W+AAdlfcAHpb4AB+X+gAAAAAAAAAAAAAA
+        AAAAAAAAHJP2WRyT9v8dkvf/HJP3/x2T9/8dkvb/HZP3/x2T9/8dk/f/HJL2/xyS9/8dk/apAAAAAByS
+        9wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAHJH4AAAAAAAckvdMHZP2/xyS9/kdkvf/HZL3/xyS9/8ckvf/HZL3/xyS
+        9v8dkvf+HJL2/x2T94kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAck/bEHZP3/x2T9/0ckvf/HJL3/xyS9v8ckvf/HJL3/xyS9/8dk/f/HJL3/B2S
+        9jgAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9wAAAAAAAAAAAAAAAAAdkvcwHZL3/xyT9v8dkvf/HZL3/x2S
+        9/8ckvf/HJL3/x2S9/8dk/b+HJL2/x2T98kAAAAAHJH2AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9isdk/f/HJL2/B2T9/4ckvb/HZP3/h2S9/8dkvf/HJL2/xyS9v8dk/b/HJL3rRuR/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAGoz+AAAAAAAckvgMHZT3Kx2U9x4dlPcfHZT3Fh2T964ckvb/HZL2/B2T
+        9/4dkvf/HJL2/x2S9/8ckvb/HZL3/x2S9v8dk/b/HJL3bx2W+AsdlPcgHZT3IB2U9yIdlPgJAAAAAAAA
+        AAAAAAAAAAAAABuT9QYck/b5HZL3/x2T9/8dk/f+HJL2/x2T9/4dkvf/HZL3/xyS9v8dk/b/HJL32xyR
+        9xEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZP2GByS9+Idk/b/HZL2/xyS9v8dkvb/HZL2/x2S
+        9/8ckvb/HJL2/x2S9/8dk/bVHZP2DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkkv8AAAAAAB2S
+        9xMckvbjHZP3/xyS9v8ckvb/HJL2/x2T9/4ckvf/HZL2/x2S9/8ckvb/HZL2/xyS9v8dkvb/HJP3/hyS
+        9/4dk/b/HJL2/xyS9v8ck/b/HJP35ByT9w4AAAAAAAAAAAAAAAAckvYBAAAAAB2T99kckvb/HZL3/h2S
+        9v8ckvb/HZL2/x2S9v8dkvf/HJL2/xyT9/8ckvbxHZL2MgAAAAAVlP4AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAckvYHHJL3wB2T9v8dk/f+HJL2/x2T9/4ckvb/HJL3/xyS9v8ckvb/HJP3/x2T9vock/cYAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YAAAAAAByS9yQdkvb1HZP3/x2T9/sdk/f+HJL2/xyS
+        9/4dk/f+HJL3/xyS9v8ckvb/HJL2/xyS9v8dk/f/HZP2/xyS9/0dk/f8HZP3/R2S9v8dkvd2AAAAAByR
+        9QAAAAAAAAAAAB2S9wAAAAAAHJP2qh2S9/8ck/b8HZP3/hyS9v8dk/f+HJL2/xyS9/8ckvb/HZP3/x2S
+        9v8ckvdPAAAAAB6T9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvaZHJP3/x2T9/4dk/f/HZP3/h2T
+        9/4dk/f+HZP2/xyT9/4dk/f7HJP2/x2T9zIAAAAAHZL4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9wAdk/cCAAAAAByS91Eck/f/HZL2/h2S9v4ck/b/HZL3/x2T9/4dk/f+HJP2/x2T9/4dk/f/HZP3/hyT
+        9/4ck/b+HZP3/xyS9v4dk/f/HZL39B2R9gcAAAAAHZT4AAAAAAAAAAAAHZL3AAAAAAAdkvd5HJP2/x2S
+        9/sdk/f+HZP3/x2T9/4dk/f+HZP3/h2T9v8ckvf/HZL2/xyT93IAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAUc/YAAAAAAB2T9ncckvf/HZL3/x2S9/8dk/f/HZP3/x2T9/8ckvb/HZL3/x2S9vwck/f/HZP2XQAA
+        AAAdk/YBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9pAck/f/HZL2/xyT
+        9v4dkvf/HZP3/x2T9/8ckvb/HZP3/xyS9/8dk/f/HZP3/x2T9v8dkvf/HJL3+x2S9v8dk/eOAAAAAByS
+        9wAAAAAAAAAAAAAAAAAbkfgAAAAAAByS90wdk/b/HJL3+R2T9/8dkvf/HZP3/x2T9/8dk/f/HJL2/x2S
+        9/4ckvf/HZP2lQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3UxyS9/8dk/f/HJL3/x2T
+        9/4ckvf/HJL3/xyS9v8ckvf/HJP3/R2T9v8ck/eJAAAAAByT9wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHpP2ABuT+AAAAAAAAAAAAByT98Ick/f/HJP3/hyS9/8dk/f+HJL3/xyS9v8ckvf/HJL3/xyS
+        9/8ck/f+HJP3/hyT9/4ck/b+HZL3/x2S9yoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL2Kx2T
+        9/8ckvb8HZP3/hyS9/8dk/f+HJL3/xyS9/8ckvb/HJL3/x2T9/8ckva5HJL2BAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdk/YrHZP2+hyS9/8dk/f/HZP3/x2T9/8dk/f/HZP2/xyS9/8dkvb/HJP3/x2S
+        9sUAAAAAHJP3AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZH1AByT9wAAAAAAHJL2FByS
+        9+wdk/b/HJL3/R2T9/4dk/f/HJP3/x2T9/8dk/f/HZP3/xyT9/8dk/f/HZP3/h2S9/8ck/ajAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/YYHZP37ByS9v8dk/f/HZP3/x2T9/8dk/f/HZP3/x2T
+        9v8ckvf/HZL2/x2T9+8dk/cTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGW+Agdk/eUHJL2rx2T
+        96gdk/eoHZP2qB2T96gck/eoHJP2qB2S96gdkvauHJP3kgAAAAAejvYCAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS9wAAAAAAHZP2RxyS9v8dk/b/HZP3/hyT9/8ckvb/HJL2/xyS
+        9v8ckvb/HZP3/h2T9/8ckvb/HZL3/xyT9kMAAAAAHZH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuR
+        9gYckveCHZP3rhyT96gdk/eoHZP3qB2T9qgdk/eoHJP3qByT9qgckvanHJP3qR2T9hIAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAdlPYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAGpr3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJL3AAAA
+        AAAAAAAAHJL3cx2S9/8ck/b/HZL3/xyS9v8dk/b/HJL2/x2T9v8dk/f+HJP3/hyS9v8dk/fCAAAAAByS
+        9wMamfIAAAAAAAAAAAAAAAAAAAAAAAAAAAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2T9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACua/gAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfivYAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAglfQAHJL2ABuS0QAAAAAAHJP3rB2S9v8ck/f9HJP2/hyT
+        9v8ck/b/HJP2/x2T9/4dkvb8HZP3/xyT9kwAAAAAHZP2AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByS
+        9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJP3AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAHZL4AAAAAAAgjfgEHJP32x2T9v8ckvb+HJP3/xyS9/8ckvf/HJP3/h2T9/8ckvbVAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZL1AAAAAAAdkvcvHJL2+xyT
+        9v8dk/b+HJP2/xyT9/4dkvb/HJP3/xyS9mwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACuA/wAAAAAAHZX2AAAAAAAdkvdhHZP2/xyT9/8ckvb+HZL3/hyT9/8dkvbmHZP3GAAA
+        AAAdkfUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAckvYAAAAAAAAA
+        AAAck/eZHZL2/xyT9/4ck/b/HJP3/x2S9owAAAAAG5T6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdkvYAAAAAABWU/AIckvfMHZP2/x2S9v8ck/f/HJP2GgAA
+        AAAekPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuU
+        +AAdkvYBAAAAAByT9xockvbuHZL3/xyS9qIAAAAAHpL3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuS9wAdk/YBAAAAAB2T904ck/f/HZP2NgAA
+        AAAZlPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2S9kYckvYOAAAAAByS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByT9wAAAAAAAAAAAAAA
+        AAAdk/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2S/wAdkvYAHJL1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP//////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////////////////P////////////////////w
+        ////////////////////8D////5///////////////Af//wAP////wAf/AAAAAAAB//+AD////8AH/wA
+        AAAAAAH//gA/////AB/+AAAAAAAA//4AP////4AP/gAAAAAAAD/+AD////+AD/4AAAAAAAAP/gA/////
+        gA/+AAAAAAAAB/8AH////4AP/gAAAAAAAB//AB////+AD/4AAAAAAAA//wAf////wA//AAAAAAAA//8A
+        H////8AH/wAAAAAAA///AB/////AB/8ACD//8Af//wAP////wAf/AB////Af//+AD////8AH/wAf///w
+        P///gA/////AB/8AD///8P///4AP////4AP/gA////P///+AD////+AD/4AP///3////gA/////gA/+A
+        D////////8AH////4AP/gA/////////AB////+AD/4AP////////wAf////gA/+AD////////8AH////
+        8AH/wAf////////AB/////AB/8AH////////wAf////wAf/AB////////+AD////8AH/wAf////////g
+        A/////AB/8AH////////4AP////4AP/AB////////+AD////+AD/4AP////////gA/////gA/+AD////
+        ////4AP////4AP/gA/////////AB////+AD/4AP////////wAAAAAAAA/+AD////////8AAAAAAAAH/g
+        A/////////AAAAAAAAB/8AH////////wAAAAAAAAf/AB////////+AAAAAAAAH/wAf////////gAAAAA
+        AAB/8AH////////4AAAAAAAAf/AB////////+AAAAAAAAD/wAf////////gAAAAAAAA/+AH////////4
+        AAAAAAAAP/gA/////////AAAAAAAAD/4AP////////wAf////gA/+AD////////8AH////8AH/gA////
+        /////AB/////AB/4AP////////wAf////wAf/AB////////+AD////8AH/wAf////////gA/////AB/8
+        AH////////4AP////4Af/AB////////+AD////+AD/wAf////////gA/////gA/8AD////////4AP///
+        /4AP/gA/////////AB////+AD/4AP////////wAf////gA/+AD////////8AH////8AP/gA/////////
+        AB/////AB/4AP////////wAf////wAf/AD////////8AH////8AH/wAf////////gA/////AB/8AH///
+        /////4AP////wAf/AB////////+AD////+AD/wAf////////gA/////gA/8AH////////4AP////4AP/
+        AB/////////AD////+AD/4AP////////wAf////gA/+AD////////8AH////4AP/gA/////////AB///
+        /gAAH4AP////////wAf///8AAD+AD////////8AH////gAA/wA/////////gB////4AAP8AH////////
+        4AP////AAH/AB////////+AD////4AB/wAf////////gA/////AA/8AH///////////////4AP//////
+        ////////////+AH///////////////////wB///////////////////+A////////////////////wP/
+        //////////////////8D////////////////////h////////////////////8f/////////////////
+        ///v////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////
+</value>
+  </data>
+  <data name="btnAbout.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        6+FjaPsAAAAASUVORK5CYII=
+</value>
+  </data>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewTray.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewTray.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewTray.Designer.cs	(revision 7085)
@@ -0,0 +1,96 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  partial class SlaveMainViewTray {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.slaveCmdsWithKill = new HeuristicLab.Clients.Hive.SlaveCore.Views.SlaveCmdsWithKill();
+      this.tabSlaveView.SuspendLayout();
+      this.mainTabControl.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer
+      // 
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.slaveCmdsWithKill);
+      // 
+      // slaveCmdsWithKill
+      // 
+      this.slaveCmdsWithKill.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.slaveCmdsWithKill.Caption = "HeuristicLab Slave Cmds with Kill View";
+      this.slaveCmdsWithKill.Content = null;
+      this.slaveCmdsWithKill.Location = new System.Drawing.Point(3, 3);
+      this.slaveCmdsWithKill.Name = "slaveCmdsWithKill";
+      this.slaveCmdsWithKill.ReadOnly = false;
+      this.slaveCmdsWithKill.Size = new System.Drawing.Size(92, 35);
+      this.slaveCmdsWithKill.TabIndex = 0;
+      // 
+      // SlaveMainViewTray
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "SlaveMainViewTray";
+      this.tabSlaveView.ResumeLayout(false);
+      this.mainTabControl.ResumeLayout(false);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private SlaveCmdsWithKill slaveCmdsWithKill;
+
+
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewTray.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewTray.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewTray.cs	(revision 7085)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+
+  [View("HeuristicLab Slave Main Tray View")]
+  [Content(typeof(SlaveItem), IsDefaultView = false)]
+  public partial class SlaveMainViewTray : SlaveMainViewBase {
+
+    public new SlaveItem Content {
+      get { return (SlaveItem)base.Content; }
+      set {
+        if (base.Content != value) {
+          base.Content = value;
+        }
+      }
+    }
+
+    public SlaveMainViewTray() {
+      InitializeComponent();
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      slaveCmdsWithKill.Content = Content;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewTray.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewTray.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveMainViewTray.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveStats.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveStats.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveStats.Designer.cs	(revision 7085)
@@ -0,0 +1,243 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  partial class SlaveStats {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.CustomLabel customLabel1 = new System.Windows.Forms.DataVisualization.Charting.CustomLabel();
+      System.Windows.Forms.DataVisualization.Charting.CustomLabel customLabel2 = new System.Windows.Forms.DataVisualization.Charting.CustomLabel();
+      System.Windows.Forms.DataVisualization.Charting.CustomLabel customLabel3 = new System.Windows.Forms.DataVisualization.Charting.CustomLabel();
+      System.Windows.Forms.DataVisualization.Charting.CustomLabel customLabel4 = new System.Windows.Forms.DataVisualization.Charting.CustomLabel();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series4 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series5 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      System.Windows.Forms.DataVisualization.Charting.Series series6 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      this.taskChart = new System.Windows.Forms.DataVisualization.Charting.Chart();
+      this.coresChart = new System.Windows.Forms.DataVisualization.Charting.Chart();
+      this.label1 = new System.Windows.Forms.Label();
+      this.txtSlaveState = new System.Windows.Forms.TextBox();
+      this.mainSplitContainer = new System.Windows.Forms.SplitContainer();
+      this.coresGroupBox = new System.Windows.Forms.GroupBox();
+      this.groupBoxTaskChart = new System.Windows.Forms.GroupBox();
+      ((System.ComponentModel.ISupportInitialize)(this.taskChart)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.coresChart)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.mainSplitContainer)).BeginInit();
+      this.mainSplitContainer.Panel1.SuspendLayout();
+      this.mainSplitContainer.Panel2.SuspendLayout();
+      this.mainSplitContainer.SuspendLayout();
+      this.coresGroupBox.SuspendLayout();
+      this.groupBoxTaskChart.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // taskChart
+      // 
+      this.taskChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      customLabel1.Text = "Jobs";
+      customLabel2.Text = "Aborted Jobs";
+      customLabel3.Text = "Finished Jobs";
+      customLabel4.Text = "Fetched Jobs";
+      chartArea1.AxisX.CustomLabels.Add(customLabel1);
+      chartArea1.AxisX.CustomLabels.Add(customLabel2);
+      chartArea1.AxisX.CustomLabels.Add(customLabel3);
+      chartArea1.AxisX.CustomLabels.Add(customLabel4);
+      chartArea1.AxisX.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.True;
+      chartArea1.AxisX.MajorGrid.Enabled = false;
+      chartArea1.AxisX.MajorTickMark.Enabled = false;
+      chartArea1.AxisY.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.True;
+      chartArea1.AxisY.Title = "Number of...";
+      chartArea1.InnerPlotPosition.Auto = false;
+      chartArea1.InnerPlotPosition.Height = 97F;
+      chartArea1.InnerPlotPosition.Width = 97F;
+      chartArea1.InnerPlotPosition.X = 3F;
+      chartArea1.InnerPlotPosition.Y = 3F;
+      chartArea1.Name = "ChartArea1";
+      this.taskChart.ChartAreas.Add(chartArea1);
+      legend1.Name = "Legend1";
+      this.taskChart.Legends.Add(legend1);
+      this.taskChart.Location = new System.Drawing.Point(6, 19);
+      this.taskChart.Name = "taskChart";
+      series1.ChartArea = "ChartArea1";
+      series1.Legend = "Legend1";
+      series1.Name = "Series1";
+      series2.ChartArea = "ChartArea1";
+      series2.Legend = "Legend1";
+      series2.Name = "Series2";
+      series3.ChartArea = "ChartArea1";
+      series3.Legend = "Legend1";
+      series3.Name = "Series3";
+      series4.ChartArea = "ChartArea1";
+      series4.Legend = "Legend1";
+      series4.Name = "Series4";
+      series5.ChartArea = "ChartArea1";
+      series5.Legend = "Legend1";
+      series5.Name = "Series5";
+      this.taskChart.Series.Add(series1);
+      this.taskChart.Series.Add(series2);
+      this.taskChart.Series.Add(series3);
+      this.taskChart.Series.Add(series4);
+      this.taskChart.Series.Add(series5);
+      this.taskChart.Size = new System.Drawing.Size(406, 178);
+      this.taskChart.TabIndex = 7;
+      // 
+      // coresChart
+      // 
+      this.coresChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      chartArea2.Name = "ChartArea1";
+      this.coresChart.ChartAreas.Add(chartArea2);
+      legend2.Name = "Legend1";
+      this.coresChart.Legends.Add(legend2);
+      this.coresChart.Location = new System.Drawing.Point(6, 19);
+      this.coresChart.Name = "coresChart";
+      series6.ChartArea = "ChartArea1";
+      series6.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Pie;
+      series6.Legend = "Legend1";
+      series6.Name = "Series1";
+      this.coresChart.Series.Add(series6);
+      this.coresChart.Size = new System.Drawing.Size(187, 72);
+      this.coresChart.TabIndex = 9;
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(5, 6);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(65, 13);
+      this.label1.TabIndex = 14;
+      this.label1.Text = "Slave State:";
+      // 
+      // txtSlaveState
+      // 
+      this.txtSlaveState.Enabled = false;
+      this.txtSlaveState.Location = new System.Drawing.Point(76, 3);
+      this.txtSlaveState.Name = "txtSlaveState";
+      this.txtSlaveState.Size = new System.Drawing.Size(100, 20);
+      this.txtSlaveState.TabIndex = 15;
+      // 
+      // mainSplitContainer
+      // 
+      this.mainSplitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.mainSplitContainer.Location = new System.Drawing.Point(3, 3);
+      this.mainSplitContainer.Name = "mainSplitContainer";
+      this.mainSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // mainSplitContainer.Panel1
+      // 
+      this.mainSplitContainer.Panel1.Controls.Add(this.coresGroupBox);
+      this.mainSplitContainer.Panel1.Controls.Add(this.txtSlaveState);
+      this.mainSplitContainer.Panel1.Controls.Add(this.label1);
+      // 
+      // mainSplitContainer.Panel2
+      // 
+      this.mainSplitContainer.Panel2.Controls.Add(this.groupBoxTaskChart);
+      this.mainSplitContainer.Size = new System.Drawing.Size(424, 319);
+      this.mainSplitContainer.SplitterDistance = 106;
+      this.mainSplitContainer.TabIndex = 16;
+      // 
+      // coresGroupBox
+      // 
+      this.coresGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.coresGroupBox.Controls.Add(this.coresChart);
+      this.coresGroupBox.Location = new System.Drawing.Point(216, 6);
+      this.coresGroupBox.Name = "coresGroupBox";
+      this.coresGroupBox.Size = new System.Drawing.Size(199, 97);
+      this.coresGroupBox.TabIndex = 0;
+      this.coresGroupBox.TabStop = false;
+      this.coresGroupBox.Text = "Cores";
+      // 
+      // groupBoxTaskChart
+      // 
+      this.groupBoxTaskChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.groupBoxTaskChart.Controls.Add(this.taskChart);
+      this.groupBoxTaskChart.Location = new System.Drawing.Point(3, 3);
+      this.groupBoxTaskChart.Name = "groupBoxTaskChart";
+      this.groupBoxTaskChart.Size = new System.Drawing.Size(418, 203);
+      this.groupBoxTaskChart.TabIndex = 0;
+      this.groupBoxTaskChart.TabStop = false;
+      this.groupBoxTaskChart.Text = "Tasks";
+      // 
+      // SlaveStats
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.mainSplitContainer);
+      this.Name = "SlaveStats";
+      this.Size = new System.Drawing.Size(430, 325);
+      ((System.ComponentModel.ISupportInitialize)(this.taskChart)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.coresChart)).EndInit();
+      this.mainSplitContainer.Panel1.ResumeLayout(false);
+      this.mainSplitContainer.Panel1.PerformLayout();
+      this.mainSplitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.mainSplitContainer)).EndInit();
+      this.mainSplitContainer.ResumeLayout(false);
+      this.coresGroupBox.ResumeLayout(false);
+      this.groupBoxTaskChart.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.DataVisualization.Charting.Chart taskChart;
+    private System.Windows.Forms.DataVisualization.Charting.Chart coresChart;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.TextBox txtSlaveState;
+    private System.Windows.Forms.SplitContainer mainSplitContainer;
+    private System.Windows.Forms.GroupBox groupBoxTaskChart;
+    private System.Windows.Forms.GroupBox coresGroupBox;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveStats.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveStats.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveStats.cs	(revision 7085)
@@ -0,0 +1,173 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+using HeuristicLab.Common;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+
+  [View("HeuristicLab Slave Stats View")]
+  [Content(typeof(SlaveItem), IsDefaultView = false)]
+  public partial class SlaveStats : ItemView {
+    private SlaveDisplayStat lastSlaveDisplayStat;
+
+    public new SlaveItem Content {
+      get { return (SlaveItem)base.Content; }
+      set {
+        if (base.Content != value) {
+          base.Content = value;
+        }
+      }
+    }
+
+    public SlaveStats() {
+      InitializeComponent();
+      txtSlaveState.Text = SlaveDisplayStat.NoService.ToString();
+      lastSlaveDisplayStat = SlaveDisplayStat.NoService;
+      Content_SlaveDisplayStateChanged(this, new EventArgs<SlaveDisplayStat>(lastSlaveDisplayStat));
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      Content.SlaveStatusChanged -= new System.EventHandler<EventArgs<StatusCommons>>(Content_SlaveStatusChanged);
+      Content.SlaveDisplayStateChanged -= new EventHandler<EventArgs<SlaveDisplayStat>>(Content_SlaveDisplayStateChanged);
+
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+
+      Content.SlaveStatusChanged += new System.EventHandler<EventArgs<StatusCommons>>(Content_SlaveStatusChanged);
+      Content.SlaveDisplayStateChanged += new EventHandler<EventArgs<SlaveDisplayStat>>(Content_SlaveDisplayStateChanged);
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    #region Event Handlers
+    void Content_SlaveStatusChanged(object sender, EventArgs<StatusCommons> e) {
+      if (InvokeRequired) {
+        Action<object, EventArgs<StatusCommons>> action = new Action<object, EventArgs<StatusCommons>>(Content_SlaveStatusChanged);
+        Invoke(action, sender, e);
+      } else {
+        RenderJobChart(e.Value);
+        RenderCoreChart(e.Value);
+      }
+    }
+
+    void Content_SlaveDisplayStateChanged(object sender, EventArgs<SlaveDisplayStat> e) {
+      if (InvokeRequired) {
+        Action<object, EventArgs<SlaveDisplayStat>> action = new Action<object, EventArgs<SlaveDisplayStat>>(Content_SlaveDisplayStateChanged);
+        Invoke(action, sender, e);
+      } else {
+        txtSlaveState.Text = e.Value.ToString();
+        lastSlaveDisplayStat = e.Value;
+      }
+    }
+    #endregion
+
+    private void RenderJobChart(StatusCommons status) {
+      if (InvokeRequired) {
+        Invoke(new Action<StatusCommons>(RenderJobChart), status);
+      } else {
+        taskChart.Series[0].Points.Clear();
+        taskChart.Series[1].Points.Clear();
+        taskChart.Series[2].Points.Clear();
+        taskChart.Series[3].Points.Clear();
+        taskChart.Series[4].Points.Clear();
+
+
+        DataPoint pJobs = new DataPoint(1, status.Jobs.Count);
+        DataPoint pJobsAborted = new DataPoint(2, status.JobsAborted);
+        DataPoint pJobsDone = new DataPoint(3, status.JobsFinished);
+        DataPoint pJobsFetched = new DataPoint(4, status.JobsFetched);
+        DataPoint pJobsFailed = new DataPoint(5, status.JobsFailed);
+
+        pJobs.LegendText = "Current tasks: " + status.Jobs.Count;
+        pJobs.Color = System.Drawing.Color.Yellow;
+        pJobs.ToolTip = pJobs.LegendText;
+        taskChart.Series[0].Color = System.Drawing.Color.Yellow;
+        taskChart.Series[0].LegendText = pJobs.LegendText;
+        taskChart.Series[0].Points.Add(pJobs);
+
+        pJobsAborted.LegendText = "Aborted tasks: " + status.JobsAborted;
+        pJobsAborted.Color = System.Drawing.Color.Orange;
+        pJobsAborted.ToolTip = pJobsAborted.LegendText;
+        taskChart.Series[1].Color = System.Drawing.Color.Orange;
+        taskChart.Series[1].LegendText = pJobsAborted.LegendText;
+        taskChart.Series[1].Points.Add(pJobsAborted);
+
+        pJobsDone.LegendText = "Finished tasks: " + status.JobsFinished;
+        pJobsDone.Color = System.Drawing.Color.Green;
+        pJobsDone.ToolTip = pJobsDone.LegendText;
+        taskChart.Series[2].Color = System.Drawing.Color.Green;
+        taskChart.Series[2].LegendText = pJobsDone.LegendText;
+        taskChart.Series[2].Points.Add(pJobsDone);
+
+        pJobsFetched.LegendText = "Fetched tasks: " + status.JobsFetched;
+        pJobsFetched.ToolTip = pJobsFetched.LegendText;
+        pJobsFetched.Color = System.Drawing.Color.Blue;
+        taskChart.Series[3].Color = System.Drawing.Color.Blue;
+        taskChart.Series[3].LegendText = pJobsFetched.LegendText;
+        taskChart.Series[3].Points.Add(pJobsFetched);
+
+        pJobsFailed.LegendText = "Failed tasks: " + status.JobsFailed;
+        pJobsFailed.ToolTip = pJobsFailed.LegendText;
+        pJobsFailed.Color = System.Drawing.Color.Red;
+        taskChart.Series[4].Color = System.Drawing.Color.Red;
+        taskChart.Series[4].LegendText = pJobsFailed.LegendText;
+        taskChart.Series[4].Points.Add(pJobsFailed);
+      }
+    }
+
+    private void RenderCoreChart(StatusCommons statusCommons) {
+      if (InvokeRequired) {
+        Invoke(new Action<StatusCommons>(RenderCoreChart), statusCommons);
+      } else {
+        int usedCores = statusCommons.TotalCores - statusCommons.FreeCores;
+        DataPoint pFreeCores = new DataPoint(statusCommons.FreeCores, statusCommons.FreeCores);
+        DataPoint pUsedCores = new DataPoint(usedCores, usedCores);
+
+        coresChart.Series[0].Points.Clear();
+
+        pFreeCores.LegendText = "Free: " + statusCommons.FreeCores;
+        pFreeCores.Color = System.Drawing.Color.Green;
+        pUsedCores.LegendText = "Used: " + usedCores;
+        pUsedCores.Color = System.Drawing.Color.Red;
+
+        coresChart.Series[0].Points.Add(pFreeCores);
+        coresChart.Series[0].Points.Add(pUsedCores);
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveStats.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveStats.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveStats.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveView.Designer.cs	(revision 7085)
@@ -0,0 +1,124 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  partial class SlaveView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.slaveStats = new HeuristicLab.Clients.Hive.SlaveCore.Views.SlaveStats();
+      this.jobsView = new HeuristicLab.Clients.Hive.SlaveCore.Views.TaskView();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.splitContainer.Location = new System.Drawing.Point(3, 3);
+      this.splitContainer.Name = "splitContainer";
+      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.slaveStats);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.jobsView);
+      this.splitContainer.Size = new System.Drawing.Size(514, 314);
+      this.splitContainer.SplitterDistance = 200;
+      this.splitContainer.TabIndex = 2;
+      // 
+      // slaveStats
+      // 
+      this.slaveStats.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.slaveStats.Caption = "HeuristicLab Slave View";
+      this.slaveStats.Content = null;
+      this.slaveStats.Location = new System.Drawing.Point(3, 3);
+      this.slaveStats.Name = "slaveStats";
+      this.slaveStats.ReadOnly = false;
+      this.slaveStats.Size = new System.Drawing.Size(508, 194);
+      this.slaveStats.TabIndex = 0;
+      // 
+      // jobsView
+      // 
+      this.jobsView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.jobsView.Caption = "Jobs View";
+      this.jobsView.Content = null;
+      this.jobsView.Location = new System.Drawing.Point(3, 3);
+      this.jobsView.Name = "jobsView";
+      this.jobsView.ReadOnly = false;
+      this.jobsView.Size = new System.Drawing.Size(508, 104);
+      this.jobsView.TabIndex = 0;
+      // 
+      // SlaveView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer);
+      this.Name = "SlaveView";
+      this.Size = new System.Drawing.Size(520, 320);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private SlaveStats slaveStats;
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private TaskView jobsView;
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveView.cs	(revision 7085)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+
+  [View("HeuristicLab Slave View")]
+  [Content(typeof(SlaveItem), IsDefaultView = false)]
+  public partial class SlaveView : ItemView {
+
+    public SlaveView() {
+      InitializeComponent();
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+
+
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        slaveStats.Content = null;
+        jobsView.Content = null;
+      } else {
+        slaveStats.Content = (SlaveItem)Content;
+        jobsView.Content = (SlaveItem)Content;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/SlaveView.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/TaskView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/TaskView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/TaskView.Designer.cs	(revision 7085)
@@ -0,0 +1,94 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  partial class TaskView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.lstJobs = new System.Windows.Forms.ListView();
+      this.columnTaskId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.columnExecutionTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.SuspendLayout();
+      // 
+      // lstJobs
+      // 
+      this.lstJobs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.lstJobs.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnTaskId,
+            this.columnExecutionTime});
+      this.lstJobs.Location = new System.Drawing.Point(3, 3);
+      this.lstJobs.Name = "lstJobs";
+      this.lstJobs.Size = new System.Drawing.Size(380, 164);
+      this.lstJobs.TabIndex = 0;
+      this.lstJobs.UseCompatibleStateImageBehavior = false;
+      this.lstJobs.View = System.Windows.Forms.View.Details;
+      // 
+      // columnTaskId
+      // 
+      this.columnTaskId.Text = "Task Id";
+      this.columnTaskId.Width = 120;
+      // 
+      // columnExecutionTime
+      // 
+      this.columnExecutionTime.Text = "Execution Time";
+      this.columnExecutionTime.Width = 120;
+      // 
+      // JobsView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.lstJobs);
+      this.Name = "JobsView";
+      this.Size = new System.Drawing.Size(386, 170);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ListView lstJobs;
+    private System.Windows.Forms.ColumnHeader columnTaskId;
+    private System.Windows.Forms.ColumnHeader columnExecutionTime;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/TaskView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/TaskView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/TaskView.cs	(revision 7085)
@@ -0,0 +1,81 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
+  [View("Jobs View")]
+  [Content(typeof(SlaveItem), IsDefaultView = false)]
+  public partial class TaskView : ItemView {
+    public new SlaveItem Content {
+      get { return (SlaveItem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public TaskView() {
+      InitializeComponent();
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      Content.SlaveStatusChanged -= new EventHandler<Common.EventArgs<StatusCommons>>(Content_SlaveStatusChanged);
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.SlaveStatusChanged += new EventHandler<Common.EventArgs<StatusCommons>>(Content_SlaveStatusChanged);
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    #region Event Handlers
+    void Content_SlaveStatusChanged(object sender, Common.EventArgs<StatusCommons> e) {
+      if (InvokeRequired) {
+        Action<object, Common.EventArgs<StatusCommons>> action = new Action<object, Common.EventArgs<StatusCommons>>(Content_SlaveStatusChanged);
+        Invoke(action, sender, e);
+      } else {
+        lstJobs.Items.Clear();
+        foreach (TaskStatus job in e.Value.Jobs) {
+          ListViewItem item = new ListViewItem();
+          item.Text = job.TaskId.ToString();
+          item.SubItems.Add(job.ExecutionTime.ToString());
+          lstJobs.Items.Add(item);
+        }
+        if (e.Value.Jobs.Count == 0) {
+          lstJobs.AutoResizeColumns(ColumnHeaderAutoResizeStyle.None);
+        } else {
+          lstJobs.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/TaskView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/TaskView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/TaskView.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/app.config
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/app.config	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.Views/3.3/app.config	(revision 7085)
@@ -0,0 +1,21 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="HeuristicLab.Clients.Hive.SlaveCore.Views.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+        </sectionGroup>
+    </configSections>
+    <userSettings>
+        <HeuristicLab.Clients.Hive.SlaveCore.Views.Properties.Settings>
+            <setting name="ShowBalloonTips" serializeAs="String">
+                <value>False</value>
+            </setting>
+            <setting name="ShowUICmd" serializeAs="String">
+                <value>showui</value>
+            </setting>
+            <setting name="SlaveCommunicationServiceEndpoint" serializeAs="String">
+                <value>SlaveCommunicationServiceEndpoint</value>
+            </setting>
+        </HeuristicLab.Clients.Hive.SlaveCore.Views.Properties.Settings>
+    </userSettings>
+</configuration>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj	(revision 7085)
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{BA8001DE-E83C-4B1F-8B2E-2695C4222491}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Hive.Slave.WindowsService</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Hive.Slave.WindowsService</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <TargetFrameworkProfile />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject>HeuristicLab.Clients.Hive.SlaveCore.WindowsService.Program</StartupObject>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Clients.Hive-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Clients.Hive-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Hive-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Hive-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration.Install" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.ServiceProcess" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ProjectInstaller.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="ProjectInstaller.Designer.cs">
+      <DependentUpon>ProjectInstaller.cs</DependentUpon>
+    </Compile>
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="SlaveWindowsService.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="SlaveWindowsService.Designer.cs">
+      <DependentUpon>SlaveWindowsService.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ProjectInstaller.resx">
+      <DependentUpon>ProjectInstaller.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SlaveWindowsService.resx">
+      <DependentUpon>SlaveWindowsService.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive.Slave\3.3\HeuristicLab.Clients.Hive.Slave-3.3.csproj">
+      <Project>{989FE92B-484E-41EE-87E2-6A24AF0381D8}</Project>
+      <Name>HeuristicLab.Clients.Hive.Slave-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/Program.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/Program.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/Program.cs	(revision 7085)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.ServiceProcess;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.WindowsService {
+  static class Program {
+    /// <summary>
+    /// The main entry point for the application.
+    /// </summary>
+    static void Main() {
+      ServiceBase[] ServicesToRun;
+      ServicesToRun = new ServiceBase[]  
+			{ 
+				new SlaveWindowsService() 
+			};
+      ServiceBase.Run(ServicesToRun);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/ProjectInstaller.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/ProjectInstaller.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/ProjectInstaller.Designer.cs	(revision 7085)
@@ -0,0 +1,54 @@
+﻿namespace HeuristicLab.Clients.Hive.SlaveCore.WindowsService {
+  partial class ProjectInstaller {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
+      this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
+      // 
+      // serviceProcessInstaller1
+      // 
+      this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
+      this.serviceProcessInstaller1.Installers.AddRange(new System.Configuration.Install.Installer[] {
+            this.serviceInstaller1});
+      this.serviceProcessInstaller1.Password = null;
+      this.serviceProcessInstaller1.Username = null;
+      // 
+      // serviceInstaller1
+      // 
+      this.serviceInstaller1.ServiceName = "HeuristicLab.Clients.Hive.Slave";
+      this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
+      // 
+      // ProjectInstaller
+      // 
+      this.Installers.AddRange(new System.Configuration.Install.Installer[] {
+            this.serviceProcessInstaller1});
+
+    }
+
+    #endregion
+
+    private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
+    private System.ServiceProcess.ServiceInstaller serviceInstaller1;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/ProjectInstaller.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/ProjectInstaller.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/ProjectInstaller.cs	(revision 7085)
@@ -0,0 +1,34 @@
+﻿using System;
+using System.Collections;
+using System.ComponentModel;
+using System.ServiceProcess;
+
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.WindowsService {
+  [RunInstaller(true)]
+  public partial class ProjectInstaller : System.Configuration.Install.Installer {
+    public ProjectInstaller() {
+      InitializeComponent();
+    }
+
+    protected override void OnAfterInstall(IDictionary savedState) {
+      base.OnAfterInstall(savedState);
+
+      //try to create an event log      
+      try {
+        if (!System.Diagnostics.EventLog.SourceExists("HLHive")) {
+          System.Diagnostics.EventLog.CreateEventSource("HLHive", "HiveSlave");
+        }
+      }
+      catch { }
+
+      //try to start the service after installation
+      using (var serviceController = new ServiceController(this.serviceInstaller1.ServiceName, Environment.MachineName)) {
+        try {
+          serviceController.Start();
+        }
+        catch { }
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/ProjectInstaller.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/ProjectInstaller.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/ProjectInstaller.resx	(revision 7085)
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="serviceProcessInstaller1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 56</value>
+  </metadata>
+  <metadata name="serviceInstaller1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>196, 17</value>
+  </metadata>
+  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Clients.Hive.Slave.WindowsService")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("360abd06-33ae-41f5-a5b1-ca9e89b167f7")]
+
+// 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("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/SlaveWindowsService.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/SlaveWindowsService.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/SlaveWindowsService.Designer.cs	(revision 7085)
@@ -0,0 +1,40 @@
+﻿namespace HeuristicLab.Clients.Hive.SlaveCore.WindowsService {
+  partial class SlaveWindowsService {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.eventLog = new System.Diagnostics.EventLog();
+      ((System.ComponentModel.ISupportInitialize)(this.eventLog)).BeginInit();
+      // 
+      // SlaveWindowsService
+      // 
+      this.ServiceName = "HeuristicLab.Clients.Hive.Slave";
+      ((System.ComponentModel.ISupportInitialize)(this.eventLog)).EndInit();
+
+    }
+
+    #endregion
+
+    private System.Diagnostics.EventLog eventLog;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/SlaveWindowsService.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/SlaveWindowsService.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/SlaveWindowsService.cs	(revision 7085)
@@ -0,0 +1,70 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+using System;
+using System.ServiceProcess;
+using System.Threading;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.WindowsService {
+  public partial class SlaveWindowsService : ServiceBase {
+    private Core core;
+    private Thread coreThread;
+
+    public SlaveWindowsService() {
+      InitializeComponent();
+
+      try {
+        if (!System.Diagnostics.EventLog.SourceExists("HLHive")) {
+          System.Diagnostics.EventLog.CreateEventSource("HLHive", "HiveSlave");
+        }
+        eventLog.Source = "HLHive";
+        eventLog.Log = "HiveSlave";
+      }
+      catch (Exception) { }
+    }
+
+    protected override void OnStart(string[] args) {
+      core = new Core();
+      core.ServiceEventLog = eventLog;
+      coreThread = new Thread(core.Start);
+      coreThread.IsBackground = true; //dont keep app alive
+      coreThread.Start();
+
+      try {
+        eventLog.WriteEntry("HeuristicLab Hive Slave started!");
+      }
+      catch (Exception) { }
+    }
+
+    protected override void OnStop() {
+      try {
+        eventLog.WriteEntry("Shutting down HeuristicLab Hive Slave...");
+      }
+      catch (Exception) { }
+
+      core.Shutdown();
+
+      try {
+        eventLog.WriteEntry("HeuristicLab Hive Slave stopped!");
+      }
+      catch (Exception) { }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/SlaveWindowsService.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/SlaveWindowsService.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/SlaveWindowsService.resx	(revision 7085)
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="eventLog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/app.config
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/app.config	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/app.config	(revision 7085)
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<configuration>
+  <runtime>
+    <gcServer enabled="true" />
+  </runtime>
+
+  <system.serviceModel>
+    <bindings>
+      <wsHttpBinding>
+        <binding name="wsHttpBinding_Hive" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
+          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
+            <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+
+    <services>
+      <service name="HeuristicLab.Clients.Hive.SlaveCore.SlaveCommunicationService">
+        <endpoint address="net.pipe://localhost/HeuristicLabSlaveCom" binding="netNamedPipeBinding" contract="HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts.ISlaveCommunication"/>
+      </service>
+    </services>
+
+    <client>
+      <endpoint name="SlaveCommunicationServiceEndpoint" address="net.pipe://localhost/HeuristicLabSlaveCom" binding="netNamedPipeBinding" contract="HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts.ISlaveCommunication"/>
+      <endpoint address="http://services.heuristiclab.com/Hive-3.3/HiveService.svc"
+                binding="wsHttpBinding"
+                bindingConfiguration="wsHttpBinding_Hive"
+                contract="HeuristicLab.Clients.Hive.IHiveService"
+                name="wsHttpBinding_IHiveService">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ==" />
+        </identity>
+      </endpoint>
+    </client>
+
+  </system.serviceModel>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
+  </startup>
+</configuration>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup/HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup.vdproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup/HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup.vdproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup/HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup.vdproj	(revision 7085)
@@ -0,0 +1,1834 @@
+﻿"DeployProject"
+{
+"VSVersion" = "3:800"
+"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
+"IsWebType" = "8:FALSE"
+"ProjectName" = "8:HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup-3.3"
+"LanguageId" = "3:1033"
+"CodePage" = "3:1252"
+"UILanguageId" = "3:1033"
+"SccProjectName" = "8:"
+"SccLocalPath" = "8:"
+"SccAuxPath" = "8:"
+"SccProvider" = "8:"
+    "Hierarchy"
+    {
+        "Entry"
+        {
+        "MsmKey" = "8:_2882F9E64173FCEB82D41D4DCFFC7DFC"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_2882F9E64173FCEB82D41D4DCFFC7DFC"
+        "OwnerKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_33AF891D67D84A0CAC45740078D4D02C"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+        "OwnerKey" = "8:_DFBC0A51ED15292B95F858E150882F5D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+        "OwnerKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+        "OwnerKey" = "8:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+        "OwnerKey" = "8:_4AA0E296E0DE70CDC80D911B5FB8B828"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+        "OwnerKey" = "8:_76455BF091D471B8F265D4FE7AE1A1A0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+        "OwnerKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_46A045C9E940444CBA7E67E6E189FB05"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4AA0E296E0DE70CDC80D911B5FB8B828"
+        "OwnerKey" = "8:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4AA0E296E0DE70CDC80D911B5FB8B828"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4DC517E8EA3134EFFFA08BB31BEE1801"
+        "OwnerKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4DC517E8EA3134EFFFA08BB31BEE1801"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4DC517E8EA3134EFFFA08BB31BEE1801"
+        "OwnerKey" = "8:_4AA0E296E0DE70CDC80D911B5FB8B828"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4DC517E8EA3134EFFFA08BB31BEE1801"
+        "OwnerKey" = "8:_76455BF091D471B8F265D4FE7AE1A1A0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4DC517E8EA3134EFFFA08BB31BEE1801"
+        "OwnerKey" = "8:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_4DC517E8EA3134EFFFA08BB31BEE1801"
+        "OwnerKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_51F630C66E53455185E4E2125EB0AA02"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_76455BF091D471B8F265D4FE7AE1A1A0"
+        "OwnerKey" = "8:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_76455BF091D471B8F265D4FE7AE1A1A0"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_861B90931D4FD5677B180339802C6388"
+        "OwnerKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_861B90931D4FD5677B180339802C6388"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_861B90931D4FD5677B180339802C6388"
+        "OwnerKey" = "8:_8F37B891A59B04A3477719639CFA20B6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "OwnerKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "OwnerKey" = "8:_8F37B891A59B04A3477719639CFA20B6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "OwnerKey" = "8:_4AA0E296E0DE70CDC80D911B5FB8B828"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "OwnerKey" = "8:_76455BF091D471B8F265D4FE7AE1A1A0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "OwnerKey" = "8:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "OwnerKey" = "8:_861B90931D4FD5677B180339802C6388"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_8F37B891A59B04A3477719639CFA20B6"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_2882F9E64173FCEB82D41D4DCFFC7DFC"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_8F37B891A59B04A3477719639CFA20B6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_4AA0E296E0DE70CDC80D911B5FB8B828"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_76455BF091D471B8F265D4FE7AE1A1A0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_861B90931D4FD5677B180339802C6388"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_4DC517E8EA3134EFFFA08BB31BEE1801"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_DFBC0A51ED15292B95F858E150882F5D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_CEF3C906152F1560485721475EBC3D41"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "OwnerKey" = "8:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "OwnerKey" = "8:_8F37B891A59B04A3477719639CFA20B6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_CEF3C906152F1560485721475EBC3D41"
+        "OwnerKey" = "8:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_CEF3C906152F1560485721475EBC3D41"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+        "OwnerKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+        "OwnerKey" = "8:_8F37B891A59B04A3477719639CFA20B6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+        "OwnerKey" = "8:_4AA0E296E0DE70CDC80D911B5FB8B828"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+        "OwnerKey" = "8:_76455BF091D471B8F265D4FE7AE1A1A0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+        "OwnerKey" = "8:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+        "OwnerKey" = "8:_861B90931D4FD5677B180339802C6388"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+        "OwnerKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DFBC0A51ED15292B95F858E150882F5D"
+        "OwnerKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DFBC0A51ED15292B95F858E150882F5D"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DFBC0A51ED15292B95F858E150882F5D"
+        "OwnerKey" = "8:_4AA0E296E0DE70CDC80D911B5FB8B828"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DFBC0A51ED15292B95F858E150882F5D"
+        "OwnerKey" = "8:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_DFBC0A51ED15292B95F858E150882F5D"
+        "OwnerKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_F498B07FE00D5061A21D8D4CDD7E934D"
+        "OwnerKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_F498B07FE00D5061A21D8D4CDD7E934D"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_F498B07FE00D5061A21D8D4CDD7E934D"
+        "OwnerKey" = "8:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+        "OwnerKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_8F37B891A59B04A3477719639CFA20B6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_C99E9B4E517069A089B657AE007CF77B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_4AA0E296E0DE70CDC80D911B5FB8B828"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_76455BF091D471B8F265D4FE7AE1A1A0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_861B90931D4FD5677B180339802C6388"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_4DC517E8EA3134EFFFA08BB31BEE1801"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_DFBC0A51ED15292B95F858E150882F5D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_CEF3C906152F1560485721475EBC3D41"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_2882F9E64173FCEB82D41D4DCFFC7DFC"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_C9274A3C94283758E28C8DBC02BC8CB6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_F498B07FE00D5061A21D8D4CDD7E934D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+    }
+    "Configurations"
+    {
+        "Debug"
+        {
+        "DisplayName" = "8:Debug"
+        "IsDebugOnly" = "11:TRUE"
+        "IsReleaseOnly" = "11:FALSE"
+        "OutputFilename" = "8:Debug\\HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup.msi"
+        "PackageFilesAs" = "3:2"
+        "PackageFileSize" = "3:-2147483648"
+        "CabType" = "3:1"
+        "Compression" = "3:2"
+        "SignOutput" = "11:FALSE"
+        "CertificateFile" = "8:"
+        "PrivateKeyFile" = "8:"
+        "TimeStampServer" = "8:"
+        "InstallerBootstrapper" = "3:2"
+            "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
+            {
+            "Enabled" = "11:TRUE"
+            "PromptEnabled" = "11:TRUE"
+            "PrerequisitesLocation" = "2:1"
+            "Url" = "8:"
+            "ComponentsUrl" = "8:"
+                "Items"
+                {
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.0"
+                    {
+                    "Name" = "8:Microsoft .NET Framework 4 (x86 and x64)"
+                    "ProductCode" = "8:.NETFramework,Version=v4.0"
+                    }
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"
+                    {
+                    "Name" = "8:Windows Installer 3.1"
+                    "ProductCode" = "8:Microsoft.Windows.Installer.3.1"
+                    }
+                }
+            }
+        }
+        "Release"
+        {
+        "DisplayName" = "8:Release"
+        "IsDebugOnly" = "11:FALSE"
+        "IsReleaseOnly" = "11:TRUE"
+        "OutputFilename" = "8:Release\\HeuristicLab.Clients.Hive.Slave.WindowsServiceSetup.msi"
+        "PackageFilesAs" = "3:2"
+        "PackageFileSize" = "3:-2147483648"
+        "CabType" = "3:1"
+        "Compression" = "3:2"
+        "SignOutput" = "11:FALSE"
+        "CertificateFile" = "8:"
+        "PrivateKeyFile" = "8:"
+        "TimeStampServer" = "8:"
+        "InstallerBootstrapper" = "3:2"
+            "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
+            {
+            "Enabled" = "11:TRUE"
+            "PromptEnabled" = "11:TRUE"
+            "PrerequisitesLocation" = "2:1"
+            "Url" = "8:"
+            "ComponentsUrl" = "8:"
+                "Items"
+                {
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.0,Profile=Client"
+                    {
+                    "Name" = "8:Microsoft .NET Framework 4 Client Profile (x86 and x64)"
+                    "ProductCode" = "8:.NETFramework,Version=v4.0,Profile=Client"
+                    }
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"
+                    {
+                    "Name" = "8:Windows Installer 3.1"
+                    "ProductCode" = "8:Microsoft.Windows.Installer.3.1"
+                    }
+                }
+            }
+        }
+    }
+    "Deployable"
+    {
+        "CustomAction"
+        {
+            "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_96A6A0924F6E4EB3A650D99CE94D954B"
+            {
+            "Name" = "8:Primary output from HeuristicLab.Clients.Hive.SlaveCore.SlaveWindowsService (Active)"
+            "Condition" = "8:"
+            "Object" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+            "FileType" = "3:2"
+            "InstallAction" = "3:4"
+            "Arguments" = "8:"
+            "EntryPoint" = "8:"
+            "Sequence" = "3:1"
+            "Identifier" = "8:_ED4A5890_B3D3_495A_8591_E94FD916516C"
+            "InstallerClass" = "11:TRUE"
+            "CustomActionData" = "8:"
+            }
+            "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_BA4B4CE24A6A4AF5B9E15838A4E3A2DA"
+            {
+            "Name" = "8:Primary output from HeuristicLab.Clients.Hive.SlaveCore.SlaveWindowsService (Active)"
+            "Condition" = "8:"
+            "Object" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+            "FileType" = "3:2"
+            "InstallAction" = "3:2"
+            "Arguments" = "8:"
+            "EntryPoint" = "8:"
+            "Sequence" = "3:1"
+            "Identifier" = "8:_E24211BB_54B1_4DED_919E_8E3461DC1E23"
+            "InstallerClass" = "11:TRUE"
+            "CustomActionData" = "8:"
+            }
+            "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_C2F6EA990E7941F59D7AD9AA5FCAB55A"
+            {
+            "Name" = "8:Primary output from HeuristicLab.Clients.Hive.SlaveCore.SlaveWindowsService (Active)"
+            "Condition" = "8:"
+            "Object" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+            "FileType" = "3:2"
+            "InstallAction" = "3:1"
+            "Arguments" = "8:"
+            "EntryPoint" = "8:"
+            "Sequence" = "3:1"
+            "Identifier" = "8:_B0EDAD0D_72FA_4D32_A8D6_2238617F0689"
+            "InstallerClass" = "11:TRUE"
+            "CustomActionData" = "8:"
+            }
+            "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_E2BB909F6F6A4711B13203453A733532"
+            {
+            "Name" = "8:Primary output from HeuristicLab.Clients.Hive.SlaveCore.SlaveWindowsService (Active)"
+            "Condition" = "8:"
+            "Object" = "8:_3C881D08A42747949E7F0009E1EB3D51"
+            "FileType" = "3:2"
+            "InstallAction" = "3:3"
+            "Arguments" = "8:"
+            "EntryPoint" = "8:"
+            "Sequence" = "3:1"
+            "Identifier" = "8:_E3DEB997_4453_4218_A56F_3F0F24935E72"
+            "InstallerClass" = "11:TRUE"
+            "CustomActionData" = "8:"
+            }
+        }
+        "DefaultFeature"
+        {
+        "Name" = "8:DefaultFeature"
+        "Title" = "8:"
+        "Description" = "8:"
+        }
+        "ExternalPersistence"
+        {
+            "LaunchCondition"
+            {
+                "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_C242B52CBA0D41F0884802493941C9BB"
+                {
+                "Name" = "8:.NET Framework"
+                "Message" = "8:[VSDNETMSG]"
+                "FrameworkVersion" = "8:.NETFramework,Version=v4.0"
+                "AllowLaterVersions" = "11:FALSE"
+                "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=131000"
+                }
+            }
+        }
+        "File"
+        {
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2882F9E64173FCEB82D41D4DCFFC7DFC"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Clients.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_2882F9E64173FCEB82D41D4DCFFC7DFC"
+                    {
+                    "Name" = "8:HeuristicLab.Clients.Common-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Clients.Common-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_33AF891D67D84A0CAC45740078D4D02C"
+            {
+            "SourcePath" = "8:..\\HeuristicLab.Clients.Hive.Slave\\3.3\\ICSharpCode.SharpZipLib License.txt"
+            "TargetName" = "8:ICSharpCode.SharpZipLib License.txt"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3ABE8A53BCA1CBC486DDBB39D49162B0"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_3ABE8A53BCA1CBC486DDBB39D49162B0"
+                    {
+                    "Name" = "8:HeuristicLab.Persistence-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Persistence-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_46A045C9E940444CBA7E67E6E189FB05"
+            {
+            "SourcePath" = "8:HeuristicLab.ico"
+            "TargetName" = "8:HeuristicLab.ico"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_4AA0E296E0DE70CDC80D911B5FB8B828"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_4AA0E296E0DE70CDC80D911B5FB8B828"
+                    {
+                    "Name" = "8:HeuristicLab.Parameters-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Parameters-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_4DC517E8EA3134EFFFA08BB31BEE1801"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_4DC517E8EA3134EFFFA08BB31BEE1801"
+                    {
+                    "Name" = "8:HeuristicLab.Common.Resources-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Common.Resources-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_51F630C66E53455185E4E2125EB0AA02"
+            {
+            "SourcePath" = "8:hl_logo.jpg"
+            "TargetName" = "8:hl_logo.jpg"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_76455BF091D471B8F265D4FE7AE1A1A0"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_76455BF091D471B8F265D4FE7AE1A1A0"
+                    {
+                    "Name" = "8:HeuristicLab.Data-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Data-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_861B90931D4FD5677B180339802C6388"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Hive-3.3, Version=3.3.5.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_861B90931D4FD5677B180339802C6388"
+                    {
+                    "Name" = "8:HeuristicLab.Hive-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Hive-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_89B1DC35899CE5ADEBFBBBFC92E1AB9D"
+                    {
+                    "Name" = "8:HeuristicLab.Core-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Core-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8F37B891A59B04A3477719639CFA20B6"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Clients.Hive.SlaveCore-3.3, Version=3.3.5.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_8F37B891A59B04A3477719639CFA20B6"
+                    {
+                    "Name" = "8:HeuristicLab.Clients.Hive.SlaveCore-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Clients.Hive.SlaveCore-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C9274A3C94283758E28C8DBC02BC8CB6"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_C9274A3C94283758E28C8DBC02BC8CB6"
+                    {
+                    "Name" = "8:HeuristicLab.PluginInfrastructure-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.PluginInfrastructure-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C99E9B4E517069A089B657AE007CF77B"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Clients.Hive-3.3, Version=3.3.5.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_C99E9B4E517069A089B657AE007CF77B"
+                    {
+                    "Name" = "8:HeuristicLab.Clients.Hive-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Clients.Hive-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CEF3C906152F1560485721475EBC3D41"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Tracing-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_CEF3C906152F1560485721475EBC3D41"
+                    {
+                    "Name" = "8:HeuristicLab.Tracing-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Tracing-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_DF3FC5A25B80BDAADCBAA8D7AE98F010"
+                    {
+                    "Name" = "8:HeuristicLab.Common-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Common-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DFBC0A51ED15292B95F858E150882F5D"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_DFBC0A51ED15292B95F858E150882F5D"
+                    {
+                    "Name" = "8:HeuristicLab.Collections-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Collections-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F498B07FE00D5061A21D8D4CDD7E934D"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:ICSharpCode.SharpZipLib, Version=0.85.4.369, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_F498B07FE00D5061A21D8D4CDD7E934D"
+                    {
+                    "Name" = "8:ICSharpCode.SharpZipLib.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:ICSharpCode.SharpZipLib.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FE70E8BCFB8F95B5BA8135C4061CB63C"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_FE70E8BCFB8F95B5BA8135C4061CB63C"
+                    {
+                    "Name" = "8:HeuristicLab.Optimization-3.3.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:HeuristicLab.Optimization-3.3.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+        }
+        "FileType"
+        {
+        }
+        "Folder"
+        {
+            "{1525181F-901A-416C-8A58-119130FE478E}:_131C93AD521244A5A54F269D47B4842E"
+            {
+            "Name" = "8:#1916"
+            "AlwaysCreate" = "11:FALSE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:DesktopFolder"
+                "Folders"
+                {
+                }
+            }
+            "{3C67513D-01DD-4637-8A68-80971EB9504F}:_8564EC48868C45BDB6F26256DBC6B288"
+            {
+            "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
+            "Name" = "8:#1925"
+            "AlwaysCreate" = "11:FALSE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:TARGETDIR"
+                "Folders"
+                {
+                }
+            }
+            "{1525181F-901A-416C-8A58-119130FE478E}:_E24270ABCE744C2EBBD86A59CEAE07AF"
+            {
+            "Name" = "8:#1919"
+            "AlwaysCreate" = "11:TRUE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:ProgramMenuFolder"
+                "Folders"
+                {
+                }
+            }
+        }
+        "LaunchCondition"
+        {
+        }
+        "Locator"
+        {
+        }
+        "MsiBootstrapper"
+        {
+        "LangId" = "3:1033"
+        "RequiresElevation" = "11:FALSE"
+        }
+        "Product"
+        {
+        "Name" = "8:Microsoft Visual Studio"
+        "ProductName" = "8:HeuristicLab Hive Slave"
+        "ProductCode" = "8:{03377582-44A2-4D8A-BAB9-8A5D90539EE1}"
+        "PackageCode" = "8:{4D0F770B-893D-47E1-978E-5CDA0F0F0787}"
+        "UpgradeCode" = "8:{F27A07F7-B96C-4375-B9C2-6623E5C2B03E}"
+        "AspNetVersion" = "8:4.0.30319.0"
+        "RestartWWWService" = "11:FALSE"
+        "RemovePreviousVersions" = "11:TRUE"
+        "DetectNewerInstalledVersion" = "11:FALSE"
+        "InstallAllUsers" = "11:TRUE"
+        "ProductVersion" = "8:3.3.6"
+        "Manufacturer" = "8:HEAL"
+        "ARPHELPTELEPHONE" = "8:"
+        "ARPHELPLINK" = "8:"
+        "Title" = "8:HeuristicLab Hive Slave Installer"
+        "Subject" = "8:"
+        "ARPCONTACT" = "8:HEAL"
+        "Keywords" = "8:"
+        "ARPCOMMENTS" = "8:"
+        "ARPURLINFOABOUT" = "8:http://dev.heuristiclab.com"
+        "ARPPRODUCTICON" = "8:_46A045C9E940444CBA7E67E6E189FB05"
+        "ARPIconIndex" = "3:0"
+        "SearchPath" = "8:"
+        "UseSystemSearchPath" = "11:TRUE"
+        "TargetPlatform" = "3:0"
+        "PreBuildEvent" = "8:"
+        "PostBuildEvent" = "8:"
+        "RunPostBuildEvent" = "3:0"
+        }
+        "Registry"
+        {
+            "HKLM"
+            {
+                "Keys"
+                {
+                    "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_0FCBFD570B2146548656C25264D1A7C3"
+                    {
+                    "Name" = "8:Software"
+                    "Condition" = "8:"
+                    "AlwaysCreate" = "11:FALSE"
+                    "DeleteAtUninstall" = "11:FALSE"
+                    "Transitive" = "11:FALSE"
+                        "Keys"
+                        {
+                            "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_F9DC9E513C334102A070E227D1AFAF46"
+                            {
+                            "Name" = "8:[Manufacturer]"
+                            "Condition" = "8:"
+                            "AlwaysCreate" = "11:FALSE"
+                            "DeleteAtUninstall" = "11:FALSE"
+                            "Transitive" = "11:FALSE"
+                                "Keys"
+                                {
+                                }
+                                "Values"
+                                {
+                                }
+                            }
+                        }
+                        "Values"
+                        {
+                        }
+                    }
+                }
+            }
+            "HKCU"
+            {
+                "Keys"
+                {
+                    "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_6118B9ED4A33439586AC5D57D54F8F79"
+                    {
+                    "Name" = "8:Software"
+                    "Condition" = "8:"
+                    "AlwaysCreate" = "11:FALSE"
+                    "DeleteAtUninstall" = "11:FALSE"
+                    "Transitive" = "11:FALSE"
+                        "Keys"
+                        {
+                            "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_534BDAE8D1D6405CB98C95990D2EE8C7"
+                            {
+                            "Name" = "8:[Manufacturer]"
+                            "Condition" = "8:"
+                            "AlwaysCreate" = "11:FALSE"
+                            "DeleteAtUninstall" = "11:FALSE"
+                            "Transitive" = "11:FALSE"
+                                "Keys"
+                                {
+                                }
+                                "Values"
+                                {
+                                }
+                            }
+                        }
+                        "Values"
+                        {
+                        }
+                    }
+                }
+            }
+            "HKCR"
+            {
+                "Keys"
+                {
+                }
+            }
+            "HKU"
+            {
+                "Keys"
+                {
+                }
+            }
+            "HKPU"
+            {
+                "Keys"
+                {
+                }
+            }
+        }
+        "Sequences"
+        {
+        }
+        "Shortcut"
+        {
+        }
+        "UserInterface"
+        {
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_0A9E5C2DA57E434CA8FF447F068A689F"
+            {
+            "Name" = "8:#1900"
+            "Sequence" = "3:2"
+            "Attributes" = "3:1"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_687D0A9BBB1D48A192E48A2CD96A72FC"
+                    {
+                    "Sequence" = "3:300"
+                    "DisplayName" = "8:Confirm Installation"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_51F630C66E53455185E4E2125EB0AA02"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_99358F9F1ABB420284BA0E25E5AACF42"
+                    {
+                    "Sequence" = "3:200"
+                    "DisplayName" = "8:Installation Folder"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_51F630C66E53455185E4E2125EB0AA02"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_AC169C62E4684C46B132798DF58F530C"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Welcome"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_51F630C66E53455185E4E2125EB0AA02"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "CopyrightWarning"
+                            {
+                            "Name" = "8:CopyrightWarning"
+                            "DisplayName" = "8:#1002"
+                            "Description" = "8:#1102"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:2"
+                            "Value" = "8:This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. "
+                            "DefaultValue" = "8:#1202"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "Welcome"
+                            {
+                            "Name" = "8:Welcome"
+                            "DisplayName" = "8:#1003"
+                            "Description" = "8:#1103"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1203"
+                            "DefaultValue" = "8:#1203"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_0C756BE262FE4BE696EE35C824E7E2B3"
+            {
+            "UseDynamicProperties" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_0FA93BDF96524427B3F3DD64F1F9EBA8"
+            {
+            "Name" = "8:#1902"
+            "Sequence" = "3:2"
+            "Attributes" = "3:3"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E599102A2CC94311A0B4659F9F227773"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Finished"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_51F630C66E53455185E4E2125EB0AA02"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_11481E8B06F3406E9C405143AC6B30F3"
+            {
+            "UseDynamicProperties" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_19ED7D175FF741B88BDCB4223BF6B725"
+            {
+            "Name" = "8:#1900"
+            "Sequence" = "3:1"
+            "Attributes" = "3:1"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_A376E4FD350D4295AD2EC5CEE60BE4D1"
+                    {
+                    "Sequence" = "3:200"
+                    "DisplayName" = "8:Installation Folder"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_51F630C66E53455185E4E2125EB0AA02"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "InstallAllUsersVisible"
+                            {
+                            "Name" = "8:InstallAllUsersVisible"
+                            "DisplayName" = "8:#1059"
+                            "Description" = "8:#1159"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_DB975C8A299145FFA03AB149A49196B1"
+                    {
+                    "Sequence" = "3:300"
+                    "DisplayName" = "8:Confirm Installation"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_51F630C66E53455185E4E2125EB0AA02"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_DD76F3708E9841C1B51612D304CEF271"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Welcome"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_51F630C66E53455185E4E2125EB0AA02"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "CopyrightWarning"
+                            {
+                            "Name" = "8:CopyrightWarning"
+                            "DisplayName" = "8:#1002"
+                            "Description" = "8:#1102"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:2"
+                            "Value" = "8:This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. "
+                            "DefaultValue" = "8:#1202"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "Welcome"
+                            {
+                            "Name" = "8:Welcome"
+                            "DisplayName" = "8:#1003"
+                            "Description" = "8:#1103"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1203"
+                            "DefaultValue" = "8:#1203"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_3CB03496A3FF4925AEA8C2189B54FD5B"
+            {
+            "Name" = "8:#1901"
+            "Sequence" = "3:1"
+            "Attributes" = "3:2"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_306D7768D65F483C987DB4EB153947E9"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Progress"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_51F630C66E53455185E4E2125EB0AA02"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "ShowProgress"
+                            {
+                            "Name" = "8:ShowProgress"
+                            "DisplayName" = "8:#1009"
+                            "Description" = "8:#1109"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_93400B92A46E49DA907E06D2FB96852B"
+            {
+            "Name" = "8:#1902"
+            "Sequence" = "3:1"
+            "Attributes" = "3:3"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B1D70EB2E4434D38AB246F4357E65C0E"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Finished"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_51F630C66E53455185E4E2125EB0AA02"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "UpdateText"
+                            {
+                            "Name" = "8:UpdateText"
+                            "DisplayName" = "8:#1058"
+                            "Description" = "8:#1158"
+                            "Type" = "3:15"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1258"
+                            "DefaultValue" = "8:#1258"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_B891A722B41E439AA204757AA901B8D1"
+            {
+            "Name" = "8:#1901"
+            "Sequence" = "3:2"
+            "Attributes" = "3:2"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_1782DE66CF8D46B3B02D85AFB0314407"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Progress"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:2"
+                            "Value" = "8:_51F630C66E53455185E4E2125EB0AA02"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "ShowProgress"
+                            {
+                            "Name" = "8:ShowProgress"
+                            "DisplayName" = "8:#1009"
+                            "Description" = "8:#1109"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        "MergeModule"
+        {
+        }
+        "ProjectOutput"
+        {
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_3C881D08A42747949E7F0009E1EB3D51"
+            {
+            "SourcePath" = "8:..\\HeuristicLab.Clients.Hive.Slave.WindowsService\\3.3\\obj\\Debug\\HeuristicLab.Clients.Hive.Slave.WindowsService.exe"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{BA8001DE-E83C-4B1F-8B2E-2695C4222491}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Core.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Core.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Core.cs	(revision 7085)
@@ -0,0 +1,495 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Diagnostics;
+using System.ServiceModel;
+using System.Threading;
+using System.Threading.Tasks;
+using HeuristicLab.Clients.Hive.SlaveCore.Properties;
+using HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using TS = System.Threading.Tasks;
+
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  /// <summary>
+  /// The core component of the Hive Slave. 
+  /// Handles commands sent from the Hive Server and does all webservice calls for jobs. 
+  /// </summary>
+  public class Core : MarshalByRefObject {
+    private static HeartbeatManager heartbeatManager;
+    public static HeartbeatManager HeartbeatManager {
+      get { return heartbeatManager; }
+    }
+
+    public EventLog ServiceEventLog { get; set; }
+
+    private Semaphore waitShutdownSem = new Semaphore(0, 1);
+    private bool abortRequested;
+    private ISlaveCommunication clientCom;
+    private ServiceHost slaveComm;
+    private WcfService wcfService;
+    private TaskManager taskManager;
+    private ConfigManager configManager;
+    private PluginManager pluginManager;
+
+    public Core() {
+      var log = new ThreadSafeLog(Settings.Default.MaxLogCount);
+      this.pluginManager = new PluginManager(WcfService.Instance, log);
+      this.taskManager = new TaskManager(pluginManager, log);
+      log.MessageAdded += new EventHandler<EventArgs<string>>(log_MessageAdded);
+
+      RegisterTaskManagerEvents();
+
+      this.configManager = new ConfigManager(taskManager);
+      ConfigManager.Instance = this.configManager;
+    }
+
+    /// <summary>
+    /// Main method for the client
+    /// </summary>
+    public void Start() {
+      abortRequested = false;
+      EventLogManager.ServiceEventLog = ServiceEventLog;
+
+      try {
+        //start the client communication service (pipe between slave and slave gui)
+        slaveComm = new ServiceHost(typeof(SlaveCommunicationService));
+        slaveComm.Open();
+        clientCom = SlaveClientCom.Instance.ClientCom;
+
+        // delete all left over task directories
+        pluginManager.CleanPluginTemp();
+        clientCom.LogMessage("Hive Slave started");
+
+        wcfService = WcfService.Instance;
+        RegisterServiceEvents();
+
+        StartHeartbeats(); // Start heartbeats thread        
+        DispatchMessageQueue(); // dispatch messages until abortRequested
+      }
+      catch (Exception ex) {
+        if (ServiceEventLog != null) {
+          EventLogManager.LogException(ex);
+        } else {
+          //try to log with clientCom. if this works the user sees at least a message, 
+          //else an exception will be thrown anyways.
+          clientCom.LogMessage(string.Format("Uncaught exception: {0} {1} Core is going to shutdown.", ex.ToString(), Environment.NewLine));
+        }
+        ShutdownCore();
+      }
+      finally {
+        DeregisterServiceEvents();
+        waitShutdownSem.Release();
+      }
+    }
+
+    private void StartHeartbeats() {
+      //Initialize the heartbeat     
+      if (heartbeatManager == null) {
+        heartbeatManager = new HeartbeatManager();
+        heartbeatManager.StartHeartbeat();
+      }
+    }
+
+    private void DispatchMessageQueue() {
+      MessageQueue queue = MessageQueue.GetInstance();
+      while (!abortRequested) {
+        MessageContainer container = queue.GetMessage();
+        DetermineAction(container);
+        if (!abortRequested) {
+          clientCom.StatusChanged(configManager.GetStatusForClientConsole());
+        }
+      }
+    }
+
+    private void RegisterServiceEvents() {
+      WcfService.Instance.Connected += new EventHandler(WcfService_Connected);
+      WcfService.Instance.ExceptionOccured += new EventHandler<EventArgs<Exception>>(WcfService_ExceptionOccured);
+    }
+
+    private void DeregisterServiceEvents() {
+      WcfService.Instance.Connected -= WcfService_Connected;
+      WcfService.Instance.ExceptionOccured -= WcfService_ExceptionOccured;
+    }
+
+    private void WcfService_ExceptionOccured(object sender, EventArgs<Exception> e) {
+      clientCom.LogMessage(string.Format("Connection to server interruped with exception: {0}", e.Value.Message));
+    }
+
+    private void WcfService_Connected(object sender, EventArgs e) {
+      clientCom.LogMessage("Connected successfully to Hive server");
+    }
+
+    /// <summary>
+    /// Reads and analyzes the Messages from the MessageQueue and starts corresponding actions
+    /// </summary>
+    /// <param name="container">The container, containing the message</param>
+    private void DetermineAction(MessageContainer container) {
+      clientCom.LogMessage(string.Format("Message: {0} for task: {1} ", container.Message.ToString(), container.TaskId));
+
+      switch (container.Message) {
+        case MessageContainer.MessageType.CalculateTask:
+          CalculateTaskAsync(container.TaskId);
+          break;
+        case MessageContainer.MessageType.AbortTask:
+          AbortTaskAsync(container.TaskId);
+          break;
+        case MessageContainer.MessageType.StopTask:
+          StopTaskAsync(container.TaskId);
+          break;
+        case MessageContainer.MessageType.PauseTask:
+          PauseTaskAsync(container.TaskId);
+          break;
+        case MessageContainer.MessageType.StopAll:
+          DoStopAll();
+          break;
+        case MessageContainer.MessageType.PauseAll:
+          DoPauseAll();
+          break;
+        case MessageContainer.MessageType.AbortAll:
+          DoAbortAll();
+          break;
+        case MessageContainer.MessageType.ShutdownSlave:
+          ShutdownCore();
+          break;
+        case MessageContainer.MessageType.Restart:
+          DoStartSlave();
+          break;
+        case MessageContainer.MessageType.Sleep:
+          Sleep();
+          break;
+        case MessageContainer.MessageType.SayHello:
+          wcfService.Connect(configManager.GetClientInfo());
+          break;
+        case MessageContainer.MessageType.NewHBInterval:
+          int interval = wcfService.GetNewHeartbeatInterval(ConfigManager.Instance.GetClientInfo().Id);
+          if (interval != -1) {
+            HeartbeatManager.Interval = TimeSpan.FromSeconds(interval);
+          }
+          break;
+      }
+    }
+
+    private void CalculateTaskAsync(Guid jobId) {
+      TS.Task.Factory.StartNew(HandleCalculateTask, jobId)
+      .ContinueWith((t) => {
+        SlaveStatusInfo.IncrementExceptionOccured();
+        clientCom.LogMessage(t.Exception.ToString());
+      }, TaskContinuationOptions.OnlyOnFaulted);
+    }
+
+    private void StopTaskAsync(Guid jobId) {
+      TS.Task.Factory.StartNew(HandleStopTask, jobId)
+       .ContinueWith((t) => {
+         SlaveStatusInfo.IncrementExceptionOccured();
+         clientCom.LogMessage(t.Exception.ToString());
+       }, TaskContinuationOptions.OnlyOnFaulted);
+    }
+
+    private void PauseTaskAsync(Guid jobId) {
+      TS.Task.Factory.StartNew(HandlePauseTask, jobId)
+       .ContinueWith((t) => {
+         SlaveStatusInfo.IncrementExceptionOccured();
+         clientCom.LogMessage(t.Exception.ToString());
+       }, TaskContinuationOptions.OnlyOnFaulted);
+    }
+
+    private void AbortTaskAsync(Guid jobId) {
+      TS.Task.Factory.StartNew(HandleAbortTask, jobId)
+       .ContinueWith((t) => {
+         SlaveStatusInfo.IncrementExceptionOccured();
+         clientCom.LogMessage(t.Exception.ToString());
+       }, TaskContinuationOptions.OnlyOnFaulted);
+    }
+
+    private void HandleCalculateTask(object taskIdObj) {
+      Guid taskId = (Guid)taskIdObj;
+      Task task = null;
+      int usedCores = 0;
+      try {
+        task = wcfService.GetTask(taskId);
+        if (task == null) throw new TaskNotFoundException(taskId);
+        if (ConfigManager.Instance.GetFreeCores() < task.CoresNeeded) throw new OutOfCoresException();
+        if (ConfigManager.Instance.GetFreeMemory() < task.MemoryNeeded) throw new OutOfMemoryException();
+        SlaveStatusInfo.IncrementUsedCores(task.CoresNeeded); usedCores = task.CoresNeeded;
+        TaskData taskData = wcfService.GetTaskData(taskId);
+        if (taskData == null) throw new TaskDataNotFoundException(taskId);
+        task = wcfService.UpdateJobState(taskId, TaskState.Calculating, null);
+        if (task == null) throw new TaskNotFoundException(taskId);
+        taskManager.StartTaskAsync(task, taskData);
+      }
+      catch (TaskNotFoundException) {
+        SlaveStatusInfo.DecrementUsedCores(usedCores);
+        throw;
+      }
+      catch (TaskDataNotFoundException) {
+        SlaveStatusInfo.DecrementUsedCores(usedCores);
+        throw;
+      }
+      catch (TaskAlreadyRunningException) {
+        SlaveStatusInfo.DecrementUsedCores(usedCores);
+        throw;
+      }
+      catch (OutOfCoresException) {
+        wcfService.UpdateJobState(taskId, TaskState.Waiting, "No more cores available");
+        throw;
+      }
+      catch (OutOfMemoryException) {
+        wcfService.UpdateJobState(taskId, TaskState.Waiting, "No more memory available");
+        throw;
+      }
+      catch (Exception e) {
+        SlaveStatusInfo.DecrementUsedCores(usedCores);
+        wcfService.UpdateJobState(taskId, TaskState.Waiting, e.ToString()); // unknown internal error - report and set waiting again
+        throw;
+      }
+    }
+
+    private void HandleStopTask(object taskIdObj) {
+      Guid taskId = (Guid)taskIdObj;
+      try {
+        Task task = wcfService.GetTask(taskId);
+        if (task == null) throw new TaskNotFoundException(taskId);
+        taskManager.StopTaskAsync(taskId);
+      }
+      catch (TaskNotFoundException) {
+        throw;
+      }
+      catch (TaskNotRunningException) {
+        throw;
+      }
+      catch (AppDomainNotCreatedException) {
+        throw;
+      }
+    }
+
+    private void HandlePauseTask(object taskIdObj) {
+      Guid taskId = (Guid)taskIdObj;
+      try {
+        Task task = wcfService.GetTask(taskId);
+        if (task == null) throw new TaskNotFoundException(taskId);
+        taskManager.PauseTaskAsync(taskId);
+      }
+      catch (TaskNotFoundException) {
+        throw;
+      }
+      catch (TaskNotRunningException) {
+        throw;
+      }
+      catch (AppDomainNotCreatedException) {
+        throw;
+      }
+    }
+
+    private void HandleAbortTask(object taskIdObj) {
+      Guid taskId = (Guid)taskIdObj;
+      try {
+        taskManager.AbortTask(taskId);
+      }
+      catch (TaskNotFoundException) {
+        throw;
+      }
+    }
+
+    #region TaskManager Events
+    private void RegisterTaskManagerEvents() {
+      this.taskManager.TaskStarted += new EventHandler<EventArgs<SlaveTask>>(taskManager_TaskStarted);
+      this.taskManager.TaskPaused += new EventHandler<EventArgs<SlaveTask, TaskData>>(taskManager_TaskPaused);
+      this.taskManager.TaskStopped += new EventHandler<EventArgs<SlaveTask, TaskData>>(taskManager_TaskStopped);
+      this.taskManager.TaskFailed += new EventHandler<EventArgs<Tuple<SlaveTask, TaskData, Exception>>>(taskManager_TaskFailed);
+      this.taskManager.ExceptionOccured += new EventHandler<EventArgs<SlaveTask, Exception>>(taskManager_ExceptionOccured);
+      this.taskManager.TaskAborted += new EventHandler<EventArgs<SlaveTask>>(taskManager_TaskAborted);
+    }
+
+    private void taskManager_TaskStarted(object sender, EventArgs<SlaveTask> e) {
+      // successfully started, everything is good
+    }
+
+    private void taskManager_TaskPaused(object sender, EventArgs<SlaveTask, TaskData> e) {
+      try {
+        SlaveStatusInfo.DecrementUsedCores(e.Value.CoresNeeded);
+        heartbeatManager.AwakeHeartBeatThread();
+        Task task = wcfService.GetTask(e.Value.TaskId);
+        if (task == null) throw new TaskNotFoundException(e.Value.TaskId);
+        task.ExecutionTime = e.Value.ExecutionTime;
+        TaskData taskData = e.Value.GetTaskData();
+        wcfService.UpdateTaskData(task, taskData, configManager.GetClientInfo().Id, TaskState.Paused);
+      }
+      catch (TaskNotFoundException ex) {
+        clientCom.LogMessage(ex.ToString());
+      }
+      catch (Exception ex) {
+        clientCom.LogMessage(ex.ToString());
+      }
+    }
+
+    private void taskManager_TaskStopped(object sender, EventArgs<SlaveTask, TaskData> e) {
+      try {
+        SlaveStatusInfo.DecrementUsedCores(e.Value.CoresNeeded);
+        heartbeatManager.AwakeHeartBeatThread();
+        Task task = wcfService.GetTask(e.Value.TaskId);
+        if (task == null) throw new TaskNotFoundException(e.Value.TaskId);
+        task.ExecutionTime = e.Value.ExecutionTime;
+        TaskData taskData = e.Value.GetTaskData();
+        wcfService.UpdateTaskData(task, taskData, configManager.GetClientInfo().Id, TaskState.Finished);
+      }
+      catch (TaskNotFoundException ex) {
+        clientCom.LogMessage(ex.ToString());
+      }
+      catch (Exception ex) {
+        clientCom.LogMessage(ex.ToString());
+      }
+    }
+
+    private void taskManager_TaskFailed(object sender, EventArgs<Tuple<SlaveTask, TaskData, Exception>> e) {
+      try {
+        SlaveStatusInfo.DecrementUsedCores(e.Value.Item1.CoresNeeded);
+        heartbeatManager.AwakeHeartBeatThread();
+        SlaveTask slaveTask = e.Value.Item1;
+        TaskData taskData = e.Value.Item2;
+        Exception exception = e.Value.Item3;
+
+        Task task = wcfService.GetTask(slaveTask.TaskId);
+        if (task == null) throw new TaskNotFoundException(slaveTask.TaskId);
+        task.ExecutionTime = slaveTask.ExecutionTime;
+        if (taskData != null) {
+          wcfService.UpdateTaskData(task, taskData, configManager.GetClientInfo().Id, TaskState.Failed, exception.ToString());
+        } else {
+          wcfService.UpdateJobState(task.Id, TaskState.Failed, exception.ToString());
+        }
+        clientCom.LogMessage(exception.Message);
+      }
+      catch (TaskNotFoundException ex) {
+        SlaveStatusInfo.IncrementExceptionOccured();
+        clientCom.LogMessage(ex.ToString());
+      }
+      catch (Exception ex) {
+        SlaveStatusInfo.IncrementExceptionOccured();
+        clientCom.LogMessage(ex.ToString());
+      }
+    }
+
+    private void taskManager_ExceptionOccured(object sender, EventArgs<SlaveTask, Exception> e) {
+      SlaveStatusInfo.DecrementUsedCores(e.Value.CoresNeeded);
+      SlaveStatusInfo.IncrementExceptionOccured();
+      heartbeatManager.AwakeHeartBeatThread();
+      clientCom.LogMessage(string.Format("Exception occured for task {0}: {1}", e.Value.TaskId, e.Value2.ToString()));
+      wcfService.UpdateJobState(e.Value.TaskId, TaskState.Waiting, e.Value2.ToString());
+    }
+
+    private void taskManager_TaskAborted(object sender, EventArgs<SlaveTask> e) {
+      SlaveStatusInfo.DecrementUsedCores(e.Value.CoresNeeded);
+    }
+    #endregion
+
+    #region Log Events
+    private void log_MessageAdded(object sender, EventArgs<string> e) {
+      try {
+        clientCom.LogMessage(e.Value.Split('\t')[1]);
+      }
+      catch { }
+    }
+    #endregion
+
+    /// <summary>
+    /// aborts all running jobs, no results are sent back
+    /// </summary>
+    private void DoAbortAll() {
+      clientCom.LogMessage("Aborting all jobs.");
+      foreach (Guid taskId in taskManager.TaskIds) {
+        AbortTaskAsync(taskId);
+      }
+    }
+
+    /// <summary>
+    /// wait for jobs to finish, then pause client
+    /// </summary>
+    private void DoPauseAll() {
+      clientCom.LogMessage("Pausing all jobs.");
+      foreach (Guid taskId in taskManager.TaskIds) {
+        PauseTaskAsync(taskId);
+      }
+    }
+
+    /// <summary>
+    /// pause slave immediately
+    /// </summary>
+    private void DoStopAll() {
+      clientCom.LogMessage("Stopping all jobs.");
+      foreach (Guid taskId in taskManager.TaskIds) {
+        StopTaskAsync(taskId);
+      }
+    }
+
+    #region Slave Lifecycle Methods
+    /// <summary>
+    /// completly shudown slave
+    /// </summary>
+    public void Shutdown() {
+      MessageContainer mc = new MessageContainer(MessageContainer.MessageType.ShutdownSlave);
+      MessageQueue.GetInstance().AddMessage(mc);
+      waitShutdownSem.WaitOne();
+    }
+
+    /// <summary>
+    /// complete shutdown, should be called before the the application is exited
+    /// </summary>
+    private void ShutdownCore() {
+      clientCom.LogMessage("Shutdown signal received");
+      clientCom.LogMessage("Stopping heartbeat");
+      heartbeatManager.StopHeartBeat();
+      abortRequested = true;
+
+      DoAbortAll();
+
+      clientCom.LogMessage("Logging out");
+      WcfService.Instance.Disconnect();
+      clientCom.Shutdown();
+      SlaveClientCom.Close();
+
+      if (slaveComm.State != CommunicationState.Closed)
+        slaveComm.Close();
+    }
+
+    /// <summary>
+    /// reinitializes everything and continues operation, 
+    /// can be called after Sleep()
+    /// </summary>  
+    private void DoStartSlave() {
+      clientCom.LogMessage("Restart received");
+      configManager.Asleep = false;
+    }
+
+    /// <summary>
+    /// stop slave, except for client gui communication, 
+    /// primarily used by gui if core is running as windows service
+    /// </summary>    
+    private void Sleep() {
+      clientCom.LogMessage("Sleep received - not accepting any new jobs");
+      configManager.Asleep = true;
+      DoPauseAll();
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/DummyListener.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/DummyListener.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/DummyListener.cs	(revision 7085)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ServiceModel;
+using HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+
+  [CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
+  internal class DummyListener : ISlaveCommunicationCallbacks {
+
+    public void OnStatusChanged(SlaveCore.StatusCommons status) {
+      throw new NotImplementedException("Dummy Listener, don't subscribe it!");
+    }
+
+    public void OnMessageLogged(string message) {
+      throw new NotImplementedException("Dummy Listener, don't subscribe it!");
+    }
+
+    public void OnShutdown() {
+      throw new NotImplementedException("Dummy Listener, don't subscribe it!");
+    }
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/AppDomainNotCreatedException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/AppDomainNotCreatedException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/AppDomainNotCreatedException.cs	(revision 7085)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class AppDomainNotCreatedException : Exception {
+    public AppDomainNotCreatedException() : base("AppDomain has not been created.") { }
+  }
+}
+
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/InvalidStateException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/InvalidStateException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/InvalidStateException.cs	(revision 7085)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  [global::System.Serializable]
+  public class InvalidStateException : Exception {
+    public InvalidStateException() { }
+    public InvalidStateException(string message) : base(message) { }
+    public InvalidStateException(string message, Exception inner) : base(message, inner) { }
+    protected InvalidStateException(
+    System.Runtime.Serialization.SerializationInfo info,
+    System.Runtime.Serialization.StreamingContext context)
+      : base(info, context) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobAlreadyExistsException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobAlreadyExistsException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobAlreadyExistsException.cs	(revision 7085)
@@ -0,0 +1,11 @@
+﻿using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  class JobAlreadyExistsException : Exception {
+    public Guid JobId { get; set; }
+
+    public JobAlreadyExistsException(Guid jobId) {
+      this.JobId = jobId;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/OutOfCoresException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/OutOfCoresException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/OutOfCoresException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class OutOfCoresException : Exception {
+    public OutOfCoresException() : base("No more free cores available.") { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/OutOfMemoryException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/OutOfMemoryException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/OutOfMemoryException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class OutOfMemoryException : Exception {
+    public OutOfMemoryException() : base("No more memory available.") { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/SerializationException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/SerializationException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/SerializationException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class SerializationException : Exception {
+    public SerializationException() : base("Serializing task failed.") { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskAlreadyRunningException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskAlreadyRunningException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskAlreadyRunningException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class TaskAlreadyRunningException : Exception {
+    public TaskAlreadyRunningException(Guid jobId) : base(string.Format("Task with Id {0} is already running.", jobId)) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskFailedException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskFailedException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskFailedException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class TaskFailedException : Exception {
+    public TaskFailedException(string reason) : base(string.Format("Task failed with reason: {0}", reason)) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskNotDataFoundException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskNotDataFoundException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskNotDataFoundException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class TaskDataNotFoundException : Exception {
+    public TaskDataNotFoundException(Guid jobId) : base(string.Format("TaskData with TaskId {0} was not found on server.", jobId)) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskNotFoundException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskNotFoundException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskNotFoundException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class TaskNotFoundException : Exception {
+    public TaskNotFoundException(Guid jobId) : base (string.Format("Task with Id {0} was not found on server.", jobId)) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskNotRunningException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskNotRunningException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/TaskNotRunningException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class TaskNotRunningException : Exception {
+    public TaskNotRunningException(Guid jobId) : base(string.Format("Task with Id {0} is not running.", jobId)) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Executor.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Executor.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Executor.cs	(revision 7085)
@@ -0,0 +1,214 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Threading;
+using HeuristicLab.Clients.Hive.SlaveCore.Properties;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Hive;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  /// <summary>
+  /// The executor runs in the appdomain and handles the execution of an Hive task.
+  /// </summary>
+  public class Executor : MarshalByRefObject, IDisposable {
+    private bool wasTaskAborted = false;
+    private AutoResetEvent pauseStopSem = new AutoResetEvent(false);
+    private AutoResetEvent startTaskSem = new AutoResetEvent(false); // block start method call
+    private AutoResetEvent taskStartedSem = new AutoResetEvent(false); // make pause or stop wait until start is finished
+    private ExecutorQueue executorQueue;
+    private bool taskDataInvalid = false; // if true, the jobdata is not sent when the task is failed
+    private ITask task;
+    private DateTime creationTime;
+
+    public Guid TaskId { get; set; }
+    public int CoresNeeded { get; set; }
+    public int MemoryNeeded { get; set; }
+    public bool IsStopping { get; set; }
+    public bool IsPausing { get; set; }
+
+    public Exception CurrentException;
+    public String CurrentExceptionStr {
+      get {
+        if (CurrentException != null) {
+          return CurrentException.ToString();
+        } else {
+          return string.Empty;
+        }
+      }
+    }
+
+    public ExecutorQueue ExecutorCommandQueue {
+      get { return executorQueue; }
+    }
+
+    private ExecutionState ExecutionState {
+      get { return task != null ? task.ExecutionState : HeuristicLab.Core.ExecutionState.Stopped; }
+    }
+
+    public TimeSpan ExecutionTime {
+      get { return task != null ? task.ExecutionTime : new TimeSpan(0, 0, 0); }
+    }
+
+    public Executor() {
+      IsStopping = false;
+      IsPausing = false;
+      executorQueue = new ExecutorQueue();
+    }
+
+    public void Start(byte[] serializedJob) {
+      try {
+        creationTime = DateTime.Now;
+        task = PersistenceUtil.Deserialize<ITask>(serializedJob);
+
+        RegisterJobEvents();
+
+        task.Start();
+        if (!startTaskSem.WaitOne(Settings.Default.ExecutorSemTimeouts)) {
+          taskDataInvalid = true;
+          throw new TimeoutException("Timeout when starting the task. TaskStarted event was not fired.");
+        }
+      }
+      catch (Exception e) {
+        this.CurrentException = e;
+        Task_TaskFailed(this, new EventArgs<Exception>(e));
+      }
+      finally {
+        taskStartedSem.Set();
+      }
+    }
+
+    public void Pause() {
+      IsPausing = true;
+      // wait until task is started. if this does not happen, the Task is null an we give up
+      taskStartedSem.WaitOne(Settings.Default.ExecutorSemTimeouts);
+      if (task == null) {
+        CurrentException = new Exception("Pausing task " + this.TaskId + ": Task is null");
+        executorQueue.AddMessage(ExecutorMessageType.ExceptionOccured);
+        return;
+      }
+
+      if (task.ExecutionState == ExecutionState.Started) {
+        try {
+          task.Pause();
+          //we need to block the pause...
+          pauseStopSem.WaitOne();
+        }
+        catch (Exception ex) {
+          CurrentException = new Exception("Error pausing task " + this.TaskId + ": " + ex.ToString());
+          executorQueue.AddMessage(ExecutorMessageType.ExceptionOccured);
+        }
+      }
+    }
+
+    public void Stop() {
+      IsStopping = true;
+      // wait until task is started. if this does not happen, the Task is null an we give up
+      taskStartedSem.WaitOne(Settings.Default.ExecutorSemTimeouts);
+      if (task == null) {
+        CurrentException = new Exception("Stopping task " + this.TaskId + ": Task is null");
+        executorQueue.AddMessage(ExecutorMessageType.ExceptionOccured);
+      }
+      wasTaskAborted = true;
+
+      if ((ExecutionState == ExecutionState.Started) || (ExecutionState == ExecutionState.Paused)) {
+        try {
+          task.Stop();
+          pauseStopSem.WaitOne();
+        }
+        catch (Exception ex) {
+          CurrentException = new Exception("Error stopping task " + this.TaskId + ": " + ex.ToString());
+          executorQueue.AddMessage(ExecutorMessageType.ExceptionOccured);
+        }
+      }
+    }
+
+    private void RegisterJobEvents() {
+      task.TaskStopped += new EventHandler(Task_TaskStopped);
+      task.TaskFailed += new EventHandler(Task_TaskFailed);
+      task.TaskPaused += new EventHandler(Task_TaskPaused);
+      task.TaskStarted += new EventHandler(Task_TaskStarted);
+    }
+
+    private void DeregisterJobEvents() {
+      task.TaskStopped -= new EventHandler(Task_TaskStopped);
+      task.TaskFailed -= new EventHandler(Task_TaskFailed);
+      task.TaskPaused -= new EventHandler(Task_TaskPaused);
+      task.TaskStarted -= new EventHandler(Task_TaskStarted);
+    }
+
+    #region Task Events
+    private void Task_TaskFailed(object sender, EventArgs e) {
+      IsStopping = true;
+      EventArgs<Exception> ex = (EventArgs<Exception>)e;
+      CurrentException = ex.Value;
+      executorQueue.AddMessage(ExecutorMessageType.TaskFailed);
+    }
+
+    private void Task_TaskStopped(object sender, EventArgs e) {
+      IsStopping = true;
+      if (wasTaskAborted) {
+        pauseStopSem.Set();
+      }
+      executorQueue.AddMessage(ExecutorMessageType.TaskStopped);
+    }
+
+    private void Task_TaskPaused(object sender, EventArgs e) {
+      IsPausing = true;
+      pauseStopSem.Set();
+      executorQueue.AddMessage(ExecutorMessageType.TaskPaused);
+    }
+
+    private void Task_TaskStarted(object sender, EventArgs e) {
+      startTaskSem.Set();
+      executorQueue.AddMessage(ExecutorMessageType.TaskStarted);
+    }
+    #endregion
+
+    public TaskData GetTaskData() {
+      if (taskDataInvalid) return null;
+
+      if (task.ExecutionState == ExecutionState.Started) {
+        throw new InvalidStateException("Task is still running");
+      } else {
+        TaskData taskData = new TaskData();
+        if (task == null) {
+          //send empty task and save exception
+          taskData.Data = PersistenceUtil.Serialize(new TaskData());
+          if (CurrentException == null) {
+            CurrentException = new Exception("Task with id " + this.TaskId + " is null, sending empty task");
+          }
+        } else {
+          taskData.Data = PersistenceUtil.Serialize(task);
+        }
+        taskData.TaskId = TaskId;
+        return taskData;
+      }
+    }
+
+    public void Dispose() {
+      if (task != null)
+        DeregisterJobEvents();
+      task = null;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ExecutorMessage.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ExecutorMessage.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ExecutorMessage.cs	(revision 7085)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+
+  [Serializable]
+  public enum ExecutorMessageType {
+    TaskStarted,
+    TaskPaused,
+    TaskStopped,
+    TaskFailed,
+    StopExecutorMonitoringThread,
+    ExceptionOccured
+  }
+
+  [Serializable]
+  public class ExecutorMessage {
+    public ExecutorMessageType MessageType { get; set; }
+
+    public ExecutorMessage(ExecutorMessageType messageType) {
+      MessageType = messageType;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ExecutorQueue.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ExecutorQueue.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ExecutorQueue.cs	(revision 7085)
@@ -0,0 +1,77 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using HeuristicLab.Clients.Hive.SlaveCore.Properties;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  /// <summary>
+  /// Every Executor gets an ExecutorQueue in which it can push messages. 
+  /// These messages are then read and processed from outside the appdomain.
+  /// </summary>
+  public class ExecutorQueue : MarshalByRefObject {
+    private Queue<ExecutorMessage> queue = null;
+    private Semaphore semaphore = null;
+
+    public ExecutorQueue() {
+      queue = new Queue<ExecutorMessage>();
+      semaphore = new Semaphore(0, Settings.Default.QueuesMaxThreads);
+    }
+
+    /// <summary>
+    /// Returns the oldest ExecutorMessage Object from the Queue. 
+    /// </summary>
+    /// <returns>the oldest ExecutorMessage Object</returns>
+    public ExecutorMessage GetMessage() {
+      semaphore.WaitOne(Settings.Default.ExecutorQueueTimeout);
+      lock (this) {
+        if (queue.Count > 0) {
+          return queue.Dequeue();
+        }
+      }
+      return null;
+    }
+
+    /// <summary>
+    /// Adds a ExecutorMessage Object to the Queue 
+    /// </summary>
+    /// <param name="message">the ExecutorMessage</param>
+    public void AddMessage(ExecutorMessage message) {
+      lock (this) {
+        queue.Enqueue(message);
+        semaphore.Release();
+      }
+    }
+
+    /// <summary>
+    /// Adds a message to the Queue. The ExecutorMessage Object is built in the Method
+    /// </summary>
+    /// <param name="message">the Message</param>
+    public void AddMessage(ExecutorMessageType message) {
+      lock (this) {
+        queue.Enqueue(new ExecutorMessage(message));
+        semaphore.Release();
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj	(revision 7085)
@@ -0,0 +1,204 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{989FE92B-484E-41EE-87E2-6A24AF0381D8}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Hive.SlaveCore</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Hive.SlaveCore-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Clients.Common-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Clients.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Clients.Hive-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Clients.Hive-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Hive-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Hive-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Exceptions\TaskFailedException.cs" />
+    <Compile Include="Manager\ConfigManager.cs" />
+    <Compile Include="Exceptions\SerializationException.cs" />
+    <Compile Include="Exceptions\OutOfMemoryException.cs" />
+    <Compile Include="Exceptions\TaskNotRunningException.cs" />
+    <Compile Include="Exceptions\TaskAlreadyRunningException.cs" />
+    <Compile Include="Exceptions\TaskNotFoundException.cs" />
+    <Compile Include="Exceptions\TaskNotDataFoundException.cs" />
+    <Compile Include="ExecutorMessage.cs" />
+    <Compile Include="ExecutorQueue.cs" />
+    <Compile Include="IPluginProvider.cs" />
+    <Compile Include="Manager\EventLogManager.cs" />
+    <Compile Include="Manager\TaskManager.cs" />
+    <Compile Include="Exceptions\OutOfCoresException.cs" />
+    <Compile Include="Exceptions\AppDomainNotCreatedException.cs" />
+    <Compile Include="SlaveClientCom.cs" />
+    <Compile Include="Core.cs" />
+    <Compile Include="DummyListener.cs" />
+    <Compile Include="Executor.cs" />
+    <Compile Include="Manager\HeartbeatManager.cs" />
+    <Compile Include="Exceptions\InvalidStateException.cs" />
+    <Compile Include="TaskStatus.cs" />
+    <Compile Include="MessageQueue.cs" />
+    <Compile Include="NetworkEnum.cs" />
+    <Compile Include="Manager\PluginManager.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Include="ServiceContracts\ISlaveCommunication.cs" />
+    <Compile Include="ServiceContracts\ISlaveCommunicationCallbacks.cs" />
+    <Compile Include="SlaveCommunicationService.cs" />
+    <Compile Include="SlaveTask.cs" />
+    <Compile Include="SlaveStatusInfo.cs" />
+    <Compile Include="StatusCommons.cs" />
+    <Compile Include="WcfService.cs" />
+    <None Include="app.config" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <None Include="Properties\Settings.settings">
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="ICSharpCode.SharpZipLib License.txt">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ICSharpCode.SharpZipLib License.txt
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ICSharpCode.SharpZipLib License.txt	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ICSharpCode.SharpZipLib License.txt	(revision 7085)
@@ -0,0 +1,13 @@
+#ziplib (SharpZipLib, formerly NZipLib) is a Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform. It is implemented as an assembly (installable in the GAC), and thus can easily be incorporated into other projects (in any .NET language). The creator of #ziplib put it this way: "I've ported the zip library over to C# because I needed gzip/zip compression and I didn't want to use libzip.dll or something like this. I want all in pure C#."
+
+License
+
+The library is released under the GPL with the following exception:
+
+Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.
+
+As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
+
+Note: The exception is changed to reflect the latest GNU Classpath exception. Older versions of #ziplib did have another exception, but the new one is clearer and it doesn't break compatibility with the old one.
+
+Bottom line: In plain English this means you can use this library in commercial closed-source applications.
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/IPluginProvider.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/IPluginProvider.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/IPluginProvider.cs	(revision 7085)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public interface IPluginProvider {
+    Plugin GetPlugin(Guid pluginId);
+    IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds);
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/ConfigManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/ConfigManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/ConfigManager.cs	(revision 7085)
@@ -0,0 +1,267 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Management;
+using HeuristicLab.Clients.Hive.SlaveCore.Properties;
+
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  /// <summary>
+  /// accesses the server and sends his data (uuid, uptimes, hardware config) 
+  /// </summary>
+  public class ConfigManager {
+    private static ConfigManager instance = null;
+    public static ConfigManager Instance {
+      get { return instance; }
+      set { instance = value; }
+    }
+
+    /// <summary>
+    /// if Asleep is true, the Slave won't accept any new jobs
+    /// </summary>
+    public bool Asleep { get; set; }
+    private TaskManager jobManager;
+    private Slave slave;
+    private PerformanceCounter cpuCounter;
+    private PerformanceCounter memCounter;
+
+    /// <summary>
+    /// Constructor for the singleton, must recover Guid, Calendar, ...
+    /// </summary>
+    public ConfigManager(TaskManager jobManager) {
+      this.jobManager = jobManager;
+      cpuCounter = new PerformanceCounter();
+      cpuCounter.CategoryName = "Processor";
+      cpuCounter.CounterName = "% Processor Time";
+      cpuCounter.InstanceName = "_Total";
+      memCounter = new PerformanceCounter("Memory", "Available Bytes", true);
+
+      Asleep = false;
+      slave = new Slave();
+      slave.Id = GetUniqueMachineId();
+      slave.Name = Environment.MachineName;
+      slave.Cores = Environment.ProcessorCount;
+      slave.Memory = GetPhysicalMemory();
+      slave.CpuArchitecture = Environment.Is64BitOperatingSystem ? CpuArchitecture.x64 : CpuArchitecture.x86;
+      slave.OperatingSystem = Environment.OSVersion.VersionString;
+      slave.CpuSpeed = GetCpuSpeed();
+
+      UpdateSlaveInfo();
+    }
+
+    private void UpdateSlaveInfo() {
+      if (slave != null) {
+        slave.FreeMemory = GetFreeMemory();
+        slave.HbInterval = (int)Settings.Default.HeartbeatInterval.TotalSeconds;
+      }
+    }
+
+    /// <summary>
+    /// Get all the Information about the client
+    /// </summary>
+    /// <returns>the ClientInfo object</returns>
+    public Slave GetClientInfo() {
+      UpdateSlaveInfo();
+      return slave;
+    }
+
+    public int GetFreeCores() {
+      return slave.Cores.HasValue ? slave.Cores.Value - SlaveStatusInfo.UsedCores : 0;
+    }
+
+    /// <summary>
+    /// collects and returns information that get displayed by the Client Console
+    /// </summary>
+    /// <returns></returns>
+    public StatusCommons GetStatusForClientConsole() {
+      StatusCommons st = new StatusCommons();
+      st.ClientGuid = slave.Id;
+
+      st.Status = WcfService.Instance.ConnState;
+      st.ConnectedSince = WcfService.Instance.ConnectedSince;
+
+      st.TotalCores = slave.Cores.HasValue ? slave.Cores.Value : 0;
+      st.FreeCores = GetFreeCores();
+      st.Asleep = this.Asleep;
+
+      st.JobsStarted = SlaveStatusInfo.TasksStarted;
+      st.JobsAborted = SlaveStatusInfo.TasksAborted;
+      st.JobsFinished = SlaveStatusInfo.TasksFinished;
+      st.JobsFetched = SlaveStatusInfo.TasksFetched;
+      st.JobsFailed = SlaveStatusInfo.TasksFailed;
+      st.ExceptionsOccured = SlaveStatusInfo.ExceptionsOccured;
+
+      st.Jobs = jobManager.GetExecutionTimes().Select(x => new TaskStatus { TaskId = x.Key, ExecutionTime = x.Value }).ToList();
+
+      return st;
+    }
+
+    public Dictionary<Guid, TimeSpan> GetExecutionTimeOfAllJobs() {
+      Dictionary<Guid, TimeSpan> prog = new Dictionary<Guid, TimeSpan>();
+      try {
+        prog = jobManager.GetExecutionTimes();
+      }
+      catch (Exception ex) {
+        SlaveClientCom.Instance.ClientCom.LogMessage(string.Format("Exception was thrown while trying to get execution times: {0}", ex.Message));
+      }
+      return prog;
+    }
+
+    public static Guid GetUniqueMachineId() {
+      Guid id;
+      try {
+        id = GetUniqueMachineIdFromMac();
+      }
+      catch {
+        // fallback if something goes wrong...        
+        id = new Guid(Environment.MachineName.GetHashCode(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+      }
+      return id;
+    }
+
+    /// <summary>
+    /// returns total physical memory of the machine in MB
+    /// </summary>
+    private static int? GetPhysicalMemory() {
+      long? res = GetWMIValue("Win32_ComputerSystem", "TotalPhysicalMemory");
+      if (res != null)
+        return (int)(res / 1024 / 1024);
+      else
+        return null;
+    }
+
+    /// <summary>
+    /// returns CPU frequence of the machine in Mhz
+    /// </summary>
+    private static int? GetCpuSpeed() {
+      return (int)GetWMIValue("Win32_Processor", "MaxClockSpeed");
+    }
+
+    /// <summary>
+    /// Generate a guid based on mac address of the first found nic (yes, mac addresses are not unique...)
+    /// and the machine name.
+    /// Format:
+    /// 
+    ///  D1      D2  D3  Res.   D4
+    /// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    /// |n a m e|0 0|0 0|0 0 mac address|
+    /// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    /// 
+    /// The mac address is saved in the last 48 bits of the Data 4 segment 
+    /// of the guid (first 2 bytes of Data 4 are reserved).
+    /// D1 contains the hash of the machinename. 
+    /// </summary>    
+    private static Guid GetUniqueMachineIdFromMac() {
+      ManagementClass mgtClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
+      ManagementObjectCollection mgtCol = mgtClass.GetInstances();
+
+      foreach (ManagementObject mgtObj in mgtCol) {
+        foreach (var prop in mgtObj.Properties) {
+          if (prop.Value != null && prop.Name == "MACAddress") {
+            try {
+              //simply take the first nic
+              string mac = prop.Value.ToString();
+              byte[] b = new byte[8];
+              string[] macParts = mac.Split(':');
+              if (macParts.Length == 6) {
+                for (int i = 0; i < macParts.Length; i++) {
+                  b[i + 2] = (byte)((ParseNybble(macParts[i][0]) << 4) | ParseNybble(macParts[i][1]));
+                }
+
+                // also get machine name and save it to the first 4 bytes                
+                Guid guid = new Guid(Environment.MachineName.GetHashCode(), 0, 0, b);
+                return guid;
+              } else
+                throw new Exception("Error getting mac addresse");
+            }
+            catch {
+              throw new Exception("Error getting mac addresse");
+            }
+          }
+        }
+      }
+      throw new Exception("Error getting mac addresse");
+    }
+
+    /// <summary>
+    /// return numeric value of a single hex-char
+    /// (see: http://stackoverflow.com/questions/854012/how-to-convert-hex-to-a-byte-array)
+    /// </summary>    
+    static int ParseNybble(char c) {
+      if (c >= '0' && c <= '9') {
+        return c - '0';
+      }
+      if (c >= 'A' && c <= 'F') {
+        return c - 'A' + 10;
+      }
+      if (c >= 'a' && c <= 'f') {
+        return c - 'a' + 10;
+      }
+      throw new ArgumentException("Invalid hex digit: " + c);
+    }
+
+    private static long? GetWMIValue(string clazz, string property) {
+      ManagementClass mgtClass = new ManagementClass(clazz);
+      ManagementObjectCollection mgtCol = mgtClass.GetInstances();
+
+      foreach (ManagementObject mgtObj in mgtCol) {
+        foreach (var prop in mgtObj.Properties) {
+          if (prop.Value != null && prop.Name == property) {
+            try {
+              return long.Parse(prop.Value.ToString());
+            }
+            catch {
+              return null;
+            }
+          }
+        }
+      }
+      return null;
+    }
+
+    /// <summary>
+    /// returns free memory of machine in MB
+    /// </summary>    
+    public int GetFreeMemory() {
+      int mb = 0;
+
+      try {
+        mb = (int)(memCounter.NextValue() / 1024 / 1024);
+      }
+      catch { }
+      return mb;
+    }
+
+    public float GetCpuUtilization() {
+      float cpuVal = 0.0F;
+
+      try {
+        return cpuCounter.NextValue();
+      }
+      catch { }
+      return cpuVal;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/EventLogManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/EventLogManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/EventLogManager.cs	(revision 7085)
@@ -0,0 +1,46 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Diagnostics;
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public static class EventLogManager {
+    public static EventLog ServiceEventLog { get; set; }
+
+    public static void LogMessage(string message) {
+      if (ServiceEventLog != null) {
+        try {
+          ServiceEventLog.WriteEntry(string.Format("Hive Slave: {0} ", message), EventLogEntryType.Error);
+        }
+        catch { }
+      }
+    }
+
+    public static void LogException(Exception ex) {
+      if (ServiceEventLog != null) {
+        try {
+          ServiceEventLog.WriteEntry(string.Format("Hive Slave threw exception: {0} with stack trace: {1}", ex.ToString(), ex.StackTrace), EventLogEntryType.Error);
+        }
+        catch { }
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/HeartbeatManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/HeartbeatManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/HeartbeatManager.cs	(revision 7085)
@@ -0,0 +1,138 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using HeuristicLab.Clients.Hive.SlaveCore.Properties;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  /// <summary>
+  /// Heartbeat Manager sends every x ms a heartbeat to the server and receives a message.
+  /// The message is added to the MessageQueue from where the Core pulls them and decides what to do.
+  /// </summary>
+  public class HeartbeatManager {
+    private static object locker = new object();
+    private TimeSpan interval;
+
+    public TimeSpan Interval {
+      get { return interval; }
+      set {
+        interval = value;
+        Settings.Default.HeartbeatInterval = interval;
+        Settings.Default.Save();
+      }
+    }
+    private Thread heartBeatThread;
+    private AutoResetEvent waitHandle;
+    private WcfService wcfService;
+    private bool threadStopped;
+
+    public HeartbeatManager() {
+      interval = Settings.Default.HeartbeatInterval;
+    }
+
+    /// <summary>
+    /// Starts the Heartbeat signal.
+    /// </summary>
+    public void StartHeartbeat() {
+      this.waitHandle = new AutoResetEvent(true);
+      wcfService = WcfService.Instance;
+      threadStopped = false;
+      heartBeatThread = new Thread(RunHeartBeatThread);
+      heartBeatThread.Start();
+    }
+
+    /// <summary>
+    /// Stop the heartbeat
+    /// </summary>
+    public void StopHeartBeat() {
+      threadStopped = true;
+      waitHandle.Set();
+      heartBeatThread.Join();
+    }
+
+    /// <summary>
+    /// use this method to singalize there is work to do (to avoid the waiting period if its clear that actions are required)
+    /// </summary>
+    public void AwakeHeartBeatThread() {
+      if (!threadStopped)
+        waitHandle.Set();
+    }
+
+    private void RunHeartBeatThread() {
+      while (!threadStopped) {
+        SlaveClientCom.Instance.ClientCom.StatusChanged(ConfigManager.Instance.GetStatusForClientConsole());
+
+        try {
+          lock (locker) {
+            if (wcfService.ConnState != NetworkEnum.WcfConnState.Connected) {
+              // login happens automatically upon successfull connection
+              wcfService.Connect(ConfigManager.Instance.GetClientInfo());
+              SlaveStatusInfo.LoginTime = DateTime.Now;
+            }
+            if (wcfService.ConnState == NetworkEnum.WcfConnState.Connected) {
+              Slave info = ConfigManager.Instance.GetClientInfo();
+
+              Heartbeat heartBeatData = new Heartbeat {
+                SlaveId = info.Id,
+                FreeCores = info.Cores.HasValue ? info.Cores.Value - SlaveStatusInfo.UsedCores : 0,
+                FreeMemory = ConfigManager.Instance.GetFreeMemory(),
+                CpuUtilization = ConfigManager.Instance.GetCpuUtilization(),
+                JobProgress = ConfigManager.Instance.GetExecutionTimeOfAllJobs(),
+                AssignJob = !ConfigManager.Instance.Asleep,
+                HbInterval = (int)interval.TotalSeconds
+              };
+
+              SlaveClientCom.Instance.ClientCom.LogMessage("Send HB: " + heartBeatData);
+              List<MessageContainer> msgs = wcfService.SendHeartbeat(heartBeatData);
+
+              if (msgs == null) {
+                SlaveClientCom.Instance.ClientCom.LogMessage("Error getting response from HB");
+                OnExceptionOccured(new Exception("Error getting response from HB"));
+              } else {
+                SlaveClientCom.Instance.ClientCom.LogMessage("HB Response received (" + msgs.Count + "): ");
+                msgs.ForEach(mc => SlaveClientCom.Instance.ClientCom.LogMessage(mc.Message.ToString()));
+                msgs.ForEach(mc => MessageQueue.GetInstance().AddMessage(mc));
+              }
+            }
+          }
+        }
+        catch (Exception e) {
+          SlaveClientCom.Instance.ClientCom.LogMessage("Heartbeat thread failed: " + e.ToString());
+          OnExceptionOccured(e);
+        }
+        waitHandle.WaitOne(this.interval);
+      }
+      waitHandle.Close();
+      SlaveClientCom.Instance.ClientCom.LogMessage("Heartbeat thread stopped");
+    }
+
+    #region Eventhandler
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception e) {
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(e));
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/PluginManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/PluginManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/PluginManager.cs	(revision 7085)
@@ -0,0 +1,301 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Threading;
+using HeuristicLab.Clients.Hive.SlaveCore.Properties;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class PluginManager {
+    private static object locker = new object();
+    private string lastUsedFileName = Settings.Default.LastUsedFileName;
+    //maximum number of days after which a plugin gets deleted if not used
+    private int pluginLifetime = Settings.Default.PluginLifetime;
+
+    private string PluginCacheDir { get; set; }
+    public string PluginTempBaseDir { get; set; }
+    private ILog log;
+    private IPluginProvider pluginService;
+    private List<Guid> cachedPluginsGuids = new List<Guid>();
+
+    public PluginManager(IPluginProvider pluginService, ILog log) {
+      this.pluginService = pluginService;
+      this.log = log;
+      PluginCacheDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Settings.Default.PluginCacheDir);
+      PluginTempBaseDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Settings.Default.PluginTempBaseDir);
+      DoUpdateRun();
+    }
+
+    /// <summary>
+    /// Returns the last directory of a path
+    /// </summary>    
+    private string GetFilenameFromPath(string path) {
+      string[] dirParts = path.Split(Path.DirectorySeparatorChar);
+      if (dirParts.Length > 0) {
+        string fileGuid = dirParts[dirParts.Length - 1];
+        return fileGuid;
+      } else
+        return "";
+    }
+
+    private void DoUpdateRun() {
+      SafelyCreateDirectory(PluginCacheDir);
+      lock (cachedPluginsGuids) {
+        cachedPluginsGuids.Clear();
+        foreach (string dir in Directory.EnumerateDirectories(PluginCacheDir)) {
+          cachedPluginsGuids.Add(Guid.Parse(GetFilenameFromPath(dir)));
+        }
+      }
+    }
+
+    public void CopyPluginsForJob(List<Plugin> requests, Guid jobId, out string configFileName) {
+      configFileName = string.Empty;
+      String targetDir = Path.Combine(PluginTempBaseDir, jobId.ToString());
+
+      RecreateDirectory(targetDir);
+
+      foreach (Plugin requestedPlugin in requests) {
+        var filePaths = GetPluginFilePaths(requestedPlugin.Id);
+        foreach (string filePath in filePaths) {
+          File.Copy(filePath, Path.Combine(targetDir, Path.GetFileName(filePath)));
+        }
+
+        if (requestedPlugin.Name == Settings.Default.ConfigurationName) {
+          // configuration plugin consists only of 1 file (usually the "HeuristicLab X.X.exe.config")
+          configFileName = Path.Combine(targetDir, Path.GetFileName(filePaths.SingleOrDefault()));
+        }
+      }
+
+      // copy files from PluginInfrastructure (which are not declared in any plugins)
+      string baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+      CopyFile(baseDir, targetDir, Settings.Default.PluginInfrastructureDll);
+      CopyFile(baseDir, targetDir, Settings.Default.SharpZipLibDll);
+      CopyFile(baseDir, targetDir, Settings.Default.SharpZipLibLicense);
+
+      // copy slave plugins, otherwise its not possible to register the UnhandledException handler to the appdomain        
+      CopyFile(baseDir, targetDir, Settings.Default.ClientsHiveSlaveCoreDll);
+      CopyFile(baseDir, targetDir, Settings.Default.ClientsHiveDll);
+      CopyFile(baseDir, targetDir, Settings.Default.HiveDll);
+      CopyFile(baseDir, targetDir, Settings.Default.ClientsCommonDll);
+    }
+
+    private static DirectoryInfo RecreateDirectory(String targetDir) {
+      var di = new DirectoryInfo(targetDir);
+      if (di.Exists) Directory.Delete(targetDir, true);
+      di.Refresh();
+      while (di.Exists) {
+        Thread.Sleep(Settings.Default.DirOpSleepTime);
+        di.Refresh();
+      }
+      return SafelyCreateDirectory(targetDir);
+    }
+
+    private static DirectoryInfo SafelyCreateDirectory(String targetDir) {
+      var di = new DirectoryInfo(targetDir);
+      if (!di.Exists) {
+        di = Directory.CreateDirectory(targetDir);
+        while (!di.Exists) {
+          Thread.Sleep(Settings.Default.DirOpSleepTime);
+          di.Refresh();
+        }
+      }
+      return di;
+    }
+
+    private void CopyFile(string baseDir, string targetDir, string fileName) {
+      if (!File.Exists(Path.Combine(targetDir, fileName))) File.Copy(Path.Combine(baseDir, fileName), Path.Combine(targetDir, fileName));
+    }
+
+    /// <summary>
+    /// Updates the plugin cache with missing plugins and 
+    /// then copies the required plugins for the task.
+    /// </summary>        
+    public void PreparePlugins(Task task, out string configFileName) {
+      lock (locker) {
+        log.LogMessage("Fetching plugins for task " + task.Id);
+
+        List<Guid> missingGuids = new List<Guid>();
+        List<Plugin> neededPlugins = new List<Plugin>();
+        lock (cachedPluginsGuids) {
+          foreach (Guid pluginId in task.PluginsNeededIds) {
+            Plugin plugin = pluginService.GetPlugin(pluginId);
+            if (plugin != null) {
+              neededPlugins.Add(plugin);
+            }
+
+            if (!cachedPluginsGuids.Contains(pluginId)) {
+              missingGuids.Add(pluginId);
+            }
+          }
+        }
+
+        IEnumerable<PluginData> pluginDatas = pluginService.GetPluginDatas(missingGuids);
+
+        if (pluginDatas != null) {
+          foreach (PluginData pluginData in pluginDatas) {
+            string pluginDir = Path.Combine(PluginCacheDir, pluginData.PluginId.ToString());
+
+            //put all files belonging to a plugin in the same directory
+            SafelyCreateDirectory(pluginDir);
+            File.WriteAllBytes(Path.Combine(pluginDir, Path.GetFileName(pluginData.FileName)), pluginData.Data);
+          }
+
+          if (missingGuids.Count > 0) {
+            DoUpdateRun();
+          }
+          CopyPluginsForJob(neededPlugins, task.Id, out configFileName);
+        } else {
+          configFileName = "";
+        }
+        log.LogMessage(string.Format("Fetched {0} plugins for task {1}", missingGuids.Count, task.Id));
+      }
+    }
+
+    /// <summary>
+    /// Returns a list of files which belong to a plugin from the plugincache
+    /// </summary>
+    private IEnumerable<string> GetPluginFilePaths(Guid pluginId) {
+      string pluginPath = Path.Combine(PluginCacheDir, pluginId.ToString());
+
+      if (Directory.Exists(pluginPath)) {
+        WriteDateLastUsed(pluginPath);
+        foreach (string filePath in Directory.GetFiles(pluginPath)) {
+          string fn = Path.GetFileName(filePath);
+          if (fn != lastUsedFileName)
+            yield return filePath;
+        }
+      }
+    }
+
+    /// <summary>
+    /// creates a file in path with the current date;
+    /// this can later be used to find plugins which are outdated
+    /// </summary>    
+    private void WriteDateLastUsed(string path) {
+      FileStream fs = null;
+      try {
+        fs = new FileStream(Path.Combine(path, lastUsedFileName), FileMode.Create);
+        BinaryFormatter formatter = new BinaryFormatter();
+        formatter.Serialize(fs, DateTime.Now);
+      }
+      catch (IOException) {
+        log.LogMessage(string.Format("No used date written in path {0}.", path));
+      }
+      catch (SerializationException) {
+        //rethrow...
+        throw;
+      }
+      finally {
+        if (fs != null) {
+          fs.Close();
+        }
+      }
+    }
+
+    /// <summary>
+    /// Checks the PluginTemp directory for orphaned directories and deletes them.
+    /// This should be only called if no jobs are currently running.
+    /// </summary>    
+    public void CleanPluginTemp() {
+      if (Directory.Exists(PluginTempBaseDir)) {
+        foreach (string dir in Directory.EnumerateDirectories(PluginTempBaseDir)) {
+          try {
+            log.LogMessage("Deleting orphaned directory " + dir);
+            Directory.Delete(dir, true);
+          }
+          catch (Exception ex) {
+            log.LogMessage("Error cleaning up PluginTemp directory " + dir + ": " + ex.ToString());
+          }
+        }
+      }
+    }
+
+    /// <summary>
+    /// checks the pluginCacheDirectory and deletes plugin folders which are not used anymore
+    /// </summary>    
+    private void CleanPluginCache() {
+      FileStream fs = null;
+      DateTime luDate;
+      bool changed = false;
+
+      if (Directory.Exists(PluginCacheDir)) {
+        lock (locker) {
+          foreach (string dir in Directory.EnumerateDirectories(PluginCacheDir)) {
+            try {
+              fs = new FileStream(Path.Combine(dir, lastUsedFileName), FileMode.Open);
+              BinaryFormatter formatter = new BinaryFormatter();
+              luDate = (DateTime)formatter.Deserialize(fs);
+              fs.Close();
+
+              if (luDate.AddDays(pluginLifetime) < DateTime.Now) {
+                Directory.Delete(dir, true);
+                changed = true;
+              }
+            }
+            catch (FileNotFoundException) {
+              //nerver used
+              Directory.Delete(dir, true);
+              changed = true;
+            }
+            catch (Exception ex) {
+              if (fs != null) {
+                fs.Close();
+              }
+              log.LogMessage(string.Format("CleanPluginCache threw exception: {0}", ex.ToString()));
+            }
+          }
+
+          if (changed)
+            DoUpdateRun();
+        }
+      }
+    }
+
+    public void DeletePluginsForJob(Guid id) {
+      try {
+        log.LogMessage("Deleting plugins...");
+        int tries = Settings.Default.PluginDeletionRetries;
+        string path = Path.Combine(PluginTempBaseDir, id.ToString());
+        while (tries > 0) {
+          try {
+            if (Directory.Exists(path)) Directory.Delete(path, true);
+            tries = 0;
+          }
+          catch (Exception) {
+            Thread.Sleep(Settings.Default.PluginDeletionTimeout);
+            tries--;
+            if (tries == 0) throw;
+          }
+        }
+      }
+      catch (Exception ex) {
+        log.LogMessage("failed while unloading " + id + " with exception " + ex);
+      }
+      CleanPluginCache();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/TaskManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/TaskManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Manager/TaskManager.cs	(revision 7085)
@@ -0,0 +1,335 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+
+  /// <summary>
+  /// Holds a list of slave tasks and manages access to this list. 
+  /// Forwards events from SlaveTask and forwards commands to SlaveTask. 
+  /// </summary>
+  public class TaskManager {
+    private static ReaderWriterLockSlim slaveTasksLocker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
+    private Dictionary<Guid, SlaveTask> slaveTasks;
+    private ILog log;
+    private PluginManager pluginManager;
+
+    public int TaskCount {
+      get {
+        slaveTasksLocker.EnterReadLock();
+        try {
+          return slaveTasks.Count;
+        }
+        finally { slaveTasksLocker.ExitReadLock(); }
+      }
+    }
+
+    public Guid[] TaskIds {
+      get {
+        slaveTasksLocker.EnterReadLock();
+        try {
+          return slaveTasks.Keys.ToArray();
+        }
+        finally { slaveTasksLocker.ExitReadLock(); }
+      }
+    }
+
+    public TaskManager(PluginManager pluginCache, ILog log) {
+      this.pluginManager = pluginCache;
+      this.log = log;
+      this.slaveTasks = new Dictionary<Guid, SlaveTask>();
+    }
+
+    #region Task Control methods
+    public void StartTaskAsync(Task task, TaskData taskData) {
+      SlaveTask slaveTask = null;
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        if (slaveTasks.ContainsKey(task.Id)) {
+          SlaveStatusInfo.IncrementExceptionOccured();
+          throw new TaskAlreadyRunningException(task.Id);
+        } else {
+          slaveTask = new SlaveTask(pluginManager, task.CoresNeeded, log);
+          AddSlaveTask(task, slaveTask);
+          SlaveStatusInfo.IncrementTasksFetched();
+        }
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+
+      if (slaveTask != null) {
+        try {
+          slaveTask.StartJobAsync(task, taskData);
+        }
+        catch (Exception) {
+          RemoveSlaveTask(task.Id, slaveTask); // clean up and rethrow
+          slaveTask.DisposeAppDomain();
+          throw;
+        }
+      }
+    }
+
+    public void PauseTaskAsync(Guid taskId) {
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        if (!slaveTasks.ContainsKey(taskId)) throw new TaskNotRunningException(taskId);
+        SlaveTask slaveTask = slaveTasks[taskId];
+        slaveTask.PauseTask();
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+    }
+
+    public void StopTaskAsync(Guid taskId) {
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        if (!slaveTasks.ContainsKey(taskId)) throw new TaskNotRunningException(taskId);
+        SlaveTask slaveTask = slaveTasks[taskId];
+        slaveTask.StopTask();
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+    }
+
+    public void AbortTask(Guid taskId) {
+      SlaveTask slaveTask = null;
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        if (!slaveTasks.ContainsKey(taskId)) throw new TaskNotRunningException(taskId);
+        slaveTask = slaveTasks[taskId];
+        if (!slaveTask.IsPrepared) throw new AppDomainNotCreatedException();
+        RemoveSlaveTask(taskId, slaveTask);
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+      slaveTask.DisposeAppDomain();
+      SlaveStatusInfo.IncrementTasksAborted();
+      OnTaskAborted(slaveTask);
+    }
+
+    public void PauseAllTasksAsync() {
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        foreach (var slaveTask in slaveTasks.Values) {
+          slaveTask.PauseTask();
+        }
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+    }
+
+    public void StopAllTasksAsync() {
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        foreach (var slaveTask in slaveTasks.Values) {
+          slaveTask.StopTask();
+        }
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+    }
+
+    public void AbortAllTasks() {
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        foreach (var slaveTask in slaveTasks.Values.ToArray()) {
+          AbortTask(slaveTask.TaskId);
+        }
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+    }
+    #endregion
+
+    #region Add/Remove SlaveTask
+    private void AddSlaveTask(Task task, SlaveTask slaveTask) {
+      slaveTasksLocker.EnterWriteLock();
+      try {
+        slaveTasks.Add(task.Id, slaveTask);
+        RegisterSlaveTaskEvents(slaveTask);
+      }
+      finally { slaveTasksLocker.ExitWriteLock(); }
+    }
+
+    private void RemoveSlaveTask(Guid taskId, SlaveTask slaveTask) {
+      slaveTasksLocker.EnterWriteLock();
+      try {
+        slaveTasks.Remove(taskId);
+        DeregisterSlaveTaskEvents(slaveTask);
+      }
+      finally { slaveTasksLocker.ExitWriteLock(); }
+    }
+    #endregion
+
+    #region SlaveTask Events
+    private void RegisterSlaveTaskEvents(SlaveTask slaveTask) {
+      slaveTask.TaskStarted += new EventHandler<EventArgs<Guid>>(slaveTask_TaskStarted);
+      slaveTask.TaskPaused += new EventHandler<EventArgs<Guid>>(slaveTask_TaskPaused);
+      slaveTask.TaskStopped += new EventHandler<EventArgs<Guid>>(slaveTask_TaskStopped);
+      slaveTask.TaskFailed += new EventHandler<EventArgs<Guid, Exception>>(slaveTask_TaskFailed);
+      slaveTask.ExceptionOccured += new EventHandler<EventArgs<Guid, Exception>>(slaveTask_ExceptionOccured);
+    }
+
+    private void DeregisterSlaveTaskEvents(SlaveTask slaveTask) {
+      slaveTask.TaskStarted -= new EventHandler<EventArgs<Guid>>(slaveTask_TaskStarted);
+      slaveTask.TaskPaused -= new EventHandler<EventArgs<Guid>>(slaveTask_TaskPaused);
+      slaveTask.TaskStopped -= new EventHandler<EventArgs<Guid>>(slaveTask_TaskStopped);
+      slaveTask.TaskFailed -= new EventHandler<EventArgs<Guid, Exception>>(slaveTask_TaskFailed);
+      slaveTask.ExceptionOccured -= new EventHandler<EventArgs<Guid, Exception>>(slaveTask_ExceptionOccured);
+    }
+
+    private void slaveTask_TaskStarted(object sender, EventArgs<Guid> e) {
+      SlaveTask slaveTask;
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        slaveTask = slaveTasks[e.Value];
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+
+      SlaveStatusInfo.IncrementTasksStarted();
+      OnTaskStarted(slaveTask);
+    }
+
+    private void slaveTask_TaskPaused(object sender, EventArgs<Guid> e) {
+      SlaveTask slaveTask;
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        slaveTask = slaveTasks[e.Value];
+        RemoveSlaveTask(e.Value, slaveTask);
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+
+      TaskData taskData = null;
+      try {
+        taskData = slaveTask.GetTaskData();
+        if (taskData == null) throw new SerializationException();
+        SlaveStatusInfo.IncrementTasksFinished();
+        OnTaskPaused(slaveTask, taskData);
+      }
+      catch (Exception ex) {
+        RemoveSlaveTask(e.Value, slaveTask);
+        SlaveStatusInfo.IncrementTasksFailed();
+        OnTaskFailed(slaveTask, taskData, ex);
+      }
+    }
+
+    private void slaveTask_TaskStopped(object sender, EventArgs<Guid> e) {
+      SlaveTask slaveTask;
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        slaveTask = slaveTasks[e.Value];
+        RemoveSlaveTask(e.Value, slaveTask);
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+
+      TaskData taskData = null;
+      try {
+        taskData = slaveTask.GetTaskData();
+        if (taskData == null) throw new SerializationException();
+        SlaveStatusInfo.IncrementTasksFinished();
+        OnTaskStopped(slaveTask, taskData);
+      }
+      catch (Exception ex) {
+        RemoveSlaveTask(e.Value, slaveTask);
+        SlaveStatusInfo.IncrementTasksFailed();
+        OnTaskFailed(slaveTask, taskData, ex);
+      }
+    }
+
+    private void slaveTask_TaskFailed(object sender, EventArgs<Guid, Exception> e) {
+      SlaveTask slaveTask;
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        slaveTask = slaveTasks[e.Value];
+        RemoveSlaveTask(e.Value, slaveTask);
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+
+      TaskData taskData = null;
+      try {
+        taskData = slaveTask.GetTaskData();
+        if (taskData == null) throw new SerializationException();
+      }
+      catch { /* taskData will be null */ }
+      SlaveStatusInfo.IncrementTasksFailed();
+      OnTaskFailed(slaveTask, taskData, e.Value2);
+    }
+
+    private void slaveTask_ExceptionOccured(object sender, EventArgs<Guid, Exception> e) {
+      SlaveTask slaveTask;
+      slaveTasksLocker.EnterUpgradeableReadLock();
+      try {
+        slaveTask = slaveTasks[e.Value];
+        RemoveSlaveTask(e.Value, slaveTask);
+      }
+      finally { slaveTasksLocker.ExitUpgradeableReadLock(); }
+
+      SlaveStatusInfo.IncrementExceptionOccured();
+      OnExceptionOccured(slaveTask, e.Value2);
+    }
+    #endregion
+
+    #region EventHandler
+    public event EventHandler<EventArgs<SlaveTask>> TaskStarted;
+    private void OnTaskStarted(SlaveTask slaveTask) {
+      var handler = TaskStarted;
+      if (handler != null) handler(this, new EventArgs<SlaveTask>(slaveTask));
+    }
+
+    public event EventHandler<EventArgs<SlaveTask, TaskData>> TaskStopped;
+    private void OnTaskStopped(SlaveTask slaveTask, TaskData taskData) {
+      var handler = TaskStopped;
+      if (handler != null) handler(this, new EventArgs<SlaveTask, TaskData>(slaveTask, taskData));
+    }
+
+    public event EventHandler<EventArgs<SlaveTask, TaskData>> TaskPaused;
+    private void OnTaskPaused(SlaveTask slaveTask, TaskData taskData) {
+      var handler = TaskPaused;
+      if (handler != null) handler(this, new EventArgs<SlaveTask, TaskData>(slaveTask, taskData));
+    }
+
+    public event EventHandler<EventArgs<Tuple<SlaveTask, TaskData, Exception>>> TaskFailed;
+    private void OnTaskFailed(SlaveTask slaveTask, TaskData taskData, Exception exception) {
+      var handler = TaskFailed;
+      if (handler != null) handler(this, new EventArgs<Tuple<SlaveTask, TaskData, Exception>>(new Tuple<SlaveTask, TaskData, Exception>(slaveTask, taskData, exception)));
+    }
+
+    public event EventHandler<EventArgs<SlaveTask, Exception>> ExceptionOccured;
+    private void OnExceptionOccured(SlaveTask slaveTask, Exception exception) {
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<SlaveTask, Exception>(slaveTask, exception));
+    }
+
+    public event EventHandler<EventArgs<SlaveTask>> TaskAborted;
+    private void OnTaskAborted(SlaveTask slaveTask) {
+      var handler = TaskAborted;
+      if (handler != null) handler(this, new EventArgs<SlaveTask>(slaveTask));
+    }
+    #endregion
+
+    public Dictionary<Guid, TimeSpan> GetExecutionTimes() {
+      slaveTasksLocker.EnterReadLock();
+      try {
+        return slaveTasks.ToDictionary(x => x.Key, x => x.Value.ExecutionTime);
+      }
+      finally { slaveTasksLocker.ExitReadLock(); }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/MessageQueue.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/MessageQueue.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/MessageQueue.cs	(revision 7085)
@@ -0,0 +1,97 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using HeuristicLab.Clients.Hive.SlaveCore.Properties;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+
+  /// <summary>
+  /// Queue for the communication between threads and AppDomains. The Queue is threadsafe and uses a semaphore
+  /// </summary>
+  public class MessageQueue : MarshalByRefObject {
+
+    private static MessageQueue instance = null;
+
+    private Queue<MessageContainer> queue = null;
+    private Semaphore semaphore = null;
+
+    /// <summary>
+    /// Returns the Instance of the MessageQueue. If the instance is null, it will be created.
+    /// This is a Implementation of the Singleton pattern
+    /// </summary>
+    /// <returns>the MessageQueue Instance</returns>
+    public static MessageQueue GetInstance() {
+      if (instance == null) {
+        instance = new MessageQueue();
+      }
+      return instance;
+    }
+
+
+    /// <summary>
+    /// Creates a new MessageQueue Object.
+    /// A new Queue and a Semaphore is created. The Semaphore is set to a max size of 5000.
+    /// </summary>
+    private MessageQueue() {
+      queue = new Queue<MessageContainer>();
+      semaphore = new Semaphore(0, Settings.Default.QueuesMaxThreads);
+    }
+
+    /// <summary>
+    /// Returns the oldest MessageContainer Object from the Queue. 
+    /// </summary>
+    /// <returns>the oldest MessageContainer Object</returns>
+    public MessageContainer GetMessage() {
+      semaphore.WaitOne();
+      lock (this) {
+        if (queue.Count > 0) {
+          return queue.Dequeue();
+        }
+      }
+      return null;
+    }
+
+    /// <summary>
+    /// Adds a MessageContainer Object to the Queue 
+    /// </summary>
+    /// <param name="messageContainer">the MessageContainer</param>
+    public void AddMessage(MessageContainer messageContainer) {
+      lock (this) {
+        queue.Enqueue(messageContainer);
+        semaphore.Release();
+      }
+    }
+
+    /// <summary>
+    /// Adds a message to the Queue. The MessageContainer Object is built in the Method
+    /// </summary>
+    /// <param name="message">the Message</param>
+    public void AddMessage(MessageContainer.MessageType message) {
+      lock (this) {
+        queue.Enqueue(new MessageContainer(message));
+        semaphore.Release();
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/NetworkEnum.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/NetworkEnum.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/NetworkEnum.cs	(revision 7085)
@@ -0,0 +1,26 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class NetworkEnum {
+    public enum WcfConnState { Connected, Disconnected, Failed }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  [Plugin("HeuristicLab.Clients.Hive.SlaveCore", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Clients.Hive.SlaveCore-3.3.dll", PluginFileType.Assembly)]
+  
+  [PluginDependency("HeuristicLab.Clients.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Clients.Hive", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Hive", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabClientsHiveSlavePlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Clients.Hive.Slave")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("360abd06-33ae-41f5-a5b1-ca9e89b167f7")]
+
+// 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("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Properties/Settings.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Properties/Settings.Designer.cs	(revision 7085)
@@ -0,0 +1,302 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.239
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    public 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;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:00:20")]
+        public global::System.TimeSpan HeartbeatInterval {
+            get {
+                return ((global::System.TimeSpan)(this["HeartbeatInterval"]));
+            }
+            set {
+                this["HeartbeatInterval"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("lastUsed.dat")]
+        public string LastUsedFileName {
+            get {
+                return ((string)(this["LastUsedFileName"]));
+            }
+            set {
+                this["LastUsedFileName"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("PluginCache")]
+        public string PluginCacheDir {
+            get {
+                return ((string)(this["PluginCacheDir"]));
+            }
+            set {
+                this["PluginCacheDir"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("PluginTemp")]
+        public string PluginTempBaseDir {
+            get {
+                return ((string)(this["PluginTempBaseDir"]));
+            }
+            set {
+                this["PluginTempBaseDir"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("Configuration")]
+        public string ConfigurationName {
+            get {
+                return ((string)(this["ConfigurationName"]));
+            }
+            set {
+                this["ConfigurationName"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("HeuristicLab.PluginInfrastructure-3.3.dll")]
+        public string PluginInfrastructureDll {
+            get {
+                return ((string)(this["PluginInfrastructureDll"]));
+            }
+            set {
+                this["PluginInfrastructureDll"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("ICSharpCode.SharpZipLib.dll")]
+        public string SharpZipLibDll {
+            get {
+                return ((string)(this["SharpZipLibDll"]));
+            }
+            set {
+                this["SharpZipLibDll"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("ICSharpCode.SharpZipLib License.txt")]
+        public string SharpZipLibLicense {
+            get {
+                return ((string)(this["SharpZipLibLicense"]));
+            }
+            set {
+                this["SharpZipLibLicense"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("HeuristicLab.Clients.Hive.SlaveCore-3.3.dll")]
+        public string ClientsHiveSlaveCoreDll {
+            get {
+                return ((string)(this["ClientsHiveSlaveCoreDll"]));
+            }
+            set {
+                this["ClientsHiveSlaveCoreDll"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("HeuristicLab.Clients.Hive-3.3.dll")]
+        public string ClientsHiveDll {
+            get {
+                return ((string)(this["ClientsHiveDll"]));
+            }
+            set {
+                this["ClientsHiveDll"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("HeuristicLab.Hive-3.3.dll")]
+        public string HiveDll {
+            get {
+                return ((string)(this["HiveDll"]));
+            }
+            set {
+                this["HiveDll"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("HeuristicLab.Clients.Common-3.3.dll")]
+        public string ClientsCommonDll {
+            get {
+                return ((string)(this["ClientsCommonDll"]));
+            }
+            set {
+                this["ClientsCommonDll"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("3")]
+        public int PluginLifetime {
+            get {
+                return ((int)(this["PluginLifetime"]));
+            }
+            set {
+                this["PluginLifetime"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:00:01")]
+        public global::System.TimeSpan DirOpSleepTime {
+            get {
+                return ((global::System.TimeSpan)(this["DirOpSleepTime"]));
+            }
+            set {
+                this["DirOpSleepTime"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("5")]
+        public int PluginDeletionRetries {
+            get {
+                return ((int)(this["PluginDeletionRetries"]));
+            }
+            set {
+                this["PluginDeletionRetries"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:00:01")]
+        public global::System.TimeSpan PluginDeletionTimeout {
+            get {
+                return ((global::System.TimeSpan)(this["PluginDeletionTimeout"]));
+            }
+            set {
+                this["PluginDeletionTimeout"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:00:46")]
+        public global::System.TimeSpan ExecutorSemTimeouts {
+            get {
+                return ((global::System.TimeSpan)(this["ExecutorSemTimeouts"]));
+            }
+            set {
+                this["ExecutorSemTimeouts"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("5000")]
+        public int QueuesMaxThreads {
+            get {
+                return ((int)(this["QueuesMaxThreads"]));
+            }
+            set {
+                this["QueuesMaxThreads"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("SlaveCommunicationServiceEndpoint")]
+        public string SlaveCommunicationServiceEndpoint {
+            get {
+                return ((string)(this["SlaveCommunicationServiceEndpoint"]));
+            }
+            set {
+                this["SlaveCommunicationServiceEndpoint"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("hiveslave")]
+        public string SlaveUser {
+            get {
+                return ((string)(this["SlaveUser"]));
+            }
+            set {
+                this["SlaveUser"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("hiveslave")]
+        public string SlavePwd {
+            get {
+                return ((string)(this["SlavePwd"]));
+            }
+            set {
+                this["SlavePwd"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("1")]
+        public int MaxLogCount {
+            get {
+                return ((int)(this["MaxLogCount"]));
+            }
+            set {
+                this["MaxLogCount"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:00:20")]
+        public global::System.TimeSpan ExecutorQueueTimeout {
+            get {
+                return ((global::System.TimeSpan)(this["ExecutorQueueTimeout"]));
+            }
+            set {
+                this["ExecutorQueueTimeout"] = value;
+            }
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Properties/Settings.settings
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Properties/Settings.settings	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/Properties/Settings.settings	(revision 7085)
@@ -0,0 +1,75 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Clients.Hive.SlaveCore.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="HeartbeatInterval" Type="System.TimeSpan" Scope="User">
+      <Value Profile="(Default)">00:00:20</Value>
+    </Setting>
+    <Setting Name="LastUsedFileName" Type="System.String" Scope="User">
+      <Value Profile="(Default)">lastUsed.dat</Value>
+    </Setting>
+    <Setting Name="PluginCacheDir" Type="System.String" Scope="User">
+      <Value Profile="(Default)">PluginCache</Value>
+    </Setting>
+    <Setting Name="PluginTempBaseDir" Type="System.String" Scope="User">
+      <Value Profile="(Default)">PluginTemp</Value>
+    </Setting>
+    <Setting Name="ConfigurationName" Type="System.String" Scope="User">
+      <Value Profile="(Default)">Configuration</Value>
+    </Setting>
+    <Setting Name="PluginInfrastructureDll" Type="System.String" Scope="User">
+      <Value Profile="(Default)">HeuristicLab.PluginInfrastructure-3.3.dll</Value>
+    </Setting>
+    <Setting Name="SharpZipLibDll" Type="System.String" Scope="User">
+      <Value Profile="(Default)">ICSharpCode.SharpZipLib.dll</Value>
+    </Setting>
+    <Setting Name="SharpZipLibLicense" Type="System.String" Scope="User">
+      <Value Profile="(Default)">ICSharpCode.SharpZipLib License.txt</Value>
+    </Setting>
+    <Setting Name="ClientsHiveSlaveCoreDll" Type="System.String" Scope="User">
+      <Value Profile="(Default)">HeuristicLab.Clients.Hive.SlaveCore-3.3.dll</Value>
+    </Setting>
+    <Setting Name="ClientsHiveDll" Type="System.String" Scope="User">
+      <Value Profile="(Default)">HeuristicLab.Clients.Hive-3.3.dll</Value>
+    </Setting>
+    <Setting Name="HiveDll" Type="System.String" Scope="User">
+      <Value Profile="(Default)">HeuristicLab.Hive-3.3.dll</Value>
+    </Setting>
+    <Setting Name="ClientsCommonDll" Type="System.String" Scope="User">
+      <Value Profile="(Default)">HeuristicLab.Clients.Common-3.3.dll</Value>
+    </Setting>
+    <Setting Name="PluginLifetime" Type="System.Int32" Scope="User">
+      <Value Profile="(Default)">3</Value>
+    </Setting>
+    <Setting Name="DirOpSleepTime" Type="System.TimeSpan" Scope="User">
+      <Value Profile="(Default)">00:00:01</Value>
+    </Setting>
+    <Setting Name="PluginDeletionRetries" Type="System.Int32" Scope="User">
+      <Value Profile="(Default)">5</Value>
+    </Setting>
+    <Setting Name="PluginDeletionTimeout" Type="System.TimeSpan" Scope="User">
+      <Value Profile="(Default)">00:00:01</Value>
+    </Setting>
+    <Setting Name="ExecutorSemTimeouts" Type="System.TimeSpan" Scope="User">
+      <Value Profile="(Default)">00:00:46</Value>
+    </Setting>
+    <Setting Name="QueuesMaxThreads" Type="System.Int32" Scope="User">
+      <Value Profile="(Default)">5000</Value>
+    </Setting>
+    <Setting Name="SlaveCommunicationServiceEndpoint" Type="System.String" Scope="User">
+      <Value Profile="(Default)">SlaveCommunicationServiceEndpoint</Value>
+    </Setting>
+    <Setting Name="SlaveUser" Type="System.String" Scope="User">
+      <Value Profile="(Default)">hiveslave</Value>
+    </Setting>
+    <Setting Name="SlavePwd" Type="System.String" Scope="User">
+      <Value Profile="(Default)">hiveslave</Value>
+    </Setting>
+    <Setting Name="MaxLogCount" Type="System.Int32" Scope="User">
+      <Value Profile="(Default)">1</Value>
+    </Setting>
+    <Setting Name="ExecutorQueueTimeout" Type="System.TimeSpan" Scope="User">
+      <Value Profile="(Default)">00:00:20</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ServiceContracts/ISlaveCommunication.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ServiceContracts/ISlaveCommunication.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ServiceContracts/ISlaveCommunication.cs	(revision 7085)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.ServiceModel;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts {
+
+  [ServiceContract(CallbackContract = typeof(ISlaveCommunicationCallbacks))]
+  public interface ISlaveCommunication {
+
+    [OperationContract]
+    StatusCommons Subscribe();
+
+    [OperationContract]
+    bool Unsubscribe();
+
+
+    [OperationContract]
+    void Restart();
+
+    [OperationContract]
+    void Sleep();
+
+    [OperationContract]
+    void PauseAll();
+
+    [OperationContract]
+    void StopAll();
+
+    [OperationContract]
+    void AbortAll();
+
+    //callbacks
+    [OperationContract]
+    void LogMessage(string message);
+
+    [OperationContract]
+    void StatusChanged(StatusCommons status);
+
+    [OperationContract]
+    void Shutdown();
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ServiceContracts/ISlaveCommunicationCallbacks.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ServiceContracts/ISlaveCommunicationCallbacks.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/ServiceContracts/ISlaveCommunicationCallbacks.cs	(revision 7085)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.ServiceModel;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts {
+  public interface ISlaveCommunicationCallbacks {
+
+    [OperationContract(IsOneWay = true)]
+    void OnStatusChanged(StatusCommons status);
+
+    [OperationContract(IsOneWay = true)]
+    void OnMessageLogged(string message);
+
+    [OperationContract(IsOneWay = true)]
+    void OnShutdown();
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveClientCom.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveClientCom.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveClientCom.cs	(revision 7085)
@@ -0,0 +1,90 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.ServiceModel;
+using HeuristicLab.Clients.Hive.SlaveCore.Properties;
+using HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+
+  /// <summary>
+  /// Singleton which encapsulates the SlaveCommunicationService
+  /// </summary>
+  public class SlaveClientCom {
+    private static SlaveClientCom instance;
+    private static DuplexChannelFactory<ISlaveCommunication> pipeFactory;
+    public ISlaveCommunication ClientCom { get; set; }
+
+    /// <summary>
+    /// Getter for the Instance of the SlaveClientCom
+    /// </summary>
+    /// <returns>the Instance of the SlaveClientCom class</returns>
+    public static SlaveClientCom Instance {
+      get {
+        if (instance == null) {
+          instance = new SlaveClientCom();
+        }
+        return instance;
+      }
+    }
+
+    private SlaveClientCom() {
+      SetupClientCom();
+    }
+
+    private void SetupClientCom() {
+      DummyListener dummy = new DummyListener();
+      try {
+        pipeFactory = new DuplexChannelFactory<ISlaveCommunication>(dummy, Settings.Default.SlaveCommunicationServiceEndpoint);
+      }
+      catch {
+        EventLogManager.LogMessage("Couldn't create pipe for SlaveClientCom with config!");
+
+        try {
+          pipeFactory = new DuplexChannelFactory<ISlaveCommunication>(dummy, new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/HeuristicLabSlaveCom"));
+        }
+        catch {
+          EventLogManager.LogMessage("Couldn't create pipe for SlaveClientCom with fixed addresse!");
+          return;
+        }
+      }
+      pipeFactory.Faulted += new System.EventHandler(pipeFactory_Faulted);
+
+      ISlaveCommunication pipeProxy = pipeFactory.CreateChannel();
+      ClientCom = pipeProxy;
+    }
+
+    void pipeFactory_Faulted(object sender, System.EventArgs e) {
+      EventLogManager.LogMessage("SlaveClientCom just faulted. Trying to repair it...");
+
+      try {
+        pipeFactory.Faulted -= new System.EventHandler(pipeFactory_Faulted);
+        SetupClientCom();
+      }
+      catch { }
+    }
+
+    public static void Close() {
+      if (pipeFactory.State != CommunicationState.Closed && pipeFactory.State != CommunicationState.Faulted)
+        pipeFactory.Close();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveCommunicationService.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveCommunicationService.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveCommunicationService.cs	(revision 7085)
@@ -0,0 +1,121 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ServiceModel;
+using HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class SlaveCommunicationService : ISlaveCommunication {
+    private static List<ISlaveCommunicationCallbacks> subscribers = new List<ISlaveCommunicationCallbacks>();
+
+    public StatusCommons Subscribe() {
+      try {
+        ISlaveCommunicationCallbacks callback = OperationContext.Current.GetCallbackChannel<ISlaveCommunicationCallbacks>();
+        if (!subscribers.Contains(callback)) {
+          subscribers.Add(callback);
+        }
+        return ConfigManager.Instance.GetStatusForClientConsole();
+      }
+      catch {
+        return null;
+      }
+    }
+
+    public bool Unsubscribe() {
+      try {
+        ISlaveCommunicationCallbacks callback = OperationContext.Current.GetCallbackChannel<ISlaveCommunicationCallbacks>();
+        if (subscribers.Contains(callback))
+          subscribers.Remove(callback);
+        return true;
+      }
+      catch {
+        return false;
+      }
+    }
+
+    public void LogMessage(string message) {
+      try {
+        subscribers.ForEach(delegate(ISlaveCommunicationCallbacks callback) {
+          if (((ICommunicationObject)callback).State == CommunicationState.Opened) {
+            callback.OnMessageLogged(message);
+          } else {
+            subscribers.Remove(callback);
+          }
+        });
+      }
+      catch (Exception ex) {
+        EventLogManager.LogException(ex);
+      }
+    }
+
+    public void StatusChanged(StatusCommons status) {
+      try {
+        subscribers.ForEach(delegate(ISlaveCommunicationCallbacks callback) {
+          if (((ICommunicationObject)callback).State == CommunicationState.Opened) {
+            callback.OnStatusChanged(status);
+          } else {
+            subscribers.Remove(callback);
+          }
+        });
+      }
+      catch (Exception ex) {
+        EventLogManager.LogException(ex);
+      }
+    }
+
+    public void Shutdown() {
+      subscribers.ForEach(delegate(ISlaveCommunicationCallbacks callback) {
+        if (((ICommunicationObject)callback).State == CommunicationState.Opened) {
+          callback.OnShutdown();
+        } else {
+          subscribers.Remove(callback);
+        }
+      });
+    }
+
+    public void Restart() {
+      MessageContainer mc = new MessageContainer(MessageContainer.MessageType.Restart);
+      MessageQueue.GetInstance().AddMessage(mc);
+    }
+
+    public void PauseAll() {
+      MessageContainer mc = new MessageContainer(MessageContainer.MessageType.PauseAll);
+      MessageQueue.GetInstance().AddMessage(mc);
+    }
+
+    public void StopAll() {
+      MessageContainer mc = new MessageContainer(MessageContainer.MessageType.StopAll);
+      MessageQueue.GetInstance().AddMessage(mc);
+    }
+
+    public void AbortAll() {
+      MessageContainer mc = new MessageContainer(MessageContainer.MessageType.AbortAll);
+      MessageQueue.GetInstance().AddMessage(mc);
+    }
+
+    public void Sleep() {
+      MessageContainer mc = new MessageContainer(MessageContainer.MessageType.Sleep);
+      MessageQueue.GetInstance().AddMessage(mc);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveStatusInfo.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveStatusInfo.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveStatusInfo.cs	(revision 7085)
@@ -0,0 +1,98 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Threading;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  public class SlaveStatusInfo {
+    private static object coreLock = new object();
+    private static int tasksFetched;  // number of fetched jobs
+    private static int tasksStarted;  // number of started jobs
+    private static int tasksFinished; // everything went fine
+    private static int tasksAborted;  // server sent abort
+    private static int tasksFailed;   // tasks that failed in the sandbox
+    private static int exceptionsOccured; // number jobs failed caused by the business logic, not a faulted task
+    private static int usedCores;    // number of cores currently used
+
+    public static DateTime LoginTime { get; set; }
+
+    public static int UsedCores {
+      get { return usedCores; }
+    }
+
+    public static int TasksStarted {
+      get { return tasksStarted; }
+    }
+
+    public static int TasksFinished {
+      get { return tasksFinished; }
+    }
+
+    public static int TasksAborted {
+      get { return tasksAborted; }
+    }
+
+    public static int TasksFetched {
+      get { return tasksFetched; }
+    }
+
+    public static int TasksFailed {
+      get { return tasksFailed; }
+    }
+
+    public static int ExceptionsOccured {
+      get { return exceptionsOccured; }
+    }
+
+    public static void IncrementTasksStarted() {
+      Interlocked.Increment(ref tasksStarted);
+    }
+
+    public static void IncrementTasksFinished() {
+      Interlocked.Increment(ref tasksFinished);
+    }
+
+    public static void IncrementTasksFailed() {
+      Interlocked.Increment(ref tasksFailed);
+    }
+
+    public static void IncrementTasksAborted() {
+      Interlocked.Increment(ref tasksAborted);
+    }
+
+    public static void IncrementTasksFetched() {
+      Interlocked.Increment(ref tasksFetched);
+    }
+
+    public static void IncrementExceptionOccured() {
+      Interlocked.Increment(ref exceptionsOccured);
+    }
+
+    public static void IncrementUsedCores(int val) {
+      Interlocked.Add(ref usedCores, val);
+    }
+
+    public static void DecrementUsedCores(int val) {
+      Interlocked.Add(ref usedCores, -val);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveTask.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveTask.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/SlaveTask.cs	(revision 7085)
@@ -0,0 +1,286 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.IO;
+using System.Threading;
+using HeuristicLab.Clients.Hive.SlaveCore.Properties;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.PluginInfrastructure.Sandboxing;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+
+  /// <summary>
+  ///  Manages a single task and it's appdomain. 
+  /// </summary>
+  public class SlaveTask : MarshalByRefObject {
+    private Executor executor;
+    private AppDomain appDomain;
+    private Semaphore waitForStartBeforeKillSem;
+    private bool executorMonitoringRun;
+    private Thread executorMonitoringThread;
+    private PluginManager pluginManager;
+    private ILog log;
+    public Guid TaskId { get; private set; }
+    public bool IsPrepared { get; private set; }
+
+    private int coresNeeded;
+    public int CoresNeeded {
+      get { return coresNeeded; }
+      set { this.coresNeeded = value; }
+    }
+
+    public TimeSpan ExecutionTime {
+      get {
+        try {
+          return executor != null ? executor.ExecutionTime : TimeSpan.Zero;
+        }
+        catch (Exception ex) {
+          EventLogManager.LogException(ex);
+          return TimeSpan.Zero;
+        }
+      }
+    }
+
+    public SlaveTask(PluginManager pluginManager, int coresNeeded, ILog log) {
+      this.pluginManager = pluginManager;
+      this.coresNeeded = coresNeeded;
+      this.log = log;
+      waitForStartBeforeKillSem = new Semaphore(0, 1);
+      executorMonitoringRun = true;
+      IsPrepared = false;
+    }
+
+    public void StartJobAsync(Task task, TaskData taskData) {
+      try {
+        this.TaskId = task.Id;
+        Prepare(task);
+        StartTaskInAppDomain(taskData);
+      }
+      catch (Exception) {
+        // make sure to clean up if something went wrong
+        DisposeAppDomain();
+        throw;
+      }
+    }
+
+    public void PauseTask() {
+      if (!IsPrepared) throw new AppDomainNotCreatedException();
+      if (!executor.IsPausing && !executor.IsStopping) executor.Pause();
+    }
+
+    public void StopTask() {
+      if (!IsPrepared) throw new AppDomainNotCreatedException();
+      if (!executor.IsPausing && !executor.IsStopping) executor.Stop();
+    }
+
+    private void Prepare(Task task) {
+      string pluginDir = Path.Combine(pluginManager.PluginTempBaseDir, task.Id.ToString());
+      string configFileName;
+      pluginManager.PreparePlugins(task, out configFileName);
+      appDomain = CreateAppDomain(task, pluginDir, configFileName);
+      IsPrepared = true;
+    }
+
+    private AppDomain CreateAppDomain(Task task, String pluginDir, string configFileName) {
+      if (task.IsPrivileged) {
+        appDomain = SandboxManager.CreateAndInitPrivilegedSandbox(task.Id.ToString(), pluginDir, Path.Combine(pluginDir, configFileName));
+      } else {
+        appDomain = SandboxManager.CreateAndInitSandbox(task.Id.ToString(), pluginDir, Path.Combine(pluginDir, configFileName));
+      }
+      appDomain.UnhandledException += new UnhandledExceptionEventHandler(AppDomain_UnhandledException);
+
+      log.LogMessage("Creating AppDomain");
+      executor = (Executor)appDomain.CreateInstanceAndUnwrap(typeof(Executor).Assembly.GetName().Name, typeof(Executor).FullName);
+
+      executor.TaskId = task.Id;
+      executor.CoresNeeded = task.CoresNeeded;
+      executor.MemoryNeeded = task.MemoryNeeded;
+      return appDomain;
+    }
+
+    private void StartTaskInAppDomain(TaskData taskData) {
+      executor.Start(taskData.Data);
+      waitForStartBeforeKillSem.Release();
+      StartExecutorMonitoringThread();
+    }
+
+    public void DisposeAppDomain() {
+      log.LogMessage(string.Format("Shutting down Appdomain for Task {0}", TaskId));
+      StopExecutorMonitoringThread();
+
+      if (executor != null) {
+        try {
+          executor.Dispose();
+        }
+        catch (Exception ex) {
+          EventLogManager.LogException(ex);
+        }
+      }
+
+      if (appDomain != null) {
+        appDomain.UnhandledException -= new UnhandledExceptionEventHandler(AppDomain_UnhandledException);
+        int repeat = Settings.Default.PluginDeletionRetries;
+        while (repeat > 0) {
+          try {
+            waitForStartBeforeKillSem.WaitOne();
+            AppDomain.Unload(appDomain);
+            waitForStartBeforeKillSem.Dispose();
+            repeat = 0;
+          }
+          catch (CannotUnloadAppDomainException) {
+            log.LogMessage("Could not unload AppDomain, will try again in 1 sec.");
+            Thread.Sleep(Settings.Default.PluginDeletionTimeout);
+            repeat--;
+            if (repeat == 0) {
+              throw; // rethrow and let app crash
+            }
+          }
+        }
+      }
+      pluginManager.DeletePluginsForJob(TaskId);
+      GC.Collect();
+    }
+
+    private void AppDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
+      DisposeAppDomain();
+      OnExceptionOccured(new Exception("Unhandled exception: " + e.ExceptionObject.ToString()));
+    }
+
+    public TaskData GetTaskData() {
+      TaskData data = null;
+      try {
+        data = executor.GetTaskData();
+      }
+      catch (Exception ex) {
+        EventLogManager.LogException(ex);
+      }
+      return data;
+    }
+
+    #region ExecutorMonitorThread
+    private void StartExecutorMonitoringThread() {
+      executorMonitoringThread = new Thread(MonitorExecutor);
+      executorMonitoringThread.Start();
+    }
+
+    private void StopExecutorMonitoringThread() {
+      if (executorMonitoringThread != null) {
+        if (executorMonitoringRun) {
+          executorMonitoringRun = false;
+          executor.ExecutorCommandQueue.AddMessage(ExecutorMessageType.StopExecutorMonitoringThread);
+        }
+      }
+    }
+
+    /// <summary>
+    /// Because the executor is in an appdomain and is not able to call back 
+    /// (because of security -> lease time for marshall-by-ref object is 5 min),
+    /// we have to poll the executor for events we have to react to (e.g. task finished...)    
+    /// </summary>
+    private void MonitorExecutor() {
+      while (executorMonitoringRun) {
+        //this call goes through the appdomain border. We have to 
+        //poll so that the the lease gets renewed
+        ExecutorMessage message;
+        do {
+          message = executor.ExecutorCommandQueue.GetMessage();
+        } while (message == null);
+
+        switch (message.MessageType) {
+          case ExecutorMessageType.TaskStarted:
+            OnTaskStarted();
+            break;
+
+          case ExecutorMessageType.TaskPaused:
+            executorMonitoringRun = false;
+            OnTaskPaused();
+            DisposeAppDomain();
+            break;
+
+          case ExecutorMessageType.TaskStopped:
+            executorMonitoringRun = false;
+            OnTaskStopped();
+            DisposeAppDomain();
+            break;
+
+          case ExecutorMessageType.TaskFailed:
+            executorMonitoringRun = false;
+            OnTaskFailed(new TaskFailedException(executor.CurrentExceptionStr));
+            DisposeAppDomain();
+            break;
+
+          case ExecutorMessageType.StopExecutorMonitoringThread:
+            executorMonitoringRun = false;
+            break;
+
+          case ExecutorMessageType.ExceptionOccured:
+            executorMonitoringRun = false;
+            DisposeAppDomain();
+            if (executor.CurrentException != null) {
+              OnExceptionOccured(executor.CurrentException);
+            } else {
+              OnExceptionOccured(new Exception(string.Format("Unknow exception occured in Executor for task {0}", TaskId)));
+            }
+            break;
+        }
+      }
+    }
+    #endregion
+
+    public event EventHandler<EventArgs<Guid>> TaskStarted;
+    private void OnTaskStarted() {
+      var handler = TaskStarted;
+      if (handler != null) handler(this, new EventArgs<Guid>(this.TaskId));
+    }
+
+    public event EventHandler<EventArgs<Guid>> TaskStopped;
+    private void OnTaskStopped() {
+      var handler = TaskStopped;
+      if (handler != null) handler(this, new EventArgs<Guid>(this.TaskId));
+    }
+
+    public event EventHandler<EventArgs<Guid>> TaskPaused;
+    private void OnTaskPaused() {
+      var handler = TaskPaused;
+      if (handler != null) handler(this, new EventArgs<Guid>(this.TaskId));
+    }
+
+    public event EventHandler<EventArgs<Guid>> TaskAborted;
+    private void OnTaskAborted() {
+      var handler = TaskAborted;
+      if (handler != null) handler(this, new EventArgs<Guid>(this.TaskId));
+    }
+
+    public event EventHandler<EventArgs<Guid, Exception>> TaskFailed;
+    private void OnTaskFailed(Exception exception) {
+      var handler = TaskFailed;
+      if (handler != null) handler(this, new EventArgs<Guid, Exception>(this.TaskId, exception));
+    }
+
+    public event EventHandler<EventArgs<Guid, Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception exception) {
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Guid, Exception>(this.TaskId, exception));
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/StatusCommons.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/StatusCommons.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/StatusCommons.cs	(revision 7085)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  /// <summary>
+  /// Various Status Information for the ClientConsole
+  /// </summary>
+  [DataContract]
+  public class StatusCommons {
+    [DataMember]
+    public Guid ClientGuid { get; set; }
+    [DataMember]
+    public NetworkEnum.WcfConnState Status { get; set; }
+    [DataMember]
+    public DateTime ConnectedSince { get; set; }
+    [DataMember]
+    public int TotalCores { get; set; }
+    [DataMember]
+    public int FreeCores { get; set; }
+    [DataMember]
+    public int JobsFetched { get; set; }
+    [DataMember]
+    public int JobsStarted { get; set; }
+    [DataMember]
+    public int JobsFinished { get; set; }
+    [DataMember]
+    public int JobsAborted { get; set; }
+    [DataMember]
+    public int JobsFailed { get; set; }
+    [DataMember]
+    public int ExceptionsOccured { get; set; }
+    [DataMember]
+    public List<TaskStatus> Jobs { get; set; }
+    [DataMember]
+    public bool Asleep { get; set; }
+
+    public override string ToString() {
+      return string.Format("Status: {0}, Fetc,Start,Fin,Abor,Fail,Exc: {1},{2},{3},{4},{5},{6}",
+        Status, JobsFetched, JobsStarted, JobsFinished, JobsAborted, JobsFailed, ExceptionsOccured);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/TaskStatus.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/TaskStatus.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/TaskStatus.cs	(revision 7085)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+  [DataContract]
+  public class TaskStatus {
+    /// <summary>
+    /// Id of the Task
+    /// </summary>
+    [DataMember]
+    public Guid TaskId { get; set; }
+    /// <summary>
+    /// Current progress
+    /// </summary>
+    [DataMember]
+    public TimeSpan ExecutionTime { get; set; }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/WcfService.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/WcfService.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/WcfService.cs	(revision 7085)
@@ -0,0 +1,181 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive.SlaveCore {
+
+  /// <summary>
+  /// WcfService class is implemented as a singleton and works as a communication layer with the Hive server
+  /// </summary>
+  public class WcfService : MarshalByRefObject, IPluginProvider {
+    private static WcfService instance;
+    public DateTime ConnectedSince { get; private set; }
+    public NetworkEnum.WcfConnState ConnState { get; private set; }
+
+    /// <summary>
+    /// Getter for the Instance of the WcfService
+    /// </summary>
+    /// <returns>the Instance of the WcfService class</returns>
+    public static WcfService Instance {
+      get {
+        if (instance == null) {
+          instance = new WcfService();
+          ServiceLocator.Instance.Username = HeuristicLab.Clients.Hive.SlaveCore.Properties.Settings.Default.SlaveUser;
+          ServiceLocator.Instance.Password = HeuristicLab.Clients.Hive.SlaveCore.Properties.Settings.Default.SlavePwd;
+        }
+        return instance;
+      }
+    }
+
+    private WcfService() {
+      ConnState = NetworkEnum.WcfConnState.Disconnected;
+    }
+
+    #region Task Methods
+    public Task GetTask(Guid taskId) {
+      return CallHiveService(s => s.GetTask(taskId));
+    }
+
+    public void UpdateTask(Task task) {
+      CallHiveService(s => s.UpdateTask(task));
+    }
+    #endregion
+
+    #region TaskData Methods
+    public TaskData GetTaskData(Guid taskId) {
+      return CallHiveService(s => s.GetTaskData(taskId));
+    }
+
+    /// <summary>
+    /// Uploads the taskData and sets a new taskState (while correctly setting Transferring state)
+    /// </summary>
+    public void UpdateTaskData(Task task, TaskData taskData, Guid slaveId, TaskState state, string exception = "") {
+      CallHiveService(service => {
+        service.UpdateTask(task);
+        task = service.UpdateTaskState(task.Id, TaskState.Transferring, slaveId, null, null);
+        HiveClient.TryAndRepeat(() => {
+          service.UpdateTaskData(task, taskData);
+        }, HeuristicLab.Clients.Hive.SlaveCore.Properties.Settings.Default.PluginDeletionRetries, "Could not upload jobdata.");
+        service.UpdateTaskState(task.Id, state, slaveId, null, exception);
+      });
+    }
+
+    public Task UpdateJobState(Guid taskId, TaskState taskState, string exception) {
+      return CallHiveService(s => s.UpdateTaskState(taskId, taskState, ConfigManager.Instance.GetClientInfo().Id, null, exception));
+    }
+    #endregion
+
+    #region Heartbeat Methods
+    public List<MessageContainer> SendHeartbeat(Heartbeat heartbeat) {
+      return CallHiveService(s => s.Heartbeat(heartbeat));
+    }
+    #endregion
+
+    #region Plugin Methods
+    public Plugin GetPlugin(Guid id) {
+      return CallHiveService(s => s.GetPlugin(id));
+    }
+
+    public IEnumerable<Plugin> GetPlugins() {
+      return CallHiveService(s => s.GetPlugins());
+    }
+
+    public IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds) {
+      return CallHiveService(s => s.GetPluginDatas(pluginIds));
+    }
+    #endregion
+
+    #region Events
+    public event EventHandler Connected;
+    private void OnConnected() {
+      var handler = Connected;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception e) {
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(e));
+    }
+    #endregion
+
+    #region Helpers
+    /// <summary>
+    /// Connects with the server, registers the events and fires the Connected event.
+    /// </summary>
+    public void Connect(Slave slaveInfo) {
+      CallHiveService(service => {
+        ConnState = NetworkEnum.WcfConnState.Connected;
+        ConnectedSince = DateTime.Now;
+        service.Hello(slaveInfo);
+        OnConnected();
+      });
+    }
+
+    /// <summary>
+    /// Disconnects the slave from the server
+    /// </summary>
+    public void Disconnect() {
+      CallHiveService(service => {
+        service.GoodBye(ConfigManager.Instance.GetClientInfo().Id);
+        ConnState = NetworkEnum.WcfConnState.Disconnected;
+      });
+    }
+
+    public int GetNewHeartbeatInterval(Guid id) {
+      int ret = -1;
+      CallHiveService(s => ret = s.GetNewHeartbeatInterval(id));
+      return ret;
+    }
+
+    /// <summary>
+    /// Network communication error handler.
+    /// Every network error gets logged and the connection switches to faulted state
+    /// </summary>
+    private void HandleNetworkError(Exception e) {
+      ConnState = NetworkEnum.WcfConnState.Failed;
+      OnExceptionOccured(e);
+    }
+
+    public void CallHiveService(Action<IHiveService> call) {
+      try {
+        ServiceLocator.Instance.CallHiveService(call);
+      }
+      catch (Exception ex) {
+        HandleNetworkError(ex);
+      }
+    }
+
+    private T CallHiveService<T>(Func<IHiveService, T> call) {
+      try {
+        return ServiceLocator.Instance.CallHiveService(call);
+      }
+      catch (Exception ex) {
+        HandleNetworkError(ex);
+        return default(T);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/app.config
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/app.config	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Slave/3.3/app.config	(revision 7085)
@@ -0,0 +1,123 @@
+<?xml version="1.0"?>
+<configuration>
+  <configSections>
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+      <section name="HeuristicLab.Clients.Hive.SlaveCore.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+    </sectionGroup>
+  </configSections>
+  <runtime>
+    <gcServer enabled="true" />
+  </runtime>
+
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
+  </startup>
+ 
+  <system.serviceModel>
+    <behaviors>
+      <endpointBehaviors>
+        <behavior name="HiveBehaviorConfiguration">
+          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
+        </behavior>
+      </endpointBehaviors>
+    </behaviors>
+    <bindings>
+      <wsHttpBinding>
+        <binding name="wsHttpBinding_Hive" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
+          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
+            <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+    <services>
+      <service name="HeuristicLab.Clients.Hive.SlaveCore.SlaveCommunicationService">
+        <endpoint address="net.pipe://localhost/HeuristicLabSlaveCom" binding="netNamedPipeBinding" contract="HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts.ISlaveCommunication"/>
+      </service>
+    </services>
+    <client>
+      <endpoint name="SlaveCommunicationServiceEndpoint" address="net.pipe://localhost/HeuristicLabSlaveCom" binding="netNamedPipeBinding" contract="HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts.ISlaveCommunication"/>
+      <endpoint address="http://services.heuristiclab.com/Hive-3.3/HiveService.svc" binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_Hive" contract="HeuristicLab.Clients.Hive.IHiveService" name="wsHttpBinding_IHiveService" behaviorConfiguration="HiveBehaviorConfiguration">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ=="/>
+        </identity>
+      </endpoint>
+    </client>
+  </system.serviceModel>
+  <userSettings>
+    <HeuristicLab.Clients.Hive.SlaveCore.Properties.Settings>
+      <setting name="HeartbeatInterval" serializeAs="String">
+        <value>00:00:20</value>
+      </setting>
+      <setting name="LastUsedFileName" serializeAs="String">
+        <value>lastUsed.dat</value>
+      </setting>
+      <setting name="PluginCacheDir" serializeAs="String">
+        <value>PluginCache</value>
+      </setting>
+      <setting name="PluginTempBaseDir" serializeAs="String">
+        <value>PluginTemp</value>
+      </setting>
+      <setting name="ConfigurationName" serializeAs="String">
+        <value>Configuration</value>
+      </setting>
+      <setting name="PluginInfrastructureDll" serializeAs="String">
+        <value>HeuristicLab.PluginInfrastructure-3.3.dll</value>
+      </setting>
+      <setting name="SharpZipLibDll" serializeAs="String">
+        <value>ICSharpCode.SharpZipLib.dll</value>
+      </setting>
+      <setting name="SharpZipLibLicense" serializeAs="String">
+        <value>ICSharpCode.SharpZipLib License.txt</value>
+      </setting>
+      <setting name="ClientsHiveSlaveCoreDll" serializeAs="String">
+        <value>HeuristicLab.Clients.Hive.SlaveCore-3.3.dll</value>
+      </setting>
+      <setting name="ClientsHiveDll" serializeAs="String">
+        <value>HeuristicLab.Clients.Hive-3.3.dll</value>
+      </setting>
+      <setting name="HiveDll" serializeAs="String">
+        <value>HeuristicLab.Hive-3.3.dll</value>
+      </setting>
+      <setting name="ClientsCommonDll" serializeAs="String">
+        <value>HeuristicLab.Clients.Common-3.3.dll</value>
+      </setting>
+      <setting name="PluginLifetime" serializeAs="String">
+        <value>3</value>
+      </setting>
+      <setting name="DirOpSleepTime" serializeAs="String">
+        <value>00:00:01</value>
+      </setting>
+      <setting name="PluginDeletionRetries" serializeAs="String">
+        <value>5</value>
+      </setting>
+      <setting name="PluginDeletionTimeout" serializeAs="String">
+        <value>00:00:01</value>
+      </setting>
+      <setting name="ExecutorSemTimeouts" serializeAs="String">
+        <value>00:00:46</value>
+      </setting>
+      <setting name="QueuesMaxThreads" serializeAs="String">
+        <value>5000</value>
+      </setting>
+      <setting name="SlaveCommunicationServiceEndpoint" serializeAs="String">
+        <value>SlaveCommunicationServiceEndpoint</value>
+      </setting>
+      <setting name="SlaveUser" serializeAs="String">
+        <value>hiveslave</value>
+      </setting>
+      <setting name="SlavePwd" serializeAs="String">
+        <value>hiveslave</value>
+      </setting>
+      <setting name="MaxLogCount" serializeAs="String">
+        <value>1</value>
+      </setting>
+      <setting name="ExecutorQueueTimeout" serializeAs="String">
+        <value>00:00:20</value>
+      </setting>
+    </HeuristicLab.Clients.Hive.SlaveCore.Properties.Settings>
+  </userSettings>
+</configuration>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/GanttChart/GanttChart.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/GanttChart/GanttChart.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/GanttChart/GanttChart.Designer.cs	(revision 7085)
@@ -0,0 +1,73 @@
+﻿namespace HeuristicLab.Clients.Hive.Views {
+  partial class GanttChart {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      this.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // chart
+      // 
+      this.chart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      chartArea1.Name = "ChartArea1";
+      this.chart.ChartAreas.Add(chartArea1);
+      legend1.Name = "Legend";
+      this.chart.Legends.Add(legend1);
+      this.chart.Location = new System.Drawing.Point(0, 0);
+      this.chart.Name = "chart";
+      series1.ChartArea = "ChartArea1";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.RangeBar;
+      series1.CustomProperties = "DrawingStyle=Cylinder";
+      series1.IsVisibleInLegend = false;
+      series1.Legend = "Legend";
+      series1.Name = "Series1";
+      series1.YValuesPerPoint = 2;
+      series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time;
+      this.chart.Series.Add(series1);
+      this.chart.Size = new System.Drawing.Size(687, 347);
+      this.chart.TabIndex = 0;
+      this.chart.Text = "chart";
+      // 
+      // GanttChart
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.chart);
+      this.Name = "GanttChart";
+      this.Size = new System.Drawing.Size(687, 347);
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private Visualization.ChartControlsExtensions.EnhancedChart chart;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/GanttChart/GanttChart.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/GanttChart/GanttChart.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/GanttChart/GanttChart.cs	(revision 7085)
@@ -0,0 +1,73 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  public partial class GanttChart : UserControl {
+
+    private IDictionary<string, Color> categories = new Dictionary<string, Color>();
+    private IDictionary<string, int> rowNames = new Dictionary<string, int>();
+
+    public GanttChart() {
+      InitializeComponent();
+    }
+
+    public void AddCategory(string name, Color color) {
+      categories[name] = color;
+      chart.Legends[0].CustomItems.Add(color, name);
+    }
+
+    public void AddData(string rowName, string category, DateTime start, DateTime end, string tooltip, bool showLabel = true) {
+      AddRowName(rowName);
+      var point = CreateDataPoint(rowNames[rowName], rowName, start, end, showLabel ? category : string.Empty, categories[category]);
+      point.ToolTip = tooltip;
+      chart.Series[0].Points.Add(point);
+    }
+
+    private void AddRowName(string rowName) {
+      if (!rowNames.ContainsKey(rowName)) {
+        int nextId = rowNames.Count == 0 ? 1 : rowNames.Values.Max() + 1;
+        rowNames.Add(rowName, nextId);
+      }
+    }
+
+    private static DataPoint CreateDataPoint(double x, string axisLabel, DateTime start, DateTime end, string text, Color color) {
+      var point = new DataPoint(x, new double[] { start.ToOADate(), end.ToOADate() });
+      point.Color = color;
+      point.Label = text;
+      point.AxisLabel = axisLabel;
+      return point;
+    }
+
+    public void Reset() {
+      chart.Series[0].Points.Clear();
+      categories.Clear();
+      chart.Legends[0].CustomItems.Clear();
+      rowNames.Clear();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/GanttChart/GanttChart.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/GanttChart/GanttChart.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/GanttChart/GanttChart.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj	(revision 7085)
@@ -0,0 +1,317 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E1D6C801-892A-406A-B606-F158E36DD3C3}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Hive.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Hive.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HiveTasks\OptimizerHiveTaskView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="HiveTasks\OptimizerHiveTaskView.designer.cs">
+      <DependentUpon>OptimizerHiveTaskView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveItemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="HiveItemView.Designer.cs">
+      <DependentUpon>HiveItemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveTasks\HiveTaskListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="HiveTasks\HiveTaskListView.designer.cs">
+      <DependentUpon>HiveTaskListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveTasks\HiveTaskView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="HiveTasks\HiveTaskView.designer.cs">
+      <DependentUpon>HiveTaskView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="TreeView\NewTaskTreeNodeAction.cs" />
+    <Compile Include="TreeView\DeleteTaskTreeNodeAction.cs" />
+    <Compile Include="TreeView\HiveTaskItemTreeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TreeView\HiveTaskItemTreeView.Designer.cs">
+      <DependentUpon>HiveTaskItemTreeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="TreeView\ItemTreeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TreeView\ItemTreeView.designer.cs">
+      <DependentUpon>ItemTreeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="StateLog\StateLogGanttChartListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StateLog\StateLogGanttChartListView.designer.cs">
+      <DependentUpon>StateLogGanttChartListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="GanttChart\GanttChart.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="GanttChart\GanttChart.Designer.cs">
+      <DependentUpon>GanttChart.cs</DependentUpon>
+    </Compile>
+    <Compile Include="StateLog\StateLogGanttChartView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StateLog\StateLogGanttChartView.designer.cs">
+      <DependentUpon>StateLogGanttChartView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="StateLog\StateLogListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StateLog\StateLogListView.designer.cs">
+      <DependentUpon>StateLogListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="StateLog\StateLogView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StateLog\StateLogView.designer.cs">
+      <DependentUpon>StateLogView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveImageLibrary.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>HiveImageLibrary.resx</DependentUpon>
+    </Compile>
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Progress\ProgressView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Progress\ProgressView.designer.cs">
+      <DependentUpon>ProgressView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="HiveTasks\OptimizerHiveTaskView.resx">
+      <DependentUpon>OptimizerHiveTaskView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="HiveTasks\HiveTaskView.resx">
+      <DependentUpon>HiveTaskView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="TreeView\ItemTreeView.resx">
+      <DependentUpon>ItemTreeView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="StateLog\StateLogGanttChartListView.resx">
+      <DependentUpon>StateLogGanttChartListView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="GanttChart\GanttChart.resx">
+      <DependentUpon>GanttChart.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="StateLog\StateLogGanttChartView.resx">
+      <DependentUpon>StateLogGanttChartView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="StateLog\StateLogView.resx">
+      <DependentUpon>StateLogView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="HiveImageLibrary.resx">
+      <Generator>PublicResXFileCodeGenerator</Generator>
+      <LastGenOutput>HiveImageLibrary.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Progress\ProgressView.resx">
+      <DependentUpon>ProgressView.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Images\Monitor.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Images\network_center.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive\3.3\HeuristicLab.Clients.Hive-3.3.csproj">
+      <Project>{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}</Project>
+      <Name>HeuristicLab.Clients.Hive-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive\3.3\HeuristicLab.Hive-3.3.csproj">
+      <Project>{F98A1740-9AC9-4D36-A582-6A2D0D06978D}</Project>
+      <Name>HeuristicLab.Hive-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
+      <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
+      <Name>HeuristicLab.MainForm-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimizer\3.3\HeuristicLab.Optimizer-3.3.csproj">
+      <Project>{C664305E-497C-4533-A140-967DEDB05C19}</Project>
+      <Name>HeuristicLab.Optimizer-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Visualization.ChartControlsExtensions\3.3\HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj">
+      <Project>{315BDA09-3F4F-49B3-9790-B37CFC1C5750}</Project>
+      <Name>HeuristicLab.Visualization.ChartControlsExtensions-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveImageLibrary.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveImageLibrary.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveImageLibrary.Designer.cs	(revision 7085)
@@ -0,0 +1,77 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.239
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.Hive.Views {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // 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()]
+    public class HiveImageLibrary {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal HiveImageLibrary() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        public static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Clients.Hive.Views.HiveImageLibrary", typeof(HiveImageLibrary).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        public static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        public static System.Drawing.Icon Slave {
+            get {
+                object obj = ResourceManager.GetObject("Slave", resourceCulture);
+                return ((System.Drawing.Icon)(obj));
+            }
+        }
+        
+        public static System.Drawing.Icon SlaveGroup {
+            get {
+                object obj = ResourceManager.GetObject("SlaveGroup", resourceCulture);
+                return ((System.Drawing.Icon)(obj));
+            }
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveImageLibrary.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveImageLibrary.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveImageLibrary.resx	(revision 7085)
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="Slave" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Images\Monitor.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="SlaveGroup" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Images\network_center.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveItemView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveItemView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveItemView.Designer.cs	(revision 7085)
@@ -0,0 +1,58 @@
+﻿namespace HeuristicLab.Clients.Hive.Views {
+  partial class HiveItemView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.storeButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.SuspendLayout();
+      // 
+      // storeButton
+      // 
+      this.storeButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeButton.Location = new System.Drawing.Point(0, 0);
+      this.storeButton.Name = "storeButton";
+      this.storeButton.Size = new System.Drawing.Size(24, 24);
+      this.storeButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.storeButton, "Store Data");
+      this.storeButton.UseVisualStyleBackColor = true;
+      this.storeButton.Click += new System.EventHandler(this.storeButton_Click);
+      // 
+      // HiveItemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.storeButton);
+      this.Name = "HiveItemView";
+      this.Size = new System.Drawing.Size(354, 308);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.Button storeButton;
+    protected System.Windows.Forms.ToolTip toolTip;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveItemView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveItemView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveItemView.cs	(revision 7085)
@@ -0,0 +1,83 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ComponentModel;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [View("HiveItem View")]
+  [Content(typeof(HiveItem), IsDefaultView = false)]
+  [Content(typeof(IHiveItem), IsDefaultView = false)]
+  public partial class HiveItemView : ItemView {
+    public new IHiveItem Content {
+      get { return (IHiveItem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public HiveItemView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.PropertyChanged -= new PropertyChangedEventHandler(Content_PropertyChanged);
+      Content.ModifiedChanged -= new EventHandler(Content_ModifiedChanged);
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.PropertyChanged += new PropertyChangedEventHandler(Content_PropertyChanged);
+      Content.ModifiedChanged += new EventHandler(Content_ModifiedChanged);
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      storeButton.Enabled = (Content != null) && !ReadOnly && Content.Modified;
+    }
+
+    private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new PropertyChangedEventHandler(Content_PropertyChanged), sender, e);
+      else {
+        OnContentPropertyChanged(e.PropertyName);
+      }
+    }
+    protected virtual void OnContentPropertyChanged(string propertyName) { }
+    protected virtual void Content_ModifiedChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ModifiedChanged), sender, e);
+      else
+        SetEnabledStateOfControls();
+    }
+
+    protected virtual void storeButton_Click(object sender, EventArgs e) {
+      try {
+        Content.Store();
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog(this, "Store failed.", ex);
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskListView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskListView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskListView.cs	(revision 7085)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [View("TaskItemList View")]
+  [Content(typeof(IItemList<HiveTask>), false)]
+  public partial class HiveTaskListView : ItemListView<HiveTask> {
+
+    public HiveTaskListView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Tasks";
+    }
+
+    protected override HiveTask CreateItem() {
+      return null;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      this.addButton.Enabled = false;
+      this.moveDownButton.Enabled = false;
+      this.moveUpButton.Enabled = false;
+      this.removeButton.Enabled = false;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskListView.designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskListView.designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskListView.designer.cs	(revision 7085)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.Clients.Hive.Views {
+  partial class HiveTaskListView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskView.cs	(revision 7085)
@@ -0,0 +1,204 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [View("HiveTask View")]
+  [Content(typeof(HiveTask), true)]
+  [Content(typeof(HiveTask<>), false)]
+  public partial class HiveTaskView : ItemView {
+    public new HiveTask Content {
+      get { return (HiveTask)base.Content; }
+      set {
+        if (base.Content != value) {
+          base.Content = value;
+        }
+      }
+    }
+
+    public HiveTaskView() {
+      InitializeComponent();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ItemTaskChanged += new EventHandler(Content_TaskItemChanged);
+      Content.TaskChanged += new EventHandler(Content_TaskChanged);
+      Content.TaskStateChanged += new EventHandler(Content_TaskStateChanged);
+      Content.StateLogChanged += new EventHandler(Content_StateLogChanged);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ItemTaskChanged -= new EventHandler(Content_TaskItemChanged);
+      Content.TaskChanged -= new EventHandler(Content_TaskChanged);
+      Content.TaskStateChanged -= new EventHandler(Content_TaskStateChanged);
+      Content.StateLogChanged -= new EventHandler(Content_StateLogChanged);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content != null && Content.Task != null) {
+        computeInParallelCheckBox.Checked = Content.ItemTask.ComputeInParallel;
+      } else {
+        computeInParallelCheckBox.Checked = false;
+      }
+      Content_TaskItemChanged(this, EventArgs.Empty);
+      Content_TaskChanged(this, EventArgs.Empty);
+      Content_TaskStateChanged(this, EventArgs.Empty);
+    }
+
+    protected virtual void RegisterTaskEvents() {
+      if (Content != null && Content.Task != null) {
+        Content.ItemTask.ComputeInParallelChanged += new EventHandler(OptimizerJob_ComputeInParallelChanged);
+        Content.ItemTask.ItemChanged += new EventHandler(Job_ItemChanged);
+      }
+    }
+
+    protected virtual void DeregisterTaskEvents() {
+      if (Content != null && Content.Task != null) {
+        Content.ItemTask.ComputeInParallelChanged -= new EventHandler(OptimizerJob_ComputeInParallelChanged);
+        Content.ItemTask.ItemChanged -= new EventHandler(Job_ItemChanged);
+      }
+    }
+
+    #region Content Events
+    protected virtual void Content_TaskChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_TaskChanged), sender, e);
+      } else {
+        if (Content != null && Content.Task != null) {
+          this.jobIdTextBox.Text = Content.Task.Id.ToString();
+          this.dateCreatedTextBox.Text = Content.Task.DateCreated.HasValue ? Content.Task.DateCreated.ToString() : string.Empty;
+          this.priorityComboBox.Text = Content.Task.Priority.ToString();
+          this.coresNeededComboBox.Text = Content.Task.CoresNeeded.ToString();
+          this.memoryNeededComboBox.Text = Content.Task.MemoryNeeded.ToString();
+        } else {
+          this.jobIdTextBox.Text = string.Empty;
+          this.dateCreatedTextBox.Text = string.Empty;
+          this.priorityComboBox.Text = "3";
+          this.coresNeededComboBox.Text = "1";
+          this.memoryNeededComboBox.Text = "256";
+        }
+      }
+    }
+
+    protected virtual void Content_TaskItemChanged(object sender, EventArgs e) {
+      RegisterTaskEvents();
+      Job_ItemChanged(this, e);
+    }
+
+    protected virtual void Job_ItemChanged(object sender, EventArgs e) {
+      if (Content != null && Content.Task != null && Content.ItemTask.Item != null) {
+      } else {
+      }
+    }
+
+    protected virtual void Content_TaskStateChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_TaskStateChanged), sender, e);
+      } else {
+        if (Content != null && Content.Task != null) {
+          this.stateTextBox.Text = Content.Task.State.ToString();
+          this.commandTextBox.Text = Content.Task.Command.ToString();
+          this.executionTimeTextBox.Text = Content.Task.ExecutionTime.ToString();
+          this.dateFinishedTextBox.Text = Content.Task.DateFinished.ToString();
+          this.exceptionTextBox.Text = Content.Task.CurrentStateLog != null ? Content.Task.CurrentStateLog.Exception : string.Empty;
+          this.lastUpdatedTextBox.Text = Content.Task.LastTaskDataUpdate.ToString();
+        } else {
+          this.stateTextBox.Text = string.Empty;
+          this.commandTextBox.Text = string.Empty;
+          this.executionTimeTextBox.Text = string.Empty;
+          this.dateCalculatedText.Text = string.Empty;
+          this.dateFinishedTextBox.Text = string.Empty;
+          this.exceptionTextBox.Text = string.Empty;
+          this.lastUpdatedTextBox.Text = string.Empty;
+        }
+        Content_StateLogChanged(this, EventArgs.Empty);
+        SetEnabledStateOfControls();
+      }
+    }
+
+    protected virtual void OptimizerJob_ComputeInParallelChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(OptimizerJob_ComputeInParallelChanged), sender, e);
+      } else {
+        computeInParallelCheckBox.Checked = Content.ItemTask.ComputeInParallel;
+      }
+    }
+
+    protected virtual void Content_StateLogChanged(object sender, EventArgs e) {
+      if (Content != null) {
+        if (Content.ItemTask.ComputeInParallel) {
+          this.stateLogViewHost.Content = Content.ChildStateLogList;
+        } else {
+          this.stateLogViewHost.Content = Content.StateLog;
+        }
+      } else {
+        this.stateLogViewHost.Content = null;
+      }
+    }
+    #endregion
+
+    #region Child Control Events
+    protected virtual void computeInParallelCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (Content != null && Content.ItemTask != null) {
+        this.Content.ItemTask.ComputeInParallel = this.computeInParallelCheckBox.Checked;
+      }
+    }
+
+    protected virtual void exceptionTextBox_DoubleClick(object sender, EventArgs e) {
+      using (TextDialog dialog = new TextDialog("Exception", exceptionTextBox.Text, ReadOnly || !Content.CanChangeDescription)) {
+        if (dialog.ShowDialog(this) == DialogResult.OK)
+          Content.Description = dialog.Content;
+      }
+    }
+
+    protected virtual void modifyItemButton_Click(object sender, EventArgs e) {
+      MainFormManager.MainForm.ShowContent(Content.ItemTask.Item);
+    }
+    #endregion
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      this.jobIdTextBox.ReadOnly = true;
+      this.stateTextBox.ReadOnly = true;
+      this.commandTextBox.ReadOnly = true;
+      this.executionTimeTextBox.ReadOnly = true;
+      this.dateCreatedTextBox.ReadOnly = true;
+      this.dateCalculatedText.ReadOnly = true;
+      this.dateFinishedTextBox.ReadOnly = true;
+      this.exceptionTextBox.ReadOnly = true;
+      this.lastUpdatedTextBox.ReadOnly = true;
+
+      this.priorityComboBox.Enabled = !this.ReadOnly;
+      this.coresNeededComboBox.Enabled = !this.ReadOnly;
+      this.memoryNeededComboBox.Enabled = !this.ReadOnly;
+      this.computeInParallelCheckBox.Enabled = !this.ReadOnly && this.Content != null && this.Content.ItemTask != null && this.Content.ItemTask.IsParallelizable;
+
+      this.modifyItemButton.Enabled = (Content != null && Content.ItemTask.Item != null && (Content.Task.State == TaskState.Paused || Content.Task.State == TaskState.Offline || Content.Task.State == TaskState.Finished || Content.Task.State == TaskState.Failed || Content.Task.State == TaskState.Aborted));
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskView.designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskView.designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskView.designer.cs	(revision 7085)
@@ -0,0 +1,561 @@
+﻿namespace HeuristicLab.Clients.Hive.Views {
+  partial class HiveTaskView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.stateLogTabPage = new System.Windows.Forms.TabPage();
+      this.stateLogViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.detailsTabPage = new System.Windows.Forms.TabPage();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+      this.groupBoxGenerel = new System.Windows.Forms.GroupBox();
+      this.jobIdLabel = new System.Windows.Forms.Label();
+      this.jobIdTextBox = new System.Windows.Forms.TextBox();
+      this.lastUpdatedLabel = new System.Windows.Forms.Label();
+      this.lastUpdatedTextBox = new System.Windows.Forms.TextBox();
+      this.priorityLabel = new System.Windows.Forms.Label();
+      this.configurationGroupBox = new System.Windows.Forms.GroupBox();
+      this.memoryNeededLabel = new System.Windows.Forms.Label();
+      this.coresNeededLabel = new System.Windows.Forms.Label();
+      this.computeInParallelLabel = new System.Windows.Forms.Label();
+      this.computeInParallelCheckBox = new System.Windows.Forms.CheckBox();
+      this.jobStatusGroupBox = new System.Windows.Forms.GroupBox();
+      this.commandTextBox = new System.Windows.Forms.TextBox();
+      this.commandLabel = new System.Windows.Forms.Label();
+      this.stateTextBox = new System.Windows.Forms.TextBox();
+      this.dateCalculatedLabel = new System.Windows.Forms.Label();
+      this.stateLabel = new System.Windows.Forms.Label();
+      this.dateCalculatedText = new System.Windows.Forms.TextBox();
+      this.dateFinishedTextBox = new System.Windows.Forms.TextBox();
+      this.executionTimeTextBox = new System.Windows.Forms.TextBox();
+      this.dateCreatedTextBox = new System.Windows.Forms.TextBox();
+      this.executionTimeLabel = new System.Windows.Forms.Label();
+      this.exceptionLabel = new System.Windows.Forms.Label();
+      this.dateCreatedLabel = new System.Windows.Forms.Label();
+      this.dateFinishedLabel = new System.Windows.Forms.Label();
+      this.exceptionTextBox = new System.Windows.Forms.TextBox();
+      this.modifyItemButton = new System.Windows.Forms.Button();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.priorityComboBox = new System.Windows.Forms.ComboBox();
+      this.coresNeededComboBox = new System.Windows.Forms.ComboBox();
+      this.memoryNeededComboBox = new System.Windows.Forms.ComboBox();
+      this.stateLogTabPage.SuspendLayout();
+      this.detailsTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.groupBoxGenerel.SuspendLayout();
+      this.configurationGroupBox.SuspendLayout();
+      this.jobStatusGroupBox.SuspendLayout();
+      this.tabControl.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // stateLogTabPage
+      // 
+      this.stateLogTabPage.Controls.Add(this.stateLogViewHost);
+      this.stateLogTabPage.Location = new System.Drawing.Point(4, 22);
+      this.stateLogTabPage.Name = "stateLogTabPage";
+      this.stateLogTabPage.Size = new System.Drawing.Size(563, 375);
+      this.stateLogTabPage.TabIndex = 5;
+      this.stateLogTabPage.Text = "State";
+      this.stateLogTabPage.UseVisualStyleBackColor = true;
+      // 
+      // stateLogViewHost
+      // 
+      this.stateLogViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.stateLogViewHost.Caption = "View";
+      this.stateLogViewHost.Content = null;
+      this.stateLogViewHost.Enabled = false;
+      this.stateLogViewHost.Location = new System.Drawing.Point(3, 3);
+      this.stateLogViewHost.Name = "stateLogViewHost";
+      this.stateLogViewHost.ReadOnly = false;
+      this.stateLogViewHost.Size = new System.Drawing.Size(557, 407);
+      this.stateLogViewHost.TabIndex = 0;
+      this.stateLogViewHost.ViewsLabelVisible = true;
+      this.stateLogViewHost.ViewType = null;
+      // 
+      // detailsTabPage
+      // 
+      this.detailsTabPage.Controls.Add(this.splitContainer1);
+      this.detailsTabPage.Controls.Add(this.modifyItemButton);
+      this.detailsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.detailsTabPage.Name = "detailsTabPage";
+      this.detailsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.detailsTabPage.Size = new System.Drawing.Size(563, 375);
+      this.detailsTabPage.TabIndex = 0;
+      this.detailsTabPage.Text = "Details";
+      this.detailsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.splitContainer1.Location = new System.Drawing.Point(6, 6);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.jobStatusGroupBox);
+      this.splitContainer1.Size = new System.Drawing.Size(551, 200);
+      this.splitContainer1.SplitterDistance = 275;
+      this.splitContainer1.TabIndex = 44;
+      // 
+      // splitContainer2
+      // 
+      this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer2.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer2.Name = "splitContainer2";
+      this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.groupBoxGenerel);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.configurationGroupBox);
+      this.splitContainer2.Size = new System.Drawing.Size(275, 200);
+      this.splitContainer2.SplitterDistance = 100;
+      this.splitContainer2.TabIndex = 0;
+      // 
+      // groupBoxGenerel
+      // 
+      this.groupBoxGenerel.Controls.Add(this.priorityComboBox);
+      this.groupBoxGenerel.Controls.Add(this.jobIdLabel);
+      this.groupBoxGenerel.Controls.Add(this.jobIdTextBox);
+      this.groupBoxGenerel.Controls.Add(this.lastUpdatedLabel);
+      this.groupBoxGenerel.Controls.Add(this.lastUpdatedTextBox);
+      this.groupBoxGenerel.Controls.Add(this.priorityLabel);
+      this.groupBoxGenerel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.groupBoxGenerel.Location = new System.Drawing.Point(0, 0);
+      this.groupBoxGenerel.Name = "groupBoxGenerel";
+      this.groupBoxGenerel.Size = new System.Drawing.Size(275, 100);
+      this.groupBoxGenerel.TabIndex = 43;
+      this.groupBoxGenerel.TabStop = false;
+      this.groupBoxGenerel.Text = "Generel";
+      // 
+      // jobIdLabel
+      // 
+      this.jobIdLabel.AutoSize = true;
+      this.jobIdLabel.Location = new System.Drawing.Point(6, 16);
+      this.jobIdLabel.Name = "jobIdLabel";
+      this.jobIdLabel.Size = new System.Drawing.Size(19, 13);
+      this.jobIdLabel.TabIndex = 25;
+      this.jobIdLabel.Text = "Id:";
+      // 
+      // jobIdTextBox
+      // 
+      this.jobIdTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.jobIdTextBox.Location = new System.Drawing.Point(87, 13);
+      this.jobIdTextBox.Name = "jobIdTextBox";
+      this.jobIdTextBox.Size = new System.Drawing.Size(182, 20);
+      this.jobIdTextBox.TabIndex = 26;
+      // 
+      // lastUpdatedLabel
+      // 
+      this.lastUpdatedLabel.AutoSize = true;
+      this.lastUpdatedLabel.Location = new System.Drawing.Point(6, 60);
+      this.lastUpdatedLabel.Name = "lastUpdatedLabel";
+      this.lastUpdatedLabel.Size = new System.Drawing.Size(75, 13);
+      this.lastUpdatedLabel.TabIndex = 1;
+      this.lastUpdatedLabel.Text = "Last changed:";
+      // 
+      // lastUpdatedTextBox
+      // 
+      this.lastUpdatedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.lastUpdatedTextBox.Location = new System.Drawing.Point(87, 57);
+      this.lastUpdatedTextBox.Name = "lastUpdatedTextBox";
+      this.lastUpdatedTextBox.Size = new System.Drawing.Size(182, 20);
+      this.lastUpdatedTextBox.TabIndex = 2;
+      // 
+      // priorityLabel
+      // 
+      this.priorityLabel.AutoSize = true;
+      this.priorityLabel.Location = new System.Drawing.Point(6, 38);
+      this.priorityLabel.Name = "priorityLabel";
+      this.priorityLabel.Size = new System.Drawing.Size(41, 13);
+      this.priorityLabel.TabIndex = 42;
+      this.priorityLabel.Text = "Priority:";
+      // 
+      // configurationGroupBox
+      // 
+      this.configurationGroupBox.Controls.Add(this.memoryNeededComboBox);
+      this.configurationGroupBox.Controls.Add(this.coresNeededComboBox);
+      this.configurationGroupBox.Controls.Add(this.memoryNeededLabel);
+      this.configurationGroupBox.Controls.Add(this.coresNeededLabel);
+      this.configurationGroupBox.Controls.Add(this.computeInParallelLabel);
+      this.configurationGroupBox.Controls.Add(this.computeInParallelCheckBox);
+      this.configurationGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.configurationGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.configurationGroupBox.Name = "configurationGroupBox";
+      this.configurationGroupBox.Size = new System.Drawing.Size(275, 96);
+      this.configurationGroupBox.TabIndex = 27;
+      this.configurationGroupBox.TabStop = false;
+      this.configurationGroupBox.Text = "Resource demands";
+      // 
+      // memoryNeededLabel
+      // 
+      this.memoryNeededLabel.AutoSize = true;
+      this.memoryNeededLabel.Location = new System.Drawing.Point(6, 38);
+      this.memoryNeededLabel.Name = "memoryNeededLabel";
+      this.memoryNeededLabel.Size = new System.Drawing.Size(122, 13);
+      this.memoryNeededLabel.TabIndex = 40;
+      this.memoryNeededLabel.Text = "Memory needed (in MB):";
+      // 
+      // coresNeededLabel
+      // 
+      this.coresNeededLabel.AutoSize = true;
+      this.coresNeededLabel.Location = new System.Drawing.Point(6, 16);
+      this.coresNeededLabel.Name = "coresNeededLabel";
+      this.coresNeededLabel.Size = new System.Drawing.Size(101, 13);
+      this.coresNeededLabel.TabIndex = 39;
+      this.coresNeededLabel.Text = "Nr. of cores needed";
+      // 
+      // computeInParallelLabel
+      // 
+      this.computeInParallelLabel.AutoSize = true;
+      this.computeInParallelLabel.Location = new System.Drawing.Point(6, 60);
+      this.computeInParallelLabel.Name = "computeInParallelLabel";
+      this.computeInParallelLabel.Size = new System.Drawing.Size(122, 13);
+      this.computeInParallelLabel.TabIndex = 36;
+      this.computeInParallelLabel.Text = "Compute task in parallel:";
+      // 
+      // computeInParallelCheckBox
+      // 
+      this.computeInParallelCheckBox.AutoSize = true;
+      this.computeInParallelCheckBox.Location = new System.Drawing.Point(135, 61);
+      this.computeInParallelCheckBox.Name = "computeInParallelCheckBox";
+      this.computeInParallelCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.computeInParallelCheckBox.TabIndex = 35;
+      this.computeInParallelCheckBox.UseVisualStyleBackColor = true;
+      this.computeInParallelCheckBox.CheckedChanged += new System.EventHandler(this.computeInParallelCheckBox_CheckedChanged);
+      // 
+      // jobStatusGroupBox
+      // 
+      this.jobStatusGroupBox.Controls.Add(this.commandTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.commandLabel);
+      this.jobStatusGroupBox.Controls.Add(this.stateTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.dateCalculatedLabel);
+      this.jobStatusGroupBox.Controls.Add(this.stateLabel);
+      this.jobStatusGroupBox.Controls.Add(this.dateCalculatedText);
+      this.jobStatusGroupBox.Controls.Add(this.dateFinishedTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.executionTimeTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.dateCreatedTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.executionTimeLabel);
+      this.jobStatusGroupBox.Controls.Add(this.exceptionLabel);
+      this.jobStatusGroupBox.Controls.Add(this.dateCreatedLabel);
+      this.jobStatusGroupBox.Controls.Add(this.dateFinishedLabel);
+      this.jobStatusGroupBox.Controls.Add(this.exceptionTextBox);
+      this.jobStatusGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.jobStatusGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.jobStatusGroupBox.Name = "jobStatusGroupBox";
+      this.jobStatusGroupBox.Size = new System.Drawing.Size(272, 200);
+      this.jobStatusGroupBox.TabIndex = 24;
+      this.jobStatusGroupBox.TabStop = false;
+      this.jobStatusGroupBox.Text = "Task status";
+      // 
+      // commandTextBox
+      // 
+      this.commandTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.commandTextBox.Location = new System.Drawing.Point(95, 41);
+      this.commandTextBox.Name = "commandTextBox";
+      this.commandTextBox.Size = new System.Drawing.Size(171, 20);
+      this.commandTextBox.TabIndex = 24;
+      // 
+      // commandLabel
+      // 
+      this.commandLabel.AutoSize = true;
+      this.commandLabel.Location = new System.Drawing.Point(7, 41);
+      this.commandLabel.Name = "commandLabel";
+      this.commandLabel.Size = new System.Drawing.Size(57, 13);
+      this.commandLabel.TabIndex = 25;
+      this.commandLabel.Text = "Command:";
+      // 
+      // stateTextBox
+      // 
+      this.stateTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.stateTextBox.Location = new System.Drawing.Point(95, 19);
+      this.stateTextBox.Name = "stateTextBox";
+      this.stateTextBox.Size = new System.Drawing.Size(171, 20);
+      this.stateTextBox.TabIndex = 2;
+      // 
+      // dateCalculatedLabel
+      // 
+      this.dateCalculatedLabel.AutoSize = true;
+      this.dateCalculatedLabel.Location = new System.Drawing.Point(7, 108);
+      this.dateCalculatedLabel.Name = "dateCalculatedLabel";
+      this.dateCalculatedLabel.Size = new System.Drawing.Size(85, 13);
+      this.dateCalculatedLabel.TabIndex = 23;
+      this.dateCalculatedLabel.Text = "Date calculated:";
+      // 
+      // stateLabel
+      // 
+      this.stateLabel.AutoSize = true;
+      this.stateLabel.Location = new System.Drawing.Point(7, 19);
+      this.stateLabel.Name = "stateLabel";
+      this.stateLabel.Size = new System.Drawing.Size(35, 13);
+      this.stateLabel.TabIndex = 0;
+      this.stateLabel.Text = "State:";
+      // 
+      // dateCalculatedText
+      // 
+      this.dateCalculatedText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dateCalculatedText.Location = new System.Drawing.Point(95, 108);
+      this.dateCalculatedText.Name = "dateCalculatedText";
+      this.dateCalculatedText.Size = new System.Drawing.Size(171, 20);
+      this.dateCalculatedText.TabIndex = 22;
+      // 
+      // dateFinishedTextBox
+      // 
+      this.dateFinishedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dateFinishedTextBox.Location = new System.Drawing.Point(95, 130);
+      this.dateFinishedTextBox.Name = "dateFinishedTextBox";
+      this.dateFinishedTextBox.Size = new System.Drawing.Size(171, 20);
+      this.dateFinishedTextBox.TabIndex = 6;
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeTextBox.Location = new System.Drawing.Point(95, 64);
+      this.executionTimeTextBox.Name = "executionTimeTextBox";
+      this.executionTimeTextBox.Size = new System.Drawing.Size(171, 20);
+      this.executionTimeTextBox.TabIndex = 4;
+      // 
+      // dateCreatedTextBox
+      // 
+      this.dateCreatedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dateCreatedTextBox.Location = new System.Drawing.Point(95, 86);
+      this.dateCreatedTextBox.Name = "dateCreatedTextBox";
+      this.dateCreatedTextBox.Size = new System.Drawing.Size(171, 20);
+      this.dateCreatedTextBox.TabIndex = 5;
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.AutoSize = true;
+      this.executionTimeLabel.Location = new System.Drawing.Point(7, 64);
+      this.executionTimeLabel.Name = "executionTimeLabel";
+      this.executionTimeLabel.Size = new System.Drawing.Size(79, 13);
+      this.executionTimeLabel.TabIndex = 13;
+      this.executionTimeLabel.Text = "Execution time:";
+      // 
+      // exceptionLabel
+      // 
+      this.exceptionLabel.AutoSize = true;
+      this.exceptionLabel.Location = new System.Drawing.Point(7, 152);
+      this.exceptionLabel.Name = "exceptionLabel";
+      this.exceptionLabel.Size = new System.Drawing.Size(57, 13);
+      this.exceptionLabel.TabIndex = 19;
+      this.exceptionLabel.Text = "Exception:";
+      // 
+      // dateCreatedLabel
+      // 
+      this.dateCreatedLabel.AutoSize = true;
+      this.dateCreatedLabel.Location = new System.Drawing.Point(7, 86);
+      this.dateCreatedLabel.Name = "dateCreatedLabel";
+      this.dateCreatedLabel.Size = new System.Drawing.Size(72, 13);
+      this.dateCreatedLabel.TabIndex = 14;
+      this.dateCreatedLabel.Text = "Date created:";
+      // 
+      // dateFinishedLabel
+      // 
+      this.dateFinishedLabel.AutoSize = true;
+      this.dateFinishedLabel.Location = new System.Drawing.Point(7, 130);
+      this.dateFinishedLabel.Name = "dateFinishedLabel";
+      this.dateFinishedLabel.Size = new System.Drawing.Size(72, 13);
+      this.dateFinishedLabel.TabIndex = 15;
+      this.dateFinishedLabel.Text = "Date finished:";
+      // 
+      // exceptionTextBox
+      // 
+      this.exceptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.exceptionTextBox.Location = new System.Drawing.Point(95, 152);
+      this.exceptionTextBox.Name = "exceptionTextBox";
+      this.exceptionTextBox.Size = new System.Drawing.Size(171, 20);
+      this.exceptionTextBox.TabIndex = 10;
+      this.exceptionTextBox.DoubleClick += new System.EventHandler(this.exceptionTextBox_DoubleClick);
+      // 
+      // modifyItemButton
+      // 
+      this.modifyItemButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.modifyItemButton.Location = new System.Drawing.Point(3, 224);
+      this.modifyItemButton.Name = "modifyItemButton";
+      this.modifyItemButton.Size = new System.Drawing.Size(551, 23);
+      this.modifyItemButton.TabIndex = 3;
+      this.modifyItemButton.Text = "Modify Item";
+      this.modifyItemButton.UseVisualStyleBackColor = true;
+      this.modifyItemButton.Click += new System.EventHandler(this.modifyItemButton_Click);
+      // 
+      // tabControl
+      // 
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl.Controls.Add(this.detailsTabPage);
+      this.tabControl.Controls.Add(this.stateLogTabPage);
+      this.tabControl.Location = new System.Drawing.Point(3, 3);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(571, 401);
+      this.tabControl.TabIndex = 25;
+      // 
+      // priorityComboBox
+      // 
+      this.priorityComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.priorityComboBox.FormattingEnabled = true;
+      this.priorityComboBox.Items.AddRange(new object[] {
+            "1",
+            "2",
+            "3",
+            "4",
+            "5"});
+      this.priorityComboBox.Location = new System.Drawing.Point(87, 35);
+      this.priorityComboBox.Name = "priorityComboBox";
+      this.priorityComboBox.Size = new System.Drawing.Size(182, 21);
+      this.priorityComboBox.TabIndex = 43;
+      // 
+      // coresNeededComboBox
+      // 
+      this.coresNeededComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.coresNeededComboBox.FormattingEnabled = true;
+      this.coresNeededComboBox.Items.AddRange(new object[] {
+            "1",
+            "2",
+            "3",
+            "4",
+            "5",
+            "6",
+            "7",
+            "8"});
+      this.coresNeededComboBox.Location = new System.Drawing.Point(134, 13);
+      this.coresNeededComboBox.Name = "coresNeededComboBox";
+      this.coresNeededComboBox.Size = new System.Drawing.Size(134, 21);
+      this.coresNeededComboBox.TabIndex = 41;
+      // 
+      // memoryNeededComboBox
+      // 
+      this.memoryNeededComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.memoryNeededComboBox.FormattingEnabled = true;
+      this.memoryNeededComboBox.Items.AddRange(new object[] {
+            "128",
+            "256",
+            "512",
+            "1024",
+            "2048"});
+      this.memoryNeededComboBox.Location = new System.Drawing.Point(134, 35);
+      this.memoryNeededComboBox.Name = "memoryNeededComboBox";
+      this.memoryNeededComboBox.Size = new System.Drawing.Size(135, 21);
+      this.memoryNeededComboBox.TabIndex = 42;
+      // 
+      // HiveTaskView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "HiveTaskView";
+      this.Size = new System.Drawing.Size(577, 407);
+      this.stateLogTabPage.ResumeLayout(false);
+      this.detailsTabPage.ResumeLayout(false);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      this.groupBoxGenerel.ResumeLayout(false);
+      this.groupBoxGenerel.PerformLayout();
+      this.configurationGroupBox.ResumeLayout(false);
+      this.configurationGroupBox.PerformLayout();
+      this.jobStatusGroupBox.ResumeLayout(false);
+      this.jobStatusGroupBox.PerformLayout();
+      this.tabControl.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TabPage stateLogTabPage;
+    protected MainForm.WindowsForms.ViewHost stateLogViewHost;
+    protected System.Windows.Forms.TabPage detailsTabPage;
+    protected System.Windows.Forms.Label priorityLabel;
+    protected System.Windows.Forms.Label jobIdLabel;
+    protected System.Windows.Forms.TextBox jobIdTextBox;
+    protected System.Windows.Forms.GroupBox jobStatusGroupBox;
+    protected System.Windows.Forms.TextBox stateTextBox;
+    protected System.Windows.Forms.Label stateLabel;
+    protected System.Windows.Forms.TextBox dateFinishedTextBox;
+    protected System.Windows.Forms.TextBox executionTimeTextBox;
+    protected System.Windows.Forms.Label executionTimeLabel;
+    protected System.Windows.Forms.Label exceptionLabel;
+    protected System.Windows.Forms.Label dateFinishedLabel;
+    protected System.Windows.Forms.TextBox exceptionTextBox;
+    protected System.Windows.Forms.TabControl tabControl;
+    protected System.Windows.Forms.Label dateCalculatedLabel;
+    protected System.Windows.Forms.TextBox dateCalculatedText;
+    protected System.Windows.Forms.TextBox dateCreatedTextBox;
+    protected System.Windows.Forms.Label dateCreatedLabel;
+    protected System.Windows.Forms.TextBox commandTextBox;
+    protected System.Windows.Forms.Label commandLabel;
+    protected System.Windows.Forms.Button modifyItemButton;
+    protected System.Windows.Forms.TextBox lastUpdatedTextBox;
+    protected System.Windows.Forms.Label lastUpdatedLabel;
+    private System.Windows.Forms.GroupBox groupBoxGenerel;
+    protected System.Windows.Forms.GroupBox configurationGroupBox;
+    protected System.Windows.Forms.Label memoryNeededLabel;
+    protected System.Windows.Forms.Label coresNeededLabel;
+    protected System.Windows.Forms.Label computeInParallelLabel;
+    protected System.Windows.Forms.CheckBox computeInParallelCheckBox;
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.SplitContainer splitContainer2;
+    protected System.Windows.Forms.ComboBox priorityComboBox;
+    private System.Windows.Forms.ComboBox coresNeededComboBox;
+    protected System.Windows.Forms.ComboBox memoryNeededComboBox;
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/HiveTaskView.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 7085)
@@ -0,0 +1,89 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [View("OptimizerHiveTask View")]
+  [Content(typeof(OptimizerHiveTask), true)]
+  public partial class OptimizerHiveTaskView : HiveTaskView {
+    public new OptimizerHiveTask Content {
+      get { return (OptimizerHiveTask)base.Content; }
+      set {
+        if (base.Content != value) {
+          base.Content = value;
+        }
+      }
+    }
+
+    public OptimizerHiveTaskView() {
+      InitializeComponent();
+    }
+
+    protected override void Job_ItemChanged(object sender, EventArgs e) {
+      if (Content != null && Content.Task != null && Content.ItemTask.Item != null) {
+        runCollectionViewHost.Content = Content.ItemTask.Item.Runs;
+      } else {
+        runCollectionViewHost.Content = null;
+      }
+    }
+    #region Content Events
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.IsControllableChanged += new EventHandler(Content_IsControllableChanged);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.IsControllableChanged -= new EventHandler(Content_IsControllableChanged);
+      base.DeregisterContentEvents();
+    }
+
+    protected virtual void Content_IsControllableChanged(object sender, EventArgs e) {
+      SetEnabledStateOfControls();
+    }
+
+    #endregion
+
+    #region Child Control Events
+    private void restartButton_Click(object sender, EventArgs e) {
+      Content.Restart();
+    }
+
+    private void pauseButton_Click(object sender, EventArgs e) {
+      Content.Pause();
+    }
+
+    private void stopButton_Click(object sender, EventArgs e) {
+      Content.Stop();
+    }
+    #endregion
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+
+      this.restartButton.Enabled = Content != null && Content.IsControllable && !Content.Task.Command.HasValue && (Content.Task.State == TaskState.Paused || Content.Task.State == TaskState.Failed || Content.Task.State == TaskState.Aborted);
+      this.pauseButton.Enabled = Content != null && Content.IsControllable && !Content.Task.Command.HasValue && Content.Task.State == TaskState.Calculating;
+      this.stopButton.Enabled = Content != null && Content.IsControllable && !Content.Task.Command.HasValue && (Content.Task.State == TaskState.Calculating || Content.Task.State == TaskState.Waiting || Content.Task.State == TaskState.Paused);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.designer.cs	(revision 7085)
@@ -0,0 +1,146 @@
+﻿namespace HeuristicLab.Clients.Hive.Views {
+  partial class OptimizerHiveTaskView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptimizerHiveTaskView));
+      this.restartButton = new System.Windows.Forms.Button();
+      this.pauseButton = new System.Windows.Forms.Button();
+      this.stopButton = new System.Windows.Forms.Button();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.runCollectionViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.stateLogTabPage.SuspendLayout();
+      this.detailsTabPage.SuspendLayout();
+      this.configurationGroupBox.SuspendLayout();
+      this.jobStatusGroupBox.SuspendLayout();
+      this.tabControl.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // detailsTabPage
+      // 
+      this.detailsTabPage.Controls.Add(this.restartButton);
+      this.detailsTabPage.Controls.Add(this.pauseButton);
+      this.detailsTabPage.Controls.Add(this.stopButton);
+      this.detailsTabPage.Controls.SetChildIndex(this.stopButton, 0);
+      this.detailsTabPage.Controls.SetChildIndex(this.pauseButton, 0);
+      this.detailsTabPage.Controls.SetChildIndex(this.restartButton, 0);
+      // 
+      // tabControl
+      // 
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Controls.SetChildIndex(this.runsTabPage, 0);
+      this.tabControl.Controls.SetChildIndex(this.stateLogTabPage, 0);
+      this.tabControl.Controls.SetChildIndex(this.detailsTabPage, 0);
+      // 
+      // showItemButton
+      // 
+      this.modifyItemButton.Text = "Modify Optimizer";
+      // 
+      // restartButton
+      // 
+      this.restartButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.restartButton.Image = ((System.Drawing.Image)(resources.GetObject("restartButton.Image")));
+      this.restartButton.Location = new System.Drawing.Point(3, 348);
+      this.restartButton.Name = "restartButton";
+      this.restartButton.Size = new System.Drawing.Size(24, 24);
+      this.restartButton.TabIndex = 34;
+      this.restartButton.UseVisualStyleBackColor = true;
+      this.restartButton.Click += new System.EventHandler(this.restartButton_Click);
+      // 
+      // pauseButton
+      // 
+      this.pauseButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.pauseButton.Enabled = false;
+      this.pauseButton.Image = ((System.Drawing.Image)(resources.GetObject("pauseButton.Image")));
+      this.pauseButton.Location = new System.Drawing.Point(33, 348);
+      this.pauseButton.Name = "pauseButton";
+      this.pauseButton.Size = new System.Drawing.Size(24, 24);
+      this.pauseButton.TabIndex = 35;
+      this.pauseButton.UseVisualStyleBackColor = true;
+      this.pauseButton.Click += new System.EventHandler(this.pauseButton_Click);
+      // 
+      // stopButton
+      // 
+      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stopButton.Image = ((System.Drawing.Image)(resources.GetObject("stopButton.Image")));
+      this.stopButton.Location = new System.Drawing.Point(63, 348);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(24, 24);
+      this.stopButton.TabIndex = 36;
+      this.stopButton.UseVisualStyleBackColor = true;
+      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runCollectionViewHost);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Size = new System.Drawing.Size(563, 375);
+      this.runsTabPage.TabIndex = 6;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runCollectionViewHost
+      // 
+      this.runCollectionViewHost.Caption = "View";
+      this.runCollectionViewHost.Content = null;
+      this.runCollectionViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.runCollectionViewHost.Enabled = false;
+      this.runCollectionViewHost.Location = new System.Drawing.Point(0, 0);
+      this.runCollectionViewHost.Name = "runCollectionViewHost";
+      this.runCollectionViewHost.ReadOnly = false;
+      this.runCollectionViewHost.Size = new System.Drawing.Size(563, 375);
+      this.runCollectionViewHost.TabIndex = 1;
+      this.runCollectionViewHost.ViewsLabelVisible = true;
+      this.runCollectionViewHost.ViewType = null;
+      // 
+      // OptimizerHiveTaskView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "OptimizerHiveTaskView";
+      this.stateLogTabPage.ResumeLayout(false);
+      this.detailsTabPage.ResumeLayout(false);
+      this.detailsTabPage.PerformLayout();
+      this.configurationGroupBox.ResumeLayout(false);
+      this.configurationGroupBox.PerformLayout();
+      this.jobStatusGroupBox.ResumeLayout(false);
+      this.jobStatusGroupBox.PerformLayout();
+      this.tabControl.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button restartButton;
+    private System.Windows.Forms.Button pauseButton;
+    private System.Windows.Forms.Button stopButton;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private MainForm.WindowsForms.ViewHost runCollectionViewHost;
+
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.resx	(revision 7085)
@@ -0,0 +1,154 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="stopButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA
+        Cv8BNGKaggAAAWtJREFUOE/Nkz9IAmEYxl0KGqKtMVpaIiEoipYIgnByCSGhSQiCNBqCMiqwsr8clChF
+        YmYSSikeWEbZH2qwEhKhwhAXjQwKEbw0zyue7nO7hgtyqOEbf7/ne5+XVwJAUsorCSbB/0xAeT+xSBcw
+        685B52QwYU9jdOMFw+ZnDK0+YtCUyHzvSzACge/jH7hLcAg8FHB4w8IbZOEKsLD4s5AqdnheWLpAQJKj
+        TxyCUa4IOi/yWPPlsOJlMGePoU6+JS4g376NczgKsdg+y8PIg3pnBmPWV6ipMGq61sUFZOarCAf3JZ98
+        8I75XQKnoDEmoRg5RXW7QVxACvOHWdhO8lim36C1ptFvSEI5E4NsYA9VLUviAtK255qFcT+LSXsKahMP
+        66OQa0Po7HOholEvLiCr2jxmMG2LQEOFoBw/55M96FA50NpjRlmDTlxA9tym8qGpl0Z9twO1Mktx7srm
+        BZRLp34W/Oao/v4WvgBcI/R+TmAaZAAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="pauseButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA
+        Cv8BNGKaggAAAL5JREFUOE9j+P//PwMlmCLNIIsHoQG9m//+79rw63/e1EefQE5E56OHF4YXQJqvPvzz
+        Xzd0FVDtfwZ0PkED2tZ++3/r6e//qn6LwAag8wka0Lji8//LD3//l3ObBTYAnU/QgNrF7/+fuP77v5jd
+        JLAB6HyCBlTMe/V/94Wf//nNusEGoPMJGlAy+/n/9Sd//uc0aAUbgM4naEDB9Mf/F+z5/J9VpxFsADqf
+        oAGg+GfTbYIbgM4naACpGWvg8wIAkX3yJyVePz4AAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="restartButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA
+        Cv8BNGKaggAAALBJREFUOE9j+P//PwMlGKvmsv3ZbsQaitWAhBkR/4k1BKcBlmX6RBmC1YCoKUH/N9xa
+        /J8YQ7AaEDzBG2Q7UYZgNcCnyxlsAAhHLQrA6xKsBjg2W/zP2BAL1mzbrP9fp1jhv0QaN4hWQ48drAaY
+        1+ihaOZPYMGqGWQYVgP0SpXhNuPTjNMAlXwpsLMJacZpgHSGIFGacRogksyJ089EBSK20MaVNyjKiTi9
+        QGxOBKkDACT9xOni1RbMAAAAAElFTkSuQmCC
+</value>
+  </data>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [Plugin("HeuristicLab.Clients.Hive.Views", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Clients.Hive.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Clients.Hive", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]  
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]     
+  [PluginDependency("HeuristicLab.Visualization.ChartControlsExtensions", "3.3")]
+  public class HeuristicLabClientsHiveViewsPlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Progress/ProgressView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Progress/ProgressView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Progress/ProgressView.cs	(revision 7085)
@@ -0,0 +1,154 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  public partial class ProgressView : HeuristicLab.MainForm.WindowsForms.View {
+    private ContentView parentView;
+    private IProgress progress;
+    public IProgress Progress {
+      get {
+        return this.progress;
+      }
+      set {
+        if (this.progress != value) {
+          if (this.progress != null) {
+            DeregisterProgressEvents();
+          }
+          this.progress = value;
+          RegisterProgressEvents();
+          OnProgressChanged();
+        }
+      }
+    }
+
+    public bool CancelEnabled {
+      get {
+        return cancelButton.Visible;
+      }
+      set {
+        if (InvokeRequired) {
+          Invoke(new Action<bool>((ce) => { CancelEnabled = ce; }), value);
+        } else {
+          cancelButton.Visible = value;
+        }
+      }
+    }
+
+    /// <param name="parentView">This is the View which will be locked if lockParentView is true</param>
+    public ProgressView(ContentView parentView, IProgress progress) {
+      InitializeComponent();
+      this.parentView = parentView;
+      this.Progress = progress;
+
+      this.CancelEnabled = false;
+
+      progressBar.Style = ProgressBarStyle.Marquee;
+
+      this.Left = (parentView.ClientRectangle.Width / 2) - (this.Width / 2);
+      this.Top = (parentView.ClientRectangle.Height / 2) - (this.Height / 2);
+      this.Anchor = AnchorStyles.Left | AnchorStyles.Top;
+
+      LockBackground();
+
+      parentView.Controls.Add(this);
+      this.BringToFront();
+    }
+
+    private void RegisterProgressEvents() {
+      progress.Finished += new EventHandler(progress_Finished);
+      progress.StatusChanged += new EventHandler(progress_StatusChanged);
+      progress.ProgressValueChanged += new EventHandler(progress_ProgressChanged);
+    }
+
+    private void DeregisterProgressEvents() {
+      progress.Finished -= new EventHandler(progress_Finished);
+      progress.StatusChanged -= new EventHandler(progress_StatusChanged);
+      progress.ProgressValueChanged -= new EventHandler(progress_ProgressChanged);
+    }
+
+    void progress_Finished(object sender, EventArgs e) {
+      Finish();
+    }
+
+    void progress_ProgressChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(progress_ProgressChanged), sender, e);
+      } else {
+        progressBar.Style = ProgressBarStyle.Blocks;
+        this.progressBar.Value = Math.Min(this.progressBar.Maximum, (int)(progress.ProgressValue * progressBar.Maximum));
+      }
+    }
+
+    void progress_StatusChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(progress_StatusChanged), sender, e);
+      } else {
+        statusLabel.Text = progress.Status;
+      }
+    }
+
+    private void LockBackground() {
+      if (InvokeRequired) {
+        Invoke(new Action(LockBackground));
+      } else {
+        this.parentView.Locked = true;
+        foreach (Control c in this.parentView.Controls) {
+          c.Enabled = false;
+        }
+        this.Enabled = true;
+        this.ReadOnly = false;
+      }
+    }
+
+    public void Finish() {
+      if (InvokeRequired) {
+        Invoke(new Action(Finish));
+      } else {
+        progressBar.Value = progressBar.Maximum;
+        parentView.Locked = false;
+        foreach (Control c in this.parentView.Controls) {
+          c.Enabled = true;
+        }
+        parentView.Controls.Remove(this);
+        this.Dispose();
+      }
+    }
+
+    private void cancelButton_Click(object sender, EventArgs e) {
+      Finish();
+    }
+
+    private void OnProgressChanged() {
+      progress_StatusChanged(this, EventArgs.Empty);
+      progress_ProgressChanged(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Canceled;
+    protected virtual void OnCanceled() {
+      var handler = Canceled;
+      if (handler != null) Canceled(this, EventArgs.Empty);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Progress/ProgressView.designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Progress/ProgressView.designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Progress/ProgressView.designer.cs	(revision 7085)
@@ -0,0 +1,96 @@
+﻿using HeuristicLab.MainForm.WindowsForms;
+namespace HeuristicLab.Clients.Hive.Views {
+  partial class ProgressView : View {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.progressBar = new System.Windows.Forms.ProgressBar();
+      this.statusLabel = new System.Windows.Forms.Label();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.panel = new System.Windows.Forms.Panel();
+      this.panel.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // progressBar
+      // 
+      this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.progressBar.Location = new System.Drawing.Point(3, 3);
+      this.progressBar.Name = "progressBar";
+      this.progressBar.Size = new System.Drawing.Size(352, 23);
+      this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
+      this.progressBar.TabIndex = 0;
+      // 
+      // statusLabel
+      // 
+      this.statusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.statusLabel.Location = new System.Drawing.Point(3, 33);
+      this.statusLabel.Name = "statusLabel";
+      this.statusLabel.Size = new System.Drawing.Size(352, 17);
+      this.statusLabel.TabIndex = 1;
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.Location = new System.Drawing.Point(280, 53);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 2;
+      this.cancelButton.Text = "Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
+      // 
+      // panel
+      // 
+      this.panel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.panel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.panel.Controls.Add(this.progressBar);
+      this.panel.Controls.Add(this.cancelButton);
+      this.panel.Controls.Add(this.statusLabel);
+      this.panel.Location = new System.Drawing.Point(0, 0);
+      this.panel.Name = "panel";
+      this.panel.Size = new System.Drawing.Size(360, 88);
+      this.panel.TabIndex = 3;
+      // 
+      // ProgressView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.panel);
+      this.Name = "ProgressView";
+      this.Size = new System.Drawing.Size(360, 88);
+      this.panel.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ProgressBar progressBar;
+    private System.Windows.Forms.Label statusLabel;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.Panel panel;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Progress/ProgressView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Progress/ProgressView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Progress/ProgressView.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Clients.Hive.Views")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("c31cc708-fab2-4982-ba57-72e35440fad8")]
+
+// 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("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.cs	(revision 7085)
@@ -0,0 +1,115 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Linq;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [View("StateLogGanttChartList View")]
+  [Content(typeof(StateLogListList), true)]
+  public sealed partial class StateLogGanttChartListView : ItemView {
+    public new StateLogListList Content {
+      get { return (StateLogListList)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public StateLogGanttChartListView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      // Deregister your event handlers here
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      // Register your event handlers here
+    }
+
+    #region Event Handlers (Content)
+    // Put event handlers of the content here
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        // Add code when content has been changed and is null
+        ganttChart.Reset();
+      } else {
+        // Add code when content has been changed and is not null
+        ganttChart.Reset();
+        SetupCategories(ganttChart);
+        if (Content.Count > 0) {
+          DateTime maxValue = Content.Max(x => x.Count > 0 ? x.Max(y => y.DateTime) : DateTime.MinValue);
+          DateTime upperLimit;
+          if (Content.All(x => x.Count > 0 ? (x.Last().State == TaskState.Finished || x.Last().State == TaskState.Failed || x.Last().State == TaskState.Aborted) : true)) {
+            upperLimit = DateTime.FromOADate(Math.Min(DateTime.Now.AddSeconds(10).ToOADate(), maxValue.AddSeconds(10).ToOADate()));
+          } else {
+            upperLimit = DateTime.Now;
+          }
+
+          for (int i = 0; i < Content.Count; i++) {
+            for (int j = 0; j < Content[i].Count - 1; j++) {
+              if (Content[i][j].State != TaskState.Offline)
+                AddData(ganttChart, i.ToString(), Content[i][j], Content[i][j + 1], upperLimit);
+            }
+            if (Content[i].Count > 0) {
+              AddData(ganttChart, i.ToString(), Content[i][Content[i].Count - 1], null, upperLimit);
+            }
+          }
+        }
+      }
+    }
+
+    public static void SetupCategories(GanttChart ganttChart) {
+      ganttChart.AddCategory(TaskState.Offline.ToString(), Color.Gainsboro);
+      ganttChart.AddCategory(TaskState.Waiting.ToString(), Color.NavajoWhite);
+      ganttChart.AddCategory(TaskState.Paused.ToString(), Color.PaleVioletRed);
+      ganttChart.AddCategory(TaskState.Transferring.ToString(), Color.CornflowerBlue);
+      ganttChart.AddCategory(TaskState.Calculating.ToString(), Color.DarkGreen);
+      ganttChart.AddCategory(TaskState.Finished.ToString(), Color.White);
+      ganttChart.AddCategory(TaskState.Aborted.ToString(), Color.Orange);
+      ganttChart.AddCategory(TaskState.Failed.ToString(), Color.Red);
+    }
+
+    public static void AddData(GanttChart ganttChart, string name, StateLog from, StateLog to, DateTime upperLimit) {
+      DateTime until = to != null ? to.DateTime : upperLimit;
+      TimeSpan duration = until - from.DateTime;
+      string tooltip = string.Format("State: {0} " + Environment.NewLine + " Duration: {1} " + Environment.NewLine + " {2} - {3}", from.State, duration, from.DateTime, until);
+      if (!string.IsNullOrEmpty(from.Exception))
+        tooltip += Environment.NewLine + from.Exception;
+      ganttChart.AddData(name, from.State.ToString(), from.DateTime, until, tooltip, false);
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      // Enable or disable controls based on whether the content is null or the view is set readonly
+    }
+
+    #region Event Handlers (child controls)
+    // Put event handlers of child controls here.
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.designer.cs	(revision 7085)
@@ -0,0 +1,55 @@
+﻿namespace HeuristicLab.Clients.Hive.Views {
+  partial class StateLogGanttChartListView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.ganttChart = new HeuristicLab.Clients.Hive.Views.GanttChart();
+      this.SuspendLayout();
+      // 
+      // ganttChart
+      // 
+      this.ganttChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.ganttChart.Location = new System.Drawing.Point(3, 3);
+      this.ganttChart.Name = "ganttChart";
+      this.ganttChart.Size = new System.Drawing.Size(487, 287);
+      this.ganttChart.TabIndex = 0;
+      // 
+      // StateLogGanttChartListView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.ganttChart);
+      this.Name = "StateLogGanttChartListView";
+      this.Size = new System.Drawing.Size(493, 293);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private GanttChart ganttChart;
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.cs	(revision 7085)
@@ -0,0 +1,88 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [View("StateLogGanttChart View")]
+  [Content(typeof(StateLogList), IsDefaultView = true)]
+  public sealed partial class StateLogGanttChartView : ItemView {
+    public new StateLogList Content {
+      get { return (StateLogList)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public StateLogGanttChartView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      // Deregister your event handlers here
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      // Register your event handlers here
+    }
+
+    #region Event Handlers (Content)
+    // Put event handlers of the content here
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        // Add code when content has been changed and is null
+        ganttChart.Reset();
+      } else {
+        // Add code when content has been changed and is not null
+        ganttChart.Reset();
+        StateLogGanttChartListView.SetupCategories(ganttChart);
+        if (Content.Count > 0) {
+          DateTime upperLimit;
+          if (Content.Last().State == TaskState.Finished || Content.Last().State == TaskState.Failed || Content.Last().State == TaskState.Aborted) {
+            upperLimit = DateTime.FromOADate(Math.Min(Content.Max(x => x.DateTime).ToOADate(), DateTime.Now.AddSeconds(10).ToOADate()));
+          } else {
+            upperLimit = DateTime.Now;
+          }
+
+          for (int i = 0; i < Content.Count - 1; i++) {
+            StateLogGanttChartListView.AddData(ganttChart, i.ToString(), Content[i], Content[i + 1], upperLimit);
+          }
+          StateLogGanttChartListView.AddData(ganttChart, (Content.Count - 1).ToString(), Content[Content.Count - 1], null, upperLimit);
+        }
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      // Enable or disable controls based on whether the content is null or the view is set readonly
+    }
+
+    #region Event Handlers (child controls)
+    // Put event handlers of child controls here.
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.designer.cs	(revision 7085)
@@ -0,0 +1,55 @@
+﻿namespace HeuristicLab.Clients.Hive.Views {
+  partial class StateLogGanttChartView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.ganttChart = new HeuristicLab.Clients.Hive.Views.GanttChart();
+      this.SuspendLayout();
+      // 
+      // ganttChart
+      // 
+      this.ganttChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.ganttChart.Location = new System.Drawing.Point(0, 0);
+      this.ganttChart.Name = "ganttChart";
+      this.ganttChart.Size = new System.Drawing.Size(533, 302);
+      this.ganttChart.TabIndex = 0;
+      // 
+      // StateLogGanttChartView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.ganttChart);
+      this.Name = "StateLogGanttChartView";
+      this.Size = new System.Drawing.Size(533, 302);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private GanttChart ganttChart;
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogList.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogList.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogList.cs	(revision 7085)
@@ -0,0 +1,22 @@
+﻿using System.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [StorableClass]
+  public class StateLogList : ItemList<StateLog> {
+
+    [StorableConstructor]
+    protected StateLogList(bool deserializing) : base(deserializing) { }
+    public StateLogList() : base() { }
+    protected StateLogList(StateLogList original, Cloner cloner) : base(original, cloner) { }
+    public StateLogList(IEnumerable<StateLog> collection)
+      : base(collection) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StateLogList(this, cloner);
+    }
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogListList.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogListList.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogListList.cs	(revision 7085)
@@ -0,0 +1,22 @@
+﻿using System.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [StorableClass]
+  public class StateLogListList : ItemList<StateLogList> {
+
+    [StorableConstructor]
+    protected StateLogListList(bool deserializing) : base(deserializing) { }
+    public StateLogListList() : base() { }
+    protected StateLogListList(StateLogListList original, Cloner cloner) : base(original, cloner) { }
+    public StateLogListList(IEnumerable<StateLogList> collection)
+      : base(collection) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StateLogListList(this, cloner);
+    }
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogListView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogListView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogListView.cs	(revision 7085)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [View("StateLog View")]
+  [Content(typeof(IItemList<StateLog>), false)]
+  public partial class StateLogListView : ItemListView<StateLog> {
+
+    public StateLogListView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "StateLog";
+    }
+
+    protected override StateLog CreateItem() {
+      return null;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      this.addButton.Enabled = false;
+      this.moveDownButton.Enabled = false;
+      this.moveUpButton.Enabled = false;
+      this.removeButton.Enabled = false;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogListView.designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogListView.designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogListView.designer.cs	(revision 7085)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.Clients.Hive.Views {
+  partial class StateLogListView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogView.cs	(revision 7085)
@@ -0,0 +1,91 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [View("StateLog View")]
+  [Content(typeof(StateLog), IsDefaultView = true)]
+  public sealed partial class StateLogView : ItemView {
+    public new StateLog Content {
+      get { return (StateLog)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public StateLogView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      // Deregister your event handlers here
+
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      // Register your event handlers here
+
+    }
+
+    #region Event Handlers (Content)
+    // Put event handlers of the content here
+
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        // Add code when content has been changed and is null
+        stateTextBox.Text = string.Empty;
+        dateTextBox.Text = string.Empty;
+        exceptionTextBox.Text = string.Empty;
+        userIdTextBox.Text = string.Empty;
+        slaveIdTextBox.Text = string.Empty;
+      } else {
+        // Add code when content has been changed and is not null
+        stateTextBox.Text = Content.State.ToString();
+        dateTextBox.Text = Content.DateTime.ToString();
+        exceptionTextBox.Text = Content.Exception;
+        userIdTextBox.Text = Content.UserId.ToString();
+        slaveIdTextBox.Text = Content.SlaveId.ToString();
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      // Enable or disable controls based on whether the content is null or the view is set readonly
+      stateTextBox.ReadOnly = true;
+      dateTextBox.ReadOnly = true;
+      exceptionTextBox.ReadOnly = true;
+      userIdTextBox.ReadOnly = true;
+      slaveIdTextBox.ReadOnly = true;
+    }
+
+    #region Event Handlers (child controls)
+    // Put event handlers of child controls here.
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogView.designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogView.designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogView.designer.cs	(revision 7085)
@@ -0,0 +1,163 @@
+﻿namespace HeuristicLab.Clients.Hive.Views {
+  partial class StateLogView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.stateLabel = new System.Windows.Forms.Label();
+      this.stateTextBox = new System.Windows.Forms.TextBox();
+      this.dateLabel = new System.Windows.Forms.Label();
+      this.dateTextBox = new System.Windows.Forms.TextBox();
+      this.exceptionTextBox = new System.Windows.Forms.TextBox();
+      this.userIdTextBox = new System.Windows.Forms.TextBox();
+      this.slaveIdTextBox = new System.Windows.Forms.TextBox();
+      this.slaveIdLabel = new System.Windows.Forms.Label();
+      this.userIdLabel = new System.Windows.Forms.Label();
+      this.exceptionLabel = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // stateLabel
+      // 
+      this.stateLabel.AutoSize = true;
+      this.stateLabel.Location = new System.Drawing.Point(3, 11);
+      this.stateLabel.Name = "stateLabel";
+      this.stateLabel.Size = new System.Drawing.Size(35, 13);
+      this.stateLabel.TabIndex = 0;
+      this.stateLabel.Text = "State:";
+      // 
+      // stateTextBox
+      // 
+      this.stateTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.stateTextBox.Location = new System.Drawing.Point(72, 4);
+      this.stateTextBox.Name = "stateTextBox";
+      this.stateTextBox.Size = new System.Drawing.Size(451, 20);
+      this.stateTextBox.TabIndex = 1;
+      // 
+      // dateLabel
+      // 
+      this.dateLabel.AutoSize = true;
+      this.dateLabel.Location = new System.Drawing.Point(3, 33);
+      this.dateLabel.Name = "dateLabel";
+      this.dateLabel.Size = new System.Drawing.Size(33, 13);
+      this.dateLabel.TabIndex = 2;
+      this.dateLabel.Text = "Date:";
+      // 
+      // dateTextBox
+      // 
+      this.dateTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dateTextBox.Location = new System.Drawing.Point(72, 30);
+      this.dateTextBox.Name = "dateTextBox";
+      this.dateTextBox.Size = new System.Drawing.Size(451, 20);
+      this.dateTextBox.TabIndex = 3;
+      // 
+      // exceptionTextBox
+      // 
+      this.exceptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.exceptionTextBox.Location = new System.Drawing.Point(72, 56);
+      this.exceptionTextBox.Name = "exceptionTextBox";
+      this.exceptionTextBox.Size = new System.Drawing.Size(451, 20);
+      this.exceptionTextBox.TabIndex = 4;
+      // 
+      // userIdTextBox
+      // 
+      this.userIdTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.userIdTextBox.Location = new System.Drawing.Point(72, 82);
+      this.userIdTextBox.Name = "userIdTextBox";
+      this.userIdTextBox.Size = new System.Drawing.Size(451, 20);
+      this.userIdTextBox.TabIndex = 5;
+      // 
+      // slaveIdTextBox
+      // 
+      this.slaveIdTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.slaveIdTextBox.Location = new System.Drawing.Point(72, 108);
+      this.slaveIdTextBox.Name = "slaveIdTextBox";
+      this.slaveIdTextBox.Size = new System.Drawing.Size(451, 20);
+      this.slaveIdTextBox.TabIndex = 6;
+      // 
+      // slaveIdLabel
+      // 
+      this.slaveIdLabel.AutoSize = true;
+      this.slaveIdLabel.Location = new System.Drawing.Point(3, 111);
+      this.slaveIdLabel.Name = "slaveIdLabel";
+      this.slaveIdLabel.Size = new System.Drawing.Size(46, 13);
+      this.slaveIdLabel.TabIndex = 7;
+      this.slaveIdLabel.Text = "SlaveId:";
+      // 
+      // userIdLabel
+      // 
+      this.userIdLabel.AutoSize = true;
+      this.userIdLabel.Location = new System.Drawing.Point(3, 85);
+      this.userIdLabel.Name = "userIdLabel";
+      this.userIdLabel.Size = new System.Drawing.Size(41, 13);
+      this.userIdLabel.TabIndex = 8;
+      this.userIdLabel.Text = "UserId:";
+      // 
+      // exceptionLabel
+      // 
+      this.exceptionLabel.AutoSize = true;
+      this.exceptionLabel.Location = new System.Drawing.Point(3, 59);
+      this.exceptionLabel.Name = "exceptionLabel";
+      this.exceptionLabel.Size = new System.Drawing.Size(57, 13);
+      this.exceptionLabel.TabIndex = 9;
+      this.exceptionLabel.Text = "Exception:";
+      // 
+      // StateLogView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.exceptionLabel);
+      this.Controls.Add(this.userIdLabel);
+      this.Controls.Add(this.slaveIdLabel);
+      this.Controls.Add(this.slaveIdTextBox);
+      this.Controls.Add(this.userIdTextBox);
+      this.Controls.Add(this.exceptionTextBox);
+      this.Controls.Add(this.dateTextBox);
+      this.Controls.Add(this.dateLabel);
+      this.Controls.Add(this.stateTextBox);
+      this.Controls.Add(this.stateLabel);
+      this.Name = "StateLogView";
+      this.Size = new System.Drawing.Size(523, 192);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label stateLabel;
+    private System.Windows.Forms.TextBox stateTextBox;
+    private System.Windows.Forms.Label dateLabel;
+    private System.Windows.Forms.TextBox dateTextBox;
+    private System.Windows.Forms.TextBox exceptionTextBox;
+    private System.Windows.Forms.TextBox userIdTextBox;
+    private System.Windows.Forms.TextBox slaveIdTextBox;
+    private System.Windows.Forms.Label slaveIdLabel;
+    private System.Windows.Forms.Label userIdLabel;
+    private System.Windows.Forms.Label exceptionLabel;
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogView.resx	(revision 7085)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/DeleteTaskTreeNodeAction.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/DeleteTaskTreeNodeAction.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/DeleteTaskTreeNodeAction.cs	(revision 7085)
@@ -0,0 +1,54 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+using HeuristicLab.Clients.Hive.Jobs;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Clients.Hive.Views.ExperimentManager.TreeView {
+  public class DeleteTaskTreeNodeAction : IItemTreeNodeAction<HiveTask> {
+    private ItemCollection<HiveTask> hiveTasks;
+
+    public DeleteTaskTreeNodeAction(ItemCollection<HiveTask> hiveTasks) {
+      this.hiveTasks = hiveTasks;
+    }
+
+    public string Name {
+      get { return "Delete Task"; }
+    }
+
+    public Image Image {
+      get { return null; }
+    }
+
+    public void Execute(HiveTask item, HiveTask parentItem) {
+      if (parentItem == null) {
+        hiveTasks.Remove(item);
+      } else {
+        var experiment = parentItem.ItemTask.Item as Experiment;
+        if (experiment != null) {
+          experiment.Optimizers.Remove(((OptimizerTask)item.ItemTask).Item);
+        }
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/HiveTaskItemTreeView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/HiveTaskItemTreeView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/HiveTaskItemTreeView.Designer.cs	(revision 7085)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.Hive.Views.ExperimentManager {
+  partial class HiveTaskItemTreeView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/HiveTaskItemTreeView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/HiveTaskItemTreeView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/HiveTaskItemTreeView.cs	(revision 7085)
@@ -0,0 +1,110 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Hive.Jobs;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Clients.Hive.Views.ExperimentManager {
+  [View("HiveTask ItemTreeView")]
+  [Content(typeof(ItemCollection<HiveTask>), IsDefaultView = false)]
+  public partial class HiveTaskItemTreeView : ItemTreeView<HiveTask> {
+    public new ItemCollection<HiveTask> Content {
+      get { return (ItemCollection<HiveTask>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public HiveTaskItemTreeView() {
+      InitializeComponent();
+    }
+
+    #region Register Content Events
+    protected override void DeregisterContentEvents() {
+      // TODO: Deregister your event handlers on the Content here
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      // TODO: Register your event handlers on the Content here
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        // TODO: Put code here when content is null
+      } else {
+        // TODO: Put code here when content has been changed and is not null
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      // TODO: Put code here to enable or disable controls based on whether the Content is/not null or the view is ReadOnly
+    }
+
+    #region Event Handlers
+    // TODO: Put event handlers here
+    #endregion
+
+    #region Child Control Events
+    protected override void addButton_Click(object sender, EventArgs e) {
+      IOptimizer optimizer = CreateItem<IOptimizer>();
+      if (optimizer != null) {
+        if (treeView.SelectedNode == null) {
+          Content.Add(new OptimizerHiveTask(optimizer));
+        } else {
+          var experiment = ((HiveTask)treeView.SelectedNode.Tag).ItemTask.Item as Experiment;
+          if (experiment != null) {
+            experiment.Optimizers.Add(optimizer);
+          } else {
+            Content.Add(new OptimizerHiveTask(optimizer));
+          }
+        }
+      }
+    }
+
+    protected override void removeButton_Click(object sender, EventArgs e) {
+      if (treeView.SelectedNode != null) {
+        var selectedItem = (HiveTask)treeView.SelectedNode.Tag;
+        var parentItem = GetParentItem(selectedItem);
+        if (parentItem == null) {
+          Content.Remove((HiveTask)treeView.SelectedNode.Tag);
+        } else {
+          var experiment = parentItem.ItemTask.Item as Experiment;
+          if (experiment != null) {
+            experiment.Optimizers.Remove(((OptimizerTask)selectedItem.ItemTask).Item);
+          }
+        }
+      }
+    }
+    #endregion
+
+    protected override ICollection<IItemTreeNodeAction<HiveTask>> GetTreeNodeItemActions(HiveTask selectedItem) {
+      return base.GetTreeNodeItemActions(selectedItem);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/ItemTreeView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/ItemTreeView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/ItemTreeView.cs	(revision 7085)
@@ -0,0 +1,440 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [View("ItemTree View")]
+  [Content(typeof(ItemCollection<>), IsDefaultView = false)]
+  public partial class ItemTreeView<T> : ItemView where T : class, IItemTree<T> {
+    public new ItemCollection<T> Content {
+      get { return (ItemCollection<T>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public T SelectedItem {
+      get {
+        if (treeView.SelectedNode != null)
+          return (T)treeView.SelectedNode.Tag;
+        return null;
+      }
+    }
+
+    public ItemTreeView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ItemsAdded -= new CollectionItemsChangedEventHandler<T>(Content_ItemsAdded);
+      Content.ItemsRemoved -= new CollectionItemsChangedEventHandler<T>(Content_ItemsRemoved);
+      Content.CollectionReset -= new CollectionItemsChangedEventHandler<T>(Content_CollectionReset);
+      foreach (TreeNode node in treeView.Nodes) {
+        DeregisterContentEvents((T)node.Tag, node);
+      }
+      base.DeregisterContentEvents();
+    }
+
+    protected virtual void DeregisterContentEvents(T item, TreeNode node) {
+      item.ItemsAdded -= new CollectionItemsChangedEventHandler<IItemTree<T>>(item_ItemsAdded);
+      item.ItemsRemoved -= new CollectionItemsChangedEventHandler<IItemTree<T>>(item_ItemsRemoved);
+      item.CollectionReset -= new CollectionItemsChangedEventHandler<IItemTree<T>>(item_CollectionReset);
+      item.ToStringChanged -= new EventHandler(item_ToStringChanged);
+      item.ItemImageChanged -= new EventHandler(item_ItemImageChanged);
+      foreach (TreeNode childNode in node.Nodes) {
+        DeregisterContentEvents((T)childNode.Tag, childNode);
+      }
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ItemsAdded += new CollectionItemsChangedEventHandler<T>(Content_ItemsAdded);
+      Content.ItemsRemoved += new CollectionItemsChangedEventHandler<T>(Content_ItemsRemoved);
+      Content.CollectionReset += new CollectionItemsChangedEventHandler<T>(Content_CollectionReset);
+      foreach (TreeNode node in treeView.Nodes) {
+        RegisterContentEvents((T)node.Tag, node);
+      }
+    }
+
+    protected virtual void RegisterContentEvents(T item, TreeNode node) {
+      item.ItemsAdded += new CollectionItemsChangedEventHandler<IItemTree<T>>(item_ItemsAdded);
+      item.ItemsRemoved += new CollectionItemsChangedEventHandler<IItemTree<T>>(item_ItemsRemoved);
+      item.CollectionReset += new CollectionItemsChangedEventHandler<IItemTree<T>>(item_CollectionReset);
+      item.ToStringChanged += new EventHandler(item_ToStringChanged);
+      item.ItemImageChanged += new EventHandler(item_ItemImageChanged);
+      foreach (TreeNode childNode in node.Nodes) {
+        RegisterContentEvents((T)childNode.Tag, childNode);
+      }
+    }
+
+    #region Event Handlers (Content)
+    protected virtual void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<T> e) {
+      if (InvokeRequired) {
+        Invoke(new CollectionItemsChangedEventHandler<T>(Content_ItemsAdded), sender, e);
+      } else {
+        foreach (T item in e.Items) {
+          var node = AddChildNodes(item, treeView.Nodes, true);
+          UpdateNodeItemImage(node);
+        }
+      }
+    }
+    protected virtual void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<T> e) {
+      if (InvokeRequired) {
+        Invoke(new CollectionItemsChangedEventHandler<T>(Content_ItemsRemoved), sender, e);
+      } else {
+        foreach (T item in e.Items) {
+          RemoveChildNodes(item, treeView.Nodes);
+        }
+        RebuildImageList();
+      }
+    }
+    protected virtual void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<T> e) {
+      if (InvokeRequired) {
+        Invoke(new CollectionItemsChangedEventHandler<T>(Content_CollectionReset), sender, e);
+      } else {
+        foreach (T item in e.OldItems) {
+          RemoveChildNodes(item, treeView.Nodes);
+        }
+        RebuildImageList();
+        foreach (T item in e.Items) {
+          AddChildNodes(item, treeView.Nodes, true);
+        }
+      }
+    }
+
+    protected virtual void item_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IItemTree<T>> e) {
+      if (InvokeRequired) {
+        Invoke(new CollectionItemsChangedEventHandler<IItemTree<T>>(item_ItemsAdded), sender, e);
+      } else {
+        TreeNode node = GetNodeByItem(sender as T);
+        if (node != null) {
+          foreach (T item in e.Items) {
+            AddChildNodes(item, node.Nodes, true);
+            node.ExpandAll();
+            UpdateNodeItemImage(node);
+          }
+        }
+      }
+    }
+
+    protected virtual void item_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IItemTree<T>> e) {
+      if (InvokeRequired) {
+        Invoke(new CollectionItemsChangedEventHandler<IItemTree<T>>(item_ItemsRemoved), sender, e);
+      } else {
+        TreeNode node = GetNodeByItem(sender as T);
+        if (node != null) {
+          foreach (T item in e.Items) {
+            RemoveChildNodes(item, node.Nodes);
+          }
+          RebuildImageList();
+        }
+      }
+    }
+
+    protected virtual void item_CollectionReset(object sender, CollectionItemsChangedEventArgs<IItemTree<T>> e) {
+      if (InvokeRequired) {
+        Invoke(new CollectionItemsChangedEventHandler<IItemTree<T>>(item_CollectionReset), sender, e);
+      } else {
+        TreeNode node = GetNodeByItem(sender as T);
+        if (node != null) {
+          foreach (T item in e.OldItems) {
+            RemoveChildNodes(item, node.Nodes);
+          }
+          RebuildImageList();
+          foreach (T item in e.Items) {
+            AddChildNodes(item, node.Nodes, true);
+          }
+        }
+      }
+    }
+
+    protected virtual void item_ToStringChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(item_ToStringChanged), sender, e);
+      } else {
+        var item = sender as T;
+        TreeNode node = GetNodeByItem(item);
+        if (node != null && node.Text != item.ToString())
+          node.Text = item.ToString();
+      }
+    }
+
+    protected virtual void item_ItemImageChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(item_ItemImageChanged), sender, e);
+      } else {
+        var item = sender as T;
+        TreeNode node = GetNodeByItem(item);
+        if (node != null)
+          UpdateNodeItemImage(node);
+      }
+    }
+
+    protected virtual void treeView_DoubleClick(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(treeView_DoubleClick), sender, e);
+      } else {
+        if (treeView.SelectedNode != null) {
+          var item = treeView.SelectedNode.Tag as T;
+          if (item != null) {
+            IContentView view = MainFormManager.MainForm.ShowContent(item);
+            if (view != null) {
+              view.ReadOnly = ReadOnly;
+              view.Locked = Locked;
+            }
+          }
+        }
+      }
+    }
+
+    protected virtual void treeView_MouseDown(object sender, MouseEventArgs e) {
+      if (e.Button == System.Windows.Forms.MouseButtons.Left) {
+        // enables deselection of treeNodes
+        if (treeView.SelectedNode == null) {
+          return;
+        }
+        detailsViewHost.Content = null;
+        treeView.SelectedNode = null;
+        SetEnabledStateOfControls();
+      }
+    }
+    private void treeView_MouseClick(object sender, MouseEventArgs e) {
+
+    }
+    private void treeView_Click(object sender, EventArgs e) {
+
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        ClearNodes();
+        detailsViewHost.Content = null;
+      } else {
+        ClearNodes();
+        foreach (T itemTree in Content) {
+          AddChildNodes(itemTree, treeView.Nodes, false);
+        }
+        foreach (TreeNode node in treeView.Nodes) {
+          UpdateNodeItemImage(node);
+        }
+        detailsViewHost.Content = null;
+      }
+    }
+
+    protected virtual void ClearNodes() {
+      treeView.Nodes.Clear();
+    }
+
+    protected virtual TreeNode AddChildNodes(T item, TreeNodeCollection nodes, bool registerEvents) {
+      TreeNode node = CreateTreeViewNode(item);
+      nodes.Add(node);
+      RebuildImageList(node);
+      RegisterContentEvents(item, node);
+      var childItems = item.GetChildItems();
+      foreach (T childItem in childItems) {
+        AddChildNodes(childItem, node.Nodes, registerEvents);
+      }
+      node.ExpandAll();
+      return node;
+    }
+
+    protected virtual void RemoveChildNodes(T item, TreeNodeCollection treeNodeCollection) {
+      int idx = -1;
+      for (int i = 0; i < treeNodeCollection.Count; i++) {
+        if (treeNodeCollection[i].Tag == item) {
+          idx = i; break;
+        }
+      }
+      if (idx > -1) {
+        DeregisterContentEvents(item, treeNodeCollection[idx]);
+        treeNodeCollection.RemoveAt(idx);
+      }
+    }
+
+    protected virtual TreeNode GetNodeByItem(T item) {
+      TreeNode found = null;
+      foreach (TreeNode node in treeView.Nodes) {
+        found = GetNodeByItem(node, item);
+        if (found != null)
+          return found;
+      }
+      return null;
+    }
+
+    protected virtual TreeNode GetNodeByItem(TreeNode node, T item) {
+      if (node.Tag == item)
+        return node;
+      TreeNode found = null;
+      foreach (TreeNode childNode in node.Nodes) {
+        found = GetNodeByItem(childNode, item);
+        if (found != null)
+          return found;
+      }
+      return null;
+    }
+
+    protected virtual TreeNode CreateTreeViewNode(T item) {
+      var node = new TreeNode(item.ToString());
+      node.Tag = item;
+      return node;
+    }
+
+    protected virtual void UpdateNodeItemImage(TreeNode node) {
+      if (node == null) throw new ArgumentNullException();
+      var item = node.Tag as T;
+      int i = node.ImageIndex;
+      this.imageList.Images[i] = item == null ? HeuristicLab.Common.Resources.VSImageLibrary.Nothing : item.ItemImage;
+      node.ImageIndex = -1;
+      node.ImageIndex = i;
+      node.SelectedImageIndex = node.ImageIndex;
+      foreach (TreeNode childNode in node.Nodes) {
+        UpdateNodeItemImage(childNode);
+      }
+    }
+
+    protected virtual T GetParentItem(T selectedItem) {
+      var node = GetNodeByItem(selectedItem);
+      if (node == null || node.Parent == null)
+        return null;
+      else
+        return (T)node.Parent.Tag;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      addButton.Enabled = !this.ReadOnly;
+      removeButton.Enabled = !this.ReadOnly && treeView.SelectedNode != null;
+    }
+
+    #region Event Handlers (child controls)
+    // Put event handlers of child controls here.
+    protected virtual void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      detailsViewHost.Content = (IContent)treeView.SelectedNode.Tag;
+      SetEnabledStateOfControls();
+    }
+
+    protected virtual void contextMenuStrip_Opening(object sender, CancelEventArgs e) {
+      if (treeView.SelectedNode != null) {
+        T selectedItem = treeView.SelectedNode.Tag as T;
+        T parentItem = GetParentItem(selectedItem);
+        var actions = GetTreeNodeItemActions(selectedItem);
+        contextMenuStrip.Items.Clear();
+        foreach (var action in actions) {
+          contextMenuStrip.Items.Add(new DelegateMenuItem<T>(action.Name, action.Image, new Action<T, T>(action.Execute), selectedItem, parentItem));
+        }
+      }
+    }
+
+    protected virtual void addButton_Click(object sender, EventArgs e) {
+      T item = CreateItem<T>();
+      if (item != null)
+        Content.Add(item);
+    }
+
+    protected virtual void removeButton_Click(object sender, EventArgs e) {
+      if (treeView.SelectedNode != null) {
+
+      }
+    }
+
+    protected virtual void showDetailsCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (showDetailsCheckBox.Checked) {
+        splitContainer.Panel2Collapsed = false;
+        detailsGroupBox.Enabled = treeView.SelectedNode != null;
+        detailsViewHost.Content = treeView.SelectedNode != null ? (T)treeView.SelectedNode.Tag : null;
+      } else {
+        splitContainer.Panel2Collapsed = true;
+        detailsViewHost.Content = null;
+      }
+    }
+    #endregion
+
+    protected virtual void RebuildImageList() {
+      treeView.ImageList.Images.Clear();
+      foreach (TreeNode node in treeView.Nodes) {
+        RebuildImageList(node);
+      }
+    }
+
+    protected virtual void RebuildImageList(TreeNode node) {
+      var item = node.Tag as T;
+      treeView.ImageList.Images.Add(item == null ? HeuristicLab.Common.Resources.VSImageLibrary.Nothing : item.ItemImage);
+      node.ImageIndex = treeView.ImageList.Images.Count - 1;
+      node.SelectedImageIndex = node.ImageIndex;
+      foreach (TreeNode childNode in node.Nodes) {
+        RebuildImageList(childNode);
+      }
+    }
+
+    protected virtual ICollection<IItemTreeNodeAction<T>> GetTreeNodeItemActions(T selectedItem) {
+      return selectedItem.Actions;
+    }
+
+    protected virtual X CreateItem<X>() where X : class {
+      var typeSelectorDialog = new TypeSelectorDialog();
+      typeSelectorDialog.Caption = "Select Item";
+      typeSelectorDialog.TypeSelector.Caption = "Available Items";
+      typeSelectorDialog.TypeSelector.Configure(typeof(X), false, true);
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          return (X)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+      return null;
+    }
+  }
+
+  public class DelegateMenuItem<T> : ToolStripMenuItem {
+    private Action<T, T> actionDelegate;
+    private T node;
+    private T parentNode;
+
+    public DelegateMenuItem(string name, Image image, Action<T, T> actionDelegate, T node, T parentNode) {
+      this.Name = name;
+      this.Text = name;
+      this.actionDelegate = actionDelegate;
+      this.node = node;
+      this.parentNode = parentNode;
+      this.Image = image;
+    }
+
+    protected override void OnClick(EventArgs e) {
+      base.OnClick(e);
+      actionDelegate.Invoke(node, parentNode);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/ItemTreeView.designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/ItemTreeView.designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/ItemTreeView.designer.cs	(revision 7085)
@@ -0,0 +1,205 @@
+﻿using HeuristicLab.Common.Resources;
+namespace HeuristicLab.Clients.Hive.Views {
+  partial class ItemTreeView<T> {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ItemTreeView<T>));
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.showDetailsCheckBox = new System.Windows.Forms.CheckBox();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.addButton = new System.Windows.Forms.Button();
+      this.treeView = new System.Windows.Forms.TreeView();
+      this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.asfasdfToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.gfgffToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.detailsViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.contextMenuStrip.SuspendLayout();
+      this.detailsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer";
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.showDetailsCheckBox);
+      this.splitContainer.Panel1.Controls.Add(this.removeButton);
+      this.splitContainer.Panel1.Controls.Add(this.addButton);
+      this.splitContainer.Panel1.Controls.Add(this.treeView);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.detailsGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(624, 463);
+      this.splitContainer.SplitterDistance = 200;
+      this.splitContainer.TabIndex = 0;
+      // 
+      // showDetailsCheckBox
+      // 
+      this.showDetailsCheckBox.Appearance = System.Windows.Forms.Appearance.Button;
+      this.showDetailsCheckBox.Checked = true;
+      this.showDetailsCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.showDetailsCheckBox.Image = VSImageLibrary.Properties;
+      this.showDetailsCheckBox.Location = new System.Drawing.Point(63, 3);
+      this.showDetailsCheckBox.Name = "showDetailsCheckBox";
+      this.showDetailsCheckBox.Size = new System.Drawing.Size(24, 24);
+      this.showDetailsCheckBox.TabIndex = 5;
+      this.showDetailsCheckBox.UseVisualStyleBackColor = true;
+      this.showDetailsCheckBox.CheckedChanged += new System.EventHandler(this.showDetailsCheckBox_CheckedChanged);
+      // 
+      // removeButton
+      // 
+      this.removeButton.Enabled = false;
+      this.removeButton.Image = VSImageLibrary.Remove;
+      this.removeButton.Location = new System.Drawing.Point(33, 3);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(24, 24);
+      this.removeButton.TabIndex = 4;
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // addButton
+      // 
+      this.addButton.Image = VSImageLibrary.Add;
+      this.addButton.Location = new System.Drawing.Point(3, 3);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(24, 24);
+      this.addButton.TabIndex = 1;
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
+      // 
+      // treeView
+      // 
+      this.treeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.treeView.ContextMenuStrip = this.contextMenuStrip;
+      this.treeView.HideSelection = false;
+      this.treeView.ImageIndex = 0;
+      this.treeView.ImageList = this.imageList;
+      this.treeView.Location = new System.Drawing.Point(0, 33);
+      this.treeView.Name = "treeView";
+      this.treeView.SelectedImageIndex = 0;
+      this.treeView.Size = new System.Drawing.Size(200, 430);
+      this.treeView.TabIndex = 0;
+      this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
+      this.treeView.Click += new System.EventHandler(this.treeView_Click);
+      this.treeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
+      this.treeView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.treeView_MouseClick);
+      this.treeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.treeView_MouseDown);
+      // 
+      // contextMenuStrip
+      // 
+      this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.asfasdfToolStripMenuItem,
+            this.gfgffToolStripMenuItem});
+      this.contextMenuStrip.Name = "contextMenuStrip";
+      this.contextMenuStrip.Size = new System.Drawing.Size(153, 70);
+      this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening);
+      // 
+      // asfasdfToolStripMenuItem
+      // 
+      this.asfasdfToolStripMenuItem.Name = "asfasdfToolStripMenuItem";
+      this.asfasdfToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+      this.asfasdfToolStripMenuItem.Text = "asfasdf";
+      // 
+      // gfgffToolStripMenuItem
+      // 
+      this.gfgffToolStripMenuItem.Name = "gfgffToolStripMenuItem";
+      this.gfgffToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+      this.gfgffToolStripMenuItem.Text = "gfgff";
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Controls.Add(this.detailsViewHost);
+      this.detailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.detailsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.detailsGroupBox.Name = "detailsGroupBox";
+      this.detailsGroupBox.Size = new System.Drawing.Size(420, 463);
+      this.detailsGroupBox.TabIndex = 1;
+      this.detailsGroupBox.TabStop = false;
+      this.detailsGroupBox.Text = "Details";
+      // 
+      // detailsViewHost
+      // 
+      this.detailsViewHost.Caption = "View";
+      this.detailsViewHost.Content = null;
+      this.detailsViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.detailsViewHost.Enabled = false;
+      this.detailsViewHost.Location = new System.Drawing.Point(3, 16);
+      this.detailsViewHost.Name = "detailsViewHost";
+      this.detailsViewHost.ReadOnly = false;
+      this.detailsViewHost.Size = new System.Drawing.Size(414, 444);
+      this.detailsViewHost.TabIndex = 0;
+      this.detailsViewHost.ViewsLabelVisible = true;
+      this.detailsViewHost.ViewType = null;
+      // 
+      // ItemTreeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.splitContainer);
+      this.Name = "ItemTreeView";
+      this.Size = new System.Drawing.Size(624, 463);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.contextMenuStrip.ResumeLayout(false);
+      this.detailsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer;
+    protected System.Windows.Forms.TreeView treeView;
+    private MainForm.WindowsForms.ViewHost detailsViewHost;
+    private System.Windows.Forms.ImageList imageList;
+    private System.Windows.Forms.GroupBox detailsGroupBox;
+    private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
+    private System.Windows.Forms.ToolStripMenuItem asfasdfToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem gfgffToolStripMenuItem;
+    protected System.Windows.Forms.CheckBox showDetailsCheckBox;
+    protected System.Windows.Forms.Button removeButton;
+    protected System.Windows.Forms.Button addButton;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/ItemTreeView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/ItemTreeView.resx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/ItemTreeView.resx	(revision 7085)
@@ -0,0 +1,302 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="showDetailsCheckBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        9ORtbyqWAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="removeButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        w6/9DUORY3pvwx7IAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="addButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        ugHE5lCKcyMAN07j92U5+iMAAAAASUVORK5CYII=
+</value>
+  </data>
+  <metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>120, 17</value>
+  </metadata>
+  <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/NewTaskTreeNodeAction.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/NewTaskTreeNodeAction.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive.Views/3.3/TreeView/NewTaskTreeNodeAction.cs	(revision 7085)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Clients.Hive {
+  public class NewTaskTreeNodeAction : IItemTreeNodeAction<HiveTask> {
+    private ItemCollection<HiveTask> hiveJobs;
+
+    public NewTaskTreeNodeAction(ItemCollection<HiveTask> hiveJobs) {
+      this.hiveJobs = hiveJobs;
+    }
+
+    public string Name {
+      get { return "New Task..."; }
+    }
+
+    public Image Image {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.NewDocument; }
+    }
+
+    public void Execute(HiveTask item, HiveTask parentItem) {
+      if (item != null) {
+        var experiment = item.ItemTask.Item as Experiment;
+        experiment.Optimizers.Add(new Experiment());
+      } else {
+        hiveJobs.Add(new OptimizerHiveTask(new Experiment()));
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloader.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloader.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloader.cs	(revision 7085)
@@ -0,0 +1,99 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using HeuristicLab.Common;
+using HeuristicLab.Hive;
+
+namespace HeuristicLab.Clients.Hive {
+  /// <summary>
+  /// Downloads and deserializes jobs. It avoids too many jobs beeing downloaded or deserialized at the same time to avoid memory problems
+  /// </summary>
+  public class ConcurrentTaskDownloader<T> where T : class, ITask {
+    private bool abort = false;
+    // use semaphore to ensure only few concurrenct connections and few SerializedJob objects in memory
+    private Semaphore downloadSemaphore;
+    private Semaphore deserializeSemaphore;
+
+    public ConcurrentTaskDownloader(int concurrentDownloads, int concurrentDeserializations) {
+      downloadSemaphore = new Semaphore(concurrentDownloads, concurrentDownloads);
+      deserializeSemaphore = new Semaphore(concurrentDeserializations, concurrentDeserializations);
+      TaskScheduler.UnobservedTaskException += new EventHandler<UnobservedTaskExceptionEventArgs>(TaskScheduler_UnobservedTaskException);
+    }
+
+    public void DownloadTask(Task job, Action<Task, T> onFinishedAction) {
+      Task<T> task = Task<TaskData>.Factory.StartNew((x) => DownloadTask(x), job.Id)
+                                     .ContinueWith((x) => DeserializeTask(x.Result));
+      task.ContinueWith((x) => OnTaskFinished(job, x, onFinishedAction), TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion);
+      task.ContinueWith((x) => OnTaskFailed(job, x, onFinishedAction), TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnFaulted);
+    }
+
+    private void OnTaskFinished(Task job, Task<T> task, Action<Task, T> onFinishedAction) {
+      onFinishedAction(job, task.Result);
+    }
+    private void OnTaskFailed(Task job, Task<T> task, Action<Task, T> onFinishedAction) {
+      task.Exception.Flatten().Handle((e) => { return true; });
+      OnExceptionOccured(task.Exception.Flatten());
+      onFinishedAction(job, null);
+    }
+
+    protected TaskData DownloadTask(object taskId) {
+      downloadSemaphore.WaitOne();
+      deserializeSemaphore.WaitOne();
+      TaskData result;
+      try {
+        if (abort) return null;
+        result = ServiceLocator.Instance.CallHiveService(s => s.GetTaskData((Guid)taskId));
+      }
+      finally {
+        downloadSemaphore.Release();
+      }
+      return result;
+    }
+
+    protected T DeserializeTask(TaskData taskData) {
+      try {
+        if (abort || taskData == null) return null;
+        Task task = ServiceLocator.Instance.CallHiveService(s => s.GetTask(taskData.TaskId));
+        if (task == null) return null;
+        var deserializedJob = PersistenceUtil.Deserialize<T>(taskData.Data);
+        taskData.Data = null; // reduce memory consumption.
+        return deserializedJob;
+      }
+      finally {
+        deserializeSemaphore.Release();
+      }
+    }
+
+    private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) {
+      e.SetObserved(); // avoid crash of process because task crashes. first exception found is handled in Results property
+      OnExceptionOccured(new HiveException("Unobserved Exception in ConcurrentTaskDownloader", e.Exception));
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception exception) {
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(exception));
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloaderException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloaderException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloaderException.cs	(revision 7085)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  public class ConcurrentTaskDownloaderException : Exception {
+    public ConcurrentTaskDownloaderException(string message, Exception innerException)
+      : base(message, innerException) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/AddTaskToHiveException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/AddTaskToHiveException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/AddTaskToHiveException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  class AddTaskToHiveException : Exception {
+    public AddTaskToHiveException(string message) : base(message) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/HiveException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/HiveException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/HiveException.cs	(revision 7085)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  public class HiveException : Exception {
+    public HiveException(string message) : base(message) { }
+    public HiveException(string message, Exception innerException) : base(message, innerException) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/OptimizerNotFoundException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/OptimizerNotFoundException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/OptimizerNotFoundException.cs	(revision 7085)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  class OptimizerNotFoundException : Exception {
+
+    public OptimizerNotFoundException(string message)
+      : base(message) {
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/ResourceNotFoundException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/ResourceNotFoundException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/ResourceNotFoundException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  public class ResourceNotFoundException : Exception {
+    public ResourceNotFoundException(string message) : base(message) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/ServiceClientFactoryException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/ServiceClientFactoryException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/ServiceClientFactoryException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  public class ServiceClientFactoryException : Exception {
+    public ServiceClientFactoryException(string message) : base(message) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/TaskResultPollingException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/TaskResultPollingException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Exceptions/TaskResultPollingException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  class TaskResultPollingException : Exception {
+    public TaskResultPollingException(string message) : base(message) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 7085)
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Hive</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Hive-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.Clients.Hive-3.4.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\HeuristicLab.Clients.Hive-3.4.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Remoting" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.Runtime.Serialization.Formatters.Soap" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.ServiceModel.Web" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HiveAdminClient.cs" />
+    <Compile Include="HiveClient.cs" />
+    <Compile Include="Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Include="Tasks\ItemTask.cs" />
+    <Compile Include="RefreshableJob.cs" />
+    <Compile Include="ServiceClients\JobPermission.cs" />
+    <Compile Include="StateLogList.cs" />
+    <Compile Include="StateLogListList.cs" />
+    <None Include="app.config">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Exceptions\AddTaskToHiveException.cs" />
+    <Compile Include="Exceptions\TaskResultPollingException.cs" />
+    <Compile Include="Exceptions\OptimizerNotFoundException.cs" />
+    <Compile Include="ConcurrentTaskDownloader.cs" />
+    <Compile Include="HiveJobs\EngineHiveTask.cs" />
+    <Compile Include="Exceptions\HiveException.cs" />
+    <Compile Include="TaskDownloader.cs" />
+    <Compile Include="ConcurrentTaskDownloaderException.cs" />
+    <Compile Include="TreeView\IItemTree.cs" />
+    <Compile Include="TreeView\IItemTreeAction.cs" />
+    <Compile Include="HiveJobs\OptimizerHiveTask.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Exceptions\ResourceNotFoundException.cs" />
+    <Compile Include="IServiceLocator.cs" />
+    <Compile Include="Tasks\EngineTask.cs" />
+    <Compile Include="Tasks\OptimizerTask.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="HiveJobs\HiveTask.cs" />
+    <Compile Include="JobResultPoller.cs" />
+    <Compile Include="Util\PersistenceUtil.cs" />
+    <Compile Include="Util\PluginUtil.cs" />
+    <Compile Include="Progress\IProgress.cs" />
+    <Compile Include="Progress\IProgressReporter.cs" />
+    <Compile Include="Progress\Progress.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="Exceptions\ServiceClientFactoryException.cs" />
+    <Compile Include="ScopeExtensions.cs" />
+    <Compile Include="ServiceClients\Downtime.cs" />
+    <Compile Include="ServiceClients\HiveItemCollection.cs" />
+    <Compile Include="ServiceClients\IHiveItem.cs" />
+    <Compile Include="ServiceClients\NamedHiveItem.cs" />
+    <Compile Include="ServiceClients\Heartbeat.cs" />
+    <Compile Include="ServiceClients\HiveItem.cs" />
+    <Compile Include="ServiceClients\JobData.cs" />
+    <Compile Include="ServiceClients\Plugin.cs" />
+    <Compile Include="ServiceClients\PluginData.cs" />
+    <Compile Include="ServiceClients\Resource.cs" />
+    <Compile Include="ServiceClients\StateLog.cs" />
+    <Compile Include="ServiceClients\Job.cs" />
+    <Compile Include="ServiceClients\SlaveGroup.cs" />
+    <Compile Include="ServiceClients\Slave.cs" />
+    <Compile Include="ServiceClients\LightweightTask.cs" />
+    <Compile Include="ServiceClients\MessageContainer.cs" />
+    <Compile Include="ServiceClients\HiveServiceClient.cs" />
+    <Compile Include="ServiceClients\Task.cs" />
+    <Compile Include="ServiceLocator.cs" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="ServiceClients\GenerateServiceClients.cmd" />
+    <None Include="Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Common\3.3\HeuristicLab.Clients.Common-3.3.csproj">
+      <Project>{730A9104-D4D1-4360-966B-E49B7571DDA3}</Project>
+      <Name>HeuristicLab.Clients.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive\3.3\HeuristicLab.Hive-3.3.csproj">
+      <Project>{F98A1740-9AC9-4D36-A582-6A2D0D06978D}</Project>
+      <Name>HeuristicLab.Hive-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveAdminClient.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveAdminClient.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveAdminClient.cs	(revision 7085)
@@ -0,0 +1,162 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Threading;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.Hive {
+  [Item("Hive Administrator", "Hive Administrator")]
+  public sealed class HiveAdminClient : IContent {
+    private static HiveAdminClient instance;
+    public static HiveAdminClient Instance {
+      get {
+        if (instance == null) instance = new HiveAdminClient();
+        return instance;
+      }
+    }
+
+    private IItemList<Resource> resources;
+    public IItemList<Resource> Resources {
+      get { return resources; }
+    }
+
+    private IItemList<Downtime> downtimes;
+    public IItemList<Downtime> Downtimes {
+      get { return downtimes; }
+    }
+
+    private Guid downtimeForResourceId;
+    public Guid DowntimeForResourceId {
+      get { return downtimeForResourceId; }
+      set {
+        downtimeForResourceId = value;
+        if (downtimes != null) {
+          downtimes.Clear();
+        }
+      }
+    }
+
+    #region Events
+    public event EventHandler Refreshing;
+    private void OnRefreshing() {
+      EventHandler handler = Refreshing;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Refreshed;
+    private void OnRefreshed() {
+      var handler = Refreshed;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    private HiveAdminClient() { }
+
+    #region Refresh
+    public void Refresh() {
+      OnRefreshing();
+
+      try {
+        resources = new ItemList<Resource>();
+
+        ServiceLocator.Instance.CallHiveService(service => {
+          service.GetSlaveGroups().ForEach(g => resources.Add(g));
+          service.GetSlaves().ForEach(s => resources.Add(s));
+        });
+      }
+      catch {
+        throw;
+      }
+      finally {
+        OnRefreshed();
+      }
+    }
+    #endregion
+
+    #region Refresh downtime calendar
+    public void RefreshCalendar() {
+      if (downtimeForResourceId != null && downtimeForResourceId != Guid.Empty) {
+        OnRefreshing();
+
+        try {
+          downtimes = new ItemList<Downtime>();
+
+          ServiceLocator.Instance.CallHiveService(service => {
+            service.GetDowntimesForResource(downtimeForResourceId).ForEach(d => downtimes.Add(d));
+          });
+        }
+        catch {
+          throw;
+        }
+        finally {
+          OnRefreshed();
+        }
+      }
+    }
+    #endregion
+
+    #region Store
+    public static void Store(IHiveItem item, CancellationToken cancellationToken) {
+      if (item.Id == Guid.Empty) {
+        if (item is SlaveGroup) {
+          item.Id = ServiceLocator.Instance.CallHiveService((s) => s.AddSlaveGroup((SlaveGroup)item));
+        }
+        if (item is Slave) {
+          item.Id = ServiceLocator.Instance.CallHiveService((s) => s.AddSlave((Slave)item));
+        }
+        if (item is Downtime) {
+          item.Id = ServiceLocator.Instance.CallHiveService((s) => s.AddDowntime((Downtime)item));
+        }
+      } else {
+        if (item is SlaveGroup) {
+          ServiceLocator.Instance.CallHiveService((s) => s.UpdateSlaveGroup((SlaveGroup)item));
+        }
+        if (item is Slave) {
+          ServiceLocator.Instance.CallHiveService((s) => s.UpdateSlave((Slave)item));
+        }
+        if (item is Downtime) {
+          ServiceLocator.Instance.CallHiveService((s) => s.UpdateDowntime((Downtime)item));
+        }
+      }
+    }
+    #endregion
+
+    #region Delete
+    public static void Delete(IHiveItem item) {
+      if (item is SlaveGroup) {
+        ServiceLocator.Instance.CallHiveService((s) => s.DeleteSlaveGroup(item.Id));
+      } else if (item is Slave) {
+        ServiceLocator.Instance.CallHiveService((s) => s.DeleteSlave(item.Id));
+      } else if (item is Downtime) {
+        ServiceLocator.Instance.CallHiveService((s) => s.DeleteDowntime(item.Id));
+      }
+    }
+    #endregion
+
+    public void ResetDowntime() {
+      downtimeForResourceId = Guid.Empty;
+      if (downtimes != null) {
+        downtimes.Clear();
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveClient.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 7085)
@@ -0,0 +1,518 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.IO;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Threading;
+using System.Threading.Tasks;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.PluginInfrastructure;
+using TS = System.Threading.Tasks;
+
+namespace HeuristicLab.Clients.Hive {
+  [Item("HiveClient", "Hive client.")]
+  public sealed class HiveClient : IContent {
+    private static HiveClient instance;
+    public static HiveClient Instance {
+      get {
+        if (instance == null) instance = new HiveClient();
+        return instance;
+      }
+    }
+
+    #region Properties
+    private ItemCollection<RefreshableJob> jobs;
+    public ItemCollection<RefreshableJob> Jobs {
+      get { return jobs; }
+      set {
+        if (value != jobs) {
+          jobs = value;
+          OnHiveExperimentsChanged();
+        }
+      }
+    }
+
+    private List<Plugin> onlinePlugins;
+    public List<Plugin> OnlinePlugins {
+      get { return onlinePlugins; }
+      set { onlinePlugins = value; }
+    }
+
+    private List<Plugin> alreadyUploadedPlugins;
+    public List<Plugin> AlreadyUploadedPlugins {
+      get { return alreadyUploadedPlugins; }
+      set { alreadyUploadedPlugins = value; }
+    }
+
+    private bool isAllowedPrivileged;
+    public bool IsAllowedPrivileged {
+      get { return isAllowedPrivileged; }
+      set { isAllowedPrivileged = value; }
+    }
+    #endregion
+
+    private HiveClient() { }
+
+    #region Refresh
+    public void Refresh() {
+      OnRefreshing();
+
+      try {
+        this.IsAllowedPrivileged = ServiceLocator.Instance.CallHiveService((s) => s.IsAllowedPrivileged());
+
+        var oldJobs = jobs ?? new ItemCollection<RefreshableJob>();
+        jobs = new HiveItemCollection<RefreshableJob>();
+        var jobsLoaded = ServiceLocator.Instance.CallHiveService<IEnumerable<Job>>(s => s.GetJobs());
+
+        foreach (var j in jobsLoaded) {
+          var job = oldJobs.SingleOrDefault(x => x.Id == j.Id);
+          if (job == null) {
+            // new
+            jobs.Add(new RefreshableJob(j) { IsAllowedPrivileged = this.isAllowedPrivileged });
+          } else {
+            // update
+            job.Job = j;
+            job.IsAllowedPrivileged = this.isAllowedPrivileged;
+            jobs.Add(job);
+          }
+        }
+        // remove those which were not in the list of loaded hiveexperiments
+        foreach (var job in oldJobs) {
+          if (job.Id == Guid.Empty) {
+            // experiment not uploaded... keep
+            jobs.Add(job);
+          } else {
+            job.RefreshAutomatically = false; // stop results polling
+          }
+        }
+      }
+      catch {
+        jobs = null;
+        throw;
+      }
+      finally {
+        OnRefreshed();
+      }
+    }
+    public void RefreshAsync(Action<Exception> exceptionCallback) {
+      var call = new Func<Exception>(delegate() {
+        try {
+          Refresh();
+        }
+        catch (Exception ex) {
+          return ex;
+        }
+        return null;
+      });
+      call.BeginInvoke(delegate(IAsyncResult result) {
+        Exception ex = call.EndInvoke(result);
+        if (ex != null) exceptionCallback(ex);
+      }, null);
+    }
+    #endregion
+
+    #region Store
+    public static void Store(IHiveItem item, CancellationToken cancellationToken) {
+      if (item.Id == Guid.Empty) {
+        if (item is RefreshableJob) {
+          HiveClient.Instance.UploadJob((RefreshableJob)item, cancellationToken);
+        }
+        if (item is JobPermission) {
+          var hep = (JobPermission)item;
+          hep.GrantedUserId = ServiceLocator.Instance.CallHiveService((s) => s.GetUserIdByUsername(hep.GrantedUserName));
+          if (hep.GrantedUserId == Guid.Empty) {
+            throw new ArgumentException(string.Format("The user {0} was not found.", hep.GrantedUserName));
+          }
+          ServiceLocator.Instance.CallHiveService((s) => s.GrantPermission(hep.JobId, hep.GrantedUserId, hep.Permission));
+        }
+      } else {
+        if (item is Job)
+          ServiceLocator.Instance.CallHiveService(s => s.UpdateJob((Job)item));
+      }
+    }
+    public static void StoreAsync(Action<Exception> exceptionCallback, IHiveItem item, CancellationToken cancellationToken) {
+      var call = new Func<Exception>(delegate() {
+        try {
+          Store(item, cancellationToken);
+        }
+        catch (Exception ex) {
+          return ex;
+        }
+        return null;
+      });
+      call.BeginInvoke(delegate(IAsyncResult result) {
+        Exception ex = call.EndInvoke(result);
+        if (ex != null) exceptionCallback(ex);
+      }, null);
+    }
+    #endregion
+
+    #region Delete
+    public static void Delete(IHiveItem item) {
+      if (item.Id == Guid.Empty && item.GetType() != typeof(JobPermission))
+        return;
+
+      if (item is Job)
+        ServiceLocator.Instance.CallHiveService(s => s.DeleteJob(item.Id));
+      if (item is RefreshableJob)
+        ServiceLocator.Instance.CallHiveService(s => s.DeleteJob(item.Id));
+      if (item is JobPermission) {
+        var hep = (JobPermission)item;
+        ServiceLocator.Instance.CallHiveService(s => s.RevokePermission(hep.JobId, hep.GrantedUserId));
+      }
+      item.Id = Guid.Empty;
+    }
+    #endregion
+
+    #region Events
+    public event EventHandler Refreshing;
+    private void OnRefreshing() {
+      EventHandler handler = Refreshing;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Refreshed;
+    private void OnRefreshed() {
+      var handler = Refreshed;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler HiveExperimentsChanged;
+    private void OnHiveExperimentsChanged() {
+      var handler = HiveExperimentsChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    public static void StartJob(Action<Exception> exceptionCallback, RefreshableJob refreshableJob, CancellationToken cancellationToken) {
+      HiveClient.StoreAsync(
+        new Action<Exception>((Exception ex) => {
+          refreshableJob.ExecutionState = ExecutionState.Prepared;
+          exceptionCallback(ex);
+        }), refreshableJob, cancellationToken);
+      refreshableJob.ExecutionState = ExecutionState.Started;
+    }
+
+    public static void PauseJob(RefreshableJob refreshableJob) {
+      ServiceLocator.Instance.CallHiveService(service => {
+        foreach (HiveTask task in refreshableJob.GetAllHiveTasks()) {
+          if (task.Task.State != TaskState.Finished && task.Task.State != TaskState.Aborted && task.Task.State != TaskState.Failed)
+            service.PauseTask(task.Task.Id);
+        }
+      });
+      refreshableJob.ExecutionState = ExecutionState.Paused;
+    }
+
+    public static void StopJob(RefreshableJob refreshableJob) {
+      ServiceLocator.Instance.CallHiveService(service => {
+        foreach (HiveTask task in refreshableJob.GetAllHiveTasks()) {
+          if (task.Task.State != TaskState.Finished && task.Task.State != TaskState.Aborted && task.Task.State != TaskState.Failed)
+            service.StopTask(task.Task.Id);
+        }
+      });
+      // execution state does not need to be set. it will be set to Stopped, when all jobs have been downloaded
+    }
+
+    #region Upload Job
+    private Semaphore taskUploadSemaphore = new Semaphore(Settings.Default.MaxParallelUploads, Settings.Default.MaxParallelUploads);
+    private static object jobCountLocker = new object();
+    private static object pluginLocker = new object();
+    private void UploadJob(RefreshableJob refreshableJob, CancellationToken cancellationToken) {
+      try {
+        refreshableJob.Progress = new Progress("Connecting to server...");
+        refreshableJob.IsProgressing = true;
+
+        IEnumerable<string> resourceNames = ToResourceNameList(refreshableJob.Job.ResourceNames);
+        var resourceIds = new List<Guid>();
+        foreach (var resourceName in resourceNames) {
+          Guid resourceId = ServiceLocator.Instance.CallHiveService((s) => s.GetResourceId(resourceName));
+          if (resourceId == Guid.Empty) {
+            throw new ResourceNotFoundException(string.Format("Could not find the resource '{0}'", resourceName));
+          }
+          resourceIds.Add(resourceId);
+        }
+
+        foreach (OptimizerHiveTask hiveJob in refreshableJob.HiveTasks.OfType<OptimizerHiveTask>()) {
+          hiveJob.SetIndexInParentOptimizerList(null);
+        }
+
+        // upload Job
+        refreshableJob.Progress.Status = "Uploading Job...";
+        refreshableJob.Job.Id = ServiceLocator.Instance.CallHiveService((s) => s.AddJob(refreshableJob.Job));
+        bool isPrivileged = refreshableJob.Job.IsPrivileged;
+        refreshableJob.Job = ServiceLocator.Instance.CallHiveService((s) => s.GetJob(refreshableJob.Job.Id)); // update owner and permissions
+        refreshableJob.Job.IsPrivileged = isPrivileged;
+        cancellationToken.ThrowIfCancellationRequested();
+
+        int totalJobCount = refreshableJob.GetAllHiveTasks().Count();
+        int[] jobCount = new int[1]; // use a reference type (int-array) instead of value type (int) in order to pass the value via a delegate to task-parallel-library
+        cancellationToken.ThrowIfCancellationRequested();
+
+        // upload plugins
+        refreshableJob.Progress.Status = "Uploading plugins...";
+        this.OnlinePlugins = ServiceLocator.Instance.CallHiveService((s) => s.GetPlugins());
+        this.AlreadyUploadedPlugins = new List<Plugin>();
+        Plugin configFilePlugin = ServiceLocator.Instance.CallHiveService((s) => UploadConfigurationFile(s, onlinePlugins));
+        this.alreadyUploadedPlugins.Add(configFilePlugin);
+        cancellationToken.ThrowIfCancellationRequested();
+
+        if (refreshableJob.RefreshAutomatically) refreshableJob.StartResultPolling();
+
+        // upload tasks
+        refreshableJob.Progress.Status = "Uploading tasks...";
+
+        var tasks = new List<TS.Task>();
+        foreach (HiveTask hiveTask in refreshableJob.HiveTasks) {
+          tasks.Add(TS.Task.Factory.StartNew((hj) => {
+            UploadTaskWithChildren(refreshableJob.Progress, (HiveTask)hj, null, resourceIds, jobCount, totalJobCount, configFilePlugin.Id, refreshableJob.Job.Id, refreshableJob.Log, refreshableJob.Job.IsPrivileged, cancellationToken);
+          }, hiveTask)
+          .ContinueWith((x) => refreshableJob.Log.LogException(x.Exception), TaskContinuationOptions.OnlyOnFaulted));
+        }
+        try {
+          TS.Task.WaitAll(tasks.ToArray());
+        }
+        catch (AggregateException ae) {
+          if (!ae.InnerExceptions.All(e => e is TaskCanceledException)) throw ae; // for some reason the WaitAll throws a AggregateException containg a TaskCanceledException. i don't know where it comes from, however the tasks all finish properly, so for now just ignore it
+        }
+        refreshableJob.Job.Modified = false;
+      }
+      finally {
+        refreshableJob.IsProgressing = false;
+      }
+    }
+
+    /// <summary>
+    /// Uploads the local configuration file as plugin
+    /// </summary>
+    private static Plugin UploadConfigurationFile(IHiveService service, List<Plugin> onlinePlugins) {
+      string exeFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Settings.Default.HLBinaryName);
+      string configFileName = Path.GetFileName(ConfigurationManager.OpenExeConfiguration(exeFilePath).FilePath);
+      string configFilePath = ConfigurationManager.OpenExeConfiguration(exeFilePath).FilePath;
+      byte[] hash;
+
+      byte[] data = File.ReadAllBytes(configFilePath);
+      using (SHA1 sha1 = SHA1.Create()) {
+        hash = sha1.ComputeHash(data);
+      }
+
+      Plugin configPlugin = new Plugin() { Name = "Configuration", Version = new Version(), Hash = hash };
+      PluginData configFile = new PluginData() { FileName = configFileName, Data = data };
+
+      IEnumerable<Plugin> onlineConfig = onlinePlugins.Where(p => p.Hash.SequenceEqual(hash));
+
+      if (onlineConfig.Count() > 0) {
+        return onlineConfig.First();
+      } else {
+        configPlugin.Id = service.AddPlugin(configPlugin, new List<PluginData> { configFile });
+        return configPlugin;
+      }
+    }
+
+    /// <summary>
+    /// Uploads the given task and all its child-jobs while setting the proper parentJobId values for the childs
+    /// </summary>
+    /// <param name="parentHiveTask">shall be null if its the root task</param>
+    private void UploadTaskWithChildren(IProgress progress, HiveTask hiveTask, HiveTask parentHiveTask, IEnumerable<Guid> groups, int[] taskCount, int totalJobCount, Guid configPluginId, Guid jobId, ILog log, bool isPrivileged, CancellationToken cancellationToken) {
+      taskUploadSemaphore.WaitOne();
+      bool semaphoreReleased = false;
+      try {
+        cancellationToken.ThrowIfCancellationRequested();
+        lock (jobCountLocker) {
+          taskCount[0]++;
+        }
+        TaskData taskData;
+        List<IPluginDescription> plugins;
+
+        if (hiveTask.ItemTask.ComputeInParallel && (hiveTask.ItemTask.Item is Optimization.Experiment || hiveTask.ItemTask.Item is Optimization.BatchRun)) {
+          hiveTask.Task.IsParentTask = true;
+          hiveTask.Task.FinishWhenChildJobsFinished = true;
+          taskData = hiveTask.GetAsTaskData(true, out plugins);
+        } else {
+          hiveTask.Task.IsParentTask = false;
+          hiveTask.Task.FinishWhenChildJobsFinished = false;
+          taskData = hiveTask.GetAsTaskData(false, out plugins);
+        }
+        cancellationToken.ThrowIfCancellationRequested();
+
+        TryAndRepeat(() => {
+          if (!cancellationToken.IsCancellationRequested) {
+            lock (pluginLocker) {
+              ServiceLocator.Instance.CallHiveService((s) => hiveTask.Task.PluginsNeededIds = PluginUtil.GetPluginDependencies(s, this.onlinePlugins, this.alreadyUploadedPlugins, plugins));
+            }
+          }
+        }, -1, "Failed to upload plugins");
+        cancellationToken.ThrowIfCancellationRequested();
+        hiveTask.Task.PluginsNeededIds.Add(configPluginId);
+        hiveTask.Task.JobId = jobId;
+        hiveTask.Task.IsPrivileged = isPrivileged;
+
+        log.LogMessage(string.Format("Uploading task ({0} kb, {1} objects)", taskData.Data.Count() / 1024, hiveTask.ItemTask.GetObjectGraphObjects().Count()));
+        TryAndRepeat(() => {
+          if (!cancellationToken.IsCancellationRequested) {
+            if (parentHiveTask != null) {
+              hiveTask.Task.Id = ServiceLocator.Instance.CallHiveService((s) => s.AddChildTask(parentHiveTask.Task.Id, hiveTask.Task, taskData));
+            } else {
+              hiveTask.Task.Id = ServiceLocator.Instance.CallHiveService((s) => s.AddTask(hiveTask.Task, taskData, groups.ToList()));
+            }
+          }
+        }, 50, "Failed to add task", log);
+        cancellationToken.ThrowIfCancellationRequested();
+
+        lock (jobCountLocker) {
+          progress.ProgressValue = (double)taskCount[0] / totalJobCount;
+          progress.Status = string.Format("Uploaded task ({0} of {1})", taskCount[0], totalJobCount);
+        }
+
+        var tasks = new List<TS.Task>();
+        foreach (HiveTask child in hiveTask.ChildHiveTasks) {
+          tasks.Add(TS.Task.Factory.StartNew((tuple) => {
+            var arguments = (Tuple<HiveTask, HiveTask>)tuple;
+            UploadTaskWithChildren(progress, arguments.Item1, arguments.Item2, groups, taskCount, totalJobCount, configPluginId, jobId, log, isPrivileged, cancellationToken);
+          }, new Tuple<HiveTask, HiveTask>(child, hiveTask))
+          .ContinueWith((x) => log.LogException(x.Exception), TaskContinuationOptions.OnlyOnFaulted));
+        }
+        taskUploadSemaphore.Release(); semaphoreReleased = true; // the semaphore has to be release before waitall!
+        try {
+          TS.Task.WaitAll(tasks.ToArray());
+        }
+        catch (AggregateException ae) {
+          if (!ae.InnerExceptions.All(e => e is TaskCanceledException)) throw ae; // for some reason the WaitAll throws a AggregateException containg a TaskCanceledException. i don't know where it comes from, however the tasks all finish properly, so for now just ignore it
+        }
+      }
+      finally {
+        if (!semaphoreReleased) taskUploadSemaphore.Release();
+      }
+    }
+    #endregion
+
+    #region Download Experiment
+    public static void LoadJob(RefreshableJob refreshableJob) {
+      var hiveExperiment = refreshableJob.Job;
+      refreshableJob.Progress = new Progress();
+
+      try {
+        refreshableJob.IsProgressing = true;
+        int totalJobCount = 0;
+        IEnumerable<LightweightTask> allTasks;
+
+        refreshableJob.Progress.Status = "Connecting to Server...";
+        // fetch all task objects to create the full tree of tree of HiveTask objects
+        refreshableJob.Progress.Status = "Downloading list of tasks...";
+        allTasks = ServiceLocator.Instance.CallHiveService(s => s.GetLightweightJobTasks(hiveExperiment.Id));
+        totalJobCount = allTasks.Count();
+
+        TaskDownloader downloader = new TaskDownloader(allTasks.Select(x => x.Id));
+        downloader.StartAsync();
+
+        while (!downloader.IsFinished) {
+          refreshableJob.Progress.ProgressValue = downloader.FinishedCount / (double)totalJobCount;
+          refreshableJob.Progress.Status = string.Format("Downloading/deserializing tasks... ({0}/{1} finished)", downloader.FinishedCount, totalJobCount);
+          Thread.Sleep(500);
+
+          if (downloader.IsFaulted) {
+            throw downloader.Exception;
+          }
+        }
+        IDictionary<Guid, HiveTask> allHiveTasks = downloader.Results;
+
+        refreshableJob.HiveTasks = new ItemCollection<HiveTask>(allHiveTasks.Values.Where(x => !x.Task.ParentTaskId.HasValue));
+
+        if (refreshableJob.IsFinished()) {
+          refreshableJob.ExecutionState = Core.ExecutionState.Stopped;
+        } else {
+          refreshableJob.ExecutionState = Core.ExecutionState.Started;
+        }
+
+        // build child-task tree
+        foreach (HiveTask hiveTask in refreshableJob.HiveTasks) {
+          BuildHiveJobTree(hiveTask, allTasks, allHiveTasks);
+        }
+
+        refreshableJob.OnLoaded();
+      }
+      finally {
+        refreshableJob.IsProgressing = false;
+      }
+    }
+
+    private static void BuildHiveJobTree(HiveTask parentHiveJob, IEnumerable<LightweightTask> allJobs, IDictionary<Guid, HiveTask> allHiveJobs) {
+      IEnumerable<LightweightTask> childTasks = from job in allJobs
+                                                where job.ParentTaskId.HasValue && job.ParentTaskId.Value == parentHiveJob.Task.Id
+                                                orderby job.DateCreated ascending
+                                                select job;
+      foreach (LightweightTask task in childTasks) {
+        HiveTask childHiveTask = allHiveJobs[task.Id];
+        parentHiveJob.AddChildHiveJob(childHiveTask);
+        BuildHiveJobTree(childHiveTask, allJobs, allHiveJobs);
+      }
+    }
+    #endregion
+
+    /// <summary>
+    /// Converts a string which can contain Ids separated by ';' to a enumerable
+    /// </summary>
+    private static IEnumerable<string> ToResourceNameList(string resourceNames) {
+      if (!string.IsNullOrEmpty(resourceNames)) {
+        return resourceNames.Split(';');
+      } else {
+        return new List<string>();
+      }
+    }
+
+    public static ItemTask LoadItemJob(Guid jobId) {
+      TaskData taskData = ServiceLocator.Instance.CallHiveService(s => s.GetTaskData(jobId));
+      try {
+        return PersistenceUtil.Deserialize<ItemTask>(taskData.Data);
+      }
+      catch {
+        return null;
+      }
+    }
+
+    /// <summary>
+    /// Executes the action. If it throws an exception it is repeated until repetition-count is reached.
+    /// If repetitions is -1, it is repeated infinitely.
+    /// </summary>
+    public static void TryAndRepeat(Action action, int repetitions, string errorMessage, ILog log = null) {
+      while (true) {
+        try { action(); return; }
+        catch (Exception e) {
+          if (repetitions == 0) throw new HiveException(errorMessage, e);
+          if (log != null) log.LogMessage(string.Format("{0}: {1} - will try again!", errorMessage, e.ToString()));
+          repetitions--;
+        }
+      }
+    }
+
+    public static HiveItemCollection<JobPermission> GetJobPermissions(Guid jobId) {
+      return ServiceLocator.Instance.CallHiveService((service) => {
+        IEnumerable<JobPermission> jps = service.GetJobPermissions(jobId);
+        foreach (var hep in jps) {
+          hep.UnmodifiedGrantedUserNameUpdate(service.GetUsernameByUserId(hep.GrantedUserId));
+        }
+        return new HiveItemCollection<JobPermission>(jps);
+      });
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveJobs/EngineHiveTask.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveJobs/EngineHiveTask.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveJobs/EngineHiveTask.cs	(revision 7085)
@@ -0,0 +1,79 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive {
+  public class EngineHiveTask : HiveTask<EngineTask> {
+    private IScope parentScopeClone;
+
+    #region Constructors and cloning
+    public EngineHiveTask() { }
+    public EngineHiveTask(EngineTask engineJob, IScope parentScopeClone)
+      : base(engineJob) {
+      this.parentScopeClone = parentScopeClone;
+    }
+
+    protected EngineHiveTask(EngineHiveTask original, Cloner cloner)
+      : base(original, cloner) {
+      this.parentScopeClone = cloner.Clone(original.parentScopeClone);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EngineHiveTask(this, cloner);
+    }
+    #endregion
+
+    public override TaskData GetAsTaskData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
+      plugins = new List<IPluginDescription>();
+      if (this.itemTask == null)
+        return null;
+
+      TaskData jobData = new TaskData();
+      IEnumerable<Type> usedTypes;
+
+      // clone operation and remove unnecessary scopes; don't do this earlier to avoid memory problems
+      //lock (locker) {
+        ((IAtomicOperation)ItemTask.InitialOperation).Scope.Parent = parentScopeClone;
+        ItemTask.InitialOperation = (IOperation)ItemTask.InitialOperation.Clone();
+        ((IAtomicOperation)ItemTask.InitialOperation).Scope.ClearParentScopes();
+        jobData.Data = PersistenceUtil.Serialize(ItemTask, out usedTypes);
+      //}
+
+      // add type objects from object graph to work around ticket #1527
+      var typeObjects = ItemTask.GetObjectGraphObjects().OfType<Type>();
+      usedTypes = new List<Type>(usedTypes).Union(typeObjects);
+
+      PluginUtil.CollectDeclaringPlugins(plugins, usedTypes);
+      
+      return jobData;
+    }
+
+    public override void ClearData() {
+      base.ClearData();
+      this.ItemTask.InitialOperation = null;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveJobs/HiveTask.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveJobs/HiveTask.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveJobs/HiveTask.cs	(revision 7085)
@@ -0,0 +1,531 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Linq;
+using System.Threading;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive {
+
+  [Item("Hive Task", "Represents a hive task.")]
+  [StorableClass]
+  public class HiveTask : NamedItem, IItemTree<HiveTask> {
+    protected static object locker = new object();
+    protected ReaderWriterLockSlim childHiveTasksLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
+
+    public override Image ItemImage {
+      get {
+        if (task.Id == Guid.Empty) { // not yet uploaded
+          return HeuristicLab.Common.Resources.VSImageLibrary.Event;
+        } else {
+          if (task.State == TaskState.Waiting) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutablePrepared;
+          else if (task.State == TaskState.Calculating) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStarted;
+          else if (task.State == TaskState.Transferring) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStarted;
+          else if (task.State == TaskState.Paused) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutablePaused;
+          else if (task.State == TaskState.Aborted) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStopped;
+          else if (task.State == TaskState.Failed) return HeuristicLab.Common.Resources.VSImageLibrary.Error;
+          else if (task.State == TaskState.Finished) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStopped;
+          else return HeuristicLab.Common.Resources.VSImageLibrary.Event;
+        }
+      }
+    }
+
+    [Storable]
+    protected Task task;
+    public Task Task {
+      get { return task; }
+      set {
+        if (task != value) {
+          DeregisterJobEvents();
+          task = value;
+          RegisterJobEvents();
+          IsFinishedTaskDownloaded = false;
+          OnTaskChanged();
+          OnToStringChanged();
+          OnItemImageChanged();
+        }
+
+      }
+    }
+
+    [Storable]
+    protected ItemTask itemTask;
+    public ItemTask ItemTask {
+      get { return itemTask; }
+      set {
+        if (itemTask != null && syncTasksWithOptimizers) {
+          this.childHiveTasks.Clear();
+        }
+        if (itemTask != value) {
+          DergisterItemTaskEvents();
+          itemTask = value;
+          RegisterItemTaskEvents();
+          OnItemTaskChanged();
+          IsFinishedTaskDownloaded = true;
+        }
+      }
+    }
+
+    // task downloaded since last status change
+    [Storable]
+    private bool isFinishedTaskDownloaded = false;
+    public bool IsFinishedTaskDownloaded {
+      get { return isFinishedTaskDownloaded; }
+      set {
+        if (value != isFinishedTaskDownloaded) {
+          this.isFinishedTaskDownloaded = value;
+          OnIsFinishedJobDownloadedChanged();
+        }
+      }
+    }
+
+    public bool IsDownloading { get; set; }
+
+    // if true, all control buttons should be enabled. otherwise disabled
+    private bool isControllable = true;
+    public bool IsControllable {
+      get { return isControllable; }
+      set {
+        if (value != isControllable) {
+          isControllable = value;
+          OnIsControllableChanged();
+          childHiveTasksLock.EnterReadLock();
+          try {
+            foreach (var hiveJob in childHiveTasks) {
+              hiveJob.IsControllable = value;
+            }
+          }
+          finally {
+            childHiveTasksLock.ExitReadLock();
+          }
+        }
+      }
+    }
+
+    [Storable]
+    protected ItemList<HiveTask> childHiveTasks;
+    public virtual ReadOnlyItemList<HiveTask> ChildHiveTasks {
+      get {
+        childHiveTasksLock.EnterReadLock();
+        try {
+          return childHiveTasks.AsReadOnly();
+        }
+        finally { childHiveTasksLock.ExitReadLock(); }
+      }
+    }
+
+    [Storable]
+    protected bool syncTasksWithOptimizers = true;
+
+    public StateLogList StateLog {
+      get { return new StateLogList(this.task.StateLog); }
+    }
+
+    public StateLogListList ChildStateLogList {
+      get { return new StateLogListList(this.childHiveTasks.Select(x => x.StateLog)); }
+    }
+
+    #region Constructors and Cloning
+    [StorableConstructor]
+    protected HiveTask(bool deserializing) { }
+
+    public HiveTask() {
+      this.Task = new Task() { CoresNeeded = 1, MemoryNeeded = 0 };
+      task.State = TaskState.Offline;
+      this.childHiveTasks = new ItemList<HiveTask>();
+      syncTasksWithOptimizers = true;
+      RegisterChildHiveJobEvents();
+    }
+
+    public HiveTask(ItemTask itemJob, bool autoCreateChildHiveJobs)
+      : this() {
+      this.syncTasksWithOptimizers = autoCreateChildHiveJobs;
+      this.ItemTask = itemJob;
+      this.syncTasksWithOptimizers = true;
+    }
+
+    public HiveTask(Task job, TaskData taskData, bool autoCreateChildHiveTasks) {
+      this.syncTasksWithOptimizers = autoCreateChildHiveTasks;
+      this.Task = job;
+      try {
+        this.ItemTask = PersistenceUtil.Deserialize<ItemTask>(taskData.Data);
+      }
+      catch {
+        this.ItemTask = null;
+      }
+      this.childHiveTasks = new ItemList<HiveTask>();
+      this.syncTasksWithOptimizers = true;
+      RegisterChildHiveJobEvents();
+    }
+
+    protected HiveTask(HiveTask original, Cloner cloner)
+      : base(original, cloner) {
+      this.Task = cloner.Clone(original.task);
+      this.ItemTask = cloner.Clone(original.ItemTask);
+      original.childHiveTasksLock.EnterReadLock();
+      try {
+        this.childHiveTasks = cloner.Clone(original.childHiveTasks);
+      }
+      finally { original.childHiveTasksLock.ExitReadLock(); }
+      this.syncTasksWithOptimizers = original.syncTasksWithOptimizers;
+      this.isFinishedTaskDownloaded = original.isFinishedTaskDownloaded;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveTask(this, cloner);
+    }
+    #endregion
+
+    protected virtual void UpdateChildHiveTasks() { }
+
+    protected virtual void RegisterItemTaskEvents() {
+      if (ItemTask != null) {
+        ItemTask.ComputeInParallelChanged += new EventHandler(ItemJob_ComputeInParallelChanged);
+        ItemTask.ToStringChanged += new EventHandler(ItemJob_ToStringChanged);
+      }
+    }
+    protected virtual void DergisterItemTaskEvents() {
+      if (ItemTask != null) {
+        ItemTask.ComputeInParallelChanged -= new EventHandler(ItemJob_ComputeInParallelChanged);
+        ItemTask.ToStringChanged -= new EventHandler(ItemJob_ToStringChanged);
+      }
+    }
+
+    protected virtual void RegisterChildHiveJobEvents() {
+      this.childHiveTasks.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnItemsAdded);
+      this.childHiveTasks.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnItemsRemoved);
+      this.childHiveTasks.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnCollectionReset);
+    }
+    protected virtual void DeregisterChildHiveJobEvents() {
+      this.childHiveTasks.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnItemsAdded);
+      this.childHiveTasks.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnItemsRemoved);
+      this.childHiveTasks.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnCollectionReset);
+    }
+
+    protected virtual void ItemJob_ToStringChanged(object sender, EventArgs e) {
+      this.OnToStringChanged();
+    }
+
+    protected virtual void ItemJob_ComputeInParallelChanged(object sender, EventArgs e) {
+      if (ItemTask != null && syncTasksWithOptimizers) {
+        this.UpdateChildHiveTasks();
+      }
+    }
+
+    public virtual void AddChildHiveJob(HiveTask hiveJob) {
+      childHiveTasksLock.EnterWriteLock();
+      try {
+        this.childHiveTasks.Add(hiveJob);
+      }
+      finally { childHiveTasksLock.ExitWriteLock(); }
+    }
+
+    public override string ToString() {
+      if (itemTask != null && itemTask.Item != null) {
+        return itemTask.ToString();
+      } else {
+        return Task.Id.ToString();
+      }
+    }
+
+    public virtual void UpdateFromLightweightJob(LightweightTask lightweightJob) {
+      if (lightweightJob != null) {
+        task.Id = lightweightJob.Id;
+        task.ParentTaskId = lightweightJob.ParentTaskId;
+        task.ExecutionTime = lightweightJob.ExecutionTime;
+        task.State = lightweightJob.State;
+        task.StateLog = new List<StateLog>(lightweightJob.StateLog);
+        task.Command = lightweightJob.Command;
+
+        OnTaskStateChanged();
+        OnToStringChanged();
+        OnItemImageChanged();
+        OnStateLogChanged();
+      }
+    }
+
+    /// <summary>
+    /// Creates a TaskData object containing the Task and the IJob-Object as byte[]
+    /// </summary>
+    /// <param name="withoutChildOptimizers">
+    ///   if true the Child-Optimizers will not be serialized (if the task contains an Experiment)
+    /// </param>
+    public virtual TaskData GetAsTaskData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
+      plugins = new List<IPluginDescription>();
+      if (this.itemTask == null)
+        return null;
+
+      IEnumerable<Type> usedTypes;
+      byte[] taskByteArray = PersistenceUtil.Serialize(this.ItemTask, out usedTypes);
+      TaskData taskData = new TaskData() { TaskId = task.Id, Data = taskByteArray };
+      PluginUtil.CollectDeclaringPlugins(plugins, usedTypes);
+      return taskData;
+    }
+
+    #region Event Handler
+    public event EventHandler TaskChanged;
+    private void OnTaskChanged() {
+      EventHandler handler = TaskChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler TaskStateChanged;
+    private void OnTaskStateChanged() {
+      EventHandler handler = TaskStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ItemTaskChanged;
+    private void OnItemTaskChanged() {
+      ItemJob_ComputeInParallelChanged(this, EventArgs.Empty);
+      var handler = ItemTaskChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsFinishedJobDownloadedChanged;
+    private void OnIsFinishedJobDownloadedChanged() {
+      var handler = IsFinishedJobDownloadedChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler StateLogChanged;
+    private void OnStateLogChanged() {
+      var handler = StateLogChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsControllableChanged;
+    private void OnIsControllableChanged() {
+      var handler = IsControllableChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    private void RegisterJobEvents() {
+      if (task != null)
+        task.PropertyChanged += new PropertyChangedEventHandler(job_PropertyChanged);
+    }
+
+    private void DeregisterJobEvents() {
+      if (task != null)
+        task.PropertyChanged += new PropertyChangedEventHandler(job_PropertyChanged);
+    }
+
+    private void job_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      if (e.PropertyName == "State") {
+        IsFinishedTaskDownloaded = false;
+      }
+    }
+    #endregion
+
+    /// <summary>
+    /// Returns a list of HiveTasks including this and all its child-jobs recursively
+    /// </summary>
+    public IEnumerable<HiveTask> GetAllHiveTasks() {
+      childHiveTasksLock.EnterReadLock();
+      try {
+        var jobs = new List<HiveTask>();
+        jobs.Add(this);
+        foreach (HiveTask child in this.childHiveTasks) {
+          jobs.AddRange(child.GetAllHiveTasks());
+        }
+        return jobs;
+      }
+      finally { childHiveTasksLock.ExitReadLock(); }
+    }
+
+    public HiveTask GetParentByJobId(Guid taskId) {
+      childHiveTasksLock.EnterReadLock();
+      try {
+        if (this.ChildHiveTasks.SingleOrDefault(j => j.task.Id == taskId) != null)
+          return this;
+        foreach (HiveTask child in this.childHiveTasks) {
+          HiveTask result = child.GetParentByJobId(taskId);
+          if (result != null)
+            return result;
+        }
+        return null;
+      }
+      finally { childHiveTasksLock.ExitWriteLock(); }
+    }
+
+    /// <summary>
+    /// Searches for an HiveTask object with the correct taskId recursively
+    /// </summary>
+    public HiveTask GetHiveTaskByTaskId(Guid jobId) {
+      if (this.Task.Id == jobId) {
+        return this;
+      } else {
+        childHiveTasksLock.EnterReadLock();
+        try {
+          foreach (HiveTask child in this.childHiveTasks) {
+            HiveTask result = child.GetHiveTaskByTaskId(jobId);
+            if (result != null)
+              return result;
+          }
+        }
+        finally { childHiveTasksLock.ExitReadLock(); }
+      }
+      return null;
+    }
+
+    public void RemoveByTaskId(Guid jobId) {
+      childHiveTasksLock.EnterWriteLock();
+      try {
+        IEnumerable<HiveTask> jobs = childHiveTasks.Where(j => j.Task.Id == jobId).ToList();
+        foreach (HiveTask j in jobs) {
+          this.childHiveTasks.Remove(j);
+        }
+        foreach (HiveTask child in childHiveTasks) {
+          child.RemoveByTaskId(jobId);
+        }
+      }
+      finally { childHiveTasksLock.ExitWriteLock(); }
+    }
+
+    public IEnumerable<IItemTree<HiveTask>> GetChildItems() {
+      return this.ChildHiveTasks;
+    }
+
+    #region INotifyObservableCollectionItemsChanged<IItemTree> Members
+
+    public event CollectionItemsChangedEventHandler<IItemTree<HiveTask>> CollectionReset;
+    private void OnCollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<HiveTask>> e) {
+      foreach (var item in e.Items) {
+        item.Value.StateLogChanged -= new EventHandler(ChildHiveJob_StateLogChanged);
+      }
+      var handler = CollectionReset;
+      if (handler != null) handler(this, ToCollectionItemsChangedEventArgs(e));
+    }
+
+    public event CollectionItemsChangedEventHandler<IItemTree<HiveTask>> ItemsAdded;
+    private void OnItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<HiveTask>> e) {
+      foreach (var item in e.Items) {
+        item.Value.StateLogChanged += new EventHandler(ChildHiveJob_StateLogChanged);
+        item.Value.IsControllable = this.IsControllable;
+      }
+      var handler = ItemsAdded;
+      if (handler != null) handler(this, ToCollectionItemsChangedEventArgs(e));
+    }
+
+    public event CollectionItemsChangedEventHandler<IItemTree<HiveTask>> ItemsRemoved;
+    private void OnItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<HiveTask>> e) {
+      foreach (var item in e.Items) {
+        item.Value.StateLogChanged -= new EventHandler(ChildHiveJob_StateLogChanged);
+      }
+      var handler = ItemsRemoved;
+      if (handler != null) handler(this, ToCollectionItemsChangedEventArgs(e));
+    }
+
+    private static CollectionItemsChangedEventArgs<IItemTree<HiveTask>> ToCollectionItemsChangedEventArgs(CollectionItemsChangedEventArgs<IndexedItem<HiveTask>> e) {
+      return new CollectionItemsChangedEventArgs<IItemTree<HiveTask>>(e.Items.Select(x => x.Value), e.OldItems == null ? null : e.OldItems.Select(x => x.Value));
+    }
+
+    private void ChildHiveJob_StateLogChanged(object sender, EventArgs e) {
+      OnStateLogChanged();
+    }
+    #endregion
+
+    public void Pause() {
+      if (this.Task.IsParentTask) {
+        childHiveTasksLock.EnterReadLock();
+        try {
+          foreach (var child in childHiveTasks) {
+            ServiceLocator.Instance.CallHiveService(s => s.PauseTask(child.task.Id));
+          }
+        }
+        finally { childHiveTasksLock.ExitReadLock(); }
+      } else {
+        ServiceLocator.Instance.CallHiveService(s => s.PauseTask(this.task.Id));
+      }
+    }
+
+    public void Stop() {
+      if (this.Task.IsParentTask) {
+        childHiveTasksLock.EnterReadLock();
+        try {
+          foreach (var child in childHiveTasks) {
+            ServiceLocator.Instance.CallHiveService(s => s.StopTask(child.task.Id));
+          }
+        }
+        finally { childHiveTasksLock.ExitReadLock(); }
+      } else {
+        ServiceLocator.Instance.CallHiveService(s => s.StopTask(this.task.Id));
+      }
+    }
+
+    public void Restart() {
+      ServiceLocator.Instance.CallHiveService(service => {
+        TaskData taskData = new TaskData();
+        taskData.TaskId = this.task.Id;
+        taskData.Data = PersistenceUtil.Serialize(this.itemTask);
+        service.UpdateTaskData(this.Task, taskData);
+        service.RestartTask(this.task.Id);
+        Task task = service.GetTask(this.task.Id);
+        this.task.LastTaskDataUpdate = task.LastTaskDataUpdate;
+      });
+    }
+
+    public ICollection<IItemTreeNodeAction<HiveTask>> Actions {
+      get {
+        return new List<IItemTreeNodeAction<HiveTask>>();
+      }
+    }
+
+    public virtual void IntegrateChild(ItemTask task, Guid childTaskId) { }
+
+    /// <summary>
+    /// Delete ItemTask
+    /// </summary>
+    public virtual void ClearData() {
+      this.ItemTask.Item = null;
+    }
+  }
+
+  [Item("Hive Task", "Represents a hive task.")]
+  [StorableClass]
+  public class HiveTask<T> : HiveTask where T : ItemTask {
+
+    public new T ItemTask {
+      get { return (T)base.ItemTask; }
+      internal set { base.ItemTask = value; }
+    }
+
+    #region Constructors and Cloning
+    public HiveTask() : base() { }
+    [StorableConstructor]
+    protected HiveTask(bool deserializing) { }
+    public HiveTask(T itemJob) : base(itemJob, true) { }
+    protected HiveTask(HiveTask<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveTask<T>(this, cloner);
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveJobs/OptimizerHiveTask.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveJobs/OptimizerHiveTask.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/HiveJobs/OptimizerHiveTask.cs	(revision 7085)
@@ -0,0 +1,389 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Clients.Hive.Jobs;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive {
+  public class OptimizerHiveTask : HiveTask<OptimizerTask> {
+
+    #region Constructors and Cloning
+    public OptimizerHiveTask() { }
+    public OptimizerHiveTask(IOptimizer optimizer)
+      : this() {
+      this.ItemTask = new OptimizerTask(optimizer);
+    }
+    public OptimizerHiveTask(OptimizerTask optimizerJob)
+      : this() {
+      this.ItemTask = optimizerJob;
+    }
+    protected OptimizerHiveTask(OptimizerHiveTask original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OptimizerHiveTask(this, cloner);
+    }
+    #endregion
+
+    /// <summary>
+    /// if this.Optimizer is an experiment
+    ///   Uses the child-optimizers of this.HiveTask and creates HiveTask-childs
+    /// if this.Optimizer is a batchrun
+    ///   Creates a number of child-jobs according to repetitions
+    /// </summary>
+    protected override void UpdateChildHiveTasks() {
+      base.UpdateChildHiveTasks();
+      if (Task != null && syncTasksWithOptimizers) {
+        if (!ItemTask.ComputeInParallel) {
+          this.childHiveTasks.Clear();
+        } else {
+          if (ItemTask.Item is Optimization.Experiment) {
+            Optimization.Experiment experiment = (Optimization.Experiment)ItemTask.Item;
+            foreach (IOptimizer childOpt in experiment.Optimizers) {
+              this.childHiveTasks.Add(new OptimizerHiveTask(childOpt));
+            }
+          } else if (ItemTask.Item is Optimization.BatchRun) {
+            Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun;
+            if (batchRun.Optimizer != null) {
+              while (this.childHiveTasks.Count < batchRun.Repetitions) {
+                this.childHiveTasks.Add(new OptimizerHiveTask(batchRun.Optimizer));
+              }
+              while (this.childHiveTasks.Count > batchRun.Repetitions) {
+                this.childHiveTasks.Remove(this.childHiveTasks.Last());
+              }
+            }
+          }
+        }
+      }
+    }
+
+    protected override void RegisterItemTaskEvents() {
+      base.RegisterItemTaskEvents();
+      if (ItemTask != null) {
+        if (ItemTask.Item is Optimization.Experiment) {
+          Optimization.Experiment experiment = ItemTask.OptimizerAsExperiment;
+          experiment.Optimizers.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
+          experiment.Optimizers.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
+          experiment.Optimizers.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
+          experiment.Optimizers.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
+        } else if (ItemTask.Item is Optimization.BatchRun) {
+          Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun;
+          batchRun.RepetitionsChanged += new EventHandler(batchRun_RepetitionsChanged);
+          batchRun.OptimizerChanged += new EventHandler(batchRun_OptimizerChanged);
+        }
+      }
+    }
+    protected override void DergisterItemTaskEvents() {
+      base.DergisterItemTaskEvents();
+      if (ItemTask != null) {
+        if (ItemTask.Item is Optimization.Experiment) {
+          Optimization.Experiment experiment = ItemTask.OptimizerAsExperiment;
+          experiment.Optimizers.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
+          experiment.Optimizers.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
+          experiment.Optimizers.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
+          experiment.Optimizers.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
+        } else if (ItemTask.Item is Optimization.BatchRun) {
+          Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun;
+          batchRun.RepetitionsChanged -= new EventHandler(batchRun_RepetitionsChanged);
+          batchRun.OptimizerChanged -= new EventHandler(batchRun_OptimizerChanged);
+        }
+      }
+    }
+
+    private void batchRun_OptimizerChanged(object sender, EventArgs e) {
+      if (syncTasksWithOptimizers) {
+        UpdateChildHiveTasks();
+      }
+    }
+
+    private void batchRun_RepetitionsChanged(object sender, EventArgs e) {
+      if (syncTasksWithOptimizers) {
+        UpdateChildHiveTasks();
+      }
+    }
+
+    private void Optimizers_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) {
+        childHiveTasksLock.EnterWriteLock();
+        try {
+          foreach (var item in e.Items) {
+            if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") {
+              this.childHiveTasks.Add(new OptimizerHiveTask(item.Value));
+            }
+          }
+        }
+        finally { childHiveTasksLock.ExitWriteLock(); }
+      }
+    }
+    private void Optimizers_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) {
+        childHiveTasksLock.EnterWriteLock();
+        try {
+          foreach (var item in e.OldItems) {
+            this.childHiveTasks.Remove(this.GetChildByOptimizer(item.Value));
+          }
+          foreach (var item in e.Items) {
+            if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") {
+              this.childHiveTasks.Add(new OptimizerHiveTask(item.Value));
+            }
+          }
+        }
+        finally { childHiveTasksLock.ExitWriteLock(); }
+      }
+    }
+    private void Optimizers_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) {
+        childHiveTasksLock.EnterWriteLock();
+        try {
+          foreach (var item in e.Items) {
+            this.childHiveTasks.Remove(this.GetChildByOptimizer(item.Value));
+          }
+        }
+        finally { childHiveTasksLock.ExitWriteLock(); }
+      }
+    }
+    private void Optimizers_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) {
+        childHiveTasksLock.EnterWriteLock();
+        try {
+          foreach (var item in e.Items) {
+            this.childHiveTasks.Remove(this.GetChildByOptimizer(item.Value));
+          }
+        }
+        finally { childHiveTasksLock.ExitWriteLock(); }
+      }
+    }
+
+    /// <summary>
+    /// if this.Optimizer is Experiment
+    ///   replace the child-optimizer in the experiment
+    /// if this.Optimizer is BatchRun
+    ///   add the runs from the optimizerTask to the batchrun and replace the Optimizer
+    /// </summary>
+    public override void IntegrateChild(ItemTask task, Guid childJobId) {
+      var optimizerTask = (OptimizerTask)task;
+      syncTasksWithOptimizers = false; // don't sync with optimizers during this method
+
+      if (this.ItemTask != null && this.ItemTask.Item != null) {
+        if (this.ItemTask.Item is Optimization.Experiment) {
+          UpdateOptimizerInExperiment(this.ItemTask.OptimizerAsExperiment, optimizerTask);
+        } else if (this.ItemTask.Item is Optimization.BatchRun) {
+          UpdateOptimizerInBatchRun(this.ItemTask.OptimizerAsBatchRun, optimizerTask);
+        }
+      }
+
+      childHiveTasksLock.EnterReadLock();
+      OptimizerHiveTask child = (OptimizerHiveTask)this.ChildHiveTasks.Single(j => j.Task.Id == childJobId);
+      try {
+        if (!optimizerTask.ComputeInParallel) {
+          child.syncTasksWithOptimizers = false;
+          child.ItemTask = optimizerTask;
+          child.syncTasksWithOptimizers = true;
+        }
+      }
+      finally { childHiveTasksLock.ExitReadLock(); }
+      syncTasksWithOptimizers = true;
+    }
+
+    /// <summary>
+    /// Adds the runs from the optimizerTask to the batchrun and replaces the Optimizer 
+    /// Sideeffect: the optimizerTask.Optimizer will be prepared (scopes are deleted and executionstate will be reset)
+    /// </summary>
+    private void UpdateOptimizerInBatchRun(BatchRun batchRun, OptimizerTask optimizerTask) {
+      if (batchRun.Optimizer == null) {
+        batchRun.Optimizer = (IOptimizer)optimizerTask.Item; // only set the first optimizer as Optimizer. if every time the Optimizer would be set, the runs would be cleared each time
+      }
+      foreach (IRun run in optimizerTask.Item.Runs) {
+        if (!batchRun.Runs.Contains(run)) {
+          run.Name = GetNewRunName(run, batchRun.Runs);
+          batchRun.Runs.Add(run);
+        }
+      }
+    }
+
+    /// <summary>
+    /// replace the child-optimizer in the experiment
+    /// Sideeffect: the optimizerTask.Optimizer will be prepared (scopes are deleted and executionstate will be reset)
+    /// </summary>
+    private void UpdateOptimizerInExperiment(Optimization.Experiment experiment, OptimizerTask optimizerTask) {
+      if (optimizerTask.IndexInParentOptimizerList < 0)
+        throw new IndexOutOfRangeException("IndexInParentOptimizerList must be equal or greater than zero! The Task is invalid and the optimizer-tree cannot be reassembled.");
+
+      while (experiment.Optimizers.Count < optimizerTask.IndexInParentOptimizerList) {
+        experiment.Optimizers.Add(new UserDefinedAlgorithm("Placeholder")); // add dummy-entries to Optimizers so that its possible to insert the optimizerTask at the correct position
+      }
+      if (experiment.Optimizers.Count < optimizerTask.IndexInParentOptimizerList + 1) {
+        experiment.Optimizers.Add(optimizerTask.Item);
+      } else {
+        // if ComputeInParallel==true, don't replace the optimizer (except it is still a Placeholder)
+        // this is because Jobs with ComputeInParallel get submitted to hive with their child-optimizers deleted
+        if (!optimizerTask.ComputeInParallel || experiment.Optimizers[optimizerTask.IndexInParentOptimizerList].Name == "Placeholder") {
+          experiment.Optimizers[optimizerTask.IndexInParentOptimizerList] = optimizerTask.Item;
+        }
+      }
+    }
+
+    /// <summary>
+    /// Sets the IndexInParentOptimizerList property of the OptimizerJob
+    /// according to the position in the OptimizerList of the parentHiveTask.Task
+    /// Recursively updates all the child-jobs as well
+    /// </summary>
+    internal void SetIndexInParentOptimizerList(OptimizerHiveTask parentHiveTask) {
+      if (parentHiveTask != null) {
+        if (parentHiveTask.ItemTask.Item is Optimization.Experiment) {
+          this.ItemTask.IndexInParentOptimizerList = parentHiveTask.ItemTask.OptimizerAsExperiment.Optimizers.IndexOf(this.ItemTask.Item);
+        } else if (parentHiveTask.ItemTask.Item is Optimization.BatchRun) {
+          this.ItemTask.IndexInParentOptimizerList = 0;
+        } else {
+          throw new NotSupportedException("Only Experiment and BatchRuns are supported");
+        }
+      }
+      childHiveTasksLock.EnterReadLock();
+      try {
+        foreach (OptimizerHiveTask child in childHiveTasks) {
+          child.SetIndexInParentOptimizerList(this);
+        }
+      }
+      finally { childHiveTasksLock.ExitReadLock(); }
+    }
+
+    public override void AddChildHiveJob(HiveTask hiveJob) {
+      base.AddChildHiveJob(hiveJob);
+      var optimizerHiveJob = (OptimizerHiveTask)hiveJob;
+      syncTasksWithOptimizers = false;
+      if (this.ItemTask != null && optimizerHiveJob.ItemTask != null) {
+        // if task is in state Paused, it has to preserve its ResultCollection, which is cleared when a optimizer is added to an experiment
+        OptimizerTask optimizerJobClone = null;
+        if (optimizerHiveJob.Task.State == TaskState.Paused) {
+          optimizerJobClone = (OptimizerTask)optimizerHiveJob.ItemTask.Clone();
+        }
+
+        if (this.ItemTask.Item is Optimization.Experiment) {
+          if (!this.ItemTask.OptimizerAsExperiment.Optimizers.Contains(optimizerHiveJob.ItemTask.Item)) {
+            UpdateOptimizerInExperiment(this.ItemTask.OptimizerAsExperiment, optimizerHiveJob.ItemTask);
+          }
+        } else if (this.ItemTask.Item is Optimization.BatchRun) {
+          UpdateOptimizerInBatchRun(this.ItemTask.OptimizerAsBatchRun, optimizerHiveJob.ItemTask);
+        }
+
+        if (optimizerHiveJob.Task.State == TaskState.Paused) {
+          optimizerHiveJob.ItemTask = optimizerJobClone;
+        }
+      }
+      syncTasksWithOptimizers = true;
+    }
+
+    /// <summary>
+    /// Creates a TaskData object containing the Task and the IJob-Object as byte[]
+    /// </summary>
+    /// <param name="withoutChildOptimizers">
+    ///   if true the Child-Optimizers will not be serialized (if the task contains an Experiment)
+    /// </param>
+    public override TaskData GetAsTaskData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
+      plugins = new List<IPluginDescription>();
+      if (this.itemTask == null) // || this.jobItem.Optimizer == null
+        return null;
+
+      IEnumerable<Type> usedTypes;
+      byte[] jobByteArray;
+      if (withoutChildOptimizers && this.ItemTask.Item is Optimization.Experiment) {
+        OptimizerTask clonedJob = (OptimizerTask)this.ItemTask.Clone(); // use a cloned task, so that the childHiveJob don't get confused
+        clonedJob.OptimizerAsExperiment.Optimizers.Clear();
+        jobByteArray = PersistenceUtil.Serialize(clonedJob, out usedTypes);
+      } else if (withoutChildOptimizers && this.ItemTask.Item is Optimization.BatchRun) {
+        OptimizerTask clonedJob = (OptimizerTask)this.ItemTask.Clone();
+        clonedJob.OptimizerAsBatchRun.Optimizer = null;
+        jobByteArray = PersistenceUtil.Serialize(clonedJob, out usedTypes);
+      } else if (this.ItemTask.Item is IAlgorithm) {
+        ((IAlgorithm)this.ItemTask.Item).StoreAlgorithmInEachRun = false; // avoid storing the algorithm in runs to reduce size
+        jobByteArray = PersistenceUtil.Serialize(this.ItemTask, out usedTypes);
+      } else {
+        jobByteArray = PersistenceUtil.Serialize(this.ItemTask, out usedTypes);
+      }
+
+      TaskData jobData = new TaskData() { TaskId = task.Id, Data = jobByteArray };
+      PluginUtil.CollectDeclaringPlugins(plugins, usedTypes);
+      return jobData;
+    }
+
+    public OptimizerHiveTask GetChildByOptimizerJob(OptimizerTask optimizerJob) {
+      childHiveTasksLock.EnterReadLock();
+      try {
+        foreach (OptimizerHiveTask child in childHiveTasks) {
+          if (child.ItemTask == optimizerJob)
+            return child;
+        }
+        return null;
+      }
+      finally { childHiveTasksLock.ExitReadLock(); }
+    }
+
+    public HiveTask<OptimizerTask> GetChildByOptimizer(IOptimizer optimizer) {
+      childHiveTasksLock.EnterReadLock();
+      try {
+        foreach (OptimizerHiveTask child in childHiveTasks) {
+          if (child.ItemTask.Item == optimizer)
+            return child;
+        }
+        return null;
+      }
+      finally { childHiveTasksLock.ExitReadLock(); }
+    }
+
+    #region Helpers
+    /// <summary>
+    /// Parses the run numbers out of runs and renames the run to the next number
+    /// </summary>
+    private static string GetNewRunName(IRun run, RunCollection runs) {
+      int idx = run.Name.IndexOf("Run ") + 4;
+
+      if (idx == -1 || runs.Count == 0)
+        return run.Name;
+
+      int maxRunNumber = int.MinValue;
+      foreach (IRun r in runs) {
+        int number = GetRunNumber(r.Name);
+        maxRunNumber = Math.Max(maxRunNumber, number);
+      }
+
+      return run.Name.Substring(0, idx) + (maxRunNumber + 1).ToString();
+    }
+
+    /// <summary>
+    /// Parses the number of a Run out of its name. Example "Genetic Algorithm Run 3" -> 3
+    /// </summary>
+    private static int GetRunNumber(string runName) {
+      int idx = runName.IndexOf("Run ") + 4;
+      if (idx == -1) {
+        return 0;
+      } else {
+        return int.Parse(runName.Substring(idx, runName.Length - idx));
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/IServiceLocator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/IServiceLocator.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/IServiceLocator.cs	(revision 7085)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  public interface IServiceLocator {
+    string Username { get; set; }
+    string Password { get; set; }
+    void CallHiveService(Action<IHiveService> call);
+    T CallHiveService<T>(Func<IHiveService, T> call);
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/JobResultPoller.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/JobResultPoller.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/JobResultPoller.cs	(revision 7085)
@@ -0,0 +1,144 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+  public class JobResultPoller {
+    private bool stopRequested { get; set; }
+    private AutoResetEvent waitHandle;
+    private Thread thread;
+
+    private Guid jobId;
+    public Guid JobId {
+      get { return jobId; }
+      set { jobId = value; }
+    }
+
+    private TimeSpan interval;
+    public TimeSpan Interval {
+      get { return interval; }
+      set { interval = value; }
+    }
+
+    private bool isPolling;
+    public bool IsPolling {
+      get { return isPolling; }
+      set {
+        if (isPolling != value) {
+          isPolling = value;
+          OnIsPollingChanged();
+        }
+      }
+    }
+
+    private bool autoResumeOnException = false;
+    public bool AutoResumeOnException {
+      get { return autoResumeOnException; }
+      set { autoResumeOnException = value; }
+    }
+
+
+    public JobResultPoller(Guid jobId, TimeSpan interval) {
+      this.isPolling = false;
+      this.jobId = jobId;
+      this.interval = interval;
+    }
+
+    public void Start() {
+      IsPolling = true;
+      stopRequested = false;
+      thread = new Thread(RunPolling);
+      thread.Start();
+    }
+
+    public void Stop() {
+      stopRequested = true;
+      waitHandle.Set();
+      IsPolling = false;
+      thread = null;
+    }
+
+    private void RunPolling() {
+      while (true) {
+        IsPolling = true;
+        try {
+          waitHandle = new AutoResetEvent(false);
+          while (!stopRequested) {
+            OnPollingStarted();
+            FetchJobResults();
+            OnPollingFinished();
+            waitHandle.WaitOne(Interval);
+          }
+          waitHandle.Close();
+        }
+        catch (Exception e) {
+          OnExceptionOccured(e);
+        }
+        finally {
+          IsPolling = false;
+        }
+        if (stopRequested) return;
+        if (!autoResumeOnException) return;
+      }
+    }
+
+    public IEnumerable<LightweightTask> FetchJobResults() {
+      return ServiceLocator.Instance.CallHiveService(service => {
+        var responses = new List<LightweightTask>();
+        responses.AddRange(service.GetLightweightJobTasks(jobId));
+        OnJobResultsReceived(responses);
+        return responses;
+      });
+    }
+
+    public event EventHandler<EventArgs<IEnumerable<LightweightTask>>> JobResultsReceived;
+    private void OnJobResultsReceived(IEnumerable<LightweightTask> lightweightJobs) {
+      var handler = JobResultsReceived;
+      if (handler != null) handler(this, new EventArgs<IEnumerable<LightweightTask>>(lightweightJobs));
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception e) {
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(e));
+    }
+
+    public event EventHandler IsPollingChanged;
+    private void OnIsPollingChanged() {
+      var handler = IsPollingChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler PollingStarted;
+    private void OnPollingStarted() {
+      var handler = PollingStarted;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler PollingFinished;
+    private void OnPollingFinished() {
+      var handler = PollingFinished;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive {
+  [Plugin("HeuristicLab.Clients.Hive", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Clients.Hive-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Clients.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]  
+  [PluginDependency("HeuristicLab.Hive", "3.3")]  
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabClientsHivePlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Progress/IProgress.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Progress/IProgress.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Progress/IProgress.cs	(revision 7085)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  public interface IProgress {
+    string Status { get; set; }
+    double ProgressValue { get; set; }
+
+    void Finish();
+
+    event EventHandler Finished;
+    event EventHandler StatusChanged;
+    event EventHandler ProgressValueChanged;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Progress/IProgressReporter.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Progress/IProgressReporter.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Progress/IProgressReporter.cs	(revision 7085)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  public interface IProgressReporter {
+    IProgress Progress { get; }
+    bool IsProgressing { get; }
+
+    event EventHandler IsProgressingChanged;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Progress/Progress.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Progress/Progress.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Progress/Progress.cs	(revision 7085)
@@ -0,0 +1,91 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  public class Progress : IProgress {
+    private string status;
+    public string Status {
+      get {
+        return this.status;
+      }
+      set {
+        if (this.status != value) {
+          this.status = value;
+          OnStatusChanged();
+        }
+      }
+    }
+
+    private double progressValue;
+    public double ProgressValue {
+      get {
+        return this.progressValue;
+      }
+      set {
+        if (this.progressValue != value) {
+          this.progressValue = value;
+          OnProgressChanged();
+        }
+      }
+    }
+
+    public Progress() { }
+
+    public Progress(string status) {
+      this.Status = status;
+    }
+
+    public void Finish() {
+      OnFinished();
+    }
+
+    #region Event Handler
+    public event EventHandler Finished;
+    private void OnFinished() {
+      var handler = Finished;
+      try {
+        if (handler != null) handler(this, EventArgs.Empty);
+      }
+      catch (Exception) { }
+    }
+
+    public event EventHandler StatusChanged;
+    private void OnStatusChanged() {
+      var handler = StatusChanged;
+      try {
+        if (handler != null) handler(this, EventArgs.Empty);
+      }
+      catch (Exception) { }
+    }
+
+    public event EventHandler ProgressValueChanged;
+    private void OnProgressChanged() {
+      var handler = ProgressValueChanged;
+      try {
+        if (handler != null) handler(this, EventArgs.Empty);
+      }
+      catch (Exception) { }
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Clients.Hive")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("3edfc8a5-8924-470c-bc1d-53e067c5c4f4")]
+
+// 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("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs	(revision 7085)
@@ -0,0 +1,610 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Linq;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.Hive {
+  public class RefreshableJob : IHiveItem, IDeepCloneable, IContent, IProgressReporter, IComparable<RefreshableJob> {
+    private JobResultPoller jobResultPoller;
+    private ConcurrentTaskDownloader<ItemTask> jobDownloader;
+    private static object locker = new object();
+
+    private Job job;
+    public Job Job {
+      get { return job; }
+      set {
+        if (value != job) {
+          if (value == null)
+            throw new ArgumentNullException();
+
+          if (job != null) DergisterJobEvents();
+          job = value;
+          if (job != null) {
+            RegisterJobEvents();
+            job_PropertyChanged(job, new PropertyChangedEventArgs("Id"));
+          }
+          OnJobChanged();
+          OnToStringChanged(this, EventArgs.Empty);
+          job_ItemImageChanged(this, EventArgs.Empty);
+        }
+      }
+    }
+
+    private ItemCollection<HiveTask> hiveTasks;
+    public ItemCollection<HiveTask> HiveTasks {
+      get { return hiveTasks; }
+      set {
+        if (hiveTasks != value) {
+          if (hiveTasks != null) DeregisterHiveJobsEvents();
+          hiveTasks = value;
+          if (hiveTasks != null) RegisterHiveJobsEvents();
+          OnHiveTasksChanged();
+        }
+      }
+    }
+
+    private ExecutionState executionState;
+    public ExecutionState ExecutionState {
+      get { return executionState; }
+      internal set {
+        if (executionState != value) {
+          executionState = value;
+          OnExecutionStateChanged();
+        }
+      }
+    }
+
+    private TimeSpan executionTime;
+    public TimeSpan ExecutionTime {
+      get { return executionTime; }
+      internal set {
+        if (executionTime != value) {
+          executionTime = value;
+          OnExecutionTimeChanged();
+        }
+      }
+    }
+
+    private bool refreshAutomatically;
+    public bool RefreshAutomatically {
+      get { return refreshAutomatically; }
+      set {
+        lock (locker) {
+          if (refreshAutomatically != value) {
+            refreshAutomatically = value;
+            OnRefreshAutomaticallyChanged();
+          }
+          if (RefreshAutomatically) {
+            if (this.HiveTasks != null && this.HiveTasks.Count > 0 && (jobResultPoller == null || !jobResultPoller.IsPolling)) {
+              StartResultPolling();
+            }
+          } else {
+            StopResultPolling();
+          }
+        }
+      }
+    }
+
+    // indicates if download button is enabled
+    private bool isDownloadable = true;
+    public bool IsDownloadable {
+      get { return isDownloadable; }
+      set {
+        if (value != isDownloadable) {
+          isDownloadable = value;
+          OnIsDownloadableChanged();
+        }
+      }
+    }
+
+    // if true, all control buttons should be enabled. otherwise disabled
+    private bool isControllable = true;
+    public bool IsControllable {
+      get { return isControllable; }
+      private set {
+        if (value != isControllable) {
+          isControllable = value;
+          OnIsControllableChanged();
+          if (this.hiveTasks != null) {
+            foreach (var hiveJob in this.hiveTasks) {
+              hiveJob.IsControllable = value;
+            }
+          }
+        }
+      }
+    }
+
+    // indicates if a user is allowed to share this experiment
+    private bool isSharable = true;
+    public bool IsSharable {
+      get { return isSharable; }
+      private set {
+        if (value != isSharable) {
+          isSharable = value;
+          OnIsSharableChanged();
+        }
+      }
+    }
+
+    // may execute jobs with privileged permissions on slaves
+    private bool isAllowedPrivileged = true;
+    public bool IsAllowedPrivileged {
+      get { return isAllowedPrivileged; }
+      set {
+        if (value != isAllowedPrivileged) {
+          isAllowedPrivileged = value;
+          OnIsAllowedPrivilegedChanged();
+        }
+      }
+    }
+
+    private bool isProgressing;
+    public bool IsProgressing {
+      get { return isProgressing; }
+      set {
+        if (isProgressing != value) {
+          isProgressing = value;
+          OnIsProgressingChanged();
+        }
+      }
+    }
+
+    private IProgress progress;
+    public IProgress Progress {
+      get { return progress; }
+      set { this.progress = value; }
+    }
+
+    private ThreadSafeLog log;
+    public ILog Log {
+      get { return log; }
+    }
+
+    public StateLogListList StateLogList {
+      get { return new StateLogListList(this.GetAllHiveTasks().Select(x => x.StateLog)); }
+    }
+
+    #region Constructors and Cloning
+    public RefreshableJob() {
+      this.refreshAutomatically = true;
+      this.Job = new Job();
+      this.log = new ThreadSafeLog();
+      this.jobDownloader = new ConcurrentTaskDownloader<ItemTask>(Settings.Default.MaxParallelDownloads, Settings.Default.MaxParallelDownloads);
+      this.jobDownloader.ExceptionOccured += new EventHandler<EventArgs<Exception>>(jobDownloader_ExceptionOccured);
+      this.HiveTasks = new ItemCollection<HiveTask>();
+    }
+    public RefreshableJob(Job hiveExperiment) {
+      this.refreshAutomatically = true;
+      this.Job = hiveExperiment;
+      this.log = new ThreadSafeLog();
+      this.jobDownloader = new ConcurrentTaskDownloader<ItemTask>(Settings.Default.MaxParallelDownloads, Settings.Default.MaxParallelDownloads);
+      this.jobDownloader.ExceptionOccured += new EventHandler<EventArgs<Exception>>(jobDownloader_ExceptionOccured);
+      this.HiveTasks = new ItemCollection<HiveTask>();
+    }
+    protected RefreshableJob(RefreshableJob original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.Job = cloner.Clone(original.Job);
+      this.IsControllable = original.IsControllable;
+      this.log = cloner.Clone(original.log);
+      this.RefreshAutomatically = false; // do not start results polling automatically
+      this.jobDownloader = new ConcurrentTaskDownloader<ItemTask>(Settings.Default.MaxParallelDownloads, Settings.Default.MaxParallelDownloads);
+      this.jobDownloader.ExceptionOccured += new EventHandler<EventArgs<Exception>>(jobDownloader_ExceptionOccured);
+      this.HiveTasks = cloner.Clone(original.HiveTasks);
+      this.ExecutionTime = original.ExecutionTime;
+      this.ExecutionState = original.ExecutionState;
+    }
+    public IDeepCloneable Clone(Cloner cloner) {
+      return new RefreshableJob(this, cloner);
+    }
+    public object Clone() {
+      return this.Clone(new Cloner());
+    }
+    #endregion
+
+    #region JobResultPoller Events
+
+    public void StartResultPolling() {
+      if (jobResultPoller == null) {
+        jobResultPoller = new JobResultPoller(job.Id, Settings.Default.ResultPollingInterval);
+        RegisterResultPollingEvents();
+        jobResultPoller.AutoResumeOnException = true;
+      }
+
+      if (!jobResultPoller.IsPolling) {
+        jobResultPoller.Start();
+      }
+    }
+
+    public void StopResultPolling() {
+      if (jobResultPoller != null && jobResultPoller.IsPolling) {
+        jobResultPoller.Stop();
+      }
+    }
+
+    private void RegisterResultPollingEvents() {
+      jobResultPoller.ExceptionOccured += new EventHandler<EventArgs<Exception>>(jobResultPoller_ExceptionOccured);
+      jobResultPoller.JobResultsReceived += new EventHandler<EventArgs<IEnumerable<LightweightTask>>>(jobResultPoller_JobResultReceived);
+      jobResultPoller.IsPollingChanged += new EventHandler(jobResultPoller_IsPollingChanged);
+    }
+    private void DeregisterResultPollingEvents() {
+      jobResultPoller.ExceptionOccured -= new EventHandler<EventArgs<Exception>>(jobResultPoller_ExceptionOccured);
+      jobResultPoller.JobResultsReceived -= new EventHandler<EventArgs<IEnumerable<LightweightTask>>>(jobResultPoller_JobResultReceived);
+      jobResultPoller.IsPollingChanged -= new EventHandler(jobResultPoller_IsPollingChanged);
+    }
+    private void jobResultPoller_IsPollingChanged(object sender, EventArgs e) {
+      if (this.refreshAutomatically != jobResultPoller.IsPolling) {
+        this.refreshAutomatically = jobResultPoller.IsPolling;
+        OnRefreshAutomaticallyChanged();
+      }
+    }
+    private void jobResultPoller_JobResultReceived(object sender, EventArgs<IEnumerable<LightweightTask>> e) {
+      foreach (LightweightTask lightweightTask in e.Value) {
+        HiveTask hiveTask = GetHiveJobById(lightweightTask.Id);
+        if (hiveTask != null) {
+          // lastJobDataUpdate equals DateTime.MinValue right after it was uploaded. When the first results are polled, this value is updated
+          if (hiveTask.Task.State == TaskState.Offline && lightweightTask.State != TaskState.Finished && lightweightTask.State != TaskState.Failed && lightweightTask.State != TaskState.Aborted) {
+            hiveTask.Task.LastTaskDataUpdate = lightweightTask.LastTaskDataUpdate;
+          }
+
+          hiveTask.UpdateFromLightweightJob(lightweightTask);
+
+          if (!hiveTask.IsFinishedTaskDownloaded && !hiveTask.IsDownloading && hiveTask.Task.LastTaskDataUpdate < lightweightTask.LastTaskDataUpdate) {
+            log.LogMessage(string.Format("Downloading task {0}", lightweightTask.Id));
+            hiveTask.IsDownloading = true;
+            jobDownloader.DownloadTask(hiveTask.Task, (localJob, itemJob) => {
+              log.LogMessage(string.Format("Finished downloading task {0}", localJob.Id));
+              HiveTask localHiveTask = GetHiveJobById(localJob.Id);
+
+              if (itemJob == null) {
+                localHiveTask.IsDownloading = false;
+              }
+
+              if (itemJob == null) {
+                // something bad happened to this task. bad task, BAAAD task!
+              } else {
+                // if the task is paused, download but don't integrate into parent optimizer (to avoid Prepare)
+
+                if (localJob.State == TaskState.Paused) {
+                  localHiveTask.ItemTask = itemJob;
+                } else {
+                  if (localJob.ParentTaskId.HasValue) {
+                    HiveTask parentHiveTask = GetHiveJobById(localJob.ParentTaskId.Value);
+                    parentHiveTask.IntegrateChild(itemJob, localJob.Id);
+                  } else {
+                    localHiveTask.ItemTask = itemJob;
+                  }
+                }
+                localHiveTask.IsDownloading = false;
+                localHiveTask.Task.LastTaskDataUpdate = localJob.LastTaskDataUpdate;
+              }
+            });
+          }
+        }
+      }
+      GC.Collect(); // force GC, because .NET is too lazy here (deserialization takes a lot of memory)
+      if (AllJobsFinished()) {
+        this.ExecutionState = Core.ExecutionState.Stopped;
+        StopResultPolling();
+      }
+      UpdateTotalExecutionTime();
+      UpdateStatistics();
+      OnStateLogListChanged();
+    }
+
+    public HiveTask GetHiveJobById(Guid jobId) {
+      foreach (HiveTask job in this.HiveTasks) {
+        var hj = job.GetHiveTaskByTaskId(jobId);
+        if (hj != null)
+          return hj;
+      }
+      return null;
+    }
+
+    private void UpdateStatistics() {
+      var jobs = this.GetAllHiveTasks();
+      job.JobCount = jobs.Count();
+      job.CalculatingCount = jobs.Count(j => j.Task.State == TaskState.Calculating);
+      job.FinishedCount = jobs.Count(j => j.Task.State == TaskState.Finished);
+      OnJobStatisticsChanged();
+    }
+
+    public bool AllJobsFinished() {
+      return this.GetAllHiveTasks().All(j => (j.Task.State == TaskState.Finished
+                                                   || j.Task.State == TaskState.Aborted
+                                                   || j.Task.State == TaskState.Failed)
+                                                   && j.IsFinishedTaskDownloaded);
+    }
+
+    private void jobResultPoller_ExceptionOccured(object sender, EventArgs<Exception> e) {
+      OnExceptionOccured(e.Value);
+    }
+    private void jobDownloader_ExceptionOccured(object sender, EventArgs<Exception> e) {
+      OnExceptionOccured(e.Value);
+    }
+    public void UpdateTotalExecutionTime() {
+      this.ExecutionTime = TimeSpan.FromMilliseconds(this.GetAllHiveTasks().Sum(x => x.Task.ExecutionTime.TotalMilliseconds));
+    }
+    #endregion
+
+    #region Job Events
+    private void RegisterJobEvents() {
+      job.ToStringChanged += new EventHandler(OnToStringChanged);
+      job.PropertyChanged += new PropertyChangedEventHandler(job_PropertyChanged);
+      job.ItemImageChanged += new EventHandler(job_ItemImageChanged);
+      job.ModifiedChanged += new EventHandler(job_ModifiedChanged);
+    }
+
+    private void DergisterJobEvents() {
+      job.ToStringChanged -= new EventHandler(OnToStringChanged);
+      job.PropertyChanged -= new PropertyChangedEventHandler(job_PropertyChanged);
+      job.ItemImageChanged -= new EventHandler(job_ItemImageChanged);
+      job.ModifiedChanged -= new EventHandler(job_ModifiedChanged);
+    }
+    #endregion
+
+    #region Event Handler
+    public event EventHandler RefreshAutomaticallyChanged;
+    private void OnRefreshAutomaticallyChanged() {
+      var handler = RefreshAutomaticallyChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler JobChanged;
+    private void OnJobChanged() {
+      var handler = JobChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ModifiedChanged;
+    private void job_ModifiedChanged(object sender, EventArgs e) {
+      var handler = ModifiedChanged;
+      if (handler != null) handler(sender, e);
+    }
+
+    public event EventHandler ItemImageChanged;
+    private void job_ItemImageChanged(object sender, EventArgs e) {
+      var handler = ItemImageChanged;
+      if (handler != null) handler(this, e);
+    }
+
+    public event PropertyChangedEventHandler PropertyChanged;
+    private void job_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      this.IsSharable = job.Permission == Permission.Full;
+      this.IsControllable = job.Permission == Permission.Full;
+
+      var handler = PropertyChanged;
+      if (handler != null) handler(sender, e);
+    }
+
+    public event EventHandler ToStringChanged;
+    private void OnToStringChanged(object sender, EventArgs e) {
+      var handler = ToStringChanged;
+      if (handler != null) handler(this, e);
+    }
+
+    public event EventHandler IsProgressingChanged;
+    protected virtual void OnIsProgressingChanged() {
+      var handler = IsProgressingChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsDownloadableChanged;
+    private void OnIsDownloadableChanged() {
+      var handler = IsDownloadableChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsControllableChanged;
+    private void OnIsControllableChanged() {
+      var handler = IsControllableChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsSharableChanged;
+    private void OnIsSharableChanged() {
+      var handler = IsSharableChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsAllowedPrivilegedChanged;
+    private void OnIsAllowedPrivilegedChanged() {
+      var handler = IsAllowedPrivilegedChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler JobStatisticsChanged;
+    private void OnJobStatisticsChanged() {
+      var handler = JobStatisticsChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception exception) {
+      log.LogException(exception);
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(exception));
+    }
+
+    public event EventHandler StateLogListChanged;
+    private void OnStateLogListChanged() {
+      var handler = StateLogListChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ExecutionTimeChanged;
+    protected virtual void OnExecutionTimeChanged() {
+      var handler = ExecutionTimeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ExecutionStateChanged;
+    protected virtual void OnExecutionStateChanged() {
+      var handler = ExecutionStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    #region HiveTasks Events
+    private void RegisterHiveJobsEvents() {
+      this.hiveTasks.ItemsAdded += new CollectionItemsChangedEventHandler<HiveTask>(hivetasks_ItemsAdded);
+      this.hiveTasks.ItemsRemoved += new CollectionItemsChangedEventHandler<HiveTask>(hiveTasks_ItemsRemoved);
+      this.hiveTasks.CollectionReset += new CollectionItemsChangedEventHandler<HiveTask>(hiveTasks_CollectionReset);
+    }
+
+    private void DeregisterHiveJobsEvents() {
+      this.hiveTasks.ItemsAdded -= new CollectionItemsChangedEventHandler<HiveTask>(hivetasks_ItemsAdded);
+      this.hiveTasks.ItemsRemoved -= new CollectionItemsChangedEventHandler<HiveTask>(hiveTasks_ItemsRemoved);
+      this.hiveTasks.CollectionReset -= new CollectionItemsChangedEventHandler<HiveTask>(hiveTasks_CollectionReset);
+    }
+
+    private void hiveTasks_CollectionReset(object sender, CollectionItemsChangedEventArgs<HiveTask> e) {
+      foreach (var item in e.Items) {
+        item.StateLogChanged -= new EventHandler(item_StateLogChanged);
+      }
+      OnHiveTasksReset(e);
+    }
+
+    private void hiveTasks_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<HiveTask> e) {
+      foreach (var item in e.Items) {
+        item.StateLogChanged -= new EventHandler(item_StateLogChanged);
+      }
+      OnHiveTasksRemoved(e);
+    }
+
+    private void hivetasks_ItemsAdded(object sender, CollectionItemsChangedEventArgs<HiveTask> e) {
+      foreach (var item in e.Items) {
+        item.StateLogChanged += new EventHandler(item_StateLogChanged);
+        item.IsControllable = this.IsControllable;
+      }
+      OnHiveTasksAdded(e);
+    }
+
+    private void item_StateLogChanged(object sender, EventArgs e) {
+      OnStateLogListChanged();
+    }
+    #endregion
+
+    public event EventHandler HiveTasksChanged;
+    protected virtual void OnHiveTasksChanged() {
+      if (jobResultPoller != null && jobResultPoller.IsPolling) {
+        jobResultPoller.Stop();
+        DeregisterResultPollingEvents();
+      }
+      if (this.HiveTasks != null && this.HiveTasks.Count > 0 && this.GetAllHiveTasks().All(x => x.Task.Id != Guid.Empty)) {
+        if (IsFinished()) {
+          this.ExecutionState = Core.ExecutionState.Stopped;
+          this.RefreshAutomatically = false;
+        }
+
+        if (this.RefreshAutomatically) {
+          StartResultPolling();
+        }
+      }
+
+      var handler = HiveTasksChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Loaded;
+    public virtual void OnLoaded() {
+      this.UpdateTotalExecutionTime();
+      this.OnStateLogListChanged();
+
+      if (this.ExecutionState != ExecutionState.Stopped) {
+        this.RefreshAutomatically = true;
+      }
+
+      var handler = Loaded;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler<CollectionItemsChangedEventArgs<HiveTask>> HiveTasksAdded;
+    private void OnHiveTasksAdded(CollectionItemsChangedEventArgs<HiveTask> e) {
+      var handler = HiveTasksAdded;
+      if (handler != null) handler(this, e);
+    }
+
+    public event EventHandler<CollectionItemsChangedEventArgs<HiveTask>> HiveTasksRemoved;
+    private void OnHiveTasksRemoved(CollectionItemsChangedEventArgs<HiveTask> e) {
+      var handler = HiveTasksRemoved;
+      if (handler != null) handler(this, e);
+    }
+
+    public event EventHandler<CollectionItemsChangedEventArgs<HiveTask>> HiveTasksReset;
+    private void OnHiveTasksReset(CollectionItemsChangedEventArgs<HiveTask> e) {
+      var handler = HiveTasksReset;
+      if (handler != null) handler(this, e);
+    }
+
+    public Guid Id {
+      get { return job.Id; }
+      set { job.Id = value; }
+    }
+    public bool Modified {
+      get { return job.Modified; }
+    }
+    public void Store() {
+      job.Store();
+    }
+    public string ItemDescription {
+      get { return job.ItemDescription; }
+    }
+    public Image ItemImage {
+      get { return job.ItemImage; }
+    }
+    public string ItemName {
+      get { return job.ItemName; }
+    }
+    public Version ItemVersion {
+      get { return job.ItemVersion; }
+    }
+
+    public override string ToString() {
+      return string.Format("{0} {1}", Job.DateCreated.ToString("MM.dd.yyyy HH:mm"), Job.ToString());
+    }
+
+    public bool IsFinished() {
+      return HiveTasks != null
+        && HiveTasks.All(x => x.Task.DateFinished.HasValue && x.Task.DateCreated.HasValue);
+    }
+
+    public IEnumerable<HiveTask> GetAllHiveTasks() {
+      if (hiveTasks == null) return Enumerable.Empty<HiveTask>();
+
+      var tasks = new List<HiveTask>();
+      foreach (HiveTask task in HiveTasks) {
+        tasks.AddRange(task.GetAllHiveTasks());
+      }
+      return tasks;
+    }
+
+    public int CompareTo(RefreshableJob other) {
+      return this.ToString().CompareTo(other.ToString());
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ScopeExtensions.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ScopeExtensions.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ScopeExtensions.cs	(revision 7085)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.Hive {
+  public static class ScopeExtensions {
+    public static void ClearParentScopes(this IScope scope) {
+      scope.ClearParentScopes(null);
+    }
+
+    public static void ClearParentScopes(this IScope scope, IScope childScope) {
+      if (childScope != null) {
+        scope.SubScopes.Clear();
+        scope.SubScopes.Add(childScope);
+      }
+      if (scope.Parent != null)
+        scope.Parent.ClearParentScopes(scope);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Downtime.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Downtime.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Downtime.cs	(revision 7085)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+
+  public partial class Downtime : IDeepCloneable, IContent {
+    public Downtime() { }
+
+    public override void Store() {
+      HiveAdminClient.Store(this, new System.Threading.CancellationToken());
+      Modified = false;
+    }
+
+    protected Downtime(Downtime original, Cloner cloner)
+      : base(original, cloner) {
+      this.AllDayEvent = original.AllDayEvent;
+      this.EndDate = original.EndDate;
+      this.Recurring = original.Recurring;
+      this.RecurringId = original.RecurringId;
+      this.ResourceId = original.ResourceId;
+      this.StartDate = original.StartDate;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Downtime(this, cloner);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/GenerateServiceClients.cmd
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/GenerateServiceClients.cmd	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/GenerateServiceClients.cmd	(revision 7085)
@@ -0,0 +1,30 @@
+echo off
+
+echo.
+echo *******************************************************************************************
+echo Generating HiveService client
+echo.
+
+svcutil.exe ^
+  http://localhost/Hive-3.3/HiveService.svc?wsdl ^
+  /out:HiveServiceClient ^
+  /namespace:*,HeuristicLab.Clients.Hive ^
+  /collectionType:System.Collections.Generic.List`1 ^
+  /targetClientVersion:Version35 ^
+  /serializable ^
+  /enableDataBinding ^
+  /config:..\app.config 
+
+echo.
+echo ---------------------------------------------------------------------------------------
+echo !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!!
+echo.
+echo Following modifications have to be done manually in generated data contracts:
+echo  * Remove method "protected void RaisePropertyChanged(string propertyName)" in HiveItem
+echo.
+echo !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!!
+echo ---------------------------------------------------------------------------------------
+echo.
+echo Generation of HiveService client finished.
+echo *******************************************************************************************
+
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Heartbeat.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Heartbeat.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Heartbeat.cs	(revision 7085)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+
+  public partial class Heartbeat : IContent {
+
+    public Heartbeat() { }
+
+    public override string ToString() {
+      string val = string.Format("SlaveId: {0}, FreeCores: {1}", SlaveId, FreeCores);
+      foreach (KeyValuePair<Guid, TimeSpan> kvp in JobProgress) {
+        val += Environment.NewLine + string.Format("Id: {0}, ExecutionTime {1}", kvp.Key, kvp.Value);
+      }
+      return val;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItem.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItem.cs	(revision 7085)
@@ -0,0 +1,125 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Runtime.Serialization;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.Hive {
+  public partial class HiveItem : IHiveItem {
+    public string ItemName {
+      get { return ItemAttribute.GetName(this.GetType()); }
+    }
+    public string ItemDescription {
+      get { return ItemAttribute.GetDescription(this.GetType()); }
+    }
+    public Version ItemVersion {
+      get { return ItemAttribute.GetVersion(this.GetType()); }
+    }
+    public virtual Image ItemImage {
+      get {
+        if (Modified)
+          return HeuristicLab.Common.Resources.VSImageLibrary.DatabaseModified;
+        else
+          return HeuristicLab.Common.Resources.VSImageLibrary.Database;
+      }
+    }
+
+    private bool modified;
+    public bool Modified {
+      get { return modified; }
+      internal set {
+        if (value != modified) {
+          modified = value;
+          OnModifiedChanged();
+          RaisePropertyChanged("Modified");
+          OnItemImageChanged();
+          RaisePropertyChanged("ItemImage");
+        }
+      }
+    }
+
+    #region Constructor and Cloning
+    public HiveItem() {
+      modified = true;
+    }
+
+    [OnDeserialized]
+    private void OnDeserialized(StreamingContext context) {
+      modified = false;
+    }
+
+    protected HiveItem(HiveItem original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.Id = original.Id;
+      modified = true;
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new HiveItem(this, cloner);
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+    #endregion
+
+    public virtual void Store() {
+      HiveClient.Store(this, new System.Threading.CancellationToken());
+      Modified = false;
+    }
+
+    protected virtual void RaisePropertyChanged(string propertyName) {
+      OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
+      if ((propertyName != "Id") && (propertyName != "Modified") && (propertyName != "ItemImage")) {
+        Modified = true;
+      }
+    }
+    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) {
+      PropertyChangedEventHandler handler = PropertyChanged;
+      if (handler != null) handler(this, e);
+    }
+
+    #region Event handler
+    public event EventHandler ItemImageChanged;
+    protected virtual void OnItemImageChanged() {
+      EventHandler handler = ItemImageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ToStringChanged;
+    protected virtual void OnToStringChanged() {
+      EventHandler handler = ToStringChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ModifiedChanged;
+    protected virtual void OnModifiedChanged() {
+      EventHandler handler = ModifiedChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    public override string ToString() {
+      return ItemName;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItemCollection.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItemCollection.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItemCollection.cs	(revision 7085)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.Hive {
+  [Item("HiveItem Collection", "Represents a collection of Hive items.")]
+  public class HiveItemCollection<T> : ItemCollection<T> where T : class, IHiveItem {
+    protected HiveItemCollection(HiveItemCollection<T> original, Cloner cloner) : base(original, cloner) { }
+    public HiveItemCollection() : base() { }
+    public HiveItemCollection(IEnumerable<T> collection) : base(collection) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new HiveItemCollection<T>(this, cloner); }
+
+    protected override void OnItemsRemoved(IEnumerable<T> items) {
+      IEnumerable<T> successful, unsuccessful;
+      Exception ex;
+      RemoveItems(items, out successful, out unsuccessful, out ex);
+      list.AddRange(unsuccessful);
+      base.OnItemsRemoved(successful);
+      if (ex != null) throw ex;
+    }
+    protected override void OnCollectionReset(IEnumerable<T> items, IEnumerable<T> oldItems) {
+      IEnumerable<T> successful, unsuccessful;
+      Exception ex;
+      RemoveItems(oldItems, out successful, out unsuccessful, out ex);
+      list.AddRange(unsuccessful);
+      base.OnCollectionReset(items.Concat(unsuccessful), oldItems);
+      if (ex != null) throw ex;
+    }
+
+    private void RemoveItems(IEnumerable<T> items, out IEnumerable<T> successful, out IEnumerable<T> unsuccessful, out Exception exception) {
+      List<T> removed = new List<T>();
+      List<T> notremoved = new List<T>();
+      exception = null;
+      foreach (T item in items) {
+        try {
+          HiveClient.Delete(item);
+          removed.Add(item);
+        }
+        catch (Exception ex) {
+          exception = ex;
+          notremoved.Add(item);
+        }
+      }
+      successful = removed;
+      unsuccessful = notremoved;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveServiceClient.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveServiceClient.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveServiceClient.cs	(revision 7085)
@@ -0,0 +1,2006 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.237
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.Hive {
+
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Heartbeat", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class Heartbeat : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    [System.NonSerializedAttribute()]
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private bool AssignJobField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private float CpuUtilizationField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int FreeCoresField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int FreeMemoryField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int HbIntervalField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Collections.Generic.Dictionary<System.Guid, System.TimeSpan> JobProgressField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid SlaveIdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool AssignJob {
+      get {
+        return this.AssignJobField;
+      }
+      set {
+        if ((this.AssignJobField.Equals(value) != true)) {
+          this.AssignJobField = value;
+          this.RaisePropertyChanged("AssignJob");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public float CpuUtilization {
+      get {
+        return this.CpuUtilizationField;
+      }
+      set {
+        if ((this.CpuUtilizationField.Equals(value) != true)) {
+          this.CpuUtilizationField = value;
+          this.RaisePropertyChanged("CpuUtilization");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int FreeCores {
+      get {
+        return this.FreeCoresField;
+      }
+      set {
+        if ((this.FreeCoresField.Equals(value) != true)) {
+          this.FreeCoresField = value;
+          this.RaisePropertyChanged("FreeCores");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int FreeMemory {
+      get {
+        return this.FreeMemoryField;
+      }
+      set {
+        if ((this.FreeMemoryField.Equals(value) != true)) {
+          this.FreeMemoryField = value;
+          this.RaisePropertyChanged("FreeMemory");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int HbInterval {
+      get {
+        return this.HbIntervalField;
+      }
+      set {
+        if ((this.HbIntervalField.Equals(value) != true)) {
+          this.HbIntervalField = value;
+          this.RaisePropertyChanged("HbInterval");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Collections.Generic.Dictionary<System.Guid, System.TimeSpan> JobProgress {
+      get {
+        return this.JobProgressField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.JobProgressField, value) != true)) {
+          this.JobProgressField = value;
+          this.RaisePropertyChanged("JobProgress");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid SlaveId {
+      get {
+        return this.SlaveIdField;
+      }
+      set {
+        if ((this.SlaveIdField.Equals(value) != true)) {
+          this.SlaveIdField = value;
+          this.RaisePropertyChanged("SlaveId");
+        }
+      }
+    }
+
+    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+    protected void RaisePropertyChanged(string propertyName) {
+      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+      if ((propertyChanged != null)) {
+        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "MessageContainer", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive")]
+  [System.SerializableAttribute()]
+  public partial class MessageContainer : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    [System.NonSerializedAttribute()]
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.MessageContainer.MessageType MessageField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid TaskIdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.MessageContainer.MessageType Message {
+      get {
+        return this.MessageField;
+      }
+      set {
+        if ((this.MessageField.Equals(value) != true)) {
+          this.MessageField = value;
+          this.RaisePropertyChanged("Message");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid TaskId {
+      get {
+        return this.TaskIdField;
+      }
+      set {
+        if ((this.TaskIdField.Equals(value) != true)) {
+          this.TaskIdField = value;
+          this.RaisePropertyChanged("TaskId");
+        }
+      }
+    }
+
+    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+    protected void RaisePropertyChanged(string propertyName) {
+      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+      if ((propertyChanged != null)) {
+        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+      }
+    }
+
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name = "MessageContainer.MessageType", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive")]
+    public enum MessageType : int {
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      CalculateTask = 0,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      StopTask = 1,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      StopAll = 2,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      AbortTask = 3,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      AbortAll = 4,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      PauseTask = 5,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      PauseAll = 6,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      Restart = 7,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      Sleep = 8,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      ShutdownSlave = 9,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      SayHello = 10,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      NewHBInterval = 11,
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "HiveItem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.PluginData))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.LightweightTask))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.StateLog))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Task))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Downtime))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.JobPermission))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.NamedHiveItem))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Resource))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Slave))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.SlaveGroup))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Job))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Plugin))]
+  public partial class HiveItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    [System.NonSerializedAttribute()]
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid IdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid Id {
+      get {
+        return this.IdField;
+      }
+      set {
+        if ((this.IdField.Equals(value) != true)) {
+          this.IdField = value;
+          this.RaisePropertyChanged("Id");
+        }
+      }
+    }
+
+    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "PluginData", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class PluginData : HeuristicLab.Clients.Hive.HiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private byte[] DataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string FileNameField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid PluginIdField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Data {
+      get {
+        return this.DataField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DataField, value) != true)) {
+          this.DataField = value;
+          this.RaisePropertyChanged("Data");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string FileName {
+      get {
+        return this.FileNameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.FileNameField, value) != true)) {
+          this.FileNameField = value;
+          this.RaisePropertyChanged("FileName");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid PluginId {
+      get {
+        return this.PluginIdField;
+      }
+      set {
+        if ((this.PluginIdField.Equals(value) != true)) {
+          this.PluginIdField = value;
+          this.RaisePropertyChanged("PluginId");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "LightweightTask", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Task))]
+  public partial class LightweightTask : HeuristicLab.Clients.Hive.HiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<HeuristicLab.Clients.Hive.Command> CommandField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.TimeSpan ExecutionTimeField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime LastTaskDataUpdateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<System.Guid> ParentTaskIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.TaskState StateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Collections.Generic.List<HeuristicLab.Clients.Hive.StateLog> StateLogField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<HeuristicLab.Clients.Hive.Command> Command {
+      get {
+        return this.CommandField;
+      }
+      set {
+        if ((this.CommandField.Equals(value) != true)) {
+          this.CommandField = value;
+          this.RaisePropertyChanged("Command");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.TimeSpan ExecutionTime {
+      get {
+        return this.ExecutionTimeField;
+      }
+      set {
+        if ((this.ExecutionTimeField.Equals(value) != true)) {
+          this.ExecutionTimeField = value;
+          this.RaisePropertyChanged("ExecutionTime");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime LastTaskDataUpdate {
+      get {
+        return this.LastTaskDataUpdateField;
+      }
+      set {
+        if ((this.LastTaskDataUpdateField.Equals(value) != true)) {
+          this.LastTaskDataUpdateField = value;
+          this.RaisePropertyChanged("LastTaskDataUpdate");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<System.Guid> ParentTaskId {
+      get {
+        return this.ParentTaskIdField;
+      }
+      set {
+        if ((this.ParentTaskIdField.Equals(value) != true)) {
+          this.ParentTaskIdField = value;
+          this.RaisePropertyChanged("ParentTaskId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.TaskState State {
+      get {
+        return this.StateField;
+      }
+      set {
+        if ((this.StateField.Equals(value) != true)) {
+          this.StateField = value;
+          this.RaisePropertyChanged("State");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.StateLog> StateLog {
+      get {
+        return this.StateLogField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.StateLogField, value) != true)) {
+          this.StateLogField = value;
+          this.RaisePropertyChanged("StateLog");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "StateLog", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class StateLog : HeuristicLab.Clients.Hive.HiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime DateTimeField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string ExceptionField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<System.Guid> SlaveIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.TaskState StateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid TaskIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<System.Guid> UserIdField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime DateTime {
+      get {
+        return this.DateTimeField;
+      }
+      set {
+        if ((this.DateTimeField.Equals(value) != true)) {
+          this.DateTimeField = value;
+          this.RaisePropertyChanged("DateTime");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Exception {
+      get {
+        return this.ExceptionField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ExceptionField, value) != true)) {
+          this.ExceptionField = value;
+          this.RaisePropertyChanged("Exception");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<System.Guid> SlaveId {
+      get {
+        return this.SlaveIdField;
+      }
+      set {
+        if ((this.SlaveIdField.Equals(value) != true)) {
+          this.SlaveIdField = value;
+          this.RaisePropertyChanged("SlaveId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.TaskState State {
+      get {
+        return this.StateField;
+      }
+      set {
+        if ((this.StateField.Equals(value) != true)) {
+          this.StateField = value;
+          this.RaisePropertyChanged("State");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid TaskId {
+      get {
+        return this.TaskIdField;
+      }
+      set {
+        if ((this.TaskIdField.Equals(value) != true)) {
+          this.TaskIdField = value;
+          this.RaisePropertyChanged("TaskId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<System.Guid> UserId {
+      get {
+        return this.UserIdField;
+      }
+      set {
+        if ((this.UserIdField.Equals(value) != true)) {
+          this.UserIdField = value;
+          this.RaisePropertyChanged("UserId");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Task", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class Task : HeuristicLab.Clients.Hive.LightweightTask {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int CoresNeededField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private bool FinishWhenChildJobsFinishedField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private bool IsParentTaskField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private bool IsPrivilegedField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid JobIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<System.DateTime> LastHeartbeatField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int MemoryNeededField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Collections.Generic.List<System.Guid> PluginsNeededIdsField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int PriorityField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int CoresNeeded {
+      get {
+        return this.CoresNeededField;
+      }
+      set {
+        if ((this.CoresNeededField.Equals(value) != true)) {
+          this.CoresNeededField = value;
+          this.RaisePropertyChanged("CoresNeeded");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool FinishWhenChildJobsFinished {
+      get {
+        return this.FinishWhenChildJobsFinishedField;
+      }
+      set {
+        if ((this.FinishWhenChildJobsFinishedField.Equals(value) != true)) {
+          this.FinishWhenChildJobsFinishedField = value;
+          this.RaisePropertyChanged("FinishWhenChildJobsFinished");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool IsParentTask {
+      get {
+        return this.IsParentTaskField;
+      }
+      set {
+        if ((this.IsParentTaskField.Equals(value) != true)) {
+          this.IsParentTaskField = value;
+          this.RaisePropertyChanged("IsParentTask");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool IsPrivileged {
+      get {
+        return this.IsPrivilegedField;
+      }
+      set {
+        if ((this.IsPrivilegedField.Equals(value) != true)) {
+          this.IsPrivilegedField = value;
+          this.RaisePropertyChanged("IsPrivileged");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid JobId {
+      get {
+        return this.JobIdField;
+      }
+      set {
+        if ((this.JobIdField.Equals(value) != true)) {
+          this.JobIdField = value;
+          this.RaisePropertyChanged("JobId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<System.DateTime> LastHeartbeat {
+      get {
+        return this.LastHeartbeatField;
+      }
+      set {
+        if ((this.LastHeartbeatField.Equals(value) != true)) {
+          this.LastHeartbeatField = value;
+          this.RaisePropertyChanged("LastHeartbeat");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int MemoryNeeded {
+      get {
+        return this.MemoryNeededField;
+      }
+      set {
+        if ((this.MemoryNeededField.Equals(value) != true)) {
+          this.MemoryNeededField = value;
+          this.RaisePropertyChanged("MemoryNeeded");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Collections.Generic.List<System.Guid> PluginsNeededIds {
+      get {
+        return this.PluginsNeededIdsField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.PluginsNeededIdsField, value) != true)) {
+          this.PluginsNeededIdsField = value;
+          this.RaisePropertyChanged("PluginsNeededIds");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int Priority {
+      get {
+        return this.PriorityField;
+      }
+      set {
+        if ((this.PriorityField.Equals(value) != true)) {
+          this.PriorityField = value;
+          this.RaisePropertyChanged("Priority");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Downtime", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class Downtime : HeuristicLab.Clients.Hive.HiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private bool AllDayEventField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime EndDateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private bool RecurringField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid RecurringIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid ResourceIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime StartDateField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool AllDayEvent {
+      get {
+        return this.AllDayEventField;
+      }
+      set {
+        if ((this.AllDayEventField.Equals(value) != true)) {
+          this.AllDayEventField = value;
+          this.RaisePropertyChanged("AllDayEvent");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime EndDate {
+      get {
+        return this.EndDateField;
+      }
+      set {
+        if ((this.EndDateField.Equals(value) != true)) {
+          this.EndDateField = value;
+          this.RaisePropertyChanged("EndDate");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool Recurring {
+      get {
+        return this.RecurringField;
+      }
+      set {
+        if ((this.RecurringField.Equals(value) != true)) {
+          this.RecurringField = value;
+          this.RaisePropertyChanged("Recurring");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid RecurringId {
+      get {
+        return this.RecurringIdField;
+      }
+      set {
+        if ((this.RecurringIdField.Equals(value) != true)) {
+          this.RecurringIdField = value;
+          this.RaisePropertyChanged("RecurringId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid ResourceId {
+      get {
+        return this.ResourceIdField;
+      }
+      set {
+        if ((this.ResourceIdField.Equals(value) != true)) {
+          this.ResourceIdField = value;
+          this.RaisePropertyChanged("ResourceId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime StartDate {
+      get {
+        return this.StartDateField;
+      }
+      set {
+        if ((this.StartDateField.Equals(value) != true)) {
+          this.StartDateField = value;
+          this.RaisePropertyChanged("StartDate");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "JobPermission", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class JobPermission : HeuristicLab.Clients.Hive.HiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid GrantedByUserIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid GrantedUserIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid JobIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.Permission PermissionField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid GrantedByUserId {
+      get {
+        return this.GrantedByUserIdField;
+      }
+      set {
+        if ((this.GrantedByUserIdField.Equals(value) != true)) {
+          this.GrantedByUserIdField = value;
+          this.RaisePropertyChanged("GrantedByUserId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid GrantedUserId {
+      get {
+        return this.GrantedUserIdField;
+      }
+      set {
+        if ((this.GrantedUserIdField.Equals(value) != true)) {
+          this.GrantedUserIdField = value;
+          this.RaisePropertyChanged("GrantedUserId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid JobId {
+      get {
+        return this.JobIdField;
+      }
+      set {
+        if ((this.JobIdField.Equals(value) != true)) {
+          this.JobIdField = value;
+          this.RaisePropertyChanged("JobId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.Permission Permission {
+      get {
+        return this.PermissionField;
+      }
+      set {
+        if ((this.PermissionField.Equals(value) != true)) {
+          this.PermissionField = value;
+          this.RaisePropertyChanged("Permission");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "NamedHiveItem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Resource))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Slave))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.SlaveGroup))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Job))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Plugin))]
+  public partial class NamedHiveItem : HeuristicLab.Clients.Hive.HiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string DescriptionField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string NameField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Description {
+      get {
+        return this.DescriptionField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DescriptionField, value) != true)) {
+          this.DescriptionField = value;
+          this.RaisePropertyChanged("Description");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Name {
+      get {
+        return this.NameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.NameField, value) != true)) {
+          this.NameField = value;
+          this.RaisePropertyChanged("Name");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Resource", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Slave))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.SlaveGroup))]
+  public partial class Resource : HeuristicLab.Clients.Hive.NamedHiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int HbIntervalField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<System.Guid> ParentResourceIdField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int HbInterval {
+      get {
+        return this.HbIntervalField;
+      }
+      set {
+        if ((this.HbIntervalField.Equals(value) != true)) {
+          this.HbIntervalField = value;
+          this.RaisePropertyChanged("HbInterval");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<System.Guid> ParentResourceId {
+      get {
+        return this.ParentResourceIdField;
+      }
+      set {
+        if ((this.ParentResourceIdField.Equals(value) != true)) {
+          this.ParentResourceIdField = value;
+          this.RaisePropertyChanged("ParentResourceId");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Slave", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class Slave : HeuristicLab.Clients.Hive.Resource {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<int> CoresField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.CpuArchitecture CpuArchitectureField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<int> CpuSpeedField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private double CpuUtilizationField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<int> FreeCoresField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<int> FreeMemoryField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private bool IsAllowedToCalculateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<System.DateTime> LastHeartbeatField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<int> MemoryField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string OperatingSystemField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.SlaveState SlaveStateField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<int> Cores {
+      get {
+        return this.CoresField;
+      }
+      set {
+        if ((this.CoresField.Equals(value) != true)) {
+          this.CoresField = value;
+          this.RaisePropertyChanged("Cores");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.CpuArchitecture CpuArchitecture {
+      get {
+        return this.CpuArchitectureField;
+      }
+      set {
+        if ((this.CpuArchitectureField.Equals(value) != true)) {
+          this.CpuArchitectureField = value;
+          this.RaisePropertyChanged("CpuArchitecture");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<int> CpuSpeed {
+      get {
+        return this.CpuSpeedField;
+      }
+      set {
+        if ((this.CpuSpeedField.Equals(value) != true)) {
+          this.CpuSpeedField = value;
+          this.RaisePropertyChanged("CpuSpeed");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public double CpuUtilization {
+      get {
+        return this.CpuUtilizationField;
+      }
+      set {
+        if ((this.CpuUtilizationField.Equals(value) != true)) {
+          this.CpuUtilizationField = value;
+          this.RaisePropertyChanged("CpuUtilization");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<int> FreeCores {
+      get {
+        return this.FreeCoresField;
+      }
+      set {
+        if ((this.FreeCoresField.Equals(value) != true)) {
+          this.FreeCoresField = value;
+          this.RaisePropertyChanged("FreeCores");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<int> FreeMemory {
+      get {
+        return this.FreeMemoryField;
+      }
+      set {
+        if ((this.FreeMemoryField.Equals(value) != true)) {
+          this.FreeMemoryField = value;
+          this.RaisePropertyChanged("FreeMemory");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool IsAllowedToCalculate {
+      get {
+        return this.IsAllowedToCalculateField;
+      }
+      set {
+        if ((this.IsAllowedToCalculateField.Equals(value) != true)) {
+          this.IsAllowedToCalculateField = value;
+          this.RaisePropertyChanged("IsAllowedToCalculate");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<System.DateTime> LastHeartbeat {
+      get {
+        return this.LastHeartbeatField;
+      }
+      set {
+        if ((this.LastHeartbeatField.Equals(value) != true)) {
+          this.LastHeartbeatField = value;
+          this.RaisePropertyChanged("LastHeartbeat");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<int> Memory {
+      get {
+        return this.MemoryField;
+      }
+      set {
+        if ((this.MemoryField.Equals(value) != true)) {
+          this.MemoryField = value;
+          this.RaisePropertyChanged("Memory");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string OperatingSystem {
+      get {
+        return this.OperatingSystemField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.OperatingSystemField, value) != true)) {
+          this.OperatingSystemField = value;
+          this.RaisePropertyChanged("OperatingSystem");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.SlaveState SlaveState {
+      get {
+        return this.SlaveStateField;
+      }
+      set {
+        if ((this.SlaveStateField.Equals(value) != true)) {
+          this.SlaveStateField = value;
+          this.RaisePropertyChanged("SlaveState");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "SlaveGroup", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class SlaveGroup : HeuristicLab.Clients.Hive.Resource {
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Job", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class Job : HeuristicLab.Clients.Hive.NamedHiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int CalculatingCountField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime DateCreatedField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int FinishedCountField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int JobCountField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid OwnerUserIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string OwnerUsernameField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.Permission PermissionField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string ResourceNamesField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int CalculatingCount {
+      get {
+        return this.CalculatingCountField;
+      }
+      set {
+        if ((this.CalculatingCountField.Equals(value) != true)) {
+          this.CalculatingCountField = value;
+          this.RaisePropertyChanged("CalculatingCount");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime DateCreated {
+      get {
+        return this.DateCreatedField;
+      }
+      set {
+        if ((this.DateCreatedField.Equals(value) != true)) {
+          this.DateCreatedField = value;
+          this.RaisePropertyChanged("DateCreated");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int FinishedCount {
+      get {
+        return this.FinishedCountField;
+      }
+      set {
+        if ((this.FinishedCountField.Equals(value) != true)) {
+          this.FinishedCountField = value;
+          this.RaisePropertyChanged("FinishedCount");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int JobCount {
+      get {
+        return this.JobCountField;
+      }
+      set {
+        if ((this.JobCountField.Equals(value) != true)) {
+          this.JobCountField = value;
+          this.RaisePropertyChanged("JobCount");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid OwnerUserId {
+      get {
+        return this.OwnerUserIdField;
+      }
+      set {
+        if ((this.OwnerUserIdField.Equals(value) != true)) {
+          this.OwnerUserIdField = value;
+          this.RaisePropertyChanged("OwnerUserId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string OwnerUsername {
+      get {
+        return this.OwnerUsernameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.OwnerUsernameField, value) != true)) {
+          this.OwnerUsernameField = value;
+          this.RaisePropertyChanged("OwnerUsername");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.Permission Permission {
+      get {
+        return this.PermissionField;
+      }
+      set {
+        if ((this.PermissionField.Equals(value) != true)) {
+          this.PermissionField = value;
+          this.RaisePropertyChanged("Permission");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string ResourceNames {
+      get {
+        return this.ResourceNamesField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ResourceNamesField, value) != true)) {
+          this.ResourceNamesField = value;
+          this.RaisePropertyChanged("ResourceNames");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Plugin", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class Plugin : HeuristicLab.Clients.Hive.NamedHiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime DateCreatedField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private byte[] HashField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid UserIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Version VersionField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime DateCreated {
+      get {
+        return this.DateCreatedField;
+      }
+      set {
+        if ((this.DateCreatedField.Equals(value) != true)) {
+          this.DateCreatedField = value;
+          this.RaisePropertyChanged("DateCreated");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Hash {
+      get {
+        return this.HashField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.HashField, value) != true)) {
+          this.HashField = value;
+          this.RaisePropertyChanged("Hash");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid UserId {
+      get {
+        return this.UserIdField;
+      }
+      set {
+        if ((this.UserIdField.Equals(value) != true)) {
+          this.UserIdField = value;
+          this.RaisePropertyChanged("UserId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Version Version {
+      get {
+        return this.VersionField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.VersionField, value) != true)) {
+          this.VersionField = value;
+          this.RaisePropertyChanged("Version");
+        }
+      }
+    }
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Command", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  public enum Command : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Stop = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Abort = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Pause = 2,
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "TaskState", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  public enum TaskState : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Offline = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Waiting = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Transferring = 2,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Calculating = 3,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Paused = 4,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Finished = 5,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Aborted = 6,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Failed = 7,
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Permission", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  public enum Permission : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    NotAllowed = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Read = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Full = 2,
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "CpuArchitecture", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  public enum CpuArchitecture : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    x86 = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    x64 = 1,
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "SlaveState", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  public enum SlaveState : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Idle = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Calculating = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Offline = 2,
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "TaskData", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class TaskData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    [System.NonSerializedAttribute()]
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private byte[] DataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime LastUpdateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid TaskIdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Data {
+      get {
+        return this.DataField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DataField, value) != true)) {
+          this.DataField = value;
+          this.RaisePropertyChanged("Data");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime LastUpdate {
+      get {
+        return this.LastUpdateField;
+      }
+      set {
+        if ((this.LastUpdateField.Equals(value) != true)) {
+          this.LastUpdateField = value;
+          this.RaisePropertyChanged("LastUpdate");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid TaskId {
+      get {
+        return this.TaskIdField;
+      }
+      set {
+        if ((this.TaskIdField.Equals(value) != true)) {
+          this.TaskIdField = value;
+          this.RaisePropertyChanged("TaskId");
+        }
+      }
+    }
+
+    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+    protected void RaisePropertyChanged(string propertyName) {
+      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+      if ((propertyChanged != null)) {
+        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "PluginAlreadyExistsFault", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive")]
+  [System.SerializableAttribute()]
+  public partial class PluginAlreadyExistsFault : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    [System.NonSerializedAttribute()]
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid IdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid Id {
+      get {
+        return this.IdField;
+      }
+      set {
+        if ((this.IdField.Equals(value) != true)) {
+          this.IdField = value;
+          this.RaisePropertyChanged("Id");
+        }
+      }
+    }
+
+    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+    protected void RaisePropertyChanged(string propertyName) {
+      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+      if ((propertyChanged != null)) {
+        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+      }
+    }
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+  [System.ServiceModel.ServiceContractAttribute(ConfigurationName = "HeuristicLab.Clients.Hive.IHiveService")]
+  public interface IHiveService {
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetUserIdByUsername", ReplyAction = "http://tempuri.org/IHiveService/GetUserIdByUsernameResponse")]
+    System.Guid GetUserIdByUsername(string username);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/Heartbeat", ReplyAction = "http://tempuri.org/IHiveService/HeartbeatResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.MessageContainer> Heartbeat([System.ServiceModel.MessageParameterAttribute(Name = "heartbeat")] HeuristicLab.Clients.Hive.Heartbeat heartbeat1);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetPlugin", ReplyAction = "http://tempuri.org/IHiveService/GetPluginResponse")]
+    HeuristicLab.Clients.Hive.Plugin GetPlugin(System.Guid pluginId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetPluginByHash", ReplyAction = "http://tempuri.org/IHiveService/GetPluginByHashResponse")]
+    HeuristicLab.Clients.Hive.Plugin GetPluginByHash(byte[] hash);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddPlugin", ReplyAction = "http://tempuri.org/IHiveService/AddPluginResponse")]
+    [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.Hive.PluginAlreadyExistsFault), Action = "http://tempuri.org/IHiveService/AddPluginPluginAlreadyExistsFaultFault", Name = "PluginAlreadyExistsFault", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive")]
+    System.Guid AddPlugin(HeuristicLab.Clients.Hive.Plugin plugin, System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> pluginData);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetPlugins", ReplyAction = "http://tempuri.org/IHiveService/GetPluginsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Plugin> GetPlugins();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetPluginDatas", ReplyAction = "http://tempuri.org/IHiveService/GetPluginDatasResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> GetPluginDatas(System.Collections.Generic.List<System.Guid> pluginIds);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeletePlugin", ReplyAction = "http://tempuri.org/IHiveService/DeletePluginResponse")]
+    void DeletePlugin(System.Guid pluginId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddSlave", ReplyAction = "http://tempuri.org/IHiveService/AddSlaveResponse")]
+    System.Guid AddSlave(HeuristicLab.Clients.Hive.Slave slave);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddSlaveGroup", ReplyAction = "http://tempuri.org/IHiveService/AddSlaveGroupResponse")]
+    System.Guid AddSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetSlave", ReplyAction = "http://tempuri.org/IHiveService/GetSlaveResponse")]
+    HeuristicLab.Clients.Hive.Slave GetSlave(System.Guid slaveId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetSlaveGroup", ReplyAction = "http://tempuri.org/IHiveService/GetSlaveGroupResponse")]
+    HeuristicLab.Clients.Hive.SlaveGroup GetSlaveGroup(System.Guid slaveGroupId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetSlaves", ReplyAction = "http://tempuri.org/IHiveService/GetSlavesResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Slave> GetSlaves();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetSlaveGroups", ReplyAction = "http://tempuri.org/IHiveService/GetSlaveGroupsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.SlaveGroup> GetSlaveGroups();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateSlave", ReplyAction = "http://tempuri.org/IHiveService/UpdateSlaveResponse")]
+    void UpdateSlave(HeuristicLab.Clients.Hive.Slave slave);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateSlaveGroup", ReplyAction = "http://tempuri.org/IHiveService/UpdateSlaveGroupResponse")]
+    void UpdateSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteSlave", ReplyAction = "http://tempuri.org/IHiveService/DeleteSlaveResponse")]
+    void DeleteSlave(System.Guid slaveId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteSlaveGroup", ReplyAction = "http://tempuri.org/IHiveService/DeleteSlaveGroupResponse")]
+    void DeleteSlaveGroup(System.Guid slaveGroupId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddResourceToGroup", ReplyAction = "http://tempuri.org/IHiveService/AddResourceToGroupResponse")]
+    void AddResourceToGroup(System.Guid slaveGroupId, System.Guid resourceId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/RemoveResourceFromGroup", ReplyAction = "http://tempuri.org/IHiveService/RemoveResourceFromGroupResponse")]
+    void RemoveResourceFromGroup(System.Guid slaveGroupId, System.Guid resourceId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetResourceId", ReplyAction = "http://tempuri.org/IHiveService/GetResourceIdResponse")]
+    System.Guid GetResourceId(string resourceName);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetTasksByResourceId", ReplyAction = "http://tempuri.org/IHiveService/GetTasksByResourceIdResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Task> GetTasksByResourceId(System.Guid resourceId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/TriggerEventManager", ReplyAction = "http://tempuri.org/IHiveService/TriggerEventManagerResponse")]
+    void TriggerEventManager(bool force);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetNewHeartbeatInterval", ReplyAction = "http://tempuri.org/IHiveService/GetNewHeartbeatIntervalResponse")]
+    int GetNewHeartbeatInterval(System.Guid slaveId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddDowntime", ReplyAction = "http://tempuri.org/IHiveService/AddDowntimeResponse")]
+    System.Guid AddDowntime(HeuristicLab.Clients.Hive.Downtime downtime);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteDowntime", ReplyAction = "http://tempuri.org/IHiveService/DeleteDowntimeResponse")]
+    void DeleteDowntime(System.Guid downtimeId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateDowntime", ReplyAction = "http://tempuri.org/IHiveService/UpdateDowntimeResponse")]
+    void UpdateDowntime(HeuristicLab.Clients.Hive.Downtime downtime);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetDowntimesForResource", ReplyAction = "http://tempuri.org/IHiveService/GetDowntimesForResourceResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Downtime> GetDowntimesForResource(System.Guid resourceId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetUsernameByUserId", ReplyAction = "http://tempuri.org/IHiveService/GetUsernameByUserIdResponse")]
+    string GetUsernameByUserId(System.Guid userId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddTask", ReplyAction = "http://tempuri.org/IHiveService/AddTaskResponse")]
+    System.Guid AddTask(HeuristicLab.Clients.Hive.Task task, HeuristicLab.Clients.Hive.TaskData taskData, System.Collections.Generic.List<System.Guid> resourceIds);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddChildTask", ReplyAction = "http://tempuri.org/IHiveService/AddChildTaskResponse")]
+    System.Guid AddChildTask(System.Guid parentTaskId, HeuristicLab.Clients.Hive.Task task, HeuristicLab.Clients.Hive.TaskData taskData);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetTask", ReplyAction = "http://tempuri.org/IHiveService/GetTaskResponse")]
+    HeuristicLab.Clients.Hive.Task GetTask(System.Guid taskId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetTasks", ReplyAction = "http://tempuri.org/IHiveService/GetTasksResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Task> GetTasks();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetLightweightTasks", ReplyAction = "http://tempuri.org/IHiveService/GetLightweightTasksResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightTasks(System.Collections.Generic.List<System.Guid> taskIds);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetLightweightChildTasks", ReplyAction = "http://tempuri.org/IHiveService/GetLightweightChildTasksResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightChildTasks(System.Nullable<System.Guid> parentTaskId, bool recursive, bool includeParent);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetLightweightJobTasks", ReplyAction = "http://tempuri.org/IHiveService/GetLightweightJobTasksResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightJobTasks(System.Guid jobId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetTaskData", ReplyAction = "http://tempuri.org/IHiveService/GetTaskDataResponse")]
+    HeuristicLab.Clients.Hive.TaskData GetTaskData(System.Guid taskId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateTask", ReplyAction = "http://tempuri.org/IHiveService/UpdateTaskResponse")]
+    void UpdateTask(HeuristicLab.Clients.Hive.Task taskDto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateTaskData", ReplyAction = "http://tempuri.org/IHiveService/UpdateTaskDataResponse")]
+    void UpdateTaskData(HeuristicLab.Clients.Hive.Task taskDto, HeuristicLab.Clients.Hive.TaskData taskDataDto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteTask", ReplyAction = "http://tempuri.org/IHiveService/DeleteTaskResponse")]
+    void DeleteTask(System.Guid taskId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteChildTasks", ReplyAction = "http://tempuri.org/IHiveService/DeleteChildTasksResponse")]
+    void DeleteChildTasks(System.Guid parentTaskId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateTaskState", ReplyAction = "http://tempuri.org/IHiveService/UpdateTaskStateResponse")]
+    HeuristicLab.Clients.Hive.Task UpdateTaskState(System.Guid taskId, HeuristicLab.Clients.Hive.TaskState taskState, System.Nullable<System.Guid> slaveId, System.Nullable<System.Guid> userId, string exception);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/StopTask", ReplyAction = "http://tempuri.org/IHiveService/StopTaskResponse")]
+    void StopTask(System.Guid taskId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/PauseTask", ReplyAction = "http://tempuri.org/IHiveService/PauseTaskResponse")]
+    void PauseTask(System.Guid taskId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/RestartTask", ReplyAction = "http://tempuri.org/IHiveService/RestartTaskResponse")]
+    void RestartTask(System.Guid taskId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetJob", ReplyAction = "http://tempuri.org/IHiveService/GetJobResponse")]
+    HeuristicLab.Clients.Hive.Job GetJob(System.Guid id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetJobs", ReplyAction = "http://tempuri.org/IHiveService/GetJobsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobs();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetAllJobs", ReplyAction = "http://tempuri.org/IHiveService/GetAllJobsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetAllJobs();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddJob", ReplyAction = "http://tempuri.org/IHiveService/AddJobResponse")]
+    System.Guid AddJob(HeuristicLab.Clients.Hive.Job jobDto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateJob", ReplyAction = "http://tempuri.org/IHiveService/UpdateJobResponse")]
+    void UpdateJob(HeuristicLab.Clients.Hive.Job jobDto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteJob", ReplyAction = "http://tempuri.org/IHiveService/DeleteJobResponse")]
+    void DeleteJob(System.Guid JobId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GrantPermission", ReplyAction = "http://tempuri.org/IHiveService/GrantPermissionResponse")]
+    void GrantPermission(System.Guid jobId, System.Guid grantedUserId, HeuristicLab.Clients.Hive.Permission permission);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/RevokePermission", ReplyAction = "http://tempuri.org/IHiveService/RevokePermissionResponse")]
+    void RevokePermission(System.Guid hiveExperimentId, System.Guid grantedUserId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetJobPermissions", ReplyAction = "http://tempuri.org/IHiveService/GetJobPermissionsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.JobPermission> GetJobPermissions(System.Guid jobId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/IsAllowedPrivileged", ReplyAction = "http://tempuri.org/IHiveService/IsAllowedPrivilegedResponse")]
+    bool IsAllowedPrivileged();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/Hello", ReplyAction = "http://tempuri.org/IHiveService/HelloResponse")]
+    void Hello(HeuristicLab.Clients.Hive.Slave slave);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GoodBye", ReplyAction = "http://tempuri.org/IHiveService/GoodByeResponse")]
+    void GoodBye(System.Guid slaveId);
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+  public interface IHiveServiceChannel : HeuristicLab.Clients.Hive.IHiveService, System.ServiceModel.IClientChannel {
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+  public partial class HiveServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.Hive.IHiveService>, HeuristicLab.Clients.Hive.IHiveService {
+
+    public HiveServiceClient() {
+    }
+
+    public HiveServiceClient(string endpointConfigurationName) :
+      base(endpointConfigurationName) {
+    }
+
+    public HiveServiceClient(string endpointConfigurationName, string remoteAddress) :
+      base(endpointConfigurationName, remoteAddress) {
+    }
+
+    public HiveServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
+      base(endpointConfigurationName, remoteAddress) {
+    }
+
+    public HiveServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
+      base(binding, remoteAddress) {
+    }
+
+    public System.Guid GetUserIdByUsername(string username) {
+      return base.Channel.GetUserIdByUsername(username);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.MessageContainer> Heartbeat(HeuristicLab.Clients.Hive.Heartbeat heartbeat1) {
+      return base.Channel.Heartbeat(heartbeat1);
+    }
+
+    public HeuristicLab.Clients.Hive.Plugin GetPlugin(System.Guid pluginId) {
+      return base.Channel.GetPlugin(pluginId);
+    }
+
+    public HeuristicLab.Clients.Hive.Plugin GetPluginByHash(byte[] hash) {
+      return base.Channel.GetPluginByHash(hash);
+    }
+
+    public System.Guid AddPlugin(HeuristicLab.Clients.Hive.Plugin plugin, System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> pluginData) {
+      return base.Channel.AddPlugin(plugin, pluginData);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Plugin> GetPlugins() {
+      return base.Channel.GetPlugins();
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> GetPluginDatas(System.Collections.Generic.List<System.Guid> pluginIds) {
+      return base.Channel.GetPluginDatas(pluginIds);
+    }
+
+    public void DeletePlugin(System.Guid pluginId) {
+      base.Channel.DeletePlugin(pluginId);
+    }
+
+    public System.Guid AddSlave(HeuristicLab.Clients.Hive.Slave slave) {
+      return base.Channel.AddSlave(slave);
+    }
+
+    public System.Guid AddSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup) {
+      return base.Channel.AddSlaveGroup(slaveGroup);
+    }
+
+    public HeuristicLab.Clients.Hive.Slave GetSlave(System.Guid slaveId) {
+      return base.Channel.GetSlave(slaveId);
+    }
+
+    public HeuristicLab.Clients.Hive.SlaveGroup GetSlaveGroup(System.Guid slaveGroupId) {
+      return base.Channel.GetSlaveGroup(slaveGroupId);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Slave> GetSlaves() {
+      return base.Channel.GetSlaves();
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.SlaveGroup> GetSlaveGroups() {
+      return base.Channel.GetSlaveGroups();
+    }
+
+    public void UpdateSlave(HeuristicLab.Clients.Hive.Slave slave) {
+      base.Channel.UpdateSlave(slave);
+    }
+
+    public void UpdateSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup) {
+      base.Channel.UpdateSlaveGroup(slaveGroup);
+    }
+
+    public void DeleteSlave(System.Guid slaveId) {
+      base.Channel.DeleteSlave(slaveId);
+    }
+
+    public void DeleteSlaveGroup(System.Guid slaveGroupId) {
+      base.Channel.DeleteSlaveGroup(slaveGroupId);
+    }
+
+    public void AddResourceToGroup(System.Guid slaveGroupId, System.Guid resourceId) {
+      base.Channel.AddResourceToGroup(slaveGroupId, resourceId);
+    }
+
+    public void RemoveResourceFromGroup(System.Guid slaveGroupId, System.Guid resourceId) {
+      base.Channel.RemoveResourceFromGroup(slaveGroupId, resourceId);
+    }
+
+    public System.Guid GetResourceId(string resourceName) {
+      return base.Channel.GetResourceId(resourceName);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Task> GetTasksByResourceId(System.Guid resourceId) {
+      return base.Channel.GetTasksByResourceId(resourceId);
+    }
+
+    public void TriggerEventManager(bool force) {
+      base.Channel.TriggerEventManager(force);
+    }
+
+    public int GetNewHeartbeatInterval(System.Guid slaveId) {
+      return base.Channel.GetNewHeartbeatInterval(slaveId);
+    }
+
+    public System.Guid AddDowntime(HeuristicLab.Clients.Hive.Downtime downtime) {
+      return base.Channel.AddDowntime(downtime);
+    }
+
+    public void DeleteDowntime(System.Guid downtimeId) {
+      base.Channel.DeleteDowntime(downtimeId);
+    }
+
+    public void UpdateDowntime(HeuristicLab.Clients.Hive.Downtime downtime) {
+      base.Channel.UpdateDowntime(downtime);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Downtime> GetDowntimesForResource(System.Guid resourceId) {
+      return base.Channel.GetDowntimesForResource(resourceId);
+    }
+
+    public string GetUsernameByUserId(System.Guid userId) {
+      return base.Channel.GetUsernameByUserId(userId);
+    }
+
+    public System.Guid AddTask(HeuristicLab.Clients.Hive.Task task, HeuristicLab.Clients.Hive.TaskData taskData, System.Collections.Generic.List<System.Guid> resourceIds) {
+      return base.Channel.AddTask(task, taskData, resourceIds);
+    }
+
+    public System.Guid AddChildTask(System.Guid parentTaskId, HeuristicLab.Clients.Hive.Task task, HeuristicLab.Clients.Hive.TaskData taskData) {
+      return base.Channel.AddChildTask(parentTaskId, task, taskData);
+    }
+
+    public HeuristicLab.Clients.Hive.Task GetTask(System.Guid taskId) {
+      return base.Channel.GetTask(taskId);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Task> GetTasks() {
+      return base.Channel.GetTasks();
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightTasks(System.Collections.Generic.List<System.Guid> taskIds) {
+      return base.Channel.GetLightweightTasks(taskIds);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightChildTasks(System.Nullable<System.Guid> parentTaskId, bool recursive, bool includeParent) {
+      return base.Channel.GetLightweightChildTasks(parentTaskId, recursive, includeParent);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightJobTasks(System.Guid jobId) {
+      return base.Channel.GetLightweightJobTasks(jobId);
+    }
+
+    public HeuristicLab.Clients.Hive.TaskData GetTaskData(System.Guid taskId) {
+      return base.Channel.GetTaskData(taskId);
+    }
+
+    public void UpdateTask(HeuristicLab.Clients.Hive.Task taskDto) {
+      base.Channel.UpdateTask(taskDto);
+    }
+
+    public void UpdateTaskData(HeuristicLab.Clients.Hive.Task taskDto, HeuristicLab.Clients.Hive.TaskData taskDataDto) {
+      base.Channel.UpdateTaskData(taskDto, taskDataDto);
+    }
+
+    public void DeleteTask(System.Guid taskId) {
+      base.Channel.DeleteTask(taskId);
+    }
+
+    public void DeleteChildTasks(System.Guid parentTaskId) {
+      base.Channel.DeleteChildTasks(parentTaskId);
+    }
+
+    public HeuristicLab.Clients.Hive.Task UpdateTaskState(System.Guid taskId, HeuristicLab.Clients.Hive.TaskState taskState, System.Nullable<System.Guid> slaveId, System.Nullable<System.Guid> userId, string exception) {
+      return base.Channel.UpdateTaskState(taskId, taskState, slaveId, userId, exception);
+    }
+
+    public void StopTask(System.Guid taskId) {
+      base.Channel.StopTask(taskId);
+    }
+
+    public void PauseTask(System.Guid taskId) {
+      base.Channel.PauseTask(taskId);
+    }
+
+    public void RestartTask(System.Guid taskId) {
+      base.Channel.RestartTask(taskId);
+    }
+
+    public HeuristicLab.Clients.Hive.Job GetJob(System.Guid id) {
+      return base.Channel.GetJob(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobs() {
+      return base.Channel.GetJobs();
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetAllJobs() {
+      return base.Channel.GetAllJobs();
+    }
+
+    public System.Guid AddJob(HeuristicLab.Clients.Hive.Job jobDto) {
+      return base.Channel.AddJob(jobDto);
+    }
+
+    public void UpdateJob(HeuristicLab.Clients.Hive.Job jobDto) {
+      base.Channel.UpdateJob(jobDto);
+    }
+
+    public void DeleteJob(System.Guid JobId) {
+      base.Channel.DeleteJob(JobId);
+    }
+
+    public void GrantPermission(System.Guid jobId, System.Guid grantedUserId, HeuristicLab.Clients.Hive.Permission permission) {
+      base.Channel.GrantPermission(jobId, grantedUserId, permission);
+    }
+
+    public void RevokePermission(System.Guid hiveExperimentId, System.Guid grantedUserId) {
+      base.Channel.RevokePermission(hiveExperimentId, grantedUserId);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.JobPermission> GetJobPermissions(System.Guid jobId) {
+      return base.Channel.GetJobPermissions(jobId);
+    }
+
+    public bool IsAllowedPrivileged() {
+      return base.Channel.IsAllowedPrivileged();
+    }
+
+    public void Hello(HeuristicLab.Clients.Hive.Slave slave) {
+      base.Channel.Hello(slave);
+    }
+
+    public void GoodBye(System.Guid slaveId) {
+      base.Channel.GoodBye(slaveId);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/IHiveItem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/IHiveItem.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/IHiveItem.cs	(revision 7085)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ComponentModel;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.Hive {
+  public interface IHiveItem : IItem, INotifyPropertyChanged {
+    Guid Id { get; set; }
+    bool Modified { get; }
+
+    void Store();
+
+    event EventHandler ModifiedChanged;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Job.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Job.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Job.cs	(revision 7085)
@@ -0,0 +1,86 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ComponentModel;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+  public partial class Job : IDeepCloneable, IContent {
+
+    private bool isPrivileged;
+    public bool IsPrivileged {
+      get { return isPrivileged; }
+      set { isPrivileged = value; }
+    }
+
+    #region Constructors and Cloning
+    public Job() {
+      this.ResourceNames = "HEAL";
+      this.DateCreated = DateTime.Now;
+      this.Permission = Permission.Full;
+    }
+
+    protected Job(Job original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.OwnerUserId = original.OwnerUserId;
+      this.DateCreated = original.DateCreated;
+      this.ResourceNames = original.ResourceNames;
+      this.Name = original.Name;
+      this.Description = original.Description;
+      this.Id = original.Id;
+      this.IsPrivileged = original.IsPrivileged;
+      this.Permission = original.Permission;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Job(this, cloner);
+    }
+    #endregion
+
+    #region Events
+    public event EventHandler StateLogListChanged;
+    private void OnStateLogListChanged() {
+      var handler = StateLogListChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    protected override void OnPropertyChanged(PropertyChangedEventArgs e) {
+      base.OnPropertyChanged(e);
+      if (e.PropertyName == "Name") {
+        OnToStringChanged();
+      }
+    }
+
+    protected override void RaisePropertyChanged(string propertyName) {
+      if (!(propertyName == "ExecutionTime")
+        && !(propertyName == "JobCount")
+        && !(propertyName == "CalculatingCount")
+        && !(propertyName == "FinishedCount")) {
+        base.RaisePropertyChanged(propertyName);
+      }
+    }
+
+    public override string ToString() {
+      return Name;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobData.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobData.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobData.cs	(revision 7085)
@@ -0,0 +1,46 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+  public partial class TaskData : IDeepCloneable, IContent {
+    public TaskData() { }
+
+    protected TaskData(TaskData original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      if (original.Data != null) {
+        this.Data = new byte[original.Data.Length];
+        Array.Copy(original.Data, this.Data, original.Data.Length);
+      }
+      this.LastUpdate = original.LastUpdate;
+    }
+
+    public IDeepCloneable Clone(Cloner cloner) {
+      return new TaskData(this, cloner);
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobPermission.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobPermission.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobPermission.cs	(revision 7085)
@@ -0,0 +1,74 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.ComponentModel;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+  public partial class JobPermission : IDeepCloneable, IContent {
+
+    private string grantedUserName;
+    public string GrantedUserName {
+      get { return grantedUserName; }
+      set {
+        if (value != grantedUserName) {
+          grantedUserName = value;
+          RaisePropertyChanged("GrantedUserName");
+        }
+      }
+    }
+
+    public void UnmodifiedGrantedUserNameUpdate(string userName) {
+      grantedUserName = userName;
+    }
+
+    public JobPermission() {
+      this.Permission = Permission.Read;
+    }
+
+    protected override void OnPropertyChanged(PropertyChangedEventArgs e) {
+      base.OnPropertyChanged(e);
+      if (e.PropertyName == "GrantedUserName" || e.PropertyName == "Permission") {
+        HiveExperimentPermission_PropertyChanged(this, e);
+      }
+    }
+
+    protected JobPermission(JobPermission original, Cloner cloner)
+      : base(original, cloner) {
+      this.GrantedByUserId = original.GrantedByUserId;
+      this.GrantedUserId = original.GrantedUserId;
+      this.JobId = original.JobId;
+      this.Permission = original.Permission;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JobPermission(this, cloner);
+    }
+
+    private void HiveExperimentPermission_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      OnToStringChanged();
+    }
+
+    public override string ToString() {
+      return string.Format("{0}: {1}", GrantedUserName, Permission.ToString());
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/LightweightTask.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/LightweightTask.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/LightweightTask.cs	(revision 7085)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+  public partial class LightweightTask : IDeepCloneable, IContent {
+    public StateLog CurrentStateLog { get { return StateLog.LastOrDefault(); } }
+    public DateTime? DateCreated { get { return StateLog.Count > 0 ? new DateTime?(StateLog.First().DateTime) : null; } }
+    public DateTime? DateFinished { get { return (StateLog.Count > 0 && CurrentStateLog.State == TaskState.Finished) ? new DateTime?(CurrentStateLog.DateTime) : null; } }
+
+    public LightweightTask() {
+      StateLog = new List<StateLog>();
+    }
+
+    public LightweightTask(Task job) {
+      this.Id = job.Id;
+      this.ExecutionTime = job.ExecutionTime;
+      this.ParentTaskId = job.ParentTaskId;
+      this.StateLog = new List<StateLog>(job.StateLog);
+      this.State = job.State;
+      this.Command = job.Command;
+      this.LastTaskDataUpdate = job.LastTaskDataUpdate;
+    }
+
+    protected LightweightTask(LightweightTask original, Cloner cloner)
+      : base(original, cloner) {
+      this.ExecutionTime = original.ExecutionTime;
+      this.ParentTaskId = original.ParentTaskId;
+      this.StateLog = new List<StateLog>(original.StateLog);
+      this.State = original.State;
+      this.Command = original.Command;
+      this.LastTaskDataUpdate = original.LastTaskDataUpdate;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LightweightTask(this, cloner);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/MessageContainer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/MessageContainer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/MessageContainer.cs	(revision 7085)
@@ -0,0 +1,50 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+  public partial class MessageContainer : IDeepCloneable, IContent {
+
+    protected MessageContainer() { }
+    public MessageContainer(MessageType message) {
+      Message = message;
+      TaskId = Guid.Empty;
+    }
+    public MessageContainer(MessageType message, Guid jobId) {
+      Message = message;
+      TaskId = jobId;
+    }
+
+    protected MessageContainer(MessageContainer original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.Message = original.Message;
+      this.TaskId = original.TaskId;
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new MessageContainer(this, cloner);
+    }
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/NamedHiveItem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/NamedHiveItem.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/NamedHiveItem.cs	(revision 7085)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+
+  public partial class NamedHiveItem : HiveItem {
+
+    public NamedHiveItem() { }
+
+    protected NamedHiveItem(NamedHiveItem original, Cloner cloner)
+      : base(original, cloner) {
+      this.Name = original.Name;
+      this.Description = original.Description;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new NamedHiveItem(this, cloner);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Plugin.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Plugin.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Plugin.cs	(revision 7085)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+
+  public partial class Plugin : IDeepCloneable, IContent {
+
+    public Plugin() { }
+
+    protected Plugin(Plugin original, Cloner cloner)
+      : base(original, cloner) {
+      this.Version = original.Version;
+      this.UserId = original.UserId;
+      this.DateCreated = original.DateCreated;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Plugin(this, cloner);
+    }
+
+    public override string ToString() {
+      return string.Format("{0}-{1}", this.Name, this.Version.ToString());
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/PluginData.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/PluginData.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/PluginData.cs	(revision 7085)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+
+  public partial class PluginData : IDeepCloneable, IContent {
+
+    public PluginData() { }
+
+    protected PluginData(PluginData original, Cloner cloner)
+      : base(original, cloner) {
+      if (original.Data != null) {
+        this.Data = new byte[original.Data.Length];
+        Array.Copy(original.Data, this.Data, original.Data.Length);
+      }
+      this.FileName = original.FileName;
+      this.PluginId = original.PluginId;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PluginData(this, cloner);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Resource.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Resource.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Resource.cs	(revision 7085)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+
+  public partial class Resource : IDeepCloneable, IContent {
+
+    public Resource() { }
+
+    public override void Store() {
+      HiveAdminClient.Store(this, new System.Threading.CancellationToken());
+      Modified = false;
+    }
+
+    protected Resource(Resource original, Cloner cloner)
+      : base(original, cloner) {
+      this.ParentResourceId = original.ParentResourceId;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Resource(this, cloner);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Slave.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Slave.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Slave.cs	(revision 7085)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+
+  public partial class Slave : IContent, IDeepCloneable {
+
+    public Slave() {
+      SlaveState = SlaveState.Idle;
+    }
+
+    protected Slave(Slave original, Cloner cloner)
+      : base(original, cloner) {
+      this.Cores = original.Cores;
+      this.FreeCores = original.FreeCores;
+      this.CpuSpeed = original.CpuSpeed;
+      this.Memory = original.Memory;
+      this.FreeMemory = original.FreeMemory;
+      this.SlaveState = original.SlaveState;
+      this.IsAllowedToCalculate = original.IsAllowedToCalculate;
+      this.OperatingSystem = original.OperatingSystem;
+      this.CpuArchitecture = original.CpuArchitecture;
+      this.LastHeartbeat = original.LastHeartbeat;
+      this.CpuUtilization = original.CpuUtilization;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Slave(this, cloner);
+    }
+
+    public override string ToString() {
+      return string.Format("Cores: {0}, FreeCores: {1}", Cores, FreeCores);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/SlaveGroup.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/SlaveGroup.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/SlaveGroup.cs	(revision 7085)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+
+  public partial class SlaveGroup : IContent, IDeepCloneable {
+
+    public SlaveGroup() { }
+
+    protected SlaveGroup(SlaveGroup original, Cloner cloner) : base(original, cloner) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SlaveGroup(this, cloner);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/StateLog.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/StateLog.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/StateLog.cs	(revision 7085)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+
+  public partial class StateLog {
+
+    public StateLog() { }
+
+    protected StateLog(StateLog original, Cloner cloner)
+      : base(original, cloner) {
+      this.DateTime = original.DateTime;
+      this.UserId = original.UserId;
+      this.SlaveId = original.SlaveId;
+      this.Exception = original.Exception;
+      this.State = original.State;
+      this.TaskId = original.TaskId;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StateLog(this, cloner);
+    }
+
+    public override string ToString() {
+      return State.ToString();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Task.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Task.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceClients/Task.cs	(revision 7085)
@@ -0,0 +1,59 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+  public partial class Task : LightweightTask {
+
+    public Task() { }
+
+    protected Task(Task original, Cloner cloner)
+      : base(original, cloner) {
+      this.Priority = original.Priority;
+      this.CoresNeeded = original.CoresNeeded;
+      this.MemoryNeeded = original.MemoryNeeded;
+      if (original.PluginsNeededIds != null) {
+        this.PluginsNeededIds = new List<Guid>(original.PluginsNeededIds);
+      }
+      this.LastHeartbeat = original.LastHeartbeat;
+      this.IsParentTask = original.IsParentTask;
+      this.FinishWhenChildJobsFinished = original.FinishWhenChildJobsFinished;
+      this.JobId = original.JobId;
+      this.IsPrivileged = original.IsPrivileged;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Task(this, cloner);
+    }
+
+    public override string ToString() {
+      return string.Format("State: {0}, SlaveId: {1}, DateCreated: {2}, CoresNeeded: {3}, MemoryNeeded: {4}",
+        State,
+        CurrentStateLog != null ? (CurrentStateLog.SlaveId.HasValue ? CurrentStateLog.SlaveId.Value.ToString() : string.Empty) : string.Empty,
+        DateCreated.HasValue ? DateCreated.ToString() : string.Empty,
+        CoresNeeded,
+        MemoryNeeded);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceLocator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceLocator.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/ServiceLocator.cs	(revision 7085)
@@ -0,0 +1,92 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Clients.Common;
+
+namespace HeuristicLab.Clients.Hive {
+  public class ServiceLocator : IServiceLocator {
+    private static IServiceLocator instance = null;
+    public static IServiceLocator Instance {
+      get {
+        if (instance == null) {
+          instance = new ServiceLocator();
+        }
+        return instance;
+      }
+      set {
+        instance = value;
+      }
+    }
+
+    private string username;
+    public string Username {
+      get { return username; }
+      set { username = value; }
+    }
+
+    private string password;
+    public string Password {
+      get { return password; }
+      set { password = value; }
+    }
+
+    private HiveServiceClient NewServiceClient() {
+      HiveServiceClient cl;
+      if (string.IsNullOrEmpty(username) && string.IsNullOrEmpty(password))
+        cl = ClientFactory.CreateClient<HiveServiceClient, IHiveService>();
+      else
+        cl = ClientFactory.CreateClient<HiveServiceClient, IHiveService>(null, null, username, password);
+      
+      return cl;
+    }
+
+    public T CallHiveService<T>(Func<IHiveService, T> call) {
+      HiveServiceClient client = NewServiceClient();
+      try {
+        return call(client);
+      }
+      finally {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+      }
+    }
+
+    public void CallHiveService(Action<IHiveService> call) {
+      HiveServiceClient client = NewServiceClient();
+      try {
+        call(client);
+      }
+      finally {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Settings.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Settings.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Settings.Designer.cs	(revision 7085)
@@ -0,0 +1,62 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.239
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.Hive {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.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;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("4")]
+        public int MaxParallelUploads {
+            get {
+                return ((int)(this["MaxParallelUploads"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("HeuristicLab 3.3.exe")]
+        public string HLBinaryName {
+            get {
+                return ((string)(this["HLBinaryName"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:00:10")]
+        public global::System.TimeSpan ResultPollingInterval {
+            get {
+                return ((global::System.TimeSpan)(this["ResultPollingInterval"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("2")]
+        public int MaxParallelDownloads {
+            get {
+                return ((int)(this["MaxParallelDownloads"]));
+            }
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Settings.settings
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Settings.settings	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Settings.settings	(revision 7085)
@@ -0,0 +1,18 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Clients.Hive" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="MaxParallelUploads" Type="System.Int32" Scope="Application">
+      <Value Profile="(Default)">4</Value>
+    </Setting>
+    <Setting Name="HLBinaryName" Type="System.String" Scope="Application">
+      <Value Profile="(Default)">HeuristicLab 3.3.exe</Value>
+    </Setting>
+    <Setting Name="ResultPollingInterval" Type="System.TimeSpan" Scope="Application">
+      <Value Profile="(Default)">00:00:10</Value>
+    </Setting>
+    <Setting Name="MaxParallelDownloads" Type="System.Int32" Scope="Application">
+      <Value Profile="(Default)">2</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/StateLogList.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/StateLogList.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/StateLogList.cs	(revision 7085)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.Hive {
+  [StorableClass]
+  public class StateLogList : ItemList<StateLog> {
+
+    [StorableConstructor]
+    protected StateLogList(bool deserializing) : base(deserializing) { }
+    public StateLogList() : base() { }
+    protected StateLogList(StateLogList original, Cloner cloner) : base(original, cloner) { }
+    public StateLogList(IEnumerable<StateLog> collection)
+      : base(collection) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StateLogList(this, cloner);
+    }
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/StateLogListList.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/StateLogListList.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/StateLogListList.cs	(revision 7085)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.Hive {
+  [StorableClass]
+  public class StateLogListList : ItemList<StateLogList> {
+
+    [StorableConstructor]
+    protected StateLogListList(bool deserializing) : base(deserializing) { }
+    public StateLogListList() : base() { }
+    protected StateLogListList(StateLogListList original, Cloner cloner) : base(original, cloner) { }
+    public StateLogListList(IEnumerable<StateLogList> collection)
+      : base(collection) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StateLogListList(this, cloner);
+    }
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/TaskDownloader.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/TaskDownloader.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/TaskDownloader.cs	(revision 7085)
@@ -0,0 +1,105 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Clients.Hive.Jobs;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+  public class TaskDownloader {
+    private IEnumerable<Guid> taskIds;
+    private ConcurrentTaskDownloader<ItemTask> taskDownloader;
+    private IDictionary<Guid, HiveTask> results;
+    private bool exceptionOccured = false;
+    private Exception currentException;
+
+    public bool IsFinished {
+      get {
+        return results.Count == taskIds.Count();
+      }
+    }
+
+    public bool IsFaulted {
+      get {
+        return exceptionOccured;
+      }
+    }
+
+    public Exception Exception {
+      get {
+        return currentException;
+      }
+    }
+
+    public int FinishedCount {
+      get {
+        return results.Count;
+      }
+    }
+
+    public IDictionary<Guid, HiveTask> Results {
+      get {
+        return results;
+      }
+    }
+
+    public TaskDownloader(IEnumerable<Guid> jobIds) {
+      this.taskIds = jobIds;
+      this.taskDownloader = new ConcurrentTaskDownloader<ItemTask>(Settings.Default.MaxParallelDownloads, Settings.Default.MaxParallelDownloads);
+      this.taskDownloader.ExceptionOccured += new EventHandler<EventArgs<Exception>>(taskDownloader_ExceptionOccured);
+      this.results = new Dictionary<Guid, HiveTask>();
+    }
+
+    public void StartAsync() {
+      foreach (Guid taskId in taskIds) {
+        Task task = ServiceLocator.Instance.CallHiveService(s => s.GetTask(taskId));
+
+        taskDownloader.DownloadTask(task,
+          (localJob, itemJob) => {
+            if (localJob != null && itemJob != null) {
+              HiveTask hiveTask;
+              if (itemJob is OptimizerTask) {
+                hiveTask = new OptimizerHiveTask((OptimizerTask)itemJob);
+              } else {
+                hiveTask = new HiveTask(itemJob, true);
+              }
+              hiveTask.Task = localJob;
+              this.results.Add(localJob.Id, hiveTask);
+            }
+          });
+      }
+    }
+
+    private void taskDownloader_ExceptionOccured(object sender, EventArgs<Exception> e) {
+      OnExceptionOccured(e.Value);
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception exception) {
+      this.exceptionOccured = true;
+      this.currentException = exception;
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(exception));
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Tasks/EngineTask.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Tasks/EngineTask.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Tasks/EngineTask.cs	(revision 7085)
@@ -0,0 +1,166 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.Hive {
+  [StorableClass]
+  public class EngineTask : ItemTask {
+    [Storable]
+    protected IOperation initialOperation;
+    public IOperation InitialOperation {
+      get { return initialOperation; }
+      set { initialOperation = value; }
+    }
+
+    public new IEngine Item {
+      get { return (IEngine)base.Item; }
+      set { base.Item = value; }
+    }
+
+    public override TimeSpan ExecutionTime {
+      get { return Item.ExecutionTime; }
+    }
+
+    public override ExecutionState ExecutionState {
+      get { return Item.ExecutionState; }
+    }
+
+    #region constructors and cloning
+    public EngineTask() { }
+    public EngineTask(IOperation initialOperation, IEngine engine) {
+      this.initialOperation = initialOperation;
+      this.Item = engine;
+    }
+
+    [StorableConstructor]
+    protected EngineTask(bool deserializing) : base(deserializing) { }
+    protected EngineTask(EngineTask original, Cloner cloner)
+      : base(original, cloner) {
+      this.initialOperation = cloner.Clone(original.initialOperation);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EngineTask(this, cloner);
+    }
+    #endregion
+
+    public override bool IsParallelizable {
+      get { return false; }
+    }
+
+    public override void Prepare() { }
+
+    public override void Start() {
+      Item.Prepare(initialOperation);
+      Item.Start();
+    }
+
+    public override void Pause() {
+      Item.Pause();
+    }
+
+    public override void Stop() {
+      Item.Stop();
+    }
+
+    protected override void RegisterItemEvents() {
+      base.RegisterItemEvents();
+      Item.Stopped += new EventHandler(engine_Stopped);
+      Item.Paused += new EventHandler(Item_Paused);
+      Item.Started += new EventHandler(Item_Started);
+      Item.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(engine_ExceptionOccurred);
+      Item.ExecutionStateChanged += new EventHandler(Item_ExecutionStateChanged);
+      Item.ExecutionTimeChanged += new EventHandler(Item_ExecutionTimeChanged);
+    }
+
+    protected override void DeregisterItemEvents() {
+      Item.Stopped -= new EventHandler(engine_Stopped);
+      Item.Paused -= new EventHandler(Item_Paused);
+      Item.Started -= new EventHandler(Item_Started);
+      Item.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(engine_ExceptionOccurred);
+      Item.ExecutionStateChanged -= new EventHandler(Item_ExecutionStateChanged);
+      Item.ExecutionTimeChanged -= new EventHandler(Item_ExecutionTimeChanged);
+      base.DeregisterItemEvents();
+    }
+
+    private void engine_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+      OnTaskFailed(e);
+    }
+
+    private void engine_Stopped(object sender, EventArgs e) {
+      OnTaskStopped();
+    }
+
+    private void Item_Paused(object sender, EventArgs e) {
+      OnTaskPaused();
+    }
+
+    private void Item_ExecutionTimeChanged(object sender, EventArgs e) {
+      OnExecutionTimeChanged();
+    }
+
+    private void Item_ExecutionStateChanged(object sender, EventArgs e) {
+      OnExecutionStateChanged();
+    }
+
+    private void Item_Started(object sender, EventArgs e) {
+      OnTaskStarted();
+    }
+
+    public override bool CanChangeDescription {
+      get { return false; }
+    }
+
+    public override bool CanChangeName {
+      get { return false; }
+    }
+
+    public override string Description {
+      get { return string.Empty; }
+      set { throw new NotSupportedException(); }
+    }
+
+    public override string Name {
+      get { return Item != null ? Item.ToString() : null; }
+      set { throw new NotSupportedException(); }
+    }
+
+    public override string ItemDescription {
+      get { return Description; }
+    }
+
+    public override Image ItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Operator; }
+    }
+
+    public override string ItemName {
+      get { return "EngineTask"; }
+    }
+
+    public override Version ItemVersion {
+      get { return null; }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Tasks/ItemTask.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Tasks/ItemTask.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Tasks/ItemTask.cs	(revision 7085)
@@ -0,0 +1,199 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Hive;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.Hive {
+  [Item("Item Task", "Represents a executable hive task which contains a HeuristicLab Item.")]
+  [StorableClass]
+  public abstract class ItemTask : NamedItem, ITask {
+    public virtual bool IsParallelizable {
+      get { return true; }
+    }
+
+    [Storable]
+    protected IItem item;
+    public IItem Item {
+      get { return item; }
+      set {
+        if (value != item) {
+          if (item != null) DeregisterItemEvents();
+          item = value;
+          if (item != null) RegisterItemEvents();
+          OnItemChanged();
+        }
+      }
+    }
+
+    [Storable]
+    protected bool computeInParallel;
+    public bool ComputeInParallel {
+      get { return computeInParallel; }
+      set {
+        if (computeInParallel != value) {
+          computeInParallel = value;
+          OnComputeInParallelChanged();
+        }
+      }
+    }
+
+    #region Constructors and Cloning
+    public ItemTask() { }
+
+    [StorableConstructor]
+    protected ItemTask(bool deserializing) { }
+    protected ItemTask(ItemTask original, Cloner cloner)
+      : base(original, cloner) {
+      this.ComputeInParallel = original.ComputeInParallel;
+      this.Item = cloner.Clone(original.Item);
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    protected virtual void AfterDeserialization() {
+      RegisterItemEvents();
+    }
+    #endregion
+
+    #region Item Events
+    protected virtual void RegisterItemEvents() {
+      item.ItemImageChanged += new EventHandler(item_ItemImageChanged);
+      item.ToStringChanged += new EventHandler(item_ToStringChanged);
+    }
+
+    protected virtual void DeregisterItemEvents() {
+      item.ItemImageChanged -= new EventHandler(item_ItemImageChanged);
+      item.ToStringChanged -= new EventHandler(item_ToStringChanged);
+    }
+
+    protected void item_ToStringChanged(object sender, EventArgs e) {
+      this.OnToStringChanged();
+    }
+    protected void item_ItemImageChanged(object sender, EventArgs e) {
+      this.OnItemImageChanged();
+    }
+
+    #endregion
+
+    #region ITask Members
+
+    public abstract ExecutionState ExecutionState { get; }
+
+    public abstract TimeSpan ExecutionTime { get; }
+
+    public abstract void Prepare();
+
+    public abstract void Start();
+
+    public abstract void Pause();
+
+    public abstract void Stop();
+
+    public event EventHandler TaskStarted;
+    protected virtual void OnTaskStarted() {
+      EventHandler handler = TaskStarted;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler TaskStopped;
+    protected virtual void OnTaskStopped() {
+      EventHandler handler = TaskStopped;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler TaskPaused;
+    protected virtual void OnTaskPaused() {
+      EventHandler handler = TaskPaused;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler TaskFailed;
+    protected virtual void OnTaskFailed(EventArgs<Exception> e) {
+      EventHandler handler = TaskFailed;
+      if (handler != null) handler(this, e);
+    }
+
+    public event EventHandler ComputeInParallelChanged;
+    protected virtual void OnComputeInParallelChanged() {
+      EventHandler handler = ComputeInParallelChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ItemChanged;
+    protected virtual void OnItemChanged() {
+      EventHandler handler = ItemChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    #region INamedItem Members
+    public abstract new bool CanChangeDescription { get; }
+
+    public abstract new bool CanChangeName { get; }
+
+    public abstract new string Description { get; set; }
+
+    public abstract new string Name { get; set; }
+    #endregion
+
+    #region Events
+    public event EventHandler ExecutionTimeChanged;
+    protected virtual void OnExecutionTimeChanged() {
+      EventHandler handler = ExecutionTimeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ExecutionStateChanged;
+    protected virtual void OnExecutionStateChanged() {
+      EventHandler handler = ExecutionStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    #region IItem Members
+    public virtual new string ItemDescription {
+      get { return item.ItemDescription; }
+    }
+
+    public virtual new Image ItemImage
+    {
+      get { return item.ItemImage; }
+    }
+
+    public virtual new string ItemName
+    {
+      get { return item.ItemName; }
+    }
+
+    public virtual new Version ItemVersion
+    {
+      get { return item.ItemVersion; }
+    }
+    #endregion
+
+    public override string ToString() {
+      return Name;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Tasks/OptimizerTask.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Tasks/OptimizerTask.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Tasks/OptimizerTask.cs	(revision 7085)
@@ -0,0 +1,200 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.Hive.Jobs {
+  [Item("Optimizer Task", "Represents Task which executes a IOptimizer object.")]
+  [StorableClass]
+  public class OptimizerTask : ItemTask {
+    public override bool IsParallelizable {
+      get { return this.Item is Experiment || this.Item is BatchRun; }
+    }
+
+    public new IOptimizer Item {
+      get { return (IOptimizer)base.Item; }
+      set { base.Item = value; }
+    }
+
+    [Storable]
+    private int indexInParentOptimizerList = -1;
+    public int IndexInParentOptimizerList {
+      get { return indexInParentOptimizerList; }
+      set { this.indexInParentOptimizerList = value; }
+    }
+
+    public OptimizerTask() : base() { }
+    public OptimizerTask(IOptimizer optimizer)
+      : this() {
+      this.Item = optimizer;
+
+      if (optimizer is Experiment) {
+        this.ComputeInParallel = true;
+      } else if (optimizer is BatchRun) {
+        this.ComputeInParallel = false;
+      } else {
+        this.ComputeInParallel = false;
+      }
+    }
+    [StorableConstructor]
+    protected OptimizerTask(bool deserializing) { }
+    protected OptimizerTask(OptimizerTask original, Cloner cloner)
+      : base(original, cloner) {
+      this.IndexInParentOptimizerList = original.IndexInParentOptimizerList;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OptimizerTask(this, cloner);
+    }
+
+    /// <summary>
+    /// Casts the Optimizer to an Experiment. Returns null if cast was not successfull.
+    /// </summary>
+    public Experiment OptimizerAsExperiment {
+      get { return Item as Experiment; }
+    }
+
+    /// <summary>
+    /// Casts the Optimizer to an BatchRun. Returns null if cast was not successfull.
+    /// </summary>
+    public BatchRun OptimizerAsBatchRun {
+      get { return Item as BatchRun; }
+    }
+
+    #region ITask Members
+    public override ExecutionState ExecutionState {
+      get { return Item.ExecutionState; }
+    }
+
+    public override TimeSpan ExecutionTime {
+      get { return Item.ExecutionTime; }
+    }
+
+    public override void Prepare() {
+      Item.Prepare();
+    }
+
+    public override void Start() {
+      if ((Item is Experiment && OptimizerAsExperiment.Optimizers.Count == 0) || // experiment would not fire OnStopped if it has 0 optimizers
+          (Item is BatchRun && OptimizerAsBatchRun.Optimizer == null)) { // batchrun would not fire OnStopped if algorithm == null
+        OnTaskStopped();
+      } else {
+        Item.Start();
+      }
+    }
+
+    public override void Pause() {
+      Item.Pause();
+    }
+
+    public override void Stop() {
+      Item.Stop();
+    }
+    #endregion
+
+    #region Optimizer Events
+    protected override void RegisterItemEvents() {
+      base.RegisterItemEvents();
+      Item.Stopped += new EventHandler(optimizer_Stopped);
+      Item.Paused += new EventHandler(optimizer_Paused);
+      Item.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(optimizer_ExceptionOccurred);
+      Item.DescriptionChanged += new EventHandler(optimizer_DescriptionChanged);
+      Item.NameChanged += new EventHandler(optimizer_NameChanged);
+      Item.NameChanging += new EventHandler<CancelEventArgs<string>>(optimizer_NameChanging);
+      Item.ExecutionStateChanged += new EventHandler(optimizer_ExecutionStateChanged);
+      Item.ExecutionTimeChanged += new EventHandler(optimizer_ExecutionTimeChanged);
+      Item.Started += new EventHandler(optimizer_Started);
+    }
+
+    protected virtual void DeregisterOptimizerEvents() {
+      Item.Stopped -= new EventHandler(optimizer_Stopped);
+      Item.Paused -= new EventHandler(optimizer_Paused);
+      Item.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(optimizer_ExceptionOccurred);
+      Item.DescriptionChanged -= new EventHandler(optimizer_DescriptionChanged);
+      Item.NameChanged -= new EventHandler(optimizer_NameChanged);
+      Item.NameChanging -= new EventHandler<CancelEventArgs<string>>(optimizer_NameChanging);
+      Item.ExecutionStateChanged -= new EventHandler(optimizer_ExecutionStateChanged);
+      Item.ExecutionTimeChanged -= new EventHandler(optimizer_ExecutionTimeChanged);
+      Item.Started -= new EventHandler(optimizer_Started);
+      base.DeregisterItemEvents();
+    }
+
+    protected void optimizer_NameChanging(object sender, CancelEventArgs<string> e) {
+      OnNameChanging(new CancelEventArgs<string>(e.Value, e.Cancel));
+    }
+
+    protected void optimizer_NameChanged(object sender, EventArgs e) {
+      this.OnNameChanged();
+    }
+
+    protected void optimizer_DescriptionChanged(object sender, EventArgs e) {
+      this.OnDescriptionChanged();
+    }
+
+    protected virtual void optimizer_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+      OnTaskFailed(e);
+    }
+
+    protected virtual void optimizer_Started(object sender, EventArgs e) {
+      OnTaskStarted();
+    }
+
+    protected virtual void optimizer_Stopped(object sender, EventArgs e) {
+      OnTaskStopped();
+    }
+
+    protected virtual void optimizer_Paused(object sender, EventArgs e) {
+      OnTaskPaused();
+    }
+
+    protected virtual void optimizer_ExecutionTimeChanged(object sender, EventArgs e) {
+      OnExecutionTimeChanged();
+    }
+
+    protected virtual void optimizer_ExecutionStateChanged(object sender, EventArgs e) {
+      OnExecutionStateChanged();
+    }
+    #endregion
+
+    #region INamedItem Members
+    public override bool CanChangeDescription {
+      get { return Item.CanChangeDescription; }
+    }
+
+    public override bool CanChangeName {
+      get { return Item.CanChangeName; }
+    }
+
+    public override string Description {
+      get { return Item.Description; }
+      set { Item.Description = value; }
+    }
+
+    public override string Name {
+      get { return Item.Name; }
+      set { Item.Name = value; }
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTree.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTree.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTree.cs	(revision 7085)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.Hive {
+  public interface IItemTree<T> : INamedItem, INotifyObservableCollectionItemsChanged<IItemTree<T>> where T : IItemTree<T> {
+    IEnumerable<IItemTree<T>> GetChildItems();
+    ICollection<IItemTreeNodeAction<T>> Actions { get; }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTreeAction.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTreeAction.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTreeAction.cs	(revision 7085)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+
+namespace HeuristicLab.Clients.Hive {
+  public interface IItemTreeNodeAction<T> where T : IItemTree<T> {
+    string Name { get; }
+    Image Image { get; }
+    void Execute(T item, T parentItem);
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Util/PersistenceUtil.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Util/PersistenceUtil.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Util/PersistenceUtil.cs	(revision 7085)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using HeuristicLab.Persistence.Core;
+using HeuristicLab.Persistence.Default.Xml;
+
+namespace HeuristicLab.Clients.Hive {
+  public static class PersistenceUtil {
+    public static byte[] Serialize(object obj, out IEnumerable<Type> types) {
+      MemoryStream memStream = new MemoryStream();
+      XmlGenerator.Serialize(obj, memStream, ConfigurationService.Instance.GetConfiguration(new XmlFormat()), false, out types);
+      byte[] jobByteArray = memStream.ToArray();
+      memStream.Dispose();
+      return jobByteArray;
+    }
+
+    public static byte[] Serialize(object obj) {
+      MemoryStream memStream = new MemoryStream();
+      XmlGenerator.Serialize(obj, memStream);
+      byte[] jobByteArray = memStream.ToArray();
+      memStream.Dispose();
+      return jobByteArray;
+    }
+
+    public static T Deserialize<T>(byte[] sjob) {
+      MemoryStream memStream = new MemoryStream(sjob);
+      T job = XmlParser.Deserialize<T>(memStream);
+      memStream.Dispose();
+      return job;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Util/PluginUtil.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Util/PluginUtil.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/Util/PluginUtil.cs	(revision 7085)
@@ -0,0 +1,142 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Security.Cryptography;
+using System.ServiceModel;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive {
+  public static class PluginUtil {
+
+    /// <summary>
+    /// Checks if plugins are available on Hive Server. If not they are uploaded. Ids are returned.
+    /// </summary>
+    /// <param name="service">An active service-proxy</param>
+    /// <param name="onlinePlugins">List of plugins which are available online</param>
+    /// <param name="alreadyUploadedPlugins">List of plugins which have been uploaded from this Task</param>
+    /// <param name="neededPlugins">List of plugins which need to be uploaded</param>
+    /// <returns></returns>
+    public static List<Guid> GetPluginDependencies(IHiveService service, List<Plugin> onlinePlugins, List<Plugin> alreadyUploadedPlugins, IEnumerable<IPluginDescription> neededPlugins) {
+      var pluginIds = new List<Guid>();
+      Dictionary<IPluginDescription, byte[]> checksumsNeededPlugins = CalcChecksumsForPlugins(neededPlugins);
+
+      foreach (var neededPlugin in checksumsNeededPlugins) {
+        Plugin foundPlugin = alreadyUploadedPlugins.FirstOrDefault(p => p.Hash.SequenceEqual(neededPlugin.Value));
+        if (foundPlugin == null) {
+          foundPlugin = onlinePlugins.FirstOrDefault(p => {
+            if (p.Hash != null) {
+              return p.Hash.SequenceEqual(neededPlugin.Value);
+            } else {
+              return false;
+            }
+          });
+
+          if (foundPlugin == null) {
+            Plugin p = CreatePlugin(neededPlugin.Key, neededPlugin.Value);
+            List<PluginData> pd = CreatePluginDatas(neededPlugin.Key);
+            try {
+              p.Id = service.AddPlugin(p, pd);
+              alreadyUploadedPlugins.Add(p);
+              pluginIds.Add(p.Id);
+            }
+            catch (FaultException<PluginAlreadyExistsFault> fault) {
+              onlinePlugins.Add(service.GetPlugin(fault.Detail.Id));
+            }
+          } else {
+            pluginIds.Add(foundPlugin.Id);
+          }
+        } else {
+          pluginIds.Add(foundPlugin.Id);
+        }
+      }
+      return pluginIds;
+    }
+
+    private static Plugin CreatePlugin(IPluginDescription plugin, byte[] hash) {
+      return new Plugin() { Name = plugin.Name, Version = plugin.Version, Hash = hash };
+    }
+
+    public static Plugin CreatePlugin(IPluginDescription plugin) {
+      return new Plugin() { Name = plugin.Name, Version = plugin.Version };
+    }
+
+    public static List<PluginData> CreatePluginDatas(IPluginDescription plugin) {
+      List<PluginData> pluginDatas = new List<PluginData>();
+
+      foreach (IPluginFile pf in plugin.Files) {
+        PluginData pluginData = new PluginData();
+
+        pluginData.Data = File.ReadAllBytes(pf.Name);
+        pluginData.FileName = Path.GetFileName(pf.Name);
+        pluginDatas.Add(pluginData);
+      }
+      return pluginDatas;
+    }
+
+    public static void CollectDeclaringPlugins(List<IPluginDescription> plugins, IEnumerable<Type> usedTypes) {
+      foreach (Type type in usedTypes) {
+        var plugin = ApplicationManager.Manager.GetDeclaringPlugin(type);
+        if (plugin != null && !plugins.Contains(plugin)) {
+          plugins.Add(plugin);
+          CollectPluginDependencies(plugins, plugin);
+        }
+      }
+    }
+
+    public static void CollectPluginDependencies(List<IPluginDescription> plugins, IPluginDescription plugin) {
+      if (plugin == null) return;
+      foreach (var dependency in plugin.Dependencies) {
+        if (!plugins.Contains(dependency)) {
+          plugins.Add(dependency);
+          CollectPluginDependencies(plugins, dependency);
+        }
+      }
+    }
+
+    private static Dictionary<IPluginDescription, byte[]> CalcChecksumsForPlugins(IEnumerable<IPluginDescription> neededPlugins) {
+      Dictionary<IPluginDescription, byte[]> pluginChecksums = new Dictionary<IPluginDescription, byte[]>();
+
+      foreach (IPluginDescription desc in neededPlugins) {
+        byte[] hash;
+        byte[] buffer = new byte[0];
+
+        //calculate checksum over all files belonging to a plugin
+        foreach (IPluginFile pf in desc.Files) {
+          byte[] tmpBuffer = File.ReadAllBytes(pf.Name);
+          byte[] newBuffer = new byte[buffer.Length + tmpBuffer.Length];
+          Array.Copy(buffer, newBuffer, buffer.Length);
+          Array.Copy(tmpBuffer, 0, newBuffer, buffer.Length, tmpBuffer.Length);
+          buffer = newBuffer;
+        }
+
+        using (SHA1 sha1 = SHA1.Create()) {
+          hash = sha1.ComputeHash(buffer);
+        }
+        pluginChecksums.Add(desc, hash);
+      }
+      return pluginChecksums;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/app.config
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/app.config	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Clients.Hive/3.3/app.config	(revision 7085)
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<configuration>
+  <configSections>
+    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+      <section name="HeuristicLab.Clients.Hive.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+    </sectionGroup>
+  </configSections>
+  <applicationSettings>
+    <HeuristicLab.Clients.Hive.Settings>
+      <setting name="MaxParallelUploads" serializeAs="String">
+        <value>4</value>
+      </setting>
+      <setting name="HLBinaryName" serializeAs="String">
+        <value>HeuristicLab 3.3.exe</value>
+      </setting>
+      <setting name="ResultPollingInterval" serializeAs="String">
+        <value>00:00:10</value>
+      </setting>
+      <setting name="MaxParallelDownloads" serializeAs="String">
+        <value>2</value>
+      </setting>
+    </HeuristicLab.Clients.Hive.Settings>
+  </applicationSettings>
+  <system.serviceModel>
+    <behaviors>
+      <endpointBehaviors>
+        <behavior name="HiveBehaviorConfiguration">
+          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
+        </behavior>
+      </endpointBehaviors>
+    </behaviors>
+    <bindings>
+      <wsHttpBinding>
+        <binding name="wsHttpBinding_Hive"
+                 closeTimeout="00:01:00"
+                 openTimeout="00:01:00"
+                 receiveTimeout="00:20:00"
+                 sendTimeout="00:20:00"
+                 bypassProxyOnLocal="false"
+                 transactionFlow="false"
+                 hostNameComparisonMode="StrongWildcard"
+                 maxBufferPoolSize="2147483647"
+                 maxReceivedMessageSize="2147483647"
+                 messageEncoding="Text"
+                 textEncoding="utf-8"
+                 useDefaultWebProxy="true"
+                 allowCookies="false">
+
+          <readerQuotas maxDepth="2147483647"
+                        maxStringContentLength="2147483647"
+                        maxArrayLength="2147483647"
+                        maxBytesPerRead="2147483647"
+                        maxNameTableCharCount="2147483647"/>
+          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
+          <security mode="Message">
+            <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
+            <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default"/>
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+    <client>
+      <endpoint address="http://services.heuristiclab.com/Hive-3.3/HiveService.svc" binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_Hive" contract="HeuristicLab.Clients.Hive.IHiveService" name="wsHttpBinding_IHiveService" behaviorConfiguration="HiveBehaviorConfiguration">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ=="/>
+        </identity>
+      </endpoint>
+    </client>
+  </system.serviceModel>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
+  </startup>
+</configuration>
Index: /branches/RegressionBenchmarks/HeuristicLab.CodeEditor/3.3/HeuristicLab.CodeEditor-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.CodeEditor/3.3/HeuristicLab.CodeEditor-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.CodeEditor/3.3/HeuristicLab.CodeEditor-3.3.csproj	(revision 7085)
@@ -116,17 +116,21 @@
     <Reference Include="ICSharpCode.NRefactory, Version=3.1.1.5327, Culture=neutral, PublicKeyToken=efe927acf176eea2, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\HeuristicLab.ExtLibs\HeuristicLab.SharpDevelop\3.1.1.5327\ICSharpCode.NRefactory.dll</HintPath>
+      <HintPath>..\..\bin\ICSharpCode.NRefactory.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="ICSharpCode.SharpDevelop.Dom, Version=3.1.1.5327, Culture=neutral, PublicKeyToken=f829da5c02be14ee, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\HeuristicLab.ExtLibs\HeuristicLab.SharpDevelop\3.1.1.5327\ICSharpCode.SharpDevelop.Dom.dll</HintPath>
+      <HintPath>..\..\bin\ICSharpCode.SharpDevelop.Dom.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="ICSharpCode.TextEditor, Version=3.1.1.5327, Culture=neutral, PublicKeyToken=4d61825e8dd49f1a, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\HeuristicLab.ExtLibs\HeuristicLab.SharpDevelop\3.1.1.5327\ICSharpCode.TextEditor.dll</HintPath>
+      <HintPath>..\..\bin\ICSharpCode.TextEditor.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="Mono.Cecil, Version=0.6.9.1, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\HeuristicLab.ExtLibs\HeuristicLab.SharpDevelop\3.1.1.5327\Mono.Cecil.dll</HintPath>
+      <HintPath>..\..\bin\Mono.Cecil.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 7085)
@@ -124,4 +124,5 @@
     <Compile Include="Content\IStorableContent.cs" />
     <Compile Include="Constants.cs" />
+    <Compile Include="NaturalStringComparer.cs" />
     <Compile Include="ObjectExtensions.cs" />
     <Compile Include="DeepCloneable.cs" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Common/3.3/NaturalStringComparer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Common/3.3/NaturalStringComparer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Common/3.3/NaturalStringComparer.cs	(revision 7085)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+
+namespace HeuristicLab.Common {
+  public class NaturalStringComparer : IComparer<string> {
+    public int Compare(string x, string y) {
+      if (x == y) return 0;
+
+      string[] first = Regex.Split(x, "([0-9]+)");
+      string[] second = Regex.Split(y, "([0-9]+)");
+
+      for (int i = 0; i < first.Length && i < second.Length; i++) {
+        if (first[i] != second[i]) return CompareWithParsing(first[i], second[i]);
+      }
+
+      if (first.Length < second.Length) return -1;
+      if (second.Length < first.Length) return 1;
+      return 0;
+    }
+
+    private int CompareWithParsing(string x, string y) {
+      int first, second;
+      if (int.TryParse(x, out first) && int.TryParse(y, out second))
+        return first.CompareTo(second);
+      return x.CompareTo(y);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj	(revision 7085)
@@ -93,8 +93,4 @@
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86" />
-    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86" />
-    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86" />
-    <Reference Include="HeuristicLab.Visualization.ChartControlsExtensions-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86" />
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -135,4 +131,14 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
       <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
@@ -180,7 +186,17 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
       <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Visualization.ChartControlsExtensions\3.3\HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj">
+      <Project>{315BDA09-3F4F-49B3-9790-B37CFC1C5750}</Project>
+      <Name>HeuristicLab.Visualization.ChartControlsExtensions-3.3</Name>
       <Private>False</Private>
     </ProjectReference>
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationTypeView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationTypeView.Designer.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationTypeView.Designer.cs	(revision 7085)
@@ -54,7 +54,7 @@
       this.valueLabel.Location = new System.Drawing.Point(3, 3);
       this.valueLabel.Name = "valueLabel";
-      this.valueLabel.Size = new System.Drawing.Size(37, 13);
+      this.valueLabel.Size = new System.Drawing.Size(34, 13);
       this.valueLabel.TabIndex = 0;
-      this.valueLabel.Text = "&Value:";
+      this.valueLabel.Text = "&Type:";
       // 
       // valueComboBox
@@ -71,5 +71,5 @@
       this.valueComboBox.SelectedIndexChanged += new System.EventHandler(this.valueComboBox_SelectedIndexChanged);
       // 
-      // ComparisonView
+      // PermutationTypeView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -77,5 +77,5 @@
       this.Controls.Add(this.valueComboBox);
       this.Controls.Add(this.valueLabel);
-      this.Name = "ComparisonView";
+      this.Name = "PermutationTypeView";
       this.Size = new System.Drawing.Size(265, 29);
       this.ResumeLayout(false);
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.Designer.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.Designer.cs	(revision 7085)
@@ -72,7 +72,7 @@
       this.Controls.Add(this.permutationTypeView);
       this.Name = "PermutationView";
-      this.Controls.SetChildIndex(this.permutationTypeView, 0);
       this.Controls.SetChildIndex(this.lengthLabel, 0);
       this.Controls.SetChildIndex(this.lengthTextBox, 0);
+      this.Controls.SetChildIndex(this.permutationTypeView, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.ResumeLayout(false);
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.cs	(revision 7085)
@@ -37,4 +37,5 @@
       InitializeComponent();
       dataGridView.Top = permutationTypeView.Bottom + permutationTypeView.Margin.Bottom + dataGridView.Margin.Top;
+      dataGridView.Height = Bottom - dataGridView.Top;
     }
 
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.RealVectorEncoding/3.3/ParticleOperators/RealVectorSwarmUpdater.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.RealVectorEncoding/3.3/ParticleOperators/RealVectorSwarmUpdater.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.RealVectorEncoding/3.3/ParticleOperators/RealVectorSwarmUpdater.cs	(revision 7085)
@@ -66,6 +66,6 @@
       get { return (ILookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public ILookupParameter<DoubleValue> BestQualityParameter {
-      get { return (ILookupParameter<DoubleValue>)Parameters["BestQuality"]; }
+    public ILookupParameter<DoubleValue> SwarmBestQualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["SwarmBestQuality"]; }
     }
     public ILookupParameter<RealVector> BestRealVectorParameter {
@@ -112,7 +112,7 @@
 
     #region Parameter values
-    private DoubleValue BestQuality {
-      get { return BestQualityParameter.ActualValue; }
-      set { BestQualityParameter.ActualValue = value; }
+    private DoubleValue SwarmBestQuality {
+      get { return SwarmBestQualityParameter.ActualValue; }
+      set { SwarmBestQualityParameter.ActualValue = value; }
     }
     private RealVector BestRealVector {
@@ -180,12 +180,12 @@
     public RealVectorSwarmUpdater()
       : base() {
-      Parameters.Add(new LookupParameter<DoubleValue>("BestQuality", "Overall best quality."));
-      Parameters.Add(new LookupParameter<RealVector>("BestRealVector", "Global best particle position"));
-      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "Particle's quality"));
-      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("PersonalBestQuality", "Particle's personal best quality"));
-      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("NeighborBestQuality", "Global best particle quality"));
-      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("RealVector", "Particle's position"));
-      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("PersonalBest", "Particle's personal best position"));
-      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("NeighborBest", "Neighborhood (or global in case of totally connected neighborhood) best particle position"));
+      Parameters.Add(new LookupParameter<DoubleValue>("SwarmBestQuality", "Swarm's best quality."));
+      Parameters.Add(new LookupParameter<RealVector>("BestRealVector", "Global best particle position."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "Particles' qualities."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("PersonalBestQuality", "Particles' personal best qualities."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("NeighborBestQuality", "Best neighbor particles' qualities."));
+      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("RealVector", "Particles' positions."));
+      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("PersonalBest", "Particles' personal best positions."));
+      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("NeighborBest", "Neighborhood (or global in case of totally connected neighborhood) best particle positions."));
       Parameters.Add(new ScopeTreeLookupParameter<IntArray>("Neighbors", "The list of neighbors for each particle."));
       Parameters.Add(new LookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
@@ -217,4 +217,15 @@
 
     [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!Parameters.ContainsKey("SwarmBestQuality")) {
+        ILookupParameter<DoubleValue> oldBestQualityParameter = Parameters["BestQuality"] as ILookupParameter<DoubleValue>;
+        Parameters.Add(new LookupParameter<DoubleValue>("SwarmBestQuality", "Swarm's best quality."));
+        if (oldBestQualityParameter.ActualName != oldBestQualityParameter.Name)
+          SwarmBestQualityParameter.ActualName = oldBestQualityParameter.ActualName;
+        Parameters.Remove("BestQuality");
+      }
+      RegisterEvents();
+    }
+
     private void RegisterEvents() {
       VelocityBoundsStartValueParameter.ValueChanged += new EventHandler(VelocityBoundsStartValueParameter_ValueChanged);
@@ -273,8 +284,8 @@
 
     private void UpdateGlobalBest() {
-      if (BestQuality == null)
-        BestQuality = new DoubleValue();
-      BestQuality.Value = Maximization ? Quality.Max(v => v.Value) : Quality.Min(v => v.Value);
-      BestRealVector = (RealVector)RealVector[Quality.FindIndex(v => v.Value == BestQuality.Value)].Clone();
+      if (SwarmBestQuality == null)
+        SwarmBestQuality = new DoubleValue();
+      SwarmBestQuality.Value = Maximization ? Quality.Max(v => v.Value) : Quality.Min(v => v.Value);
+      BestRealVector = (RealVector)RealVector[Quality.FindIndex(v => v.Value == SwarmBestQuality.Value)].Clone();
     }
 
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarAllowedChildSymbolsControl.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarAllowedChildSymbolsControl.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarAllowedChildSymbolsControl.cs	(revision 7085)
@@ -96,6 +96,8 @@
         for (int i = 0; i < Grammar.GetMaximumSubtreeCount(Symbol); i++) {
           var node = new DummySymbol("Subtree " + i).CreateTreeNode();
+          var groupSymbols = grammar.GetAllowedChildSymbols(Symbol, i).OfType<GroupSymbol>().ToList();
           foreach (var childSymbol in Grammar.GetAllowedChildSymbols(Symbol, i)) {
-            node.AddSubtree(new SymbolicExpressionTreeNode(childSymbol));
+            if (!groupSymbols.Any(g => g != childSymbol && g.Flatten().Contains(childSymbol)))
+              node.AddSubtree(new SymbolicExpressionTreeNode(childSymbol));
           }
           tree.Root.AddSubtree(node);
@@ -192,5 +194,4 @@
           var node = visualNode.SymbolicExpressionTreeNode;
           var root = symbolicExpressionTreeChart.Tree.Root;
-          if (root.Symbol is ProgramRootSymbol) return;
           if (node == root || node.Parent == root) e.Effect = DragDropEffects.Copy;
         }
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarEditorView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarEditorView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarEditorView.cs	(revision 7085)
@@ -129,4 +129,7 @@
     private void UpdateChildTreeNodes(TreeNodeCollection collection, IEnumerable<ISymbol> symbols) {
       foreach (ISymbol symbol in symbols) {
+        if (symbol is ProgramRootSymbol) continue;
+        if (symbol is Defun) continue;
+
         TreeNode node = collection.Cast<TreeNode>().Where(n => n.Tag == symbol).FirstOrDefault();
         if (node == null) {
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.Designer.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.Designer.cs	(revision 7085)
@@ -52,4 +52,6 @@
       this.maxTreeDepthTextBox = new System.Windows.Forms.TextBox();
       this.generateSampleTreeButton = new System.Windows.Forms.Button();
+      this.treeCreatorComboBox = new System.Windows.Forms.ComboBox();
+      this.treeCreatorLabel = new System.Windows.Forms.Label();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.sampleTreeGroupBox.SuspendLayout();
@@ -69,11 +71,11 @@
       // sampleTreeGroupBox
       // 
-      this.sampleTreeGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
+      this.sampleTreeGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
       this.sampleTreeGroupBox.Controls.Add(this.sampleTreeView);
-      this.sampleTreeGroupBox.Location = new System.Drawing.Point(3, 107);
+      this.sampleTreeGroupBox.Location = new System.Drawing.Point(3, 134);
       this.sampleTreeGroupBox.Name = "sampleTreeGroupBox";
-      this.sampleTreeGroupBox.Size = new System.Drawing.Size(431, 292);
+      this.sampleTreeGroupBox.Size = new System.Drawing.Size(431, 265);
       this.sampleTreeGroupBox.TabIndex = 3;
       this.sampleTreeGroupBox.TabStop = false;
@@ -89,5 +91,5 @@
       this.sampleTreeView.Name = "sampleTreeView";
       this.sampleTreeView.ReadOnly = false;
-      this.sampleTreeView.Size = new System.Drawing.Size(425, 273);
+      this.sampleTreeView.Size = new System.Drawing.Size(425, 246);
       this.sampleTreeView.TabIndex = 0;
       // 
@@ -112,6 +114,6 @@
       // maxTreeLengthTextBox
       // 
-      this.maxTreeLengthTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
+      this.maxTreeLengthTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
       this.maxTreeLengthTextBox.Location = new System.Drawing.Point(93, 26);
       this.maxTreeLengthTextBox.Name = "maxTreeLengthTextBox";
@@ -124,6 +126,6 @@
       // maxTreeDepthTextBox
       // 
-      this.maxTreeDepthTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
+      this.maxTreeDepthTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
       this.maxTreeDepthTextBox.Location = new System.Drawing.Point(93, 52);
       this.maxTreeDepthTextBox.Name = "maxTreeDepthTextBox";
@@ -136,7 +138,7 @@
       // generateSampleTreeButton
       // 
-      this.generateSampleTreeButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.generateSampleTreeButton.Location = new System.Drawing.Point(3, 78);
+      this.generateSampleTreeButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.generateSampleTreeButton.Location = new System.Drawing.Point(6, 105);
       this.generateSampleTreeButton.Name = "generateSampleTreeButton";
       this.generateSampleTreeButton.Size = new System.Drawing.Size(431, 23);
@@ -146,11 +148,34 @@
       this.generateSampleTreeButton.Click += new System.EventHandler(this.generateSampleTreeButton_Click);
       // 
+      // treeCreatorComboBox
+      // 
+      this.treeCreatorComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.treeCreatorComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.treeCreatorComboBox.FormattingEnabled = true;
+      this.treeCreatorComboBox.Location = new System.Drawing.Point(93, 78);
+      this.treeCreatorComboBox.Name = "treeCreatorComboBox";
+      this.treeCreatorComboBox.Size = new System.Drawing.Size(341, 21);
+      this.treeCreatorComboBox.TabIndex = 9;
+      this.treeCreatorComboBox.SelectedIndexChanged += new System.EventHandler(this.treeCreatorComboBox_SelectedIndexChanged);
+      // 
+      // treeCreatorLabel
+      // 
+      this.treeCreatorLabel.AutoSize = true;
+      this.treeCreatorLabel.Location = new System.Drawing.Point(3, 81);
+      this.treeCreatorLabel.Name = "treeCreatorLabel";
+      this.treeCreatorLabel.Size = new System.Drawing.Size(69, 13);
+      this.treeCreatorLabel.TabIndex = 10;
+      this.treeCreatorLabel.Text = "Tree Creator:";
+      // 
       // SymbolicExpressionGrammarSampleExpressionTreeView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.treeCreatorLabel);
       this.Controls.Add(this.sampleTreeGroupBox);
       this.Controls.Add(this.maxTreeDepthLabel);
       this.Controls.Add(this.maxTreeLengthTextBox);
+      this.Controls.Add(this.treeCreatorComboBox);
       this.Controls.Add(this.maxTreeLengthLabel);
       this.Controls.Add(this.maxTreeDepthTextBox);
@@ -161,7 +186,9 @@
       this.Controls.SetChildIndex(this.maxTreeDepthTextBox, 0);
       this.Controls.SetChildIndex(this.maxTreeLengthLabel, 0);
+      this.Controls.SetChildIndex(this.treeCreatorComboBox, 0);
       this.Controls.SetChildIndex(this.maxTreeLengthTextBox, 0);
       this.Controls.SetChildIndex(this.maxTreeDepthLabel, 0);
       this.Controls.SetChildIndex(this.sampleTreeGroupBox, 0);
+      this.Controls.SetChildIndex(this.treeCreatorLabel, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
       this.Controls.SetChildIndex(this.infoLabel, 0);
@@ -183,4 +210,6 @@
     private System.Windows.Forms.Button generateSampleTreeButton;
     private GraphicalSymbolicExpressionTreeView sampleTreeView;
+    private System.Windows.Forms.ComboBox treeCreatorComboBox;
+    private System.Windows.Forms.Label treeCreatorLabel;
   }
 }
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.cs	(revision 7085)
@@ -39,4 +39,8 @@
       maxSampleTreeLength = int.Parse(maxTreeLengthTextBox.Text);
       maxSampleTreeDepth = int.Parse(maxTreeDepthTextBox.Text);
+      foreach (var treeCreator in ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeCreator>()) {
+        treeCreatorComboBox.Items.Add(treeCreator);
+      }
+      treeCreatorComboBox.SelectedIndex = 0;
     }
 
@@ -97,5 +101,6 @@
     private void UpdateSampleTreeView() {
       try {
-        ISymbolicExpressionTree tree = ProbabilisticTreeCreator.Create(random, Content, MaxSampleTreeLength, MaxSampleTreeDepth);
+        ISymbolicExpressionTreeCreator creator = (ISymbolicExpressionTreeCreator)treeCreatorComboBox.SelectedItem;
+        ISymbolicExpressionTree tree = creator.CreateTree(random, Content, MaxSampleTreeLength, MaxSampleTreeDepth);
         foreach (var node in tree.Root.IterateNodesPrefix().OfType<SymbolicExpressionTreeTopLevelNode>())
           node.SetGrammar(null);
@@ -147,4 +152,7 @@
     }
     #endregion
+
+    private void treeCreatorComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+    }
   }
 }
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Analyzers/SymbolicExpressionTreeLengthAnalyzer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Analyzers/SymbolicExpressionTreeLengthAnalyzer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Analyzers/SymbolicExpressionTreeLengthAnalyzer.cs	(revision 7085)
@@ -0,0 +1,241 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using HeuristicLab.Analysis;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
+  /// <summary>
+  /// An operator that tracks tree lengths of Symbolic Expression Trees
+  /// </summary>
+  [Item("SymbolicExpressionTreeLengthAnalyzer", "An operator that tracks tree lengths of Symbolic Expression Trees")]
+  [StorableClass]
+  public sealed class SymbolicExpressionTreeLengthAnalyzer : SingleSuccessorOperator, ISymbolicExpressionTreeAnalyzer {
+    private const string SymbolicExpressionTreeParameterName = "SymbolicExpressionTree";
+    private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
+    private const string SymbolicExpressionTreeLengthsParameterName = "SymbolicExpressionTreeLengthsTable";
+    private const string SymbolicExpressionTreeLengthsHistoryParameterName = "SymbolicExpressionTreeLengthsHistoryTable";
+    private const string ResultsParameterName = "Results";
+    private const string StoreHistoryParameterName = "StoreHistory";
+    private const string UpdateIntervalParameterName = "UpdateInterval";
+    private const string UpdateCounterParameterName = "UpdateCounter";
+
+    #region Parameter properties
+    public IScopeTreeLookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter {
+      get { return (IScopeTreeLookupParameter<ISymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName]; }
+    }
+    public ValueLookupParameter<DataTable> SymbolicExpressionTreeLengthsParameter {
+      get {
+        return (ValueLookupParameter<DataTable>)Parameters[SymbolicExpressionTreeLengthsParameterName];
+      }
+    }
+    public ValueLookupParameter<DataTableHistory> SymbolicExpressionTreeLengthsHistoryParameter {
+      get {
+        return (ValueLookupParameter<DataTableHistory>)Parameters[SymbolicExpressionTreeLengthsHistoryParameterName];
+      }
+    }
+    public ValueLookupParameter<ResultCollection> ResultsParameter {
+      get { return (ValueLookupParameter<ResultCollection>)Parameters[ResultsParameterName]; }
+    }
+    // history
+    public ValueParameter<BoolValue> StoreHistoryParameter {
+      get { return (ValueParameter<BoolValue>)Parameters[StoreHistoryParameterName]; }
+    }
+    public ValueParameter<IntValue> UpdateIntervalParameter {
+      get { return (ValueParameter<IntValue>)Parameters[UpdateIntervalParameterName]; }
+    }
+    public LookupParameter<IntValue> UpdateCounterParameter {
+      get { return (LookupParameter<IntValue>)Parameters[UpdateCounterParameterName]; }
+    }
+    #endregion
+    [StorableConstructor]
+    private SymbolicExpressionTreeLengthAnalyzer(bool deserializing) : base() { }
+    private SymbolicExpressionTreeLengthAnalyzer(SymbolicExpressionTreeLengthAnalyzer original, Cloner cloner)
+      : base(original, cloner) {
+      AfterDeserialization();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SymbolicExpressionTreeLengthAnalyzer(this, cloner);
+    }
+    public SymbolicExpressionTreeLengthAnalyzer()
+      : base() {
+      Parameters.Add(new ScopeTreeLookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression tree whose length should be calculated."));
+      Parameters.Add(new LookupParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, "The maximum allowed symbolic expression tree length"));
+      Parameters.Add(new ValueLookupParameter<DataTable>(SymbolicExpressionTreeLengthsParameterName, "The data table to store the symbolic expression tree lengths."));
+      Parameters.Add(new ValueLookupParameter<DataTableHistory>(SymbolicExpressionTreeLengthsHistoryParameterName, "The data table to store the symbolic expression tree lengths history."));
+      Parameters.Add(new ValueLookupParameter<ResultCollection>(ResultsParameterName, "The results collection where the analysis values should be stored."));
+
+      #region Add parameters for history
+      Parameters.Add(new ValueParameter<BoolValue>(StoreHistoryParameterName, "True if the tree lengths history of the population should be stored.", new BoolValue(false)));
+      Parameters.Add(new ValueParameter<IntValue>(UpdateIntervalParameterName, "The interval in which the tree length analysis should be applied.", new IntValue(1)));
+      Parameters.Add(new LookupParameter<IntValue>(UpdateCounterParameterName, "The value which counts how many times the operator was called since the last update", "MinMaxAverageSymbolicExpressionTreeLengthAnalyzerUpdateCounter"));
+      #endregion
+
+      UpdateCounterParameter.Hidden = true;
+
+      AfterDeserialization();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // check if all the parameters are present and accounted for 
+      if (!Parameters.ContainsKey(StoreHistoryParameterName)) {
+        Parameters.Add(new ValueParameter<BoolValue>(StoreHistoryParameterName, "True if the tree lengths history of the population should be stored.", new BoolValue(false)));
+      }
+      if (!Parameters.ContainsKey(UpdateIntervalParameterName)) {
+        Parameters.Add(new ValueParameter<IntValue>(UpdateIntervalParameterName, "The interval in which the tree length analysis should be applied.", new IntValue(1)));
+      }
+      if (!Parameters.ContainsKey(UpdateCounterParameterName)) {
+        Parameters.Add(new LookupParameter<IntValue>(UpdateCounterParameterName, "The value which counts how many times the operator was called since the last update", "MinMaxAverageSymbolicExpressionTreeLengthAnalyzerUpdateCounter"));
+      }
+    }
+
+    public override IOperation Apply() {
+      int updateInterval = UpdateIntervalParameter.Value.Value;
+      IntValue updateCounter = UpdateCounterParameter.ActualValue;
+      // if the counter doesn't exist yet, we initialize it here with the current update interval
+      if (updateCounter == null) {
+        updateCounter = new IntValue(updateInterval);
+        UpdateCounterParameter.ActualValue = updateCounter;
+      } else updateCounter.Value++;
+
+      // the analyzer runs periodically, every 'updateInterval' times
+      if (updateCounter.Value == updateInterval) {
+        updateCounter.Value = 0; // reset counter
+
+        // compute all tree lengths and store them in the lengthsTable
+        var solutions = SymbolicExpressionTreeParameter.ActualValue;
+
+        var treeLengthsTable = SymbolicExpressionTreeLengthsParameter.ActualValue;
+        // if the table was not created yet, we create it here
+        if (treeLengthsTable == null) {
+          treeLengthsTable = new DataTable("Tree Length Values");
+          SymbolicExpressionTreeLengthsParameter.ActualValue = treeLengthsTable;
+        }
+
+        // data table which stores tree length values
+        DataRow dataRow;
+
+        var treeLengths = solutions.Select(s => (double)s.Length);
+
+        if (!treeLengthsTable.Rows.ContainsKey("Tree Lengths")) {
+          dataRow = new DataRow("Tree Lengths", "", treeLengths);
+          treeLengthsTable.Rows.Add(dataRow);
+        } else {
+          dataRow = treeLengthsTable.Rows["Tree Lengths"];
+          dataRow.Values.Replace(treeLengths);
+        }
+
+        double maximumAllowedTreeLength = ((LookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]).ActualValue.Value;
+
+        dataRow.VisualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Histogram;
+        dataRow.VisualProperties.ExactBins = false;
+
+        // the following trick should result in an intervalWidth of 1,2,4,... (an int value)
+        dataRow.VisualProperties.Bins = solutions.Max(s => s.Length) - solutions.Min(s => s.Length);
+
+        int maxLength = solutions.Max(s => s.Length);
+        if (maxLength <= 25)      // [0,25]
+          dataRow.VisualProperties.ScaleFactor = 1.0;
+        else if (maxLength <= 100) // [26,100])
+          dataRow.VisualProperties.ScaleFactor = 1.0 / 2.0;
+        else if (maxLength <= 250) // [100,250]
+          dataRow.VisualProperties.ScaleFactor = 1.0 / 5.0;
+        else if (maxLength <= 500) // [251,500]
+          dataRow.VisualProperties.ScaleFactor = 1.0 / 10.0;
+        else
+          dataRow.VisualProperties.ScaleFactor = 1.0 / 20.0;   // [501,inf]
+
+        // visual properties for the X-axis
+        treeLengthsTable.VisualProperties.XAxisMinimumAuto = false;
+        treeLengthsTable.VisualProperties.XAxisMaximumAuto = false;
+        treeLengthsTable.VisualProperties.XAxisMinimumFixedValue = 0.0;
+        if (maxLength > maximumAllowedTreeLength + 1)
+          treeLengthsTable.VisualProperties.XAxisMaximumFixedValue = solutions.Max(s => s.Length) + 1; // +1 so the histogram column for the maximum length won't get trimmed
+        else
+          treeLengthsTable.VisualProperties.XAxisMaximumFixedValue = maximumAllowedTreeLength + 1;
+        // visual properties for the Y-axis
+        treeLengthsTable.VisualProperties.YAxisMinimumAuto = false;
+        treeLengthsTable.VisualProperties.YAxisMaximumAuto = false;
+        treeLengthsTable.VisualProperties.YAxisMinimumFixedValue = 0.0;
+        treeLengthsTable.VisualProperties.YAxisMaximumFixedValue = Math.Ceiling(solutions.Length / 2.0);
+
+        var results = ResultsParameter.ActualValue;
+
+        if (!results.ContainsKey("Tree Lengths")) {
+          results.Add(new Result("Tree Lengths", treeLengthsTable));
+        } else {
+          results["Tree Lengths"].Value = treeLengthsTable;
+        }
+
+        bool storeHistory = StoreHistoryParameter.Value.Value;
+
+        if (storeHistory) {
+          // store tree lengths for each generation
+          var historyDataRow = new DataRow("Tree Lengths " + results["Generations"].Value, "", dataRow.Values);
+          historyDataRow.VisualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Histogram;
+          historyDataRow.VisualProperties.ExactBins = false;
+          historyDataRow.VisualProperties.Bins = solutions.Max(s => s.Length) - solutions.Min(s => s.Length);
+          historyDataRow.VisualProperties.ScaleFactor = dataRow.VisualProperties.ScaleFactor;
+          var historyTable = new DataTable("Lengths Table " + results["Generations"]);
+          historyTable.Rows.Add(historyDataRow);
+          // visual properties for the X-axis
+          historyTable.VisualProperties.XAxisMinimumAuto = false;
+          historyTable.VisualProperties.XAxisMaximumAuto = false;
+          historyTable.VisualProperties.XAxisMinimumFixedValue = 0.0;
+          if (solutions.Max(s => s.Length) > maximumAllowedTreeLength + 1)
+            historyTable.VisualProperties.XAxisMaximumFixedValue = maxLength + 1; // +1 so the histogram column for the maximum length won't get trimmed
+          else
+            historyTable.VisualProperties.XAxisMaximumFixedValue = maximumAllowedTreeLength + 1;
+          // visual properties for the Y-axis
+          historyTable.VisualProperties.YAxisMinimumAuto = false;
+          historyTable.VisualProperties.YAxisMaximumAuto = false;
+          historyTable.VisualProperties.YAxisMinimumFixedValue = 0.0;
+          historyTable.VisualProperties.YAxisMaximumFixedValue = Math.Ceiling(solutions.Length / 2.0);
+
+          var treeLengthsHistory = SymbolicExpressionTreeLengthsHistoryParameter.ActualValue;
+          if (treeLengthsHistory == null) {
+            treeLengthsHistory = new DataTableHistory();
+            SymbolicExpressionTreeLengthsHistoryParameter.ActualValue = treeLengthsHistory;
+          }
+
+          treeLengthsHistory.Add(historyTable);
+
+          if (!results.ContainsKey("Tree Lengths History")) {
+            results.Add(new Result("Tree Lengths History", treeLengthsHistory));
+          } else {
+            results["Tree Lengths History"].Value = treeLengthsHistory;
+          }
+        }
+      }
+
+      return base.Apply();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/MultiSymbolicExpressionTreeArchitectureManipulator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/MultiSymbolicExpressionTreeArchitectureManipulator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/MultiSymbolicExpressionTreeArchitectureManipulator.cs	(revision 7085)
@@ -98,6 +98,7 @@
       List<ISymbolicExpressionTreeManipulator> list = new List<ISymbolicExpressionTreeManipulator>();
       foreach (Type type in ApplicationManager.Manager.GetTypes(typeof(ISymbolicExpressionTreeManipulator))) {
-        if (!typeof(IMultiOperator<ISymbolicExpressionTreeManipulator>).IsAssignableFrom(type))
-          list.Add((ISymbolicExpressionTreeManipulator)Activator.CreateInstance(type));
+        if (this.GetType().Assembly != type.Assembly) continue;
+        if (typeof(IMultiOperator<ISymbolicExpressionTreeManipulator>).IsAssignableFrom(type)) continue;
+        list.Add((ISymbolicExpressionTreeManipulator)Activator.CreateInstance(type));
       }
       CheckedItemList<ISymbolicExpressionTreeManipulator> checkedItemList = new CheckedItemList<ISymbolicExpressionTreeManipulator>();
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/FullTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/FullTreeCreator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/FullTreeCreator.cs	(revision 7085)
@@ -27,6 +27,8 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
+  [NonDiscoverableType]
   [StorableClass]
   [Item("FullTreeCreator", "An operator that creates new symbolic expression trees using the 'Full' method")]
@@ -60,4 +62,8 @@
     public IntValue MaximumSymbolicExpressionTreeDepth {
       get { return MaximumSymbolicExpressionTreeDepthParameter.ActualValue; }
+    }
+
+    public IntValue MaximumSymbolicExpressionTreeLength {
+      get { return MaximumSymbolicExpressionTreeLengthParameter.ActualValue; }
     }
 
@@ -97,5 +103,9 @@
 
     protected override ISymbolicExpressionTree Create(IRandom random) {
-      return Create(random, SymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeDepth.Value);
+      return Create(random, SymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value);
+    }
+
+    public override ISymbolicExpressionTree CreateTree(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth) {
+      return Create(random, grammar, maxTreeLength, maxTreeDepth);
     }
 
@@ -108,6 +118,7 @@
     /// <param name="grammar">Available tree grammar</param>
     /// <param name="maxTreeDepth">Maximum tree depth</param>
+    /// <param name="maxTreeLength">Maximum tree length. This parameter is not used.</param>
     /// <returns></returns>
-    public static ISymbolicExpressionTree Create(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeDepth) {
+    public static ISymbolicExpressionTree Create(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth) {
       var tree = new SymbolicExpressionTree();
       var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();
@@ -138,5 +149,5 @@
 
       for (var i = 0; i != arity; ++i) {
-        var possibleSymbols = seedNode.Grammar.GetAllowedChildSymbols(seedNode.Symbol,i).Where(s => s.InitialFrequency > 0.0 && seedNode.Grammar.GetMaximumSubtreeCount(s) > 0);
+        var possibleSymbols = seedNode.Grammar.GetAllowedChildSymbols(seedNode.Symbol, i).Where(s => s.InitialFrequency > 0.0 && seedNode.Grammar.GetMaximumSubtreeCount(s) > 0);
         var selectedSymbol = possibleSymbols.SelectRandom(random);
         var tree = selectedSymbol.CreateTreeNode();
@@ -157,9 +168,12 @@
         throw new ArgumentException("Cannot grow node of arity zero. Expected a function node.");
 
+      for (var i = 0; i != arity; ++i) {
+        var possibleSymbols = root.Grammar.GetAllowedChildSymbols(root.Symbol, i);
+        possibleSymbols = possibleSymbols.Where(s => s.InitialFrequency > 0.0 &&
+                                          root.Grammar.GetMinimumExpressionDepth(s) - 1 <= maxDepth - currentDepth &&
+                                          root.Grammar.GetMaximumExpressionDepth(s) > maxDepth - currentDepth);
 
-      for (var i = 0; i != arity; ++i) {
-        var possibleSymbols = currentDepth < maxDepth ?
-          root.Grammar.GetAllowedChildSymbols(root.Symbol,i).Where(s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) > 0) :
-          root.Grammar.GetAllowedChildSymbols(root.Symbol,i).Where(s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) == 0);
+
+        if (!possibleSymbols.Any()) throw new InvalidOperationException("No symbols are available for the tree.");
         var selectedSymbol = possibleSymbols.SelectRandom(random);
         var tree = selectedSymbol.CreateTreeNode();
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/GrowTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/GrowTreeCreator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/GrowTreeCreator.cs	(revision 7085)
@@ -27,6 +27,8 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
+  [NonDiscoverableType]
   [StorableClass]
   [Item("GrowTreeCreator", "An operator that creates new symbolic expression trees using the 'Grow' method")]
@@ -60,4 +62,8 @@
     public IntValue MaximumSymbolicExpressionTreeDepth {
       get { return MaximumSymbolicExpressionTreeDepthParameter.ActualValue; }
+    }
+
+    public IntValue MaximumSymbolicExpressionTreeLength {
+      get { return MaximumSymbolicExpressionTreeLengthParameter.ActualValue; }
     }
 
@@ -97,5 +103,9 @@
 
     protected override ISymbolicExpressionTree Create(IRandom random) {
-      return Create(random, SymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeDepth.Value);
+      return Create(random, SymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value);
+    }
+
+    public override ISymbolicExpressionTree CreateTree(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth) {
+      return Create(random, grammar, maxTreeLength, maxTreeDepth);
     }
 
@@ -107,6 +117,7 @@
     /// <param name="grammar">Available tree grammar</param>
     /// <param name="maxTreeDepth">Maximum tree depth</param>
+    /// <param name="maxTreeLength">Maximum tree length. This parameter is not used.</param>
     /// <returns></returns>
-    public static ISymbolicExpressionTree Create(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeDepth) {
+    public static ISymbolicExpressionTree Create(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth) {
       var tree = new SymbolicExpressionTree();
       var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();
@@ -155,10 +166,9 @@
         throw new ArgumentException("Cannot grow node of arity zero. Expected a function node.");
 
-
       for (var i = 0; i != arity; ++i) {
-        var possibleSymbols = currentDepth < maxDepth
-                                ? root.Grammar.GetAllowedChildSymbols(root.Symbol,i).Where(s => s.InitialFrequency > 0.0)
-                                : root.Grammar.GetAllowedChildSymbols(root.Symbol,i).Where(
-                                  s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) == 0);
+        var possibleSymbols = root.Grammar.GetAllowedChildSymbols(root.Symbol, i);
+        possibleSymbols = possibleSymbols.Where(s => s.InitialFrequency > 0.0 &&
+                                          root.Grammar.GetMinimumExpressionDepth(s) - 1 <= maxDepth - currentDepth);
+        if (!possibleSymbols.Any()) throw new InvalidOperationException("No symbols are available for the tree.");
         var selectedSymbol = possibleSymbols.SelectRandom(random);
         var tree = selectedSymbol.CreateTreeNode();
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/ProbabilisticTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/ProbabilisticTreeCreator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/ProbabilisticTreeCreator.cs	(revision 7085)
@@ -28,6 +28,8 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
+  [NonDiscoverableType]
   [StorableClass]
   [Item("ProbabilisticTreeCreator", "An operator that creates new symbolic expression trees with uniformly distributed length")]
@@ -101,6 +103,9 @@
     }
 
-    public static ISymbolicExpressionTree Create(IRandom random, ISymbolicExpressionGrammar grammar,
-      int maxTreeLength, int maxTreeDepth) {
+    public override ISymbolicExpressionTree CreateTree(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth) {
+      return Create(random, grammar, maxTreeLength, maxTreeDepth);
+    }
+
+    public static ISymbolicExpressionTree Create(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth) {
       SymbolicExpressionTree tree = new SymbolicExpressionTree();
       var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/RampedHalfAndHalfTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/RampedHalfAndHalfTreeCreator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/RampedHalfAndHalfTreeCreator.cs	(revision 7085)
@@ -29,6 +29,8 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
+  [NonDiscoverableType]
   [StorableClass]
   [Item("RampedHalfAndHalfTreeCreator", "An operator that creates new symbolic expression trees in an alternate way: half the trees are created usign the 'Grow' method while the other half are created using the 'Full' method")]
@@ -72,4 +74,8 @@
     }
 
+    public IntValue MaximumSymbolicExpressionTreeLength {
+      get { return MaximumSymbolicExpressionTreeLengthParameter.ActualValue; }
+    }
+
     public ISymbolicExpressionGrammar SymbolicExpressionTreeGrammar {
       get { return ClonedSymbolicExpressionTreeGrammarParameter.ActualValue; }
@@ -106,5 +112,9 @@
 
     protected override ISymbolicExpressionTree Create(IRandom random) {
-      return Create(random, SymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeDepth.Value);
+      return Create(random, SymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value);
+    }
+
+    public override ISymbolicExpressionTree CreateTree(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth) {
+      return Create(random, grammar, maxTreeLength, maxTreeDepth);
     }
 
@@ -117,5 +127,5 @@
     /// <param name="maxTreeDepth">Maximum tree depth</param>
     /// <returns></returns>
-    public static ISymbolicExpressionTree Create(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeDepth) {
+    public static ISymbolicExpressionTree Create(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth) {
       var tree = new SymbolicExpressionTree();
       var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/SymbolicExpressionTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/SymbolicExpressionTreeCreator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/SymbolicExpressionTreeCreator.cs	(revision 7085)
@@ -39,5 +39,5 @@
     #endregion
 
-    #region Propeties
+    #region Properties
     public ISymbolicExpressionTree SymbolicExpressionTree {
       get { return SymbolicExpressionTreeParameter.ActualValue; }
@@ -60,4 +60,5 @@
 
     protected abstract ISymbolicExpressionTree Create(IRandom random);
+    public abstract ISymbolicExpressionTree CreateTree(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth);
   }
 }
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj	(revision 7085)
@@ -111,4 +111,5 @@
     <Compile Include="Analyzers\MinAverageMaxSymbolicExpressionTreeLengthAnalyzer.cs" />
     <Compile Include="Analyzers\SymbolicExpressionSymbolFrequencyAnalyzer.cs" />
+    <Compile Include="Analyzers\SymbolicExpressionTreeLengthAnalyzer.cs" />
     <Compile Include="Analyzers\SymbolicExpressionTreeLengthCalculator.cs" />
     <Compile Include="ArchitectureManipulators\ArgumentCreater.cs" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbolicExpressionGrammarBase.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbolicExpressionGrammarBase.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbolicExpressionGrammarBase.cs	(revision 7085)
@@ -40,4 +40,5 @@
 
     int GetMinimumExpressionDepth(ISymbol start);
+    int GetMaximumExpressionDepth(ISymbol start);
     int GetMinimumExpressionLength(ISymbol start);
     int GetMaximumExpressionLength(ISymbol start, int maxDepth);
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/Operators/ISymbolicExpressionTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/Operators/ISymbolicExpressionTreeCreator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/Operators/ISymbolicExpressionTreeCreator.cs	(revision 7085)
@@ -29,4 +29,5 @@
   public interface ISymbolicExpressionTreeCreator : ISymbolicExpressionTreeOperator, ISolutionCreator {
     ILookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter { get; }
+    ISymbolicExpressionTree CreateTree(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth);
   }
 }
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs	(revision 7085)
@@ -74,7 +74,8 @@
       List<ISymbolicExpressionTreeManipulator> list = new List<ISymbolicExpressionTreeManipulator>();
       foreach (Type type in ApplicationManager.Manager.GetTypes(typeof(ISymbolicExpressionTreeManipulator))) {
-        if (!typeof(IMultiOperator<ISymbolicExpressionTreeManipulator>).IsAssignableFrom(type) &&
-            !typeof(ISymbolicExpressionTreeArchitectureAlteringOperator).IsAssignableFrom(type))
-          list.Add((ISymbolicExpressionTreeManipulator)Activator.CreateInstance(type));
+        if (this.GetType().Assembly != type.Assembly) continue;
+        if (typeof(IMultiOperator<ISymbolicExpressionTreeManipulator>).IsAssignableFrom(type)) continue;
+        if (typeof(ISymbolicExpressionTreeArchitectureAlteringOperator).IsAssignableFrom(type)) continue;
+        list.Add((ISymbolicExpressionTreeManipulator)Activator.CreateInstance(type));
       }
       CheckedItemList<ISymbolicExpressionTreeManipulator> checkedItemList = new CheckedItemList<ISymbolicExpressionTreeManipulator>();
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammarBase.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammarBase.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammarBase.cs	(revision 7085)
@@ -82,4 +82,5 @@
       cachedMaxExpressionLength = new Dictionary<Tuple<string, int>, int>();
       cachedMinExpressionDepth = new Dictionary<string, int>();
+      cachedMaxExpressionDepth = new Dictionary<string, int>();
 
       cachedIsAllowedChildSymbol = new Dictionary<Tuple<string, string>, bool>();
@@ -94,4 +95,5 @@
       cachedMaxExpressionLength = new Dictionary<Tuple<string, int>, int>();
       cachedMinExpressionDepth = new Dictionary<string, int>();
+      cachedMaxExpressionDepth = new Dictionary<string, int>();
 
       cachedIsAllowedChildSymbol = new Dictionary<Tuple<string, string>, bool>();
@@ -117,4 +119,5 @@
       cachedMaxExpressionLength = new Dictionary<Tuple<string, int>, int>();
       cachedMinExpressionDepth = new Dictionary<string, int>();
+      cachedMaxExpressionDepth = new Dictionary<string, int>();
 
       cachedIsAllowedChildSymbol = new Dictionary<Tuple<string, string>, bool>();
@@ -134,5 +137,6 @@
       foreach (var s in symbol.Flatten()) {
         symbols.Add(s.Name, s);
-        symbolSubtreeCount.Add(s.Name, Tuple.Create(s.MinimumArity, s.MaximumArity));
+        int maxSubTreeCount = Math.Min(s.MinimumArity + 1, s.MaximumArity);
+        symbolSubtreeCount.Add(s.Name, Tuple.Create(s.MinimumArity, maxSubTreeCount));
       }
       ClearCaches();
@@ -371,4 +375,5 @@
       cachedMaxExpressionLength.Clear();
       cachedMinExpressionDepth.Clear();
+      cachedMaxExpressionDepth.Clear();
 
       cachedIsAllowedChildSymbol.Clear();
@@ -427,4 +432,20 @@
     }
 
+    private readonly Dictionary<string, int> cachedMaxExpressionDepth;
+    public int GetMaximumExpressionDepth(ISymbol symbol) {
+      int temp;
+      if (!cachedMaxExpressionDepth.TryGetValue(symbol.Name, out temp)) {
+        cachedMaxExpressionDepth[symbol.Name] = int.MaxValue;
+        long maxDepth = 1 + (from argIndex in Enumerable.Range(0, GetMaximumSubtreeCount(symbol))
+                             let maxForSlot = (long)(from s in GetAllowedChildSymbols(symbol, argIndex)
+                                                     where s.InitialFrequency > 0.0
+                                                     select GetMaximumExpressionDepth(s)).DefaultIfEmpty(0).Max()
+                             select maxForSlot).DefaultIfEmpty(0).Max();
+        cachedMaxExpressionDepth[symbol.Name] = (int)Math.Min(maxDepth, int.MaxValue);
+        return cachedMaxExpressionDepth[symbol.Name];
+      }
+      return temp;
+    }
+
     public event EventHandler Changed;
     protected virtual void OnChanged() {
Index: /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeGrammar.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeGrammar.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeGrammar.cs	(revision 7085)
@@ -119,4 +119,8 @@
       else return base.GetMinimumExpressionDepth(symbol);
     }
+    int ISymbolicExpressionGrammarBase.GetMaximumExpressionDepth(ISymbol symbol) {
+      if (symbols.Count == 0) return grammar.GetMaximumExpressionDepth(symbol);
+      else return base.GetMaximumExpressionDepth(symbol);
+    }
     int ISymbolicExpressionGrammarBase.GetMinimumExpressionLength(ISymbol symbol) {
       if (symbols.Count == 0) return grammar.GetMinimumExpressionLength(symbol);
@@ -127,4 +131,5 @@
       else return base.GetMaximumExpressionLength(symbol, maxDepth);
     }
+
   }
 }
Index: /branches/RegressionBenchmarks/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/0.9.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/0.9.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/0.9.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers.csproj	(revision 7085)
@@ -58,13 +58,4 @@
     <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Silverlight2|AnyCPU' ">
-    <OutputPath>bin\Silverlight2\</OutputPath>
-    <DefineConstants>TRACE;SILVERLIGHT2</DefineConstants>
-    <Optimize>true</Optimize>
-    <NoStdLib>true</NoStdLib>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>AnyCPU</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
     <DebugSymbols>true</DebugSymbols>
@@ -97,8 +88,4 @@
     <CodeAnalysisRuleDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Silverlight2|x64'">
-    <OutputPath>bin\x64\Silverlight2\</OutputPath>
-    <PlatformTarget>x64</PlatformTarget>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
     <DebugSymbols>true</DebugSymbols>
@@ -134,8 +121,4 @@
     <CodeAnalysisRuleDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
     <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Silverlight2|x86'">
-    <OutputPath>bin\x86\Silverlight2\</OutputPath>
-    <PlatformTarget>x86</PlatformTarget>
   </PropertyGroup>
   <ItemGroup>
@@ -241,5 +224,4 @@
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' != 'Silverlight2' " />
-  <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Silverlight2' " />
   <PropertyGroup>
     <PostBuildEvent>copy "$(TargetPath)" "$(SolutionDir)"
Index: /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj	(revision 7085)
@@ -0,0 +1,140 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{F98A1740-9AC9-4D36-A582-6A2D0D06978D}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="ITask.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/ITask.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/ITask.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/ITask.cs	(revision 7085)
@@ -0,0 +1,66 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Hive {
+  public interface ITask : IDeepCloneable, ICloneable {
+    TimeSpan ExecutionTime { get; }
+
+    ExecutionState ExecutionState { get; }
+
+    /// <summary>
+    /// indicates wether it is possible to create childjobs from this job
+    /// </summary>
+    bool IsParallelizable { get; }
+
+    /// <summary>
+    /// Configuration to indicate if this job should create child-jobs which will be executed in hive
+    /// Cannot be set true if IsParallelizable is false
+    /// </summary>
+    bool ComputeInParallel { get; set; }
+
+
+    void Prepare();
+
+    void Start();
+
+    void Pause();
+
+    void Stop();
+
+    event EventHandler ComputeInParallelChanged;
+
+    event EventHandler ExecutionTimeChanged;
+
+    event EventHandler ExecutionStateChanged;
+
+    event EventHandler TaskFailed;
+
+    event EventHandler TaskStopped;
+
+    event EventHandler TaskPaused;
+
+    event EventHandler TaskStarted;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive {
+  [Plugin("HeuristicLab.Hive", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Hive-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]  
+  public class HeuristicLabHivePlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Hive/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Hive")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7032d7ba-4799-4708-803d-9f6cb3feed35")]
+
+// 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("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj	(revision 7085)
@@ -115,4 +115,5 @@
     <Reference Include="WeifenLuo.WinFormsUI.Docking-2.3.1, Version=2.3.1.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\WeifenLuo.WinFormsUI.Docking-2.3.1.dll</HintPath>
+      <Private>False</Private>
     </Reference>
   </ItemGroup>
Index: /branches/RegressionBenchmarks/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 7085)
@@ -23,5 +23,4 @@
 using System.Collections.Generic;
 using System.Linq;
-using System.Reflection;
 using System.Windows.Forms;
 using HeuristicLab.Common;
@@ -34,5 +33,4 @@
     private int appStartingCursors;
     private int waitingCursors;
-    private string title;
 
     protected MainForm()
@@ -177,11 +175,7 @@
     }
 
-    protected virtual void OnInitialized(EventArgs e) {
-      AssemblyFileVersionAttribute version = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).
-                                             Cast<AssemblyFileVersionAttribute>().FirstOrDefault();
-      title = "HeuristicLab Optimizer";
-      if (version != null) title += " " + version.Version;
-      Title = title;
-    }
+    protected virtual void OnInitialized(EventArgs e) { }
+
+    public virtual void UpdateTitle() { }
 
     private void FormActivated(object sender, EventArgs e) {
@@ -498,18 +492,4 @@
     }
     #endregion
-
-    public virtual void UpdateTitle() {
-      if (InvokeRequired)
-        Invoke(new Action(UpdateTitle));
-      else {
-        IContentView activeView = ActiveView as IContentView;
-        if ((activeView != null) && (activeView.Content != null) && (activeView.Content is IStorableContent)) {
-          IStorableContent content = (IStorableContent)activeView.Content;
-          Title = title + " [" + (string.IsNullOrEmpty(content.Filename) ? "Unsaved" : content.Filename) + "]";
-        } else {
-          Title = title;
-        }
-      }
-    }
   }
 }
Index: /branches/RegressionBenchmarks/HeuristicLab.MainForm/3.3/MainFormManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.MainForm/3.3/MainFormManager.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.MainForm/3.3/MainFormManager.cs	(revision 7085)
@@ -49,5 +49,5 @@
         MainFormManager.mainform = mainForm;
         IEnumerable<Type> types =
-          from t in ApplicationManager.Manager.GetTypes(typeof(IContentView))
+          from t in ApplicationManager.Manager.GetTypes(typeof(IContentView), false)
           where !t.IsAbstract && !t.IsInterface && ContentAttribute.HasContentAttribute(t)
           select t;
Index: /branches/RegressionBenchmarks/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj	(revision 7085)
@@ -104,7 +104,9 @@
     <Reference Include="HeuristicLab.Netron-3.0.2672.12446, Version=3.0.2672.12446, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\HeuristicLab.Netron-3.0.2672.12446.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="Netron.Diagramming.Core-3.0.2672.12446, Version=3.0.2672.12446, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\Netron.Diagramming.Core-3.0.2672.12446.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/ExperimentListView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/ExperimentListView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/ExperimentListView.Designer.cs	(revision 7085)
@@ -0,0 +1,196 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Optimization.Views {
+  partial class ExperimentListView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.optimizersTabPage = new System.Windows.Forms.TabPage();
+      this.optimizerListView = new HeuristicLab.Optimization.Views.OptimizerListView();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.runsViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.optimizersTabPage.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // startButton
+      // 
+      this.startButton.Location = new System.Drawing.Point(0, 458);
+      this.toolTip.SetToolTip(this.startButton, "Start/Resume Experiment");
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.Location = new System.Drawing.Point(542, 461);
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.Location = new System.Drawing.Point(453, 464);
+      // 
+      // pauseButton
+      // 
+      this.pauseButton.Location = new System.Drawing.Point(30, 458);
+      this.toolTip.SetToolTip(this.pauseButton, "Pause Experiment");
+      // 
+      // stopButton
+      // 
+      this.stopButton.Location = new System.Drawing.Point(60, 458);
+      this.toolTip.SetToolTip(this.stopButton, "Stop Experiment");
+      // 
+      // resetButton
+      // 
+      this.resetButton.Location = new System.Drawing.Point(90, 458);
+      this.toolTip.SetToolTip(this.resetButton, "Reset Experiment");
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(60, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(594, 20);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(660, 3);
+      // 
+      // tabControl
+      // 
+      this.tabControl.AllowDrop = true;
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+            | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl.Controls.Add(this.optimizersTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 26);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(679, 427);
+      this.tabControl.TabIndex = 3;
+      // 
+      // optimizersTabPage
+      // 
+      this.optimizersTabPage.Controls.Add(this.optimizerListView);
+      this.optimizersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.optimizersTabPage.Name = "optimizersTabPage";
+      this.optimizersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.optimizersTabPage.Size = new System.Drawing.Size(671, 401);
+      this.optimizersTabPage.TabIndex = 1;
+      this.optimizersTabPage.Text = "Optimizers";
+      this.optimizersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // optimizerListView
+      // 
+      this.optimizerListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+            | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.optimizerListView.Caption = "OptimizerList View";
+      this.optimizerListView.Content = null;
+      this.optimizerListView.Location = new System.Drawing.Point(6, 6);
+      this.optimizerListView.Name = "optimizerListView";
+      this.optimizerListView.ReadOnly = false;
+      this.optimizerListView.Size = new System.Drawing.Size(659, 389);
+      this.optimizerListView.TabIndex = 0;
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runsViewHost);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.runsTabPage.Size = new System.Drawing.Size(671, 401);
+      this.runsTabPage.TabIndex = 2;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runsViewHost
+      // 
+      this.runsViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+            | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.runsViewHost.Caption = "View";
+      this.runsViewHost.Content = null;
+      this.runsViewHost.Enabled = false;
+      this.runsViewHost.Location = new System.Drawing.Point(2, 6);
+      this.runsViewHost.Name = "runsViewHost";
+      this.runsViewHost.ReadOnly = false;
+      this.runsViewHost.Size = new System.Drawing.Size(657, 389);
+      this.runsViewHost.TabIndex = 0;
+      this.runsViewHost.ViewsLabelVisible = true;
+      this.runsViewHost.ViewType = null;
+      // 
+      // ExperimentView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "ExperimentView";
+      this.Size = new System.Drawing.Size(679, 482);
+      this.Controls.SetChildIndex(this.resetButton, 0);
+      this.Controls.SetChildIndex(this.stopButton, 0);
+      this.Controls.SetChildIndex(this.pauseButton, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      this.Controls.SetChildIndex(this.executionTimeLabel, 0);
+      this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
+      this.Controls.SetChildIndex(this.startButton, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.optimizersTabPage.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+    #endregion
+
+    private HeuristicLab.MainForm.WindowsForms.DragOverTabControl tabControl;
+    private System.Windows.Forms.TabPage optimizersTabPage;
+    private OptimizerListView optimizerListView;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private HeuristicLab.MainForm.WindowsForms.ViewHost runsViewHost;
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/ExperimentListView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/ExperimentListView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/ExperimentListView.cs	(revision 7085)
@@ -0,0 +1,69 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimization.Views {
+  [View("Experiment List View")]
+  [Content(typeof(Experiment), false)]
+  public sealed partial class ExperimentListView : IOptimizerView {
+    public ExperimentListView() {
+      InitializeComponent();
+    }
+
+    public new Experiment Content {
+      get { return (Experiment)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        optimizerListView.Content = null;
+        runsViewHost.Content = null;
+      } else {
+        optimizerListView.Content = Content.Optimizers;
+        runsViewHost.Content = Content.Runs;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      optimizerListView.Enabled = Content != null;
+      runsViewHost.Enabled = Content != null;
+    }
+
+    protected override void OnClosed(FormClosedEventArgs e) {
+      if ((Content != null) && (Content.ExecutionState == ExecutionState.Started)) {
+        //The content must be stopped if no other view showing the content is available
+        var optimizers = MainFormManager.MainForm.Views.OfType<IContentView>().Where(v => v != this).Select(v => v.Content).OfType<IOptimizer>();
+        if (!optimizers.Contains(Content)) {
+          var nestedOptimizers = optimizers.SelectMany(opt => opt.NestedOptimizers);
+          if (!nestedOptimizers.Contains(Content)) Content.Stop();
+        }
+      }
+      base.OnClosed(e);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 7085)
@@ -130,4 +130,10 @@
       <DependentUpon>BatchRunView.cs</DependentUpon>
     </Compile>
+    <Compile Include="ExperimentListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ExperimentListView.Designer.cs">
+      <DependentUpon>ExperimentListView.cs</DependentUpon>
+    </Compile>
     <Compile Include="Plugin.cs" />
     <Compile Include="RunCollectionModifierListView.cs">
Index: /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs	(revision 7085)
@@ -238,5 +238,7 @@
     private void itemsListView_SelectedIndexChanged(object sender, EventArgs e) {
       removeButton.Enabled = itemsListView.SelectedItems.Count > 0 && (Content != null) && !Content.IsReadOnly && !ReadOnly;
-      AdjustListViewColumnSizes();
+      // for performance reason (multiple selection fires this handler for every selected item)
+      if (itemsListView.SelectedIndices.Count <= 1)
+        AdjustListViewColumnSizes();
       if (showDetailsCheckBox.Checked) {
         if (itemsListView.SelectedItems.Count == 1) {
@@ -325,6 +327,10 @@
             items = items.Select(x => cloner.Clone(x));
           }
-          foreach (IRun item in items)
-            Content.Add(item);
+          if (RunCollection != null) {
+            RunCollection.AddRange(items);
+          } else { // the content is an IItemCollection<IRun>
+            foreach (IRun item in items)
+              Content.Add(item);
+          }
         }
       }
Index: /branches/RegressionBenchmarks/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 7085)
@@ -114,4 +114,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="RunCollectionRunRemover.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="RunCollectionDiscretizer.cs" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Optimization/3.3/RunCollectionRunRemover.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimization/3.3/RunCollectionRunRemover.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Optimization/3.3/RunCollectionRunRemover.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿using System.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Optimization {
+  [Item("RunCollection Run Remover", "Removes all currently visible runs. Use the filtering tab to selectively remove runs.")]
+  [StorableClass]
+  public class RunCollectionRunRemover : ParameterizedNamedItem, IRunCollectionModifier {
+
+    #region Construction & Cloning
+    [StorableConstructor]
+    protected RunCollectionRunRemover(bool deserializing) : base(deserializing) { }
+    protected RunCollectionRunRemover(RunCollectionRunRemover original, Cloner cloner) : base(original, cloner) {}
+    public RunCollectionRunRemover() {}
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RunCollectionRunRemover(this, cloner);
+    }
+    #endregion
+
+    #region IRunCollectionModifier Members
+    public void Modify(List<IRun> runs) {
+      runs.Clear();
+    }
+    #endregion
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 7085)
@@ -116,14 +116,8 @@
   <ItemGroup>
     <EmbeddedResource Include="Documents\GA_VRP.hl" />
-    <EmbeddedResource Include="Documents\SGP_SymbClass_Mammographic.hl" />
+    <EmbeddedResource Include="Documents\SGP_SymbClass.hl" />
     <EmbeddedResource Include="Documents\SGP_SymbReg.hl" />
     <EmbeddedResource Include="Documents\VNS_TSP.hl" />
     <EmbeddedResource Include="Documents\PSO_Schwefel.hl" />
-    <EmbeddedResource Include="MainFormTypeSelectionDialog.resx">
-      <DependentUpon>MainFormTypeSelectionDialog.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="OptimizerDockingMainForm.resx">
-      <DependentUpon>OptimizerDockingMainForm.cs</DependentUpon>
-    </EmbeddedResource>
     <None Include="Plugin.cs.frame" />
     <Compile Include="OptimizerSingleDocumentMainForm.cs">
Index: /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/MainFormTypeSelectionDialog.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/MainFormTypeSelectionDialog.Designer.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/MainFormTypeSelectionDialog.Designer.cs	(revision 7085)
@@ -113,7 +113,9 @@
       // 
       this.labelRestart.AutoSize = true;
+      this.labelRestart.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.labelRestart.ForeColor = System.Drawing.Color.Red;
       this.labelRestart.Location = new System.Drawing.Point(9, 123);
       this.labelRestart.Name = "labelRestart";
-      this.labelRestart.Size = new System.Drawing.Size(199, 26);
+      this.labelRestart.Size = new System.Drawing.Size(241, 26);
       this.labelRestart.TabIndex = 11;
       this.labelRestart.Text = "Please note that you have to restart the \r\nOptimizer for the changes to take effe" +
Index: anches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/MainFormTypeSelectionDialog.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/MainFormTypeSelectionDialog.resx	(revision 7084)
+++ 	(revision )
@@ -1,126 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.cs	(revision 7085)
@@ -23,4 +23,5 @@
 using System.ComponentModel;
 using System.Linq;
+using System.Reflection;
 using System.Windows.Forms;
 using HeuristicLab.Common;
@@ -32,4 +33,5 @@
 namespace HeuristicLab.Optimizer {
   internal partial class OptimizerDockingMainForm : DockingMainForm {
+    private string title;
 
     private Clipboard<IItem> clipboard;
@@ -53,4 +55,10 @@
     protected override void OnInitialized(EventArgs e) {
       base.OnInitialized(e);
+
+      AssemblyFileVersionAttribute version = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).
+                                         Cast<AssemblyFileVersionAttribute>().FirstOrDefault();
+      title = "HeuristicLab Optimizer";
+      if (version != null) title += " " + version.Version;
+      Title = title;
 
       ContentManager.Initialize(new PersistenceContentManager());
@@ -96,4 +104,18 @@
       UpdateTitle();
     }
+
+    public override void UpdateTitle() {
+      if (InvokeRequired)
+        Invoke(new Action(UpdateTitle));
+      else {
+        IContentView activeView = ActiveView as IContentView;
+        if ((activeView != null) && (activeView.Content != null) && (activeView.Content is IStorableContent)) {
+          IStorableContent content = (IStorableContent)activeView.Content;
+          Title = title + " [" + (string.IsNullOrEmpty(content.Filename) ? "Unsaved" : content.Filename) + "]";
+        } else {
+          Title = title;
+        }
+      }
+    }
   }
 }
Index: anches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.resx	(revision 7084)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.cs	(revision 7085)
@@ -23,4 +23,5 @@
 using System.ComponentModel;
 using System.Linq;
+using System.Reflection;
 using System.Windows.Forms;
 using HeuristicLab.Common;
@@ -32,4 +33,5 @@
 namespace HeuristicLab.Optimizer {
   internal partial class OptimizerMultipleDocumentMainForm : MultipleDocumentMainForm {
+    private string title;
 
     private Clipboard<IItem> clipboard;
@@ -53,4 +55,10 @@
     protected override void OnInitialized(EventArgs e) {
       base.OnInitialized(e);
+
+      AssemblyFileVersionAttribute version = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).
+                                         Cast<AssemblyFileVersionAttribute>().FirstOrDefault();
+      title = "HeuristicLab Optimizer";
+      if (version != null) title += " " + version.Version;
+      Title = title;
 
       ContentManager.Initialize(new PersistenceContentManager());
@@ -96,4 +104,18 @@
       UpdateTitle();
     }
+
+    public override void UpdateTitle() {
+      if (InvokeRequired)
+        Invoke(new Action(UpdateTitle));
+      else {
+        IContentView activeView = ActiveView as IContentView;
+        if ((activeView != null) && (activeView.Content != null) && (activeView.Content is IStorableContent)) {
+          IStorableContent content = (IStorableContent)activeView.Content;
+          Title = title + " [" + (string.IsNullOrEmpty(content.Filename) ? "Unsaved" : content.Filename) + "]";
+        } else {
+          Title = title;
+        }
+      }
+    }
   }
 }
Index: /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.cs	(revision 7085)
@@ -23,4 +23,5 @@
 using System.ComponentModel;
 using System.Linq;
+using System.Reflection;
 using System.Windows.Forms;
 using HeuristicLab.Common;
@@ -32,4 +33,5 @@
 namespace HeuristicLab.Optimizer {
   internal partial class OptimizerSingleDocumentMainForm : SingleDocumentMainForm {
+    private string title;
 
     private Clipboard<IItem> clipboard;
@@ -53,4 +55,10 @@
     protected override void OnInitialized(EventArgs e) {
       base.OnInitialized(e);
+
+      AssemblyFileVersionAttribute version = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).
+                                         Cast<AssemblyFileVersionAttribute>().FirstOrDefault();
+      title = "HeuristicLab Optimizer";
+      if (version != null) title += " " + version.Version;
+      Title = title;
 
       ContentManager.Initialize(new PersistenceContentManager());
@@ -96,4 +104,18 @@
       UpdateTitle();
     }
+
+    public override void UpdateTitle() {
+      if (InvokeRequired)
+        Invoke(new Action(UpdateTitle));
+      else {
+        IContentView activeView = ActiveView as IContentView;
+        if ((activeView != null) && (activeView.Content != null) && (activeView.Content is IStorableContent)) {
+          IStorableContent content = (IStorableContent)activeView.Content;
+          Title = title + " [" + (string.IsNullOrEmpty(content.Filename) ? "Unsaved" : content.Filename) + "]";
+        } else {
+          Title = title;
+        }
+      }
+    }
   }
 }
Index: /branches/RegressionBenchmarks/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 7085)
@@ -112,5 +112,6 @@
     <Reference Include="ICSharpCode.SharpZipLib, Version=0.85.4.369, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\HeuristicLab.PluginInfrastructure\3.3\ICSharpCode.SharpZipLib.dll</HintPath>
+      <HintPath>..\..\bin\ICSharpCode.SharpZipLib.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.PluginInfrastructure/3.3/LightweightApplicationManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.PluginInfrastructure/3.3/LightweightApplicationManager.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.PluginInfrastructure/3.3/LightweightApplicationManager.cs	(revision 7085)
@@ -124,9 +124,13 @@
         var assemblyTypes = assembly.GetTypes();
 
-        return from t in assemblyTypes
-               where CheckTypeCompatibility(type, t)
-               where onlyInstantiable == false || (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
-               where !IsNonDiscoverableType(t)
-               select BuildType(t, type);
+        var buildTypes = from t in assemblyTypes
+                         where !IsNonDiscoverableType(t)
+                         where CheckTypeCompatibility(type, t)
+                         where onlyInstantiable == false || (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
+                         select BuildType(t, type);
+
+        return from t in buildTypes
+               where onlyInstantiable == false || !t.IsGenericTypeDefinition
+               select t;
       }
       catch (TypeLoadException) {
Index: /branches/RegressionBenchmarks/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginManager.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginManager.cs	(revision 7085)
@@ -74,7 +74,5 @@
       OnInitializing(PluginInfrastructureEventArgs.Empty);
       AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
-      setup.PrivateBinPath = pluginDir;
-      // probing should only occur in PrivateBinPath (not in ApplicationBase). This is enforced by the value string.Empty
-      setup.PrivateBinPathProbe = string.Empty;
+      setup.ApplicationBase = pluginDir;
       AppDomain pluginDomain = null;
       try {
@@ -207,5 +205,5 @@
     /// </summary>
     /// <returns><c>null</c>.</returns>
-    [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)]
+    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)]
     public override object InitializeLifetimeService() {
       return null;
Index: /branches/RegressionBenchmarks/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs	(revision 7085)
@@ -262,10 +262,14 @@
     /// <returns>Enumerable of the discovered types.</returns>
     private static IEnumerable<Type> GetTypes(Type type, Assembly assembly, bool onlyInstantiable) {
-      return from t in assembly.GetTypes()
-             where CheckTypeCompatibility(type, t)
-             where onlyInstantiable == false ||
-                (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
-             where !IsNonDiscoverableType(t)
-             select BuildType(t, type);
+      var buildTypes = from t in assembly.GetTypes()
+                       where !IsNonDiscoverableType(t)
+                       where CheckTypeCompatibility(type, t)
+                       where onlyInstantiable == false ||
+                             (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
+                       select BuildType(t, type);
+
+      return from t in buildTypes
+             where onlyInstantiable == false || !t.IsGenericTypeDefinition
+             select t;
     }
 
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/Generator/RegressionBenchmark.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/Generator/RegressionBenchmark.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/Generator/RegressionBenchmark.cs	(revision 7085)
@@ -83,5 +83,5 @@
     }
 
-    public static List<List<double>> AllCombinationsOf(List<List<double>> sets) {
+    public static List<List<double>> GenerateAllCombinationsOfValuesInLists(List<List<double>> sets) {
 
       var combinations = new List<List<double>>();
@@ -91,5 +91,5 @@
 
       foreach (var set in sets.Skip(1))
-        combinations = AddExtraSet(combinations, set);
+        combinations = AddListToCombinations(combinations, set);
 
       combinations = (from i in Enumerable.Range(0, sets.Count)
@@ -100,5 +100,5 @@
     }
 
-    private static List<List<double>> AddExtraSet
+    private static List<List<double>> AddListToCombinations
          (List<List<double>> combinations, List<double> set) {
       var newCombinations = from value in set
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionFifteen.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionFifteen.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionFifteen.cs	(revision 7085)
@@ -58,5 +58,5 @@
       List<double> oneVariableTestData = RegressionBenchmark.GenerateSteps(range, 0.01);
       List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
-      testData = RegressionBenchmark.AllCombinationsOf(testData);
+      testData = RegressionBenchmark.GenerateAllCombinationsOfValuesInLists(testData);
 
       for (int i = 0; i < InputVariable.Count; i++) {
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionFour.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionFour.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionFour.cs	(revision 7085)
@@ -38,5 +38,5 @@
       inputVariables = new List<string>() { "X" };
       trainingPartition = new IntRange(0, 21);
-      testPartition = new IntRange(22, 2023);
+      testPartition = new IntRange(22, 2022);
     }
 
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionSixteen.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionSixteen.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionSixteen.cs	(revision 7085)
@@ -58,5 +58,5 @@
       List<double> oneVariableTestData = RegressionBenchmark.GenerateSteps(range, 0.01);
       List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
-      testData = RegressionBenchmark.AllCombinationsOf(testData);
+      testData = RegressionBenchmark.GenerateAllCombinationsOfValuesInLists(testData);
 
       for (int i = 0; i < InputVariable.Count; i++) {
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionThirteen.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionThirteen.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionThirteen.cs	(revision 7085)
@@ -58,5 +58,5 @@
       List<double> oneVariableTestData = RegressionBenchmark.GenerateSteps(range, 0.01);
       List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
-      testData = RegressionBenchmark.AllCombinationsOf(testData);
+      testData = RegressionBenchmark.GenerateAllCombinationsOfValuesInLists(testData);
 
       for (int i = 0; i < InputVariable.Count; i++) {
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionTwelve.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionTwelve.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Keijzer/KeijzerFunctionTwelve.cs	(revision 7085)
@@ -58,5 +58,5 @@
       List<double> oneVariableTestData = RegressionBenchmark.GenerateSteps(range, 0.01);
       List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
-      testData = RegressionBenchmark.AllCombinationsOf(testData);
+      testData = RegressionBenchmark.GenerateAllCombinationsOfValuesInLists(testData);
 
       for (int i = 0; i < InputVariable.Count; i++) {
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/RealWorldProblems/ChemicalOne.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/RealWorldProblems/ChemicalOne.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/RealWorldProblems/ChemicalOne.cs	(revision 7085)
@@ -31,5 +31,5 @@
 
     public ChemicalOne() {
-      Name = "Chemical-I";
+      Name = "RealWorldProblem Chemical-I";
       //Description = "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
       //  + "Authors: Maarten Keijzer" + Environment.NewLine
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/RealWorldProblems/Housing.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/RealWorldProblems/Housing.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/RealWorldProblems/Housing.cs	(revision 7085)
@@ -31,5 +31,5 @@
 
     public Housing() {
-      Name = "Housing";
+      Name = "RealWorldProblem Housing";
       //Description = "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
       //  + "Authors: Maarten Keijzer" + Environment.NewLine
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/RealWorldProblems/TowerProblem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/RealWorldProblems/TowerProblem.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/RealWorldProblems/TowerProblem.cs	(revision 7085)
@@ -31,5 +31,5 @@
 
     public TowerProblem() {
-      Name = "TowerProblem";
+      Name = "RealWorldProblem TowerProblem";
       //Description = "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
       //  + "Authors: Maarten Keijzer" + Environment.NewLine
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/KotanchekFunction.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/KotanchekFunction.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/KotanchekFunction.cs	(revision 7085)
@@ -28,5 +28,5 @@
 
     public KotanchekFunction() {
-      Name = "Kotanchek";
+      Name = "Vladislavleva Kotanchek";
       Description = "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
@@ -61,5 +61,5 @@
       List<double> oneVariableTestData = RegressionBenchmark.GenerateSteps(new DoubleRange(-0.2, 4.2), 0.1);
       List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
-      testData = RegressionBenchmark.AllCombinationsOf(testData);
+      testData = RegressionBenchmark.GenerateAllCombinationsOfValuesInLists(testData);
       for (int i = 0; i < InputVariable.Count; i++) {
         dataList[i].AddRange(testData[i]);
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/RationalPolynomialThreeDimensional.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/RationalPolynomialThreeDimensional.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/RationalPolynomialThreeDimensional.cs	(revision 7085)
@@ -28,5 +28,5 @@
 
     public RationalPolynomial() {
-      Name = "RatPol3D";
+      Name = "Vladislavleva RatPol3D";
       Description = "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
@@ -65,5 +65,5 @@
       };
 
-      testData = RegressionBenchmark.AllCombinationsOf(testData);
+      testData = RegressionBenchmark.GenerateAllCombinationsOfValuesInLists(testData);
 
       for (int i = 0; i < InputVariable.Count; i++) {
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/RationalPolynomialTwoDimensional.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/RationalPolynomialTwoDimensional.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/RationalPolynomialTwoDimensional.cs	(revision 7085)
@@ -28,5 +28,5 @@
 
     public RationalPolynomialTwoDimensional() {
-      Name = "RatPol2D";
+      Name = "Vladislavleva RatPol2D";
       Description = "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
@@ -62,5 +62,5 @@
       List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
 
-      testData = RegressionBenchmark.AllCombinationsOf(testData);
+      testData = RegressionBenchmark.GenerateAllCombinationsOfValuesInLists(testData);
       for (int i = 0; i < InputVariable.Count; i++) {
         dataList[i].AddRange(testData[i]);
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/RippleFunction.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/RippleFunction.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/RippleFunction.cs	(revision 7085)
@@ -28,5 +28,5 @@
 
     public RippleFunction() {
-      Name = "Ripple";
+      Name = "Vladislavleva Ripple";
       Description = "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/SalutowiczFunctionOneDimensional.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/SalutowiczFunctionOneDimensional.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/SalutowiczFunctionOneDimensional.cs	(revision 7085)
@@ -28,5 +28,5 @@
 
     public SalutowiczFunctionOneDimensional() {
-      Name = "Salutowicz";
+      Name = "Vladislavleva Salutowicz";
       Description = "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/SalutowiczFunctionTwoDimensional.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/SalutowiczFunctionTwoDimensional.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/SalutowiczFunctionTwoDimensional.cs	(revision 7085)
@@ -28,5 +28,5 @@
 
     public SalutowiczFunctionTwoDimensional() {
-      Name = "Salutowicz2D";
+      Name = "Vladislavleva Salutowicz2D";
       Description = "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
@@ -65,6 +65,6 @@
       };
 
-      trainingData = RegressionBenchmark.AllCombinationsOf(trainingData);
-      testData = RegressionBenchmark.AllCombinationsOf(testData);
+      trainingData = RegressionBenchmark.GenerateAllCombinationsOfValuesInLists(trainingData);
+      testData = RegressionBenchmark.GenerateAllCombinationsOfValuesInLists(testData);
 
       for (int i = 0; i < InputVariable.Count; i++) {
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/SineCosineFunction.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/SineCosineFunction.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/SineCosineFunction.cs	(revision 7085)
@@ -28,5 +28,5 @@
 
     public SineCosineFunction() {
-      Name = "SineCosine";
+      Name = "Vladislavleva SineCosine";
       Description = "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
@@ -61,5 +61,5 @@
       List<double> oneVariableTestData = RegressionBenchmark.GenerateSteps(new DoubleRange(-0.05, 6.05), 0.02);
       List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
-      testData = RegressionBenchmark.AllCombinationsOf(testData);
+      testData = RegressionBenchmark.GenerateAllCombinationsOfValuesInLists(testData);
 
       for (int i = 0; i < InputVariable.Count; i++) {
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/UnwrappedBallFunctionFiveDimensional.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/UnwrappedBallFunctionFiveDimensional.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/RegressionBenchmarks/Vladislavleva/UnwrappedBallFunctionFiveDimensional.cs	(revision 7085)
@@ -29,5 +29,5 @@
 
     public UnwrappedBallFunctionFiveDimensional() {
-      Name = "UBall5D";
+      Name = "Vladislavleva UBall5D";
       Description = "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Regression/3.3/HeuristicLab.Problems.DataAnalysis.Regression-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Regression/3.3/HeuristicLab.Problems.DataAnalysis.Regression-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Regression/3.3/HeuristicLab.Problems.DataAnalysis.Regression-3.3.csproj	(revision 7085)
@@ -95,4 +95,5 @@
     <Reference Include="ALGLIB-3.1.0, Version=3.1.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\ALGLIB-3.1.0.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="LibSVM-1.6.3, Version=1.6.3.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/InteractiveSymbolicDiscriminantFunctionClassificationSolutionSimplifierView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/InteractiveSymbolicDiscriminantFunctionClassificationSolutionSimplifierView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/InteractiveSymbolicDiscriminantFunctionClassificationSolutionSimplifierView.cs	(revision 7085)
@@ -51,8 +51,9 @@
     protected override void UpdateModel(ISymbolicExpressionTree tree) {
       Content.Model = new SymbolicDiscriminantFunctionClassificationModel(tree, Content.Model.Interpreter);
-      // the default policy for setting thresholds in classification models is the accuarcy maximizing policy
-      // however for performance reasons we must use estimations of the normal distribution cut points as the thresholds
-      // here and in CalculateImpactValues as they are a lot faster to calculate
-      Content.SetClassDistibutionCutPointThresholds();
+      // the default policy for setting thresholds in classification models is the accuarcy maximizing policy.
+      // This is rather slow to calculate and can lead to a very laggy UI in the interactive solution simplifier.
+      // However, since we automatically prune sub-trees based on the threshold reaching the maximum accuracy we must
+      // also use maximum accuracy threshold calculation here in order to prevent incoherent behavior of the simplifier.
+      Content.SetAccuracyMaximizingThresholds();
     }
 
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj	(revision 7085)
@@ -95,4 +95,5 @@
     <Reference Include="ALGLIB-3.1.0, Version=3.1.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\ALGLIB-3.1.0.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj	(revision 7085)
@@ -117,4 +117,10 @@
     </Compile>
     <Compile Include="Plugin.cs" />
+    <Compile Include="SymbolicDataAnalysisSolutionResponseFunctionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SymbolicDataAnalysisSolutionResponseFunctionView.Designer.cs">
+      <DependentUpon>SymbolicDataAnalysisSolutionResponseFunctionView.cs</DependentUpon>
+    </Compile>
     <Compile Include="SymbolicRegressionSolutionErrorCharacteristicsCurveView.cs">
       <SubType>UserControl</SubType>
@@ -128,4 +134,10 @@
     <Compile Include="SymbolicRegressionSolutionView.Designer.cs">
       <DependentUpon>SymbolicRegressionSolutionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="VariableTrackbar.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="VariableTrackbar.Designer.cs">
+      <DependentUpon>VariableTrackbar.cs</DependentUpon>
     </Compile>
     <None Include="HeuristicLab.snk" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.Designer.cs	(revision 7085)
@@ -0,0 +1,169 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views {
+  partial class SymbolicDataAnalysisSolutionResponseFunctionView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series4 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series5 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      this.flowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
+      this.responseChart = new System.Windows.Forms.DataVisualization.Charting.Chart();
+      this.comboBox = new System.Windows.Forms.ComboBox();
+      this.freeVariableLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.responseChart)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // flowLayoutPanel
+      // 
+      this.flowLayoutPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.flowLayoutPanel.AutoScroll = true;
+      this.flowLayoutPanel.Location = new System.Drawing.Point(3, 202);
+      this.flowLayoutPanel.Name = "flowLayoutPanel";
+      this.flowLayoutPanel.Size = new System.Drawing.Size(261, 268);
+      this.flowLayoutPanel.TabIndex = 2;
+      this.flowLayoutPanel.WrapContents = false;
+      // 
+      // responseChart
+      // 
+      this.responseChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      chartArea1.Name = "ChartArea";
+      this.responseChart.ChartAreas.Add(chartArea1);
+      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
+      legend1.LegendStyle = System.Windows.Forms.DataVisualization.Charting.LegendStyle.Row;
+      legend1.Name = "Legend";
+      this.responseChart.Legends.Add(legend1);
+      this.responseChart.Location = new System.Drawing.Point(3, 30);
+      this.responseChart.Name = "responseChart";
+      series1.ChartArea = "ChartArea";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastPoint;
+      series1.Legend = "Legend";
+      series1.MarkerColor = System.Drawing.Color.Gold;
+      series1.MarkerSize = 3;
+      series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Diamond;
+      series1.Name = "Training Data (edge)";
+      series2.ChartArea = "ChartArea";
+      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastPoint;
+      series2.Legend = "Legend";
+      series2.MarkerColor = System.Drawing.Color.OrangeRed;
+      series2.MarkerSize = 3;
+      series2.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Diamond;
+      series2.Name = "Test Data (edge)";
+      series3.ChartArea = "ChartArea";
+      series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastPoint;
+      series3.Legend = "Legend";
+      series3.MarkerColor = System.Drawing.Color.Gold;
+      series3.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Diamond;
+      series3.Name = "Training Data";
+      series4.ChartArea = "ChartArea";
+      series4.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastPoint;
+      series4.Legend = "Legend";
+      series4.MarkerColor = System.Drawing.Color.OrangeRed;
+      series4.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Diamond;
+      series4.Name = "Test Data";
+      series5.BorderWidth = 3;
+      series5.ChartArea = "ChartArea";
+      series5.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine;
+      series5.Color = System.Drawing.Color.DodgerBlue;
+      series5.Legend = "Legend";
+      series5.MarkerSize = 1;
+      series5.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
+      series5.Name = "Model Response";
+      series5.ShadowColor = System.Drawing.Color.DodgerBlue;
+      this.responseChart.Series.Add(series1);
+      this.responseChart.Series.Add(series2);
+      this.responseChart.Series.Add(series3);
+      this.responseChart.Series.Add(series4);
+      this.responseChart.Series.Add(series5);
+      this.responseChart.Size = new System.Drawing.Size(258, 166);
+      this.responseChart.TabIndex = 3;
+      // 
+      // comboBox
+      // 
+      this.comboBox.FormattingEnabled = true;
+      this.comboBox.Location = new System.Drawing.Point(80, 3);
+      this.comboBox.Name = "comboBox";
+      this.comboBox.Size = new System.Drawing.Size(166, 21);
+      this.comboBox.TabIndex = 4;
+      this.comboBox.SelectedIndexChanged += new System.EventHandler(this.ComboBoxSelectedIndexChanged);
+      // 
+      // freeVariableLabel
+      // 
+      this.freeVariableLabel.AutoSize = true;
+      this.freeVariableLabel.Location = new System.Drawing.Point(3, 6);
+      this.freeVariableLabel.Name = "freeVariableLabel";
+      this.freeVariableLabel.Size = new System.Drawing.Size(71, 13);
+      this.freeVariableLabel.TabIndex = 5;
+      this.freeVariableLabel.Text = "Free variable:";
+      // 
+      // SymbolicDataAnalysisSolutionResponseFunctionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.freeVariableLabel);
+      this.Controls.Add(this.comboBox);
+      this.Controls.Add(this.responseChart);
+      this.Controls.Add(this.flowLayoutPanel);
+      this.Name = "SymbolicDataAnalysisSolutionResponseFunctionView";
+      this.Size = new System.Drawing.Size(264, 473);
+      ((System.ComponentModel.ISupportInitialize)(this.responseChart)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel;
+    private System.Windows.Forms.DataVisualization.Charting.Chart responseChart;
+    private System.Windows.Forms.ComboBox comboBox;
+    private System.Windows.Forms.Label freeVariableLabel;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.cs	(revision 7085)
@@ -0,0 +1,241 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views {
+  [View("Response Function View")]
+  [Content(typeof(ISymbolicRegressionSolution), false)]
+  public partial class SymbolicDataAnalysisSolutionResponseFunctionView : AsynchronousContentView {
+    private Dictionary<string, List<ISymbolicExpressionTreeNode>> variableNodes;
+    private ISymbolicExpressionTree clonedTree;
+    private Dictionary<string, double> medianValues;
+    public SymbolicDataAnalysisSolutionResponseFunctionView() {
+      InitializeComponent();
+      this.variableNodes = new Dictionary<string, List<ISymbolicExpressionTreeNode>>();
+      medianValues = new Dictionary<string, double>();
+      this.Caption = "Response Function View";
+    }
+
+    public new ISymbolicRegressionSolution Content {
+      get { return (ISymbolicRegressionSolution)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ModelChanged += new EventHandler(Content_ModelChanged);
+      Content.ProblemDataChanged += new EventHandler(Content_ProblemDataChanged);
+    }
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+      Content.ModelChanged -= new EventHandler(Content_ModelChanged);
+      Content.ProblemDataChanged -= new EventHandler(Content_ProblemDataChanged);
+    }
+
+    private void Content_ModelChanged(object sender, EventArgs e) {
+      OnModelChanged();
+    }
+    private void Content_ProblemDataChanged(object sender, EventArgs e) {
+      OnProblemDataChanged();
+    }
+
+    protected virtual void OnModelChanged() {
+      this.UpdateView();
+    }
+
+    protected virtual void OnProblemDataChanged() {
+      this.UpdateView();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      this.UpdateView();
+    }
+
+    private void UpdateView() {
+      if (Content != null && Content.Model != null && Content.ProblemData != null) {
+        var referencedVariables =
+       (from varNode in Content.Model.SymbolicExpressionTree.IterateNodesPrefix().OfType<VariableTreeNode>()
+        select varNode.VariableName)
+         .Distinct()
+         .OrderBy(x => x)
+         .ToList();
+
+        medianValues.Clear();
+        foreach (var variableName in referencedVariables) {
+          medianValues.Add(variableName, Content.ProblemData.Dataset.GetDoubleValues(variableName).Median());
+        }
+
+        comboBox.Items.Clear();
+        comboBox.Items.AddRange(referencedVariables.ToArray());
+        comboBox.SelectedIndex = 0;
+      }
+    }
+
+    private void CreateSliders(IEnumerable<string> variableNames) {
+      flowLayoutPanel.Controls.Clear();
+
+      foreach (var variableName in variableNames) {
+        var variableTrackbar = new VariableTrackbar(variableName,
+                                                    Content.ProblemData.Dataset.GetDoubleValues(variableName));
+        variableTrackbar.Size = new Size(variableTrackbar.Size.Width, flowLayoutPanel.Size.Height - 23);
+        variableTrackbar.ValueChanged += TrackBarValueChanged;
+        flowLayoutPanel.Controls.Add(variableTrackbar);
+      }
+    }
+
+    private void TrackBarValueChanged(object sender, EventArgs e) {
+      var trackBar = (VariableTrackbar)sender;
+      string variableName = trackBar.VariableName;
+      ChangeVariableValue(variableName, trackBar.Value);
+    }
+
+    private void ChangeVariableValue(string variableName, double value) {
+      foreach (var constNode in variableNodes[variableName].Cast<ConstantTreeNode>())
+        constNode.Value = value;
+
+      UpdateResponseSeries();
+    }
+
+    private void UpdateScatterPlot() {
+      string freeVariable = (string)comboBox.SelectedItem;
+      IEnumerable<string> fixedVariables = comboBox.Items.OfType<string>()
+        .Except(new string[] { freeVariable });
+      
+      // scatter plots for subset of samples that have values near the median values for all variables
+      Func<int, bool> NearMedianValue = (r) => {
+        foreach (var fixedVar in fixedVariables) {
+          double med = medianValues[fixedVar];
+          if (!(Content.ProblemData.Dataset.GetDoubleValue(fixedVar, r) < med + 0.1 * Math.Abs(med) &&
+            Content.ProblemData.Dataset.GetDoubleValue(fixedVar, r) > med - 0.1 * Math.Abs(med)))
+            return false;
+        }
+        return true;
+      };
+
+      var mainTrainingIndizes = (from row in Content.ProblemData.TrainingIndizes
+                                 where NearMedianValue(row)
+                                 select row)
+        .ToArray();
+      var mainTestIndizes = (from row in Content.ProblemData.TestIndizes
+                             where NearMedianValue(row)
+                             select row)
+        .ToArray();
+
+      var freeVariableValues = Content.ProblemData.Dataset.GetDoubleValues(freeVariable, mainTrainingIndizes).ToArray();
+      var trainingValues = Content.ProblemData.Dataset.GetDoubleValues(Content.ProblemData.TargetVariable,
+                                                                     mainTrainingIndizes).ToArray();
+      Array.Sort(freeVariableValues, trainingValues);
+      responseChart.Series["Training Data"].Points.DataBindXY(freeVariableValues, trainingValues);
+
+      freeVariableValues = Content.ProblemData.Dataset.GetDoubleValues(freeVariable, mainTestIndizes).ToArray();
+      var testValues = Content.ProblemData.Dataset.GetDoubleValues(Content.ProblemData.TargetVariable,
+                                                                     mainTestIndizes).ToArray();
+      Array.Sort(freeVariableValues, testValues);
+      responseChart.Series["Test Data"].Points.DataBindXY(freeVariableValues, testValues);
+
+      // draw scatter plots of remaining values
+      freeVariableValues = Content.ProblemData.Dataset.GetDoubleValues(freeVariable, Content.ProblemData.TrainingIndizes).ToArray();
+      trainingValues = Content.ProblemData.Dataset.GetDoubleValues(Content.ProblemData.TargetVariable,
+                                                                     Content.ProblemData.TrainingIndizes).ToArray();
+      Array.Sort(freeVariableValues, trainingValues);
+      responseChart.Series["Training Data (edge)"].Points.DataBindXY(freeVariableValues, trainingValues);
+
+      freeVariableValues = Content.ProblemData.Dataset.GetDoubleValues(freeVariable, Content.ProblemData.TestIndizes).ToArray();
+      testValues = Content.ProblemData.Dataset.GetDoubleValues(Content.ProblemData.TargetVariable,
+                                                                     Content.ProblemData.TestIndizes).ToArray();
+      Array.Sort(freeVariableValues, testValues);
+      responseChart.Series["Test Data (edge)"].Points.DataBindXY(freeVariableValues, testValues);
+
+
+
+      responseChart.ChartAreas[0].AxisX.Maximum = Math.Ceiling(freeVariableValues.Max());
+      responseChart.ChartAreas[0].AxisX.Minimum = Math.Floor(freeVariableValues.Min());
+      responseChart.ChartAreas[0].AxisY.Maximum = Math.Ceiling(Math.Max(testValues.Max(), trainingValues.Max()));
+      responseChart.ChartAreas[0].AxisY.Minimum = Math.Floor(Math.Min(testValues.Min(), trainingValues.Min()));
+    }
+
+    private void UpdateResponseSeries() {
+      string freeVariable = (string)comboBox.SelectedItem;
+
+      var freeVariableValues = Content.ProblemData.Dataset.GetDoubleValues(freeVariable, Content.ProblemData.TrainingIndizes).ToArray();
+      var responseValues = Content.Model.Interpreter.GetSymbolicExpressionTreeValues(clonedTree,
+                                                                              Content.ProblemData.Dataset,
+                                                                              Content.ProblemData.TrainingIndizes)
+                                                                              .ToArray();
+      Array.Sort(freeVariableValues, responseValues);
+      responseChart.Series["Model Response"].Points.DataBindXY(freeVariableValues, responseValues);
+    }
+
+    private void ComboBoxSelectedIndexChanged(object sender, EventArgs e) {
+      string freeVariable = (string)comboBox.SelectedItem;
+      IEnumerable<string> fixedVariables = comboBox.Items.OfType<string>()
+        .Except(new string[] { freeVariable });
+
+      variableNodes.Clear();
+      clonedTree = (ISymbolicExpressionTree)Content.Model.SymbolicExpressionTree.Clone();
+
+      foreach (var varNode in clonedTree.IterateNodesPrefix().OfType<VariableTreeNode>()) {
+        if (fixedVariables.Contains(varNode.VariableName)) {
+          if (!variableNodes.ContainsKey(varNode.VariableName))
+            variableNodes.Add(varNode.VariableName, new List<ISymbolicExpressionTreeNode>());
+
+          int childIndex = varNode.Parent.IndexOfSubtree(varNode);
+          var replacementNode = MakeConstantTreeNode(medianValues[varNode.VariableName]);
+          var parent = varNode.Parent;
+          parent.RemoveSubtree(childIndex);
+          parent.InsertSubtree(childIndex, MakeProduct(replacementNode, varNode.Weight));
+          variableNodes[varNode.VariableName].Add(replacementNode);
+        }
+      }
+
+      CreateSliders(fixedVariables);
+      UpdateScatterPlot();
+      UpdateResponseSeries();
+    }
+
+    private ISymbolicExpressionTreeNode MakeProduct(ConstantTreeNode c, double weight) {
+      var mul = new Multiplication();
+      var prod = mul.CreateTreeNode();
+      prod.AddSubtree(MakeConstantTreeNode(weight));
+      prod.AddSubtree(c);
+      return prod;
+    }
+
+    private ConstantTreeNode MakeConstantTreeNode(double value) {
+      Constant constant = new Constant();
+      constant.MinValue = value - 1;
+      constant.MaxValue = value + 1;
+      ConstantTreeNode constantTreeNode = (ConstantTreeNode)constant.CreateTreeNode();
+      constantTreeNode.Value = value;
+      return constantTreeNode;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/VariableTrackbar.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/VariableTrackbar.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/VariableTrackbar.Designer.cs	(revision 7085)
@@ -0,0 +1,136 @@
+﻿namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views {
+  partial class VariableTrackbar {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      this.valueLabel = new System.Windows.Forms.Label();
+      this.valueTextBox = new System.Windows.Forms.TextBox();
+      this.trackBar = new System.Windows.Forms.TrackBar();
+      this.boxPlotChart = new System.Windows.Forms.DataVisualization.Charting.Chart();
+      this.groupBox = new System.Windows.Forms.GroupBox();
+      ((System.ComponentModel.ISupportInitialize)(this.trackBar)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.boxPlotChart)).BeginInit();
+      this.groupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // valueLabel
+      // 
+      this.valueLabel.AutoSize = true;
+      this.valueLabel.Location = new System.Drawing.Point(6, 22);
+      this.valueLabel.Name = "valueLabel";
+      this.valueLabel.Size = new System.Drawing.Size(37, 13);
+      this.valueLabel.TabIndex = 0;
+      this.valueLabel.Text = "Value:";
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(49, 19);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.ReadOnly = true;
+      this.valueTextBox.Size = new System.Drawing.Size(56, 20);
+      this.valueTextBox.TabIndex = 1;
+      // 
+      // trackBar
+      // 
+      this.trackBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.trackBar.Location = new System.Drawing.Point(6, 45);
+      this.trackBar.Name = "trackBar";
+      this.trackBar.Orientation = System.Windows.Forms.Orientation.Vertical;
+      this.trackBar.Size = new System.Drawing.Size(45, 277);
+      this.trackBar.TabIndex = 2;
+      this.trackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+      this.trackBar.ValueChanged += new System.EventHandler(this.TrackBarValueChanged);
+      // 
+      // boxPlotChart
+      // 
+      this.boxPlotChart.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.boxPlotChart.BackColor = System.Drawing.SystemColors.Control;
+      chartArea1.AxisX.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.False;
+      chartArea1.AxisY.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.False;
+      chartArea1.BackColor = System.Drawing.SystemColors.Control;
+      chartArea1.BackSecondaryColor = System.Drawing.Color.White;
+      chartArea1.Name = "ChartArea";
+      this.boxPlotChart.ChartAreas.Add(chartArea1);
+      this.boxPlotChart.Location = new System.Drawing.Point(39, 45);
+      this.boxPlotChart.Name = "boxPlotChart";
+      series1.ChartArea = "ChartArea";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.BoxPlot;
+      series1.Name = "BoxPlot";
+      series1.YValuesPerPoint = 6;
+      series2.ChartArea = "ChartArea";
+      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
+      series2.Enabled = false;
+      series2.Name = "DataSeries";
+      this.boxPlotChart.Series.Add(series1);
+      this.boxPlotChart.Series.Add(series2);
+      this.boxPlotChart.Size = new System.Drawing.Size(66, 277);
+      this.boxPlotChart.TabIndex = 3;
+      this.boxPlotChart.Text = "boxPlotChart";
+      // 
+      // groupBox
+      // 
+      this.groupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.groupBox.Controls.Add(this.valueLabel);
+      this.groupBox.Controls.Add(this.boxPlotChart);
+      this.groupBox.Controls.Add(this.valueTextBox);
+      this.groupBox.Controls.Add(this.trackBar);
+      this.groupBox.Location = new System.Drawing.Point(3, 3);
+      this.groupBox.Name = "groupBox";
+      this.groupBox.Size = new System.Drawing.Size(111, 328);
+      this.groupBox.TabIndex = 4;
+      this.groupBox.TabStop = false;
+      this.groupBox.Text = "groupBox";
+      // 
+      // VariableTrackbar
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.groupBox);
+      this.Name = "VariableTrackbar";
+      this.Size = new System.Drawing.Size(117, 334);
+      ((System.ComponentModel.ISupportInitialize)(this.trackBar)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.boxPlotChart)).EndInit();
+      this.groupBox.ResumeLayout(false);
+      this.groupBox.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label valueLabel;
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.TrackBar trackBar;
+    private System.Windows.Forms.DataVisualization.Charting.Chart boxPlotChart;
+    private System.Windows.Forms.GroupBox groupBox;
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/VariableTrackbar.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/VariableTrackbar.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/VariableTrackbar.cs	(revision 7085)
@@ -0,0 +1,62 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views {
+  public partial class VariableTrackbar : UserControl {
+    private readonly string variableName;
+    private const double FACTOR = 1000;
+
+    public double Value {
+      get { return trackBar.Value / FACTOR; }
+    }
+
+    public string VariableName {
+      get { return variableName; }
+    }
+
+    public VariableTrackbar(string variableName, IEnumerable<double> values) {
+      InitializeComponent();
+      this.variableName = variableName;
+      groupBox.Text = variableName;
+      var valuesArr = values.ToArray();
+      this.valueTextBox.Text = string.Format("{0:0.000e+00}", valuesArr.Median());
+      boxPlotChart.Series["DataSeries"].Points.Clear();
+      boxPlotChart.Series["DataSeries"].Points.DataBindY(valuesArr);
+      boxPlotChart.Series["BoxPlot"].ChartType = SeriesChartType.BoxPlot;
+      boxPlotChart.Series["BoxPlot"]["BoxPlotSeries"] = "DataSeries";
+      boxPlotChart.Series["BoxPlot"]["BoxPlotWhiskerPercentile"] = "5";
+      boxPlotChart.Series["BoxPlot"]["BoxPlotPercentile"] = "30";
+      boxPlotChart.Series["BoxPlot"]["BoxPlotShowAverage"] = "true";
+      boxPlotChart.Series["BoxPlot"]["BoxPlotShowMedian"] = "true";
+      boxPlotChart.Series["BoxPlot"]["BoxPlotShowUnusualValues"] = "true";
+      boxPlotChart.ChartAreas[0].AxisY.Minimum = valuesArr.Min() ;
+      boxPlotChart.ChartAreas[0].AxisY.Maximum = valuesArr.Max() ;
+      
+
+      trackBar.Minimum = (int)Math.Round(valuesArr.Min() * FACTOR);
+      trackBar.Maximum = (int)Math.Round(valuesArr.Max() * FACTOR);
+      trackBar.Value = (int)Math.Round(valuesArr.Median() * FACTOR);
+      trackBar.TickStyle = TickStyle.None;
+      trackBar.Tag = variableName;
+    }
+
+    private void TrackBarValueChanged(object sender, EventArgs e) {
+      valueTextBox.Text = string.Format("{0:0.000e+00}", trackBar.Value / FACTOR);
+      RaiseValueChanged(EventArgs.Empty);
+    }
+
+    public event EventHandler ValueChanged;
+    private void RaiseValueChanged(EventArgs e) {
+      var handler = ValueChanged;
+      if (handler != null) handler(this, e);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj	(revision 7085)
@@ -95,4 +95,5 @@
     <Reference Include="ALGLIB-3.1.0, Version=3.1.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\ALGLIB-3.1.0.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj	(revision 7085)
@@ -95,4 +95,5 @@
     <Reference Include="ALGLIB-3.1.0, Version=3.1.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\ALGLIB-3.1.0.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 7085)
@@ -95,4 +95,5 @@
     <Reference Include="ALGLIB-3.1.0, Version=3.1.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\ALGLIB-3.1.0.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
@@ -114,10 +115,4 @@
   <ItemGroup>
     <Compile Include="Plugin.cs" />
-    <Compile Include="SymbolicDataAnalysisSolutionResponseFunctionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="SymbolicDataAnalysisSolutionResponseFunctionView.Designer.cs">
-      <DependentUpon>SymbolicDataAnalysisSolutionResponseFunctionView.cs</DependentUpon>
-    </Compile>
     <Compile Include="TextualSymbolicDataAnalysisModelView.cs">
       <SubType>UserControl</SubType>
@@ -167,10 +162,4 @@
     <Compile Include="Symbols\VariableView.Designer.cs">
       <DependentUpon>VariableView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="VariableTrackbar.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="VariableTrackbar.Designer.cs">
-      <DependentUpon>VariableTrackbar.cs</DependentUpon>
     </Compile>
     <None Include="HeuristicLab.snk" />
Index: anches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.Designer.cs	(revision 7084)
+++ 	(revision )
@@ -1,132 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  partial class SymbolicDataAnalysisSolutionResponseFunctionView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
-      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
-      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
-      this.flowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
-      this.responseChart = new System.Windows.Forms.DataVisualization.Charting.Chart();
-      this.comboBox = new System.Windows.Forms.ComboBox();
-      this.freeVariableLabel = new System.Windows.Forms.Label();
-      ((System.ComponentModel.ISupportInitialize)(this.responseChart)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // flowLayoutPanel
-      // 
-      this.flowLayoutPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.flowLayoutPanel.AutoScroll = true;
-      this.flowLayoutPanel.Location = new System.Drawing.Point(3, 202);
-      this.flowLayoutPanel.Name = "flowLayoutPanel";
-      this.flowLayoutPanel.Size = new System.Drawing.Size(261, 268);
-      this.flowLayoutPanel.TabIndex = 2;
-      this.flowLayoutPanel.WrapContents = false;
-      // 
-      // responseChart
-      // 
-      this.responseChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      chartArea1.Name = "ChartArea";
-      this.responseChart.ChartAreas.Add(chartArea1);
-      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
-      legend1.LegendStyle = System.Windows.Forms.DataVisualization.Charting.LegendStyle.Row;
-      legend1.Name = "Legend";
-      this.responseChart.Legends.Add(legend1);
-      this.responseChart.Location = new System.Drawing.Point(3, 30);
-      this.responseChart.Name = "responseChart";
-      series1.ChartArea = "ChartArea";
-      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine;
-      series1.Legend = "Legend";
-      series1.MarkerSize = 3;
-      series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
-      series1.Name = "Model Response";
-      this.responseChart.Series.Add(series1);
-      this.responseChart.Size = new System.Drawing.Size(258, 166);
-      this.responseChart.TabIndex = 3;
-      // 
-      // comboBox
-      // 
-      this.comboBox.FormattingEnabled = true;
-      this.comboBox.Location = new System.Drawing.Point(80, 3);
-      this.comboBox.Name = "comboBox";
-      this.comboBox.Size = new System.Drawing.Size(166, 21);
-      this.comboBox.TabIndex = 4;
-      this.comboBox.SelectedIndexChanged += new System.EventHandler(this.ComboBoxSelectedIndexChanged);
-      // 
-      // freeVariableLabel
-      // 
-      this.freeVariableLabel.AutoSize = true;
-      this.freeVariableLabel.Location = new System.Drawing.Point(3, 6);
-      this.freeVariableLabel.Name = "freeVariableLabel";
-      this.freeVariableLabel.Size = new System.Drawing.Size(71, 13);
-      this.freeVariableLabel.TabIndex = 5;
-      this.freeVariableLabel.Text = "Free variable:";
-      // 
-      // SymbolicDataAnalysisSolutionResponseFunctionView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.freeVariableLabel);
-      this.Controls.Add(this.comboBox);
-      this.Controls.Add(this.responseChart);
-      this.Controls.Add(this.flowLayoutPanel);
-      this.Name = "SymbolicDataAnalysisSolutionResponseFunctionView";
-      this.Size = new System.Drawing.Size(264, 473);
-      ((System.ComponentModel.ISupportInitialize)(this.responseChart)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel;
-    private System.Windows.Forms.DataVisualization.Charting.Chart responseChart;
-    private System.Windows.Forms.ComboBox comboBox;
-    private System.Windows.Forms.Label freeVariableLabel;
-  }
-}
Index: anches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.cs	(revision 7084)
+++ 	(revision )
@@ -1,175 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using System.Windows.Forms;
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.MainForm;
-using HeuristicLab.MainForm.WindowsForms;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  [View("Response Function View")]
-  [Content(typeof(RegressionSolutionBase), false)]
-  public partial class SymbolicDataAnalysisSolutionResponseFunctionView : AsynchronousContentView {
-    private Dictionary<string, List<ISymbolicExpressionTreeNode>> variableNodes;
-    private ISymbolicExpressionTree clonedTree;
-    private Dictionary<string, double> medianValues;
-    public SymbolicDataAnalysisSolutionResponseFunctionView() {
-      InitializeComponent();
-      this.variableNodes = new Dictionary<string, List<ISymbolicExpressionTreeNode>>();
-      medianValues = new Dictionary<string, double>();
-      this.Caption = "Response Function View";
-    }
-
-    public new ISymbolicDataAnalysisSolution Content {
-      get { return (ISymbolicDataAnalysisSolution)base.Content; }
-      set { base.Content = value; }
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.ModelChanged += new EventHandler(Content_ModelChanged);
-      Content.ProblemDataChanged += new EventHandler(Content_ProblemDataChanged);
-    }
-    protected override void DeregisterContentEvents() {
-      base.DeregisterContentEvents();
-      Content.ModelChanged -= new EventHandler(Content_ModelChanged);
-      Content.ProblemDataChanged -= new EventHandler(Content_ProblemDataChanged);
-    }
-
-    private void Content_ModelChanged(object sender, EventArgs e) {
-      OnModelChanged();
-    }
-    private void Content_ProblemDataChanged(object sender, EventArgs e) {
-      OnProblemDataChanged();
-    }
-
-    protected virtual void OnModelChanged() {
-      this.UpdateView();
-    }
-
-    protected virtual void OnProblemDataChanged() {
-      this.UpdateView();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      this.UpdateView();
-    }
-
-    private void UpdateView() {
-      if (Content != null && Content.Model != null && Content.ProblemData != null) {
-        var referencedVariables =
-       (from varNode in Content.Model.SymbolicExpressionTree.IterateNodesPrefix().OfType<VariableTreeNode>()
-        select varNode.VariableName)
-         .Distinct()
-         .OrderBy(x => x)
-         .ToList();
-
-        medianValues.Clear();
-        foreach (var variableName in referencedVariables) {
-          medianValues.Add(variableName, Content.ProblemData.Dataset.GetDoubleValues(variableName).Median());
-        }
-
-        comboBox.Items.Clear();
-        comboBox.Items.AddRange(referencedVariables.ToArray());
-        comboBox.SelectedIndex = 0;
-      }
-    }
-
-    private void CreateSliders(IEnumerable<string> variableNames) {
-      flowLayoutPanel.Controls.Clear();
-
-      foreach (var variableName in variableNames) {
-        var variableTrackbar = new VariableTrackbar(variableName,
-                                                    Content.ProblemData.Dataset.GetDoubleValues(variableName));
-        variableTrackbar.Size = new Size(variableTrackbar.Size.Width, flowLayoutPanel.Size.Height - 23);
-        variableTrackbar.ValueChanged += TrackBarValueChanged;
-        flowLayoutPanel.Controls.Add(variableTrackbar);
-      }
-    }
-
-    private void TrackBarValueChanged(object sender, EventArgs e) {
-      var trackBar = (VariableTrackbar)sender;
-      string variableName = trackBar.VariableName;
-      ChangeVariableValue(variableName, trackBar.Value);
-    }
-
-    private void ChangeVariableValue(string variableName, double value) {
-      foreach (var constNode in variableNodes[variableName].Cast<ConstantTreeNode>())
-        constNode.Value = value;
-
-      UpdateChart();
-    }
-
-    private void UpdateChart() {
-      string freeVariable = (string)comboBox.SelectedItem;
-      IEnumerable<string> fixedVariables = comboBox.Items.OfType<string>()
-        .Except(new string[] { freeVariable });
-
-      var freeVariableValues = Content.ProblemData.Dataset.GetDoubleValues(freeVariable, Content.ProblemData.TrainingIndizes).ToArray();
-      var responseValues = Content.Model.Interpreter.GetSymbolicExpressionTreeValues(clonedTree,
-                                                                              Content.ProblemData.Dataset,
-                                                                              Content.ProblemData.TrainingIndizes).ToArray();
-      Array.Sort(freeVariableValues, responseValues);
-      responseChart.Series["Model Response"].Points.DataBindXY(freeVariableValues, responseValues);
-    }
-
-    private ConstantTreeNode MakeConstantTreeNode(double value) {
-      Constant constant = new Constant();
-      constant.MinValue = value - 1;
-      constant.MaxValue = value + 1;
-      ConstantTreeNode constantTreeNode = (ConstantTreeNode)constant.CreateTreeNode();
-      constantTreeNode.Value = value;
-      return constantTreeNode;
-    }
-
-    private void ComboBoxSelectedIndexChanged(object sender, EventArgs e) {
-      string freeVariable = (string)comboBox.SelectedItem;
-      IEnumerable<string> fixedVariables = comboBox.Items.OfType<string>()
-        .Except(new string[] { freeVariable });
-
-      variableNodes.Clear();
-      clonedTree = (ISymbolicExpressionTree)Content.Model.SymbolicExpressionTree.Clone();
-
-      foreach (var varNode in clonedTree.IterateNodesPrefix().OfType<VariableTreeNode>()) {
-        if (fixedVariables.Contains(varNode.VariableName)) {
-          if (!variableNodes.ContainsKey(varNode.VariableName))
-            variableNodes.Add(varNode.VariableName, new List<ISymbolicExpressionTreeNode>());
-
-          int childIndex = varNode.Parent.IndexOfSubtree(varNode);
-          var replacementNode = MakeConstantTreeNode(medianValues[varNode.VariableName]);
-          var parent = varNode.Parent;
-          parent.RemoveSubtree(childIndex);
-          parent.InsertSubtree(childIndex, replacementNode);
-          variableNodes[varNode.VariableName].Add(replacementNode);
-        }
-      }
-
-      CreateSliders(fixedVariables);
-      UpdateChart();
-    }
-  }
-}
Index: anches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/VariableTrackbar.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/VariableTrackbar.Designer.cs	(revision 7084)
+++ 	(revision )
@@ -1,136 +1,0 @@
-﻿namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  partial class VariableTrackbar {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
-      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
-      System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
-      this.valueLabel = new System.Windows.Forms.Label();
-      this.valueTextBox = new System.Windows.Forms.TextBox();
-      this.trackBar = new System.Windows.Forms.TrackBar();
-      this.boxPlotChart = new System.Windows.Forms.DataVisualization.Charting.Chart();
-      this.groupBox = new System.Windows.Forms.GroupBox();
-      ((System.ComponentModel.ISupportInitialize)(this.trackBar)).BeginInit();
-      ((System.ComponentModel.ISupportInitialize)(this.boxPlotChart)).BeginInit();
-      this.groupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // valueLabel
-      // 
-      this.valueLabel.AutoSize = true;
-      this.valueLabel.Location = new System.Drawing.Point(6, 22);
-      this.valueLabel.Name = "valueLabel";
-      this.valueLabel.Size = new System.Drawing.Size(37, 13);
-      this.valueLabel.TabIndex = 0;
-      this.valueLabel.Text = "Value:";
-      // 
-      // valueTextBox
-      // 
-      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.valueTextBox.Location = new System.Drawing.Point(49, 19);
-      this.valueTextBox.Name = "valueTextBox";
-      this.valueTextBox.ReadOnly = true;
-      this.valueTextBox.Size = new System.Drawing.Size(56, 20);
-      this.valueTextBox.TabIndex = 1;
-      // 
-      // trackBar
-      // 
-      this.trackBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)));
-      this.trackBar.Location = new System.Drawing.Point(6, 45);
-      this.trackBar.Name = "trackBar";
-      this.trackBar.Orientation = System.Windows.Forms.Orientation.Vertical;
-      this.trackBar.Size = new System.Drawing.Size(45, 277);
-      this.trackBar.TabIndex = 2;
-      this.trackBar.TickStyle = System.Windows.Forms.TickStyle.None;
-      this.trackBar.ValueChanged += new System.EventHandler(this.TrackBarValueChanged);
-      // 
-      // boxPlotChart
-      // 
-      this.boxPlotChart.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)));
-      this.boxPlotChart.BackColor = System.Drawing.SystemColors.Control;
-      chartArea1.AxisX.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.False;
-      chartArea1.AxisY.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.False;
-      chartArea1.BackColor = System.Drawing.SystemColors.Control;
-      chartArea1.BackSecondaryColor = System.Drawing.Color.White;
-      chartArea1.Name = "ChartArea";
-      this.boxPlotChart.ChartAreas.Add(chartArea1);
-      this.boxPlotChart.Location = new System.Drawing.Point(39, 45);
-      this.boxPlotChart.Name = "boxPlotChart";
-      series1.ChartArea = "ChartArea";
-      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.BoxPlot;
-      series1.Name = "BoxPlot";
-      series1.YValuesPerPoint = 6;
-      series2.ChartArea = "ChartArea";
-      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
-      series2.Enabled = false;
-      series2.Name = "DataSeries";
-      this.boxPlotChart.Series.Add(series1);
-      this.boxPlotChart.Series.Add(series2);
-      this.boxPlotChart.Size = new System.Drawing.Size(66, 277);
-      this.boxPlotChart.TabIndex = 3;
-      this.boxPlotChart.Text = "boxPlotChart";
-      // 
-      // groupBox
-      // 
-      this.groupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.groupBox.Controls.Add(this.valueLabel);
-      this.groupBox.Controls.Add(this.boxPlotChart);
-      this.groupBox.Controls.Add(this.valueTextBox);
-      this.groupBox.Controls.Add(this.trackBar);
-      this.groupBox.Location = new System.Drawing.Point(3, 3);
-      this.groupBox.Name = "groupBox";
-      this.groupBox.Size = new System.Drawing.Size(111, 328);
-      this.groupBox.TabIndex = 4;
-      this.groupBox.TabStop = false;
-      this.groupBox.Text = "groupBox";
-      // 
-      // VariableTrackbar
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.groupBox);
-      this.Name = "VariableTrackbar";
-      this.Size = new System.Drawing.Size(117, 334);
-      ((System.ComponentModel.ISupportInitialize)(this.trackBar)).EndInit();
-      ((System.ComponentModel.ISupportInitialize)(this.boxPlotChart)).EndInit();
-      this.groupBox.ResumeLayout(false);
-      this.groupBox.PerformLayout();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label valueLabel;
-    private System.Windows.Forms.TextBox valueTextBox;
-    private System.Windows.Forms.TrackBar trackBar;
-    private System.Windows.Forms.DataVisualization.Charting.Chart boxPlotChart;
-    private System.Windows.Forms.GroupBox groupBox;
-  }
-}
Index: anches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/VariableTrackbar.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/VariableTrackbar.cs	(revision 7084)
+++ 	(revision )
@@ -1,62 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using System.Windows.Forms.DataVisualization.Charting;
-using HeuristicLab.Common;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  public partial class VariableTrackbar : UserControl {
-    private readonly string variableName;
-    private const double FACTOR = 1000;
-
-    public double Value {
-      get { return trackBar.Value / FACTOR; }
-    }
-
-    public string VariableName {
-      get { return variableName; }
-    }
-
-    public VariableTrackbar(string variableName, IEnumerable<double> values) {
-      InitializeComponent();
-      this.variableName = variableName;
-      groupBox.Text = variableName;
-      var valuesArr = values.ToArray();
-      this.valueTextBox.Text = string.Format("{0:0.000e+00}", valuesArr.Median());
-      boxPlotChart.Series["DataSeries"].Points.Clear();
-      boxPlotChart.Series["DataSeries"].Points.DataBindY(valuesArr);
-      boxPlotChart.Series["BoxPlot"].ChartType = SeriesChartType.BoxPlot;
-      boxPlotChart.Series["BoxPlot"]["BoxPlotSeries"] = "DataSeries";
-      boxPlotChart.Series["BoxPlot"]["BoxPlotWhiskerPercentile"] = "5";
-      boxPlotChart.Series["BoxPlot"]["BoxPlotPercentile"] = "30";
-      boxPlotChart.Series["BoxPlot"]["BoxPlotShowAverage"] = "true";
-      boxPlotChart.Series["BoxPlot"]["BoxPlotShowMedian"] = "true";
-      boxPlotChart.Series["BoxPlot"]["BoxPlotShowUnusualValues"] = "true";
-      boxPlotChart.ChartAreas[0].AxisY.Minimum = valuesArr.Min() ;
-      boxPlotChart.ChartAreas[0].AxisY.Maximum = valuesArr.Max() ;
-      
-
-      trackBar.Minimum = (int)Math.Round(valuesArr.Min() * FACTOR);
-      trackBar.Maximum = (int)Math.Round(valuesArr.Max() * FACTOR);
-      trackBar.Value = (int)Math.Round(valuesArr.Median() * FACTOR);
-      trackBar.TickStyle = TickStyle.None;
-      trackBar.Tag = variableName;
-    }
-
-    private void TrackBarValueChanged(object sender, EventArgs e) {
-      valueTextBox.Text = string.Format("{0:0.000e+00}", trackBar.Value / FACTOR);
-      RaiseValueChanged(EventArgs.Empty);
-    }
-
-    public event EventHandler ValueChanged;
-    private void RaiseValueChanged(EventArgs e) {
-      var handler = ValueChanged;
-      if (handler != null) handler(this, e);
-    }
-  }
-}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisVariableFrequencyAnalyzer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisVariableFrequencyAnalyzer.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisVariableFrequencyAnalyzer.cs	(revision 7085)
@@ -23,13 +23,12 @@
 using System.Collections.Generic;
 using System.Linq;
+using HeuristicLab.Analysis;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Analysis;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
@@ -139,5 +138,5 @@
       double totalNumberOfSymbols = variableFrequencies.Values.Sum();
 
-      foreach (var pair in variableFrequencies)
+      foreach (var pair in variableFrequencies.OrderBy(p => p.Key, new NaturalStringComparer()))
         yield return new KeyValuePair<string, double>(pair.Key, pair.Value / totalNumberOfSymbols);
     }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/MultiSymbolicDataAnalysisExpressionCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/MultiSymbolicDataAnalysisExpressionCreator.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/MultiSymbolicDataAnalysisExpressionCreator.cs	(revision 7085)
@@ -0,0 +1,152 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Creators {
+  public class MultiSymbolicDataAnalysisExpressionCreator : StochasticMultiBranch<ISymbolicDataAnalysisSolutionCreator>,
+    ISymbolicDataAnalysisSolutionCreator,
+    ISymbolicExpressionTreeSizeConstraintOperator,
+  ISymbolicExpressionTreeGrammarBasedOperator {
+    private const string SymbolicExpressionTreeParameterName = "SymbolicExpressionTree";
+    private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
+    private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
+    private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";
+    private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar";
+
+    public override bool CanChangeName {
+      get { return false; }
+    }
+    protected override bool CreateChildOperation {
+      get { return true; }
+    }
+
+    #region parameter properties
+    public ILookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter {
+      get { return (ILookupParameter<ISymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName]; }
+    }
+    public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; }
+    }
+    public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }
+    }
+    public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
+      get { return (IValueLookupParameter<ISymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }
+    }
+    public ILookupParameter<ISymbolicExpressionGrammar> ClonedSymbolicExpressionTreeGrammarParameter {
+      get { return (ILookupParameter<ISymbolicExpressionGrammar>)Parameters[ClonedSymbolicExpressionTreeGrammarParameterName]; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected MultiSymbolicDataAnalysisExpressionCreator(bool deserializing) : base(deserializing) { }
+    protected MultiSymbolicDataAnalysisExpressionCreator(MultiSymbolicDataAnalysisExpressionCreator original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) { return new MultiSymbolicDataAnalysisExpressionCreator(this, cloner); }
+    public MultiSymbolicDataAnalysisExpressionCreator()
+      : base() {
+      Parameters.Add(new LookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression tree on which the operator should be applied."));
+      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, "The maximal length (number of nodes) of the symbolic expression tree."));
+      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, "The maximal depth of the symbolic expression tree (a tree with one node has depth = 0)."));
+      Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName, "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));
+      Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName, "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
+
+      List<ISymbolicDataAnalysisSolutionCreator> list = new List<ISymbolicDataAnalysisSolutionCreator>();
+      foreach (Type type in ApplicationManager.Manager.GetTypes(typeof(ISymbolicDataAnalysisSolutionCreator))) {
+        if (this.GetType().Assembly != type.Assembly) continue;
+        if (typeof(IMultiOperator<ISymbolicDataAnalysisSolutionCreator>).IsAssignableFrom(type)) continue;
+        list.Add((ISymbolicDataAnalysisSolutionCreator)Activator.CreateInstance(type));
+      }
+      CheckedItemList<ISymbolicDataAnalysisSolutionCreator> checkedItemList = new CheckedItemList<ISymbolicDataAnalysisSolutionCreator>();
+      checkedItemList.AddRange(list.OrderBy(op => op.Name));
+      Operators = checkedItemList.AsReadOnly();
+      Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicDataAnalysisSolutionCreator>>(Operators.CheckedItems));
+
+    }
+
+    public override IOperation Apply() {
+      if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {
+        SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;
+        IScope globalScope = ExecutionContext.Scope;
+        while (globalScope.Parent != null)
+          globalScope = globalScope.Parent;
+
+        globalScope.Variables.Add(new Core.Variable(ClonedSymbolicExpressionTreeGrammarParameterName, (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));
+      }
+      return base.Apply();
+    }
+
+    public ISymbolicExpressionTree CreateTree(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth) {
+      double sum = Operators.CheckedItems.Sum(o => Probabilities[o.Index]);
+      if (sum.IsAlmost(0)) throw new InvalidOperationException(Name + ": All selected operators have zero probability.");
+      double r = random.NextDouble() * sum;
+      sum = 0;
+      int index = -1;
+      foreach (var indexedItem in Operators.CheckedItems) {
+        sum += Probabilities[indexedItem.Index];
+        if (sum > r) {
+          index = indexedItem.Index;
+          break;
+        }
+      }
+      return Operators[index].CreateTree(random, grammar, maxTreeLength, maxTreeDepth);
+    }
+
+    protected override void Operators_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<ISymbolicDataAnalysisSolutionCreator>> e) {
+      base.Operators_ItemsReplaced(sender, e);
+      ParameterizeTreeCreators();
+    }
+
+    protected override void Operators_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<ISymbolicDataAnalysisSolutionCreator>> e) {
+      base.Operators_ItemsAdded(sender, e);
+      ParameterizeTreeCreators();
+    }
+    private void ParameterizeTreeCreators() {
+      foreach (IStochasticOperator creator in Operators.OfType<IStochasticOperator>()) {
+        creator.RandomParameter.ActualName = RandomParameter.Name;
+      }
+      foreach (ISymbolicExpressionTreeCreator creator in Operators.OfType<ISymbolicExpressionTreeCreator>()) {
+        creator.SymbolicExpressionTreeParameter.ActualName = SymbolicExpressionTreeParameter.Name;
+      }
+      foreach (ISymbolicExpressionTreeSizeConstraintOperator creator in Operators.OfType<ISymbolicExpressionTreeSizeConstraintOperator>()) {
+        creator.MaximumSymbolicExpressionTreeDepthParameter.ActualName = MaximumSymbolicExpressionTreeDepthParameter.Name;
+        creator.MaximumSymbolicExpressionTreeLengthParameter.ActualName = MaximumSymbolicExpressionTreeLengthParameter.Name;
+      }
+
+      foreach (ISymbolicExpressionTreeGrammarBasedOperator creator in Operators.OfType<ISymbolicExpressionTreeGrammarBasedOperator>()) {
+        creator.SymbolicExpressionTreeGrammarParameter.ActualName = SymbolicExpressionTreeGrammarParameter.Name;
+      }
+    }
+
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionFullTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionFullTreeCreator.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionFullTreeCreator.cs	(revision 7085)
@@ -0,0 +1,40 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [StorableClass]
+  [Item("FullTreeCreator", "An operator that creates new symbolic expression trees using the 'Full' method")]
+  public class SymbolicDataAnalysisExpressionFullTreeCreator : FullTreeCreator, ISymbolicDataAnalysisSolutionCreator {
+    [StorableConstructor]
+    protected SymbolicDataAnalysisExpressionFullTreeCreator(bool deserializing) : base(deserializing) { }
+    protected SymbolicDataAnalysisExpressionFullTreeCreator(SymbolicDataAnalysisExpressionFullTreeCreator original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionFullTreeCreator(this, cloner); }
+
+    public SymbolicDataAnalysisExpressionFullTreeCreator() : base() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionGrowTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionGrowTreeCreator.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionGrowTreeCreator.cs	(revision 7085)
@@ -0,0 +1,40 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+using System;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [StorableClass]
+  [Item("GrowTreeCreator", "An operator that creates new symbolic expression trees using the 'Grow' method")]
+  public class SymbolicDataAnalysisExpressionGrowTreeCreator : GrowTreeCreator, ISymbolicDataAnalysisSolutionCreator {
+    [StorableConstructor]
+    protected SymbolicDataAnalysisExpressionGrowTreeCreator(bool deserializing) : base(deserializing) { }
+    protected SymbolicDataAnalysisExpressionGrowTreeCreator(SymbolicDataAnalysisExpressionGrowTreeCreator original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionGrowTreeCreator(this, cloner); }
+
+    public SymbolicDataAnalysisExpressionGrowTreeCreator() : base() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator.cs	(revision 7085)
@@ -0,0 +1,40 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+using System;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [StorableClass]
+  [Item("RampedHalfAndHalfTreeCreator", "An operator that creates new symbolic expression trees in an alternate way: half the trees are created usign the 'Grow' method while the other half are created using the 'Full' method")]
+  public class SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator : RampedHalfAndHalfTreeCreator, ISymbolicDataAnalysisSolutionCreator {
+    [StorableConstructor]
+    protected SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator(bool deserializing) : base(deserializing) { }
+    protected SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator(SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator(this, cloner); }
+
+    public SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator() : base() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionTreeCreator.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolicDataAnalysisExpressionTreeCreator.cs	(revision 7085)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [StorableClass]
+  [Item("ProbabilisticTreeCreator", "An operator that creates new symbolic expression trees with uniformly distributed length")]
+  public class SymbolicDataAnalysisExpressionTreeCreator : ProbabilisticTreeCreator, ISymbolicDataAnalysisSolutionCreator {
+    [StorableConstructor]
+    protected SymbolicDataAnalysisExpressionTreeCreator(bool deserializing) : base(deserializing) { }
+    protected SymbolicDataAnalysisExpressionTreeCreator(SymbolicDataAnalysisExpressionTreeCreator original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionTreeCreator(this, cloner); }
+
+    public SymbolicDataAnalysisExpressionTreeCreator() : base() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionLatexFormatter.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionLatexFormatter.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionLatexFormatter.cs	(revision 7085)
@@ -20,12 +20,12 @@
 #endregion
 
+using System;
+using System.Collections.Generic;
+using System.Linq;
 using System.Text;
-using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using System.Collections.Generic;
-using System;
-using HeuristicLab.Core;
-using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
@@ -58,7 +58,8 @@
         constants.Clear();
         strBuilder.AppendLine("% needs \\usepackage{amsmath}");
-        strBuilder.AppendLine("\\begin{align}");
+        strBuilder.AppendLine("\\begin{align*}");
+        strBuilder.AppendLine("\\nonumber");
         strBuilder.AppendLine(FormatRecursively(symbolicExpressionTree.Root));
-        strBuilder.AppendLine("\\end{align}");
+        strBuilder.AppendLine("\\end{align*}");
         return strBuilder.ToString();
       }
@@ -89,10 +90,10 @@
     private void FormatBegin(ISymbolicExpressionTreeNode node, StringBuilder strBuilder) {
       if (node.Symbol is Addition) {
-        strBuilder.Append(@" \left( ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is Subtraction) {
         if (node.SubtreeCount == 1) {
-          strBuilder.Append(@"- \left(");
+          strBuilder.Append(@"- ");
         } else {
-          strBuilder.Append(@" \left( ");
+          strBuilder.Append(@"  ");
         }
       } else if (node.Symbol is Multiplication) {
@@ -108,27 +109,27 @@
           strBuilder.Append(@" \cfrac{1}{" + node.SubtreeCount + @"}");
         }
-        strBuilder.Append(@" \left(");
+        strBuilder.Append(@" ");
       } else if (node.Symbol is Logarithm) {
-        strBuilder.Append(@"\log \left(");
+        strBuilder.Append(@"\log ");
       } else if (node.Symbol is Exponential) {
-        strBuilder.Append(@"\exp \left(");
+        strBuilder.Append(@"\exp ");
       } else if (node.Symbol is Sine) {
-        strBuilder.Append(@"\sin \left(");
+        strBuilder.Append(@"\sin ");
       } else if (node.Symbol is Cosine) {
-        strBuilder.Append(@"\cos \left(");
+        strBuilder.Append(@"\cos ");
       } else if (node.Symbol is Tangent) {
-        strBuilder.Append(@"\tan \left(");
+        strBuilder.Append(@"\tan ");
       } else if (node.Symbol is GreaterThan) {
-        strBuilder.Append(@" \left( ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is LessThan) {
-        strBuilder.Append(@" \left( ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is And) {
-        strBuilder.Append(@" \left( \left( ");
+        strBuilder.Append(@"   ");
       } else if (node.Symbol is Or) {
-        strBuilder.Append(@" \left( \left( ");
+        strBuilder.Append(@"   ");
       } else if (node.Symbol is Not) {
-        strBuilder.Append(@" \neg \left( ");
+        strBuilder.Append(@" \neg  ");
       } else if (node.Symbol is IfThenElse) {
-        strBuilder.Append(@"\left( \operatorname{if} \left( 0 < ");
+        strBuilder.Append(@" \operatorname{if}  0 < ");
       } else if (node.Symbol is Constant) {
         strBuilder.Append("c_{" + constants.Count + "} ");
@@ -137,12 +138,19 @@
       } else if (node.Symbol is LaggedVariable) {
         var laggedVarNode = node as LaggedVariableTreeNode;
-        strBuilder.Append("c_{" + constants.Count + "} " + laggedVarNode.VariableName);
+        if (!laggedVarNode.Weight.IsAlmost(1.0)) {
+          strBuilder.Append("c_{" + constants.Count + "} \\cdot ");
+          constants.Add(laggedVarNode.Weight);
+        }
+        strBuilder.Append(EscapeLatexString(laggedVarNode.VariableName));
         strBuilder.Append(LagToString(currentLag + laggedVarNode.Lag));
-        constants.Add(laggedVarNode.Weight);
-      } else if (node.Symbol is HeuristicLab.Problems.DataAnalysis.Symbolic.Variable) {
+
+      } else if (node.Symbol is Variable) {
         var varNode = node as VariableTreeNode;
-        strBuilder.Append("c_{" + constants.Count + "} " + varNode.VariableName);
+        if (!varNode.Weight.IsAlmost((1.0))) {
+          strBuilder.Append("c_{" + constants.Count + "} \\cdot ");
+          constants.Add(varNode.Weight);
+        }
+        strBuilder.Append(EscapeLatexString(varNode.VariableName));
         strBuilder.Append(LagToString(currentLag));
-        constants.Add(varNode.Weight);
       } else if (node.Symbol is ProgramRootSymbol) {
       } else if (node.Symbol is Defun) {
@@ -151,5 +159,5 @@
       } else if (node.Symbol is InvokeFunction) {
         var invokeNode = node as InvokeFunctionTreeNode;
-        strBuilder.Append(invokeNode.Symbol.FunctionName + @" \left( ");
+        strBuilder.Append(invokeNode.Symbol.FunctionName + @"  ");
       } else if (node.Symbol is StartSymbol) {
         strBuilder.Append("Result & = ");
@@ -158,23 +166,23 @@
         strBuilder.Append(" ARG+" + argSym.ArgumentIndex + " ");
       } else if (node.Symbol is Derivative) {
-        strBuilder.Append(@" \cfrac{d \left(");
+        strBuilder.Append(@" \cfrac{d ");
       } else if (node.Symbol is TimeLag) {
         var laggedNode = node as ILaggedTreeNode;
         currentLag += laggedNode.Lag;
       } else if (node.Symbol is Power) {
-        strBuilder.Append(@"\left(");
+        strBuilder.Append(@"");
       } else if (node.Symbol is Root) {
-        strBuilder.Append(@"\left(");
+        strBuilder.Append(@"");
       } else if (node.Symbol is Integral) {
         // actually a new variable for t is needed in all subtrees (TODO)
         var laggedTreeNode = node as ILaggedTreeNode;
-        strBuilder.Append(@"\sum_{t=" + (laggedTreeNode.Lag + currentLag) + @"}^0 \left(");
+        strBuilder.Append(@"\sum_{t=" + (laggedTreeNode.Lag + currentLag) + @"}^0 ");
       } else if (node.Symbol is VariableCondition) {
         var conditionTreeNode = node as VariableConditionTreeNode;
-        string p = @"1 / \left( 1 + \exp \left( - c_{" + constants.Count + "} ";
+        string p = @"1 /  1 + \exp  - c_{" + constants.Count + "} ";
         constants.Add(conditionTreeNode.Slope);
-        p += @" \cdot \left(" + conditionTreeNode.VariableName + LagToString(currentLag) + " - c_{" + constants.Count + @"} \right) \right) \right)";
+        p += @" \cdot " + EscapeLatexString(conditionTreeNode.VariableName) + LagToString(currentLag) + " - c_{" + constants.Count + @"}   ";
         constants.Add(conditionTreeNode.Threshold);
-        strBuilder.Append(@"\left( " + p + @"\cdot ");
+        strBuilder.Append(@" " + p + @"\cdot ");
       } else {
         throw new NotImplementedException("Export of " + node.Symbol + " is not implemented.");
@@ -208,11 +216,11 @@
         strBuilder.Append(@" < ");
       } else if (node.Symbol is And) {
-        strBuilder.Append(@" > 0 \right) \land \left(");
+        strBuilder.Append(@" > 0  \land ");
       } else if (node.Symbol is Or) {
-        strBuilder.Append(@" > 0 \right) \lor \left(");
+        strBuilder.Append(@" > 0  \lor ");
       } else if (node.Symbol is Not) {
         throw new InvalidOperationException();
       } else if (node.Symbol is IfThenElse) {
-        strBuilder.Append(@" \right) , \left(");
+        strBuilder.Append(@" , ");
       } else if (node.Symbol is ProgramRootSymbol) {
         strBuilder.Append(@"\\" + Environment.NewLine);
@@ -223,14 +231,14 @@
         strBuilder.Append(@"\\" + Environment.NewLine + " & ");
       } else if (node.Symbol is Power) {
-        strBuilder.Append(@"\right) ^ { \operatorname{round} \left(");
+        strBuilder.Append(@" ^ { \operatorname{round} ");
       } else if (node.Symbol is Root) {
-        strBuilder.Append(@"\right) ^ { \left( \cfrac{1}{ \operatorname{round} \left(");
+        strBuilder.Append(@" ^ {  \cfrac{1}{ \operatorname{round} ");
       } else if (node.Symbol is VariableCondition) {
         var conditionTreeNode = node as VariableConditionTreeNode;
-        string p = @"1 / \left( 1 + \exp \left( - c_{" + constants.Count + "} ";
+        string p = @"1 /  1 + \exp  - c_{" + constants.Count + "} ";
         constants.Add(conditionTreeNode.Slope);
-        p += @" \cdot \left(" + conditionTreeNode.VariableName + LagToString(currentLag) + " - c_{" + constants.Count + @"} \right) \right) \right)";
+        p += @" \cdot " + EscapeLatexString(conditionTreeNode.VariableName) + LagToString(currentLag) + " - c_{" + constants.Count + @"}   ";
         constants.Add(conditionTreeNode.Threshold);
-        strBuilder.Append(@" + \left( 1 - " + p + @" \right) \cdot ");
+        strBuilder.Append(@" +  1 - " + p + @"  \cdot ");
       } else {
         throw new NotImplementedException("Export of " + node.Symbol + " is not implemented.");
@@ -240,7 +248,7 @@
     private void FormatEnd(ISymbolicExpressionTreeNode node, StringBuilder strBuilder) {
       if (node.Symbol is Addition) {
-        strBuilder.Append(@" \right) ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is Subtraction) {
-        strBuilder.Append(@" \right) ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is Multiplication) {
       } else if (node.Symbol is Division) {
@@ -252,30 +260,30 @@
         }
       } else if (node.Symbol is Average) {
-        strBuilder.Append(@" \right)");
+        strBuilder.Append(@" ");
       } else if (node.Symbol is Logarithm) {
-        strBuilder.Append(@" \right) ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is Exponential) {
-        strBuilder.Append(@" \right) ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is Sine) {
-        strBuilder.Append(@" \right) ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is Cosine) {
-        strBuilder.Append(@" \right) ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is Tangent) {
-        strBuilder.Append(@" \right) ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is GreaterThan) {
-        strBuilder.Append(@" \right) ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is LessThan) {
-        strBuilder.Append(@" \right) ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is And) {
-        strBuilder.Append(@" > 0 \right) \right) ");
+        strBuilder.Append(@" > 0   ");
       } else if (node.Symbol is Or) {
-        strBuilder.Append(@" > 0 \right) \right) ");
+        strBuilder.Append(@" > 0   ");
       } else if (node.Symbol is Not) {
-        strBuilder.Append(@" \right) ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is IfThenElse) {
-        strBuilder.Append(@" \right) \right) ");
+        strBuilder.Append(@"   ");
       } else if (node.Symbol is Constant) {
       } else if (node.Symbol is LaggedVariable) {
-      } else if (node.Symbol is HeuristicLab.Problems.DataAnalysis.Symbolic.Variable) {
+      } else if (node.Symbol is Variable) {
       } else if (node.Symbol is ProgramRootSymbol) {
         // output all constant values
@@ -290,19 +298,19 @@
       } else if (node.Symbol is Defun) {
       } else if (node.Symbol is InvokeFunction) {
-        strBuilder.Append(@" \right) ");
+        strBuilder.Append(@"  ");
       } else if (node.Symbol is StartSymbol) {
       } else if (node.Symbol is Argument) {
       } else if (node.Symbol is Derivative) {
-        strBuilder.Append(@" \right) }{dt} ");
+        strBuilder.Append(@"  }{dt} ");
       } else if (node.Symbol is TimeLag) {
         var laggedNode = node as ILaggedTreeNode;
         currentLag -= laggedNode.Lag;
       } else if (node.Symbol is Power) {
-        strBuilder.Append(@"\right) } ");
+        strBuilder.Append(@" } ");
       } else if (node.Symbol is Root) {
-        strBuilder.Append(@"\right) } \right) } ");
+        strBuilder.Append(@" }  } ");
       } else if (node.Symbol is Integral) {
         var laggedTreeNode = node as ILaggedTreeNode;
-        strBuilder.Append(@"\right) ");
+        strBuilder.Append(@" ");
       } else if (node.Symbol is VariableCondition) {
         strBuilder.Append(@"\left) ");
@@ -311,4 +319,5 @@
       }
     }
+
     private string LagToString(int lag) {
       if (lag < 0) {
@@ -316,5 +325,9 @@
       } else if (lag > 0) {
         return "(t+" + lag + ")";
-      } else return "(t)";
+      } else return "";
+    }
+
+    private string EscapeLatexString(string s) {
+      return s.Replace(@"_", @"\_");
     }
   }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentExpressionGrammar.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentExpressionGrammar.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentExpressionGrammar.cs	(revision 7085)
@@ -138,4 +138,5 @@
 
       AddAllowedChildSymbol(powerSymbols, variableSymbol, 0);
+      AddAllowedChildSymbol(powerSymbols, laggedVariable, 0);
       AddAllowedChildSymbol(powerSymbols, constant, 1);
 
@@ -187,4 +188,5 @@
     public void ConfigureAsDefaultClassificationGrammar() {
       Symbols.Where(s => s is Average).First().Enabled = false;
+      Symbols.Where(s => s is VariableCondition).First().Enabled = false;
       Symbols.Where(s => s.Name == TrigonometricFunctionsName).First().Enabled = false;
       Symbols.Where(s => s.Name == ExponentialFunctionsName).First().Enabled = false;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 7085)
@@ -121,8 +121,10 @@
     <Compile Include="Analyzers\SymbolicDataAnalysisVariableFrequencyAnalyzer.cs" />
     <Compile Include="Analyzers\SymbolicDataAnalysisAlleleFrequencyAnalyzer.cs" />
-    <Compile Include="SymbolicDataAnalysisExpressionFullTreeCreator.cs" />
+    <Compile Include="Creators\MultiSymbolicDataAnalysisExpressionCreator.cs" />
+    <Compile Include="Creators\SymbolicDataAnalysisExpressionFullTreeCreator.cs" />
+    <Compile Include="Creators\SymbolicDataAnalysisExpressionGrowTreeCreator.cs" />
+    <Compile Include="Creators\SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator.cs" />
+    <Compile Include="Creators\SymbolicDataAnalysisExpressionTreeCreator.cs" />
     <Compile Include="Plugin.cs" />
-    <Compile Include="SymbolicDataAnalysisExpressionGrowTreeCreator.cs" />
-    <Compile Include="SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator.cs" />
     <Compile Include="SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs" />
     <Compile Include="Formatters\SymbolicDataAnalysisExpressionLatexFormatter.cs" />
@@ -131,5 +133,4 @@
     <Compile Include="Interfaces\ISymbolicDataAnalysisExpressionTreeInterpreter.cs" />
     <Compile Include="Interfaces\ISymbolicDataAnalysisProblem.cs" />
-    <Compile Include="SymbolicDataAnalysisExpressionTreeCreator.cs" />
     <Compile Include="SymbolicDataAnalysisModel.cs">
       <SubType>Code</SubType>
Index: anches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionFullTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionFullTreeCreator.cs	(revision 7084)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
-  [StorableClass]
-  public class SymbolicDataAnalysisExpressionFullTreeCreator : FullTreeCreator, ISymbolicDataAnalysisSolutionCreator {
-    [StorableConstructor]
-    protected SymbolicDataAnalysisExpressionFullTreeCreator(bool deserializing) : base(deserializing) { }
-    protected SymbolicDataAnalysisExpressionFullTreeCreator(SymbolicDataAnalysisExpressionFullTreeCreator original, Cloner cloner) : base(original, cloner) { }
-    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionFullTreeCreator(this, cloner); }
-
-    public SymbolicDataAnalysisExpressionFullTreeCreator() : base() { }
-  }
-}
Index: anches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionGrowTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionGrowTreeCreator.cs	(revision 7084)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
-  [StorableClass]
-  public class SymbolicDataAnalysisExpressionGrowTreeCreator : GrowTreeCreator, ISymbolicDataAnalysisSolutionCreator {
-    [StorableConstructor]
-    protected SymbolicDataAnalysisExpressionGrowTreeCreator(bool deserializing) : base(deserializing) { }
-    protected SymbolicDataAnalysisExpressionGrowTreeCreator(SymbolicDataAnalysisExpressionGrowTreeCreator original, Cloner cloner) : base(original, cloner) { }
-    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionGrowTreeCreator(this, cloner); }
-
-    public SymbolicDataAnalysisExpressionGrowTreeCreator() : base() { }
-  }
-}
Index: anches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator.cs	(revision 7084)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
-  [StorableClass]
-  public class SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator : RampedHalfAndHalfTreeCreator, ISymbolicDataAnalysisSolutionCreator {
-    [StorableConstructor]
-    protected SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator(bool deserializing) : base(deserializing) { }
-    protected SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator(SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator original, Cloner cloner) : base(original, cloner) { }
-    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator(this, cloner); }
-
-    public SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator() : base() { }
-  }
-}
Index: anches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionTreeCreator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionTreeCreator.cs	(revision 7084)
+++ 	(revision )
@@ -1,36 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
-  [StorableClass]
-  public class SymbolicDataAnalysisExpressionTreeCreator : ProbabilisticTreeCreator, ISymbolicDataAnalysisSolutionCreator {
-    [StorableConstructor]
-    protected SymbolicDataAnalysisExpressionTreeCreator(bool deserializing) : base(deserializing) { }
-    protected SymbolicDataAnalysisExpressionTreeCreator(SymbolicDataAnalysisExpressionTreeCreator original, Cloner cloner) : base(original, cloner) { }
-    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionTreeCreator(this, cloner); }
-
-    public SymbolicDataAnalysisExpressionTreeCreator() : base() { }
-  }
-}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs	(revision 7085)
@@ -584,7 +584,7 @@
         //to determine the relative amounts of the true and false branch see http://en.wikipedia.org/wiki/Logistic_function
         case OpCodes.VariableCondition: {
-            throw new NotImplementedException();
-          }
-        default: throw new NotSupportedException();
+            throw new NotSupportedException("Interpretation of symbol " + currentInstr.dynamicNode.Symbol.Name + " is not supported by the SymbolicDataAnalysisTreeILEmittingInterpreter");
+          }
+        default: throw new NotSupportedException("Interpretation of symbol " + currentInstr.dynamicNode.Symbol.Name + " is not supported by the SymbolicDataAnalysisTreeILEmittingInterpreter");
       }
     }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs	(revision 7085)
@@ -36,5 +36,5 @@
   [StorableClass]
   public abstract class SymbolicDataAnalysisProblem<T, U, V> : HeuristicOptimizationProblem<U, V>, IDataAnalysisProblem<T>, ISymbolicDataAnalysisProblem, IStorableContent
-    where T : class,IDataAnalysisProblemData
+    where T : class, IDataAnalysisProblemData
     where U : class, ISymbolicDataAnalysisEvaluator<T>
     where V : class, ISymbolicDataAnalysisSolutionCreator {
@@ -171,5 +171,4 @@
       Parameters.Add(new FixedValueParameter<PercentValue>(RelativeNumberOfEvaluatedSamplesParameterName, RelativeNumberOfEvaluatedSamplesParameterDescription, new PercentValue(1)));
 
-      SolutionCreatorParameter.Hidden = true;
       SymbolicExpressionTreeInterpreterParameter.Hidden = true;
       MaximumFunctionArgumentsParameter.Hidden = true;
@@ -204,4 +203,5 @@
       Operators.Add(new SymbolicDataAnalysisVariableFrequencyAnalyzer());
       Operators.Add(new MinAverageMaxSymbolicExpressionTreeLengthAnalyzer());
+      Operators.Add(new SymbolicExpressionTreeLengthAnalyzer());
       ParameterizeOperators();
     }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.cs	(revision 7085)
@@ -24,4 +24,5 @@
 using System.Linq;
 using System.Windows.Forms;
+using HeuristicLab.Common;
 using HeuristicLab.Data;
 using HeuristicLab.MainForm;
@@ -96,6 +97,6 @@
 
       int classValuesCount = Content.ProblemData.ClassValues.Count;
-      int modelCount = Content.Model.Models.Count();
-      string[,] values = new string[indizes.Length, 5 + classValuesCount + modelCount];
+      int solutionsCount = Content.ClassificationSolutions.Count();
+      string[,] values = new string[indizes.Length, 5 + classValuesCount + solutionsCount];
       double[] target = Content.ProblemData.Dataset.GetDoubleValues(Content.ProblemData.TargetVariable).ToArray();
       List<List<double?>> estimatedValuesVector = GetEstimatedValues(SamplesComboBox.SelectedItem.ToString(), indizes,
@@ -106,20 +107,24 @@
         values[i, 0] = row.ToString();
         values[i, 1] = target[i].ToString();
-        values[i, 2] = estimatedClassValues[i].ToString();
-        values[i, 3] = (target[i] == estimatedClassValues[i]).ToString();
-        var groups = estimatedValuesVector[i].GroupBy(x => x).Select(g => new { Key = g.Key, Count = g.Count() }).ToList();
-        var estimationCount = groups.Where(g => g.Key != null).Select(g => g.Count).Sum();
-        values[i, 4] = (((double)groups.Where(g => g.Key == estimatedClassValues[i]).Single().Count) / estimationCount).ToString();
-        for (int classIndex = 0; classIndex < Content.ProblemData.ClassValues.Count; classIndex++) {
-          var group = groups.Where(g => g.Key == Content.ProblemData.ClassValues[classIndex]).SingleOrDefault();
-          if (group == null) values[i, 5 + classIndex] = 0.ToString();
-          else values[i, 5 + classIndex] = group.Count.ToString();
+        //display only indices and target values if no models are present
+        if (solutionsCount > 0) {
+          values[i, 2] = estimatedClassValues[i].ToString();
+          values[i, 3] = (target[i].IsAlmost(estimatedClassValues[i])).ToString();
+          var groups =
+            estimatedValuesVector[i].GroupBy(x => x).Select(g => new { Key = g.Key, Count = g.Count() }).ToList();
+          var estimationCount = groups.Where(g => g.Key != null).Select(g => g.Count).Sum();
+          values[i, 4] =
+            (((double)groups.Where(g => g.Key == estimatedClassValues[i]).Single().Count) / estimationCount).ToString();
+          for (int classIndex = 0; classIndex < Content.ProblemData.ClassValues.Count; classIndex++) {
+            var group = groups.Where(g => g.Key == Content.ProblemData.ClassValues[classIndex]).SingleOrDefault();
+            if (group == null) values[i, 5 + classIndex] = 0.ToString();
+            else values[i, 5 + classIndex] = group.Count.ToString();
+          }
+          for (int modelIndex = 0; modelIndex < estimatedValuesVector[i].Count; modelIndex++) {
+            values[i, 5 + classValuesCount + modelIndex] = estimatedValuesVector[i][modelIndex] == null
+                                                             ? string.Empty
+                                                             : estimatedValuesVector[i][modelIndex].ToString();
+          }
         }
-        for (int modelIndex = 0; modelIndex < estimatedValuesVector[i].Count; modelIndex++) {
-          values[i, 5 + classValuesCount + modelIndex] = estimatedValuesVector[i][modelIndex] == null
-                                                           ? string.Empty
-                                                           : estimatedValuesVector[i][modelIndex].ToString();
-        }
-
       }
 
@@ -131,5 +136,4 @@
       matrix.SortableView = true;
       matrixView.Content = matrix;
-      UpdateColoringOfRows();
     }
 
@@ -162,19 +166,8 @@
         return;
       }
-      bool correctClassified = bool.Parse(matrixView.DataGridView[3, e.RowIndex].Value.ToString());
+      var cellValue = matrixView.DataGridView[3, e.RowIndex].Value.ToString();
+      if (string.IsNullOrEmpty(cellValue)) return;
+      bool correctClassified = bool.Parse(cellValue);
       matrixView.DataGridView.Rows[e.RowIndex].DefaultCellStyle.ForeColor = correctClassified ? Color.MediumSeaGreen : Color.Red;
-    }
-
-    private void UpdateColoringOfRows() {
-      if (InvokeRequired) {
-        Invoke((Action)UpdateColoringOfRows);
-        return;
-      }
-      //matrixView.DataGridView.SuspendRepaint();
-      //for (int i = 0; i < matrixView.DataGridView.Rows.Count; i++) {
-      //  bool correctClassified = bool.Parse(matrixView.Content.GetValue(i, 3));
-      //  matrixView.DataGridView.Rows[i].DefaultCellStyle.ForeColor = correctClassified ? Color.MediumSeaGreen : Color.Red;
-      //}
-      //matrixView.DataGridView.ResumeRepaint(true);
     }
   }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/DataAnalysisProblemView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/DataAnalysisProblemView.Designer.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/DataAnalysisProblemView.Designer.cs	(revision 7085)
@@ -49,11 +49,13 @@
       this.benchmarkComboBox = new System.Windows.Forms.ComboBox();
       this.loadButton = new System.Windows.Forms.Button();
+      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tableLayoutPanel1.SuspendLayout();
       this.SuspendLayout();
       // 
       // parameterCollectionView
       // 
-      this.parameterCollectionView.Location = new System.Drawing.Point(3, 55);
-      this.parameterCollectionView.Size = new System.Drawing.Size(490, 279);
+      this.parameterCollectionView.Location = new System.Drawing.Point(3, 80);
+      this.parameterCollectionView.Size = new System.Drawing.Size(490, 254);
       this.parameterCollectionView.TabIndex = 4;
       // 
@@ -74,5 +76,5 @@
       this.importButton.Location = new System.Drawing.Point(3, 24);
       this.importButton.Name = "importButton";
-      this.importButton.Size = new System.Drawing.Size(243, 23);
+      this.importButton.Size = new System.Drawing.Size(487, 23);
       this.importButton.TabIndex = 3;
       this.importButton.Text = "Import from CSV file";
@@ -82,22 +84,26 @@
       // openFileDialog
       // 
-      this.openFileDialog.FileName = "openFileDialog";
+      this.openFileDialog.Filter = "CSV files|*.csv|Text files|*.txt|All files|*.*";
+      this.openFileDialog.Title = "Import data...";
       // 
       // benchmarkComboBox
       // 
-      this.benchmarkComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.benchmarkComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
       this.benchmarkComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
       this.benchmarkComboBox.FormattingEnabled = true;
-      this.benchmarkComboBox.Location = new System.Drawing.Point(252, 25);
+      this.benchmarkComboBox.Location = new System.Drawing.Point(3, 3);
       this.benchmarkComboBox.Name = "benchmarkComboBox";
-      this.benchmarkComboBox.Size = new System.Drawing.Size(183, 21);
+      this.benchmarkComboBox.Size = new System.Drawing.Size(240, 21);
       this.benchmarkComboBox.TabIndex = 5;
       // 
       // loadButton
       // 
-      this.loadButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.loadButton.Location = new System.Drawing.Point(439, 24);
+      this.loadButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.loadButton.Location = new System.Drawing.Point(249, 2);
+      this.loadButton.Margin = new System.Windows.Forms.Padding(3, 2, 3, 3);
       this.loadButton.Name = "loadButton";
-      this.loadButton.Size = new System.Drawing.Size(50, 23);
+      this.loadButton.Size = new System.Drawing.Size(241, 23);
       this.loadButton.TabIndex = 6;
       this.loadButton.Text = "Load";
@@ -105,21 +111,36 @@
       this.loadButton.Click += new System.EventHandler(this.loadButton_Click);
       // 
+      // tableLayoutPanel1
+      // 
+      this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.tableLayoutPanel1.ColumnCount = 2;
+      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+      this.tableLayoutPanel1.Controls.Add(this.benchmarkComboBox, 0, 0);
+      this.tableLayoutPanel1.Controls.Add(this.loadButton, 1, 0);
+      this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 51);
+      this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+      this.tableLayoutPanel1.RowCount = 1;
+      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+      this.tableLayoutPanel1.Size = new System.Drawing.Size(493, 28);
+      this.tableLayoutPanel1.TabIndex = 7;
+      // 
       // DataAnalysisProblemView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.loadButton);
       this.Controls.Add(this.importButton);
-      this.Controls.Add(this.benchmarkComboBox);
+      this.Controls.Add(this.tableLayoutPanel1);
       this.Name = "DataAnalysisProblemView";
       this.Size = new System.Drawing.Size(493, 334);
-      this.Controls.SetChildIndex(this.benchmarkComboBox, 0);
+      this.Controls.SetChildIndex(this.tableLayoutPanel1, 0);
       this.Controls.SetChildIndex(this.importButton, 0);
-      this.Controls.SetChildIndex(this.loadButton, 0);
+      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
       this.Controls.SetChildIndex(this.infoLabel, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
       this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tableLayoutPanel1.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -133,4 +154,5 @@
     private System.Windows.Forms.ComboBox benchmarkComboBox;
     private System.Windows.Forms.Button loadButton;
+    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
   }
 }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/DataAnalysisProblemView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/DataAnalysisProblemView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/DataAnalysisProblemView.cs	(revision 7085)
@@ -24,4 +24,5 @@
 using System.Linq;
 using System.Windows.Forms;
+using HeuristicLab.Common;
 using HeuristicLab.MainForm;
 using HeuristicLab.Optimization.Views;
@@ -65,5 +66,5 @@
       base.OnContentChanged();
       benchmarkComboBox.Items.Clear();
-      benchmarkComboBox.Items.AddRange(GetBenchmarkProblemDataGenerators().OrderBy(b => b.Name).ToArray());
+      benchmarkComboBox.Items.AddRange(GetBenchmarkProblemDataGenerators().OrderBy(b => b.Name, new NaturalStringComparer()).ToArray());
       if (benchmarkComboBox.Items.Count > 0)
         benchmarkComboBox.SelectedIndex = 0;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/DataAnalysisProblemView.resx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/DataAnalysisProblemView.resx	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/DataAnalysisProblemView.resx	(revision 7085)
@@ -121,4 +121,7 @@
     <value>107, 17</value>
   </metadata>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>107, 17</value>
+  </metadata>
   <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.Designer.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.Designer.cs	(revision 7085)
@@ -49,4 +49,5 @@
       this.chart.TabIndex = 0;
       this.chart.Text = "chart";
+      this.chart.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chart_MouseDown);
       // 
       // label1
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.cs	(revision 7085)
@@ -31,4 +31,5 @@
   [Content(typeof(IRegressionSolution))]
   public partial class RegressionSolutionErrorCharacteristicsCurveView : DataAnalysisSolutionEvaluationView {
+    private IRegressionSolution constantModel;
     protected const string TrainingSamples = "Training";
     protected const string TestSamples = "Test";
@@ -101,6 +102,7 @@
       if (Content == null) return;
 
-      var originalValues = GetOriginalValues();
-      var meanModelEstimatedValues = GetMeanModelEstimatedValues(originalValues);
+      var originalValues = GetOriginalValues().ToList();
+      constantModel = CreateConstantModel();
+      var meanModelEstimatedValues = GetEstimatedValues(constantModel);
       var meanModelResiduals = GetResiduals(originalValues, meanModelEstimatedValues);
 
@@ -113,4 +115,5 @@
       UpdateSeries(meanModelResiduals, meanModelSeries);
       meanModelSeries.ToolTip = "Area over Curve: " + CalculateAreaOverCurve(meanModelSeries);
+      meanModelSeries.Tag = constantModel;
       chart.Series.Add(meanModelSeries);
 
@@ -133,4 +136,5 @@
       series.Points.Clear();
       residuals.Sort();
+      if (!residuals.Any() || residuals.All(double.IsNaN)) return;
 
       series.Points.AddXY(0, 0);
@@ -146,5 +150,5 @@
 
         point.XValue = residuals[i];
-        point.YValues[0] = ((double)i+1) / residuals.Count;
+        point.YValues[0] = ((double)i + 1) / residuals.Count;
         point.ToolTip = "Error: " + point.XValue + "\n" + "Samples: " + point.YValues[0];
         series.Points.Add(point);
@@ -206,5 +210,5 @@
 
     private double CalculateAreaOverCurve(Series series) {
-      if (series.Points.Count < 1) throw new ArgumentException("Could not calculate area under curve if less than 1 data points were given.");
+      if (series.Points.Count < 1) return 0;
 
       double auc = 0.0;
@@ -224,4 +228,22 @@
       else UpdateChart();
     }
+
+    #region Mean Model
+    private void chart_MouseDown(object sender, MouseEventArgs e) {
+      if (e.Clicks < 2) return;
+      HitTestResult result = chart.HitTest(e.X, e.Y);
+      if (result.ChartElementType != ChartElementType.LegendItem) return;
+      if (result.Series.Name != constantModel.Name) return;
+
+      MainFormManager.MainForm.ShowContent((IRegressionSolution)result.Series.Tag);
+    }
+
+    private IRegressionSolution CreateConstantModel() {
+      double averageTrainingTarget = ProblemData.Dataset.GetDoubleValues(ProblemData.TargetVariable, ProblemData.TrainingIndizes).Average();
+      var solution = new ConstantRegressionModel(averageTrainingTarget).CreateRegressionSolution(ProblemData);
+      solution.Name = "Mean Model";
+      return solution;
+    }
+    #endregion
   }
 }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionScatterPlotView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionScatterPlotView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionScatterPlotView.cs	(revision 7085)
@@ -20,5 +20,4 @@
 #endregion
 using System;
-using System.Collections.Generic;
 using System.Drawing;
 using System.Linq;
@@ -172,6 +171,6 @@
         string targetVariableName = Content.ProblemData.TargetVariable;
 
-        IEnumerable<double> predictedValues = null;
-        IEnumerable<double> targetValues = null;
+        double[] predictedValues = null;
+        double[] targetValues = null;
         switch (series.Name) {
           case ALL_SERIES:
@@ -188,5 +187,6 @@
             break;
         }
-        series.Points.DataBindXY(predictedValues, "", targetValues, "");
+        if (predictedValues.Length == targetValues.Length)
+          series.Points.DataBindXY(predictedValues, "", targetValues, "");
         this.chart.Legends[series.Legend].ForeColor = Color.Black;
         UpdateCursorInterval();
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/ClassificationEnsembleSolutionView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/ClassificationEnsembleSolutionView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/ClassificationEnsembleSolutionView.cs	(revision 7085)
@@ -37,4 +37,9 @@
     }
 
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      itemsListView.Items.Remove(itemsListView.FindItemWithText("Model: ClassificationEnsembleModel"));
+    }
+
     #region drag & drop
     protected override void itemsListView_DragDrop(object sender, DragEventArgs e) {
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/RegressionEnsembleSolutionView.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/RegressionEnsembleSolutionView.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/RegressionEnsembleSolutionView.cs	(revision 7085)
@@ -37,4 +37,9 @@
     }
 
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      itemsListView.Items.Remove(itemsListView.FindItemWithText("Model: RegressionEnsembleModel"));
+    }
+
     #region drag & drop
     protected override void itemsListView_DragDrop(object sender, DragEventArgs e) {
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.3/HeuristicLab.Problems.DataAnalysis-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.3/HeuristicLab.Problems.DataAnalysis-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.3/HeuristicLab.Problems.DataAnalysis-3.3.csproj	(revision 7085)
@@ -95,4 +95,5 @@
     <Reference Include="LibSVM-1.6.3, Version=1.6.3.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\bin\LibSVM-1.6.3.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 7085)
@@ -122,4 +122,6 @@
     <Compile Include="Implementation\Clustering\ClusteringProblemData.cs" />
     <Compile Include="Implementation\Clustering\ClusteringSolution.cs" />
+    <Compile Include="Implementation\Regression\ConstantRegressionModel.cs" />
+    <Compile Include="Implementation\Regression\ConstantRegressionSolution.cs" />
     <Compile Include="Implementation\Regression\RegressionEnsembleProblemData.cs" />
     <Compile Include="Implementation\Regression\RegressionEnsembleModel.cs">
@@ -147,4 +149,5 @@
     <Compile Include="Interfaces\Regression\IRegressionEnsembleSolution.cs" />
     <Compile Include="Implementation\Regression\RegressionSolutionBase.cs" />
+    <Compile Include="Interfaces\TimeSeriesPrognosis\IOnlineTimeSeriesCalculator.cs" />
     <Compile Include="Interfaces\TimeSeriesPrognosis\ITimeSeriesBenchmarkProblemDataGenerator.cs" />
     <Compile Include="Interfaces\TimeSeriesPrognosis\ITimeSeriesPrognosisModel.cs" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleProblemData.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleProblemData.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleProblemData.cs	(revision 7085)
@@ -43,5 +43,5 @@
 
     private static readonly ClassificationEnsembleProblemData emptyProblemData;
-    public static ClassificationEnsembleProblemData EmptyProblemData {
+    public static new ClassificationEnsembleProblemData EmptyProblemData {
       get { return emptyProblemData; }
     }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs	(revision 7085)
@@ -201,4 +201,5 @@
 
     public IEnumerable<IEnumerable<double>> GetEstimatedClassValueVectors(Dataset dataset, IEnumerable<int> rows) {
+      if (!Model.Models.Any()) yield break;
       var estimatedValuesEnumerators = (from model in Model.Models
                                         select model.GetEstimatedClassValues(dataset, rows).GetEnumerator())
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblem.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblem.cs	(revision 7085)
@@ -28,5 +28,7 @@
   [Item("Classification Problem", "A general classification problem.")]
   [Creatable("Problems")]
-  public class ClassificationProblem : DataAnalysisProblem<IClassificationProblemData>, IClassificationProblem {
+  public class ClassificationProblem : DataAnalysisProblem<IClassificationProblemData>, IClassificationProblem, IStorableContent {
+    public string Filename { get; set; }
+
     [StorableConstructor]
     protected ClassificationProblem(bool deserializing) : base(deserializing) { }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolutionBase.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolutionBase.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolutionBase.cs	(revision 7085)
@@ -77,4 +77,12 @@
     }
 
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!this.ContainsKey(TrainingNormalizedGiniCoefficientResultName))
+        Add(new Result(TrainingNormalizedGiniCoefficientResultName, "Normalized Gini coefficient of the model on the training partition.", new DoubleValue()));
+      if (!this.ContainsKey(TestNormalizedGiniCoefficientResultName))
+        Add(new Result(TestNormalizedGiniCoefficientResultName, "Normalized Gini coefficient of the model on the test partition.", new DoubleValue()));
+    }
+
     protected void CalculateResults() {
       double[] estimatedTrainingClassValues = EstimatedTrainingClassValues.ToArray(); // cache values
@@ -84,7 +92,7 @@
 
       OnlineCalculatorError errorState;
-      double trainingAccuracy = OnlineAccuracyCalculator.Calculate(estimatedTrainingClassValues, originalTrainingClassValues, out errorState);
+      double trainingAccuracy = OnlineAccuracyCalculator.Calculate(originalTrainingClassValues, estimatedTrainingClassValues, out errorState);
       if (errorState != OnlineCalculatorError.None) trainingAccuracy = double.NaN;
-      double testAccuracy = OnlineAccuracyCalculator.Calculate(estimatedTestClassValues, originalTestClassValues, out errorState);
+      double testAccuracy = OnlineAccuracyCalculator.Calculate(originalTestClassValues, estimatedTestClassValues, out errorState);
       if (errorState != OnlineCalculatorError.None) testAccuracy = double.NaN;
 
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolutionBase.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolutionBase.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolutionBase.cs	(revision 7085)
@@ -108,12 +108,12 @@
 
       OnlineCalculatorError errorState;
-      double trainingMSE = OnlineMeanSquaredErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingMSE = OnlineMeanSquaredErrorCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingMeanSquaredError = errorState == OnlineCalculatorError.None ? trainingMSE : double.NaN;
-      double testMSE = OnlineMeanSquaredErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testMSE = OnlineMeanSquaredErrorCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestMeanSquaredError = errorState == OnlineCalculatorError.None ? testMSE : double.NaN;
 
-      double trainingR2 = OnlinePearsonsRSquaredCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingR2 = OnlinePearsonsRSquaredCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingRSquared = errorState == OnlineCalculatorError.None ? trainingR2 : double.NaN;
-      double testR2 = OnlinePearsonsRSquaredCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testR2 = OnlinePearsonsRSquaredCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestRSquared = errorState == OnlineCalculatorError.None ? testR2 : double.NaN;
 
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/ConstantRegressionModel.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/ConstantRegressionModel.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/ConstantRegressionModel.cs	(revision 7085)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  [Item("Constant Regression Model", "A model that always returns the same constant value regardless of the presented input data.")]
+  public class ConstantRegressionModel : NamedItem, IRegressionModel {
+    [Storable]
+    private double constant;
+    public double Constant {
+      get { return constant; }
+    }
+
+    [StorableConstructor]
+    protected ConstantRegressionModel(bool deserializing) : base(deserializing) { }
+    protected ConstantRegressionModel(ConstantRegressionModel original, Cloner cloner)
+      : base(original, cloner) {
+      this.constant = original.constant;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) { return new ConstantRegressionModel(this, cloner); }
+
+    public ConstantRegressionModel(double constant)
+      : base() {
+      this.name = ItemName;
+      this.description = ItemDescription;
+      this.constant = constant;
+    }
+
+    public IEnumerable<double> GetEstimatedValues(Dataset dataset, IEnumerable<int> rows) {
+      return rows.Select(row => Constant);
+    }
+
+    public IRegressionSolution CreateRegressionSolution(IRegressionProblemData problemData) {
+      return new ConstantRegressionSolution(this, problemData);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/ConstantRegressionSolution.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/ConstantRegressionSolution.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/ConstantRegressionSolution.cs	(revision 7085)
@@ -0,0 +1,26 @@
+﻿using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  [StorableClass]
+  [Item(Name = "Constant Regression Solution", Description = "Represents a constant regression solution (model + data).")]
+  public class ConstantRegressionSolution : RegressionSolution {
+    public new ConstantRegressionModel Model {
+      get { return (ConstantRegressionModel)base.Model; }
+      set { base.Model = value; }
+    }
+
+    [StorableConstructor]
+    protected ConstantRegressionSolution(bool deserializing) : base(deserializing) { }
+    protected ConstantRegressionSolution(ConstantRegressionSolution original, Cloner cloner) : base(original, cloner) { }
+    public ConstantRegressionSolution(ConstantRegressionModel model, IRegressionProblemData problemData)
+      : base(model, problemData) {
+      RecalculateResults();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ConstantRegressionSolution(this, cloner);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleSolution.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleSolution.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleSolution.cs	(revision 7085)
@@ -64,5 +64,5 @@
     private void AfterDeserialization() {
       foreach (var model in Model.Models) {
-        IRegressionProblemData problemData = (IRegressionProblemData) ProblemData.Clone();
+        IRegressionProblemData problemData = (IRegressionProblemData)ProblemData.Clone();
         problemData.TrainingPartition.Start = trainingPartitions[model].Start;
         problemData.TrainingPartition.End = trainingPartitions[model].End;
@@ -202,4 +202,5 @@
 
     public IEnumerable<IEnumerable<double>> GetEstimatedValueVectors(Dataset dataset, IEnumerable<int> rows) {
+      if (!Model.Models.Any()) yield break;
       var estimatedValuesEnumerators = (from model in Model.Models
                                         select model.GetEstimatedValues(dataset, rows).GetEnumerator())
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionProblem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionProblem.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionProblem.cs	(revision 7085)
@@ -28,5 +28,7 @@
   [Item("Regression Problem", "A general regression problem.")]
   [Creatable("Problems")]
-  public class RegressionProblem : DataAnalysisProblem<IRegressionProblemData>, IRegressionProblem {
+  public class RegressionProblem : DataAnalysisProblem<IRegressionProblemData>, IRegressionProblem, IStorableContent {
+    public string Filename { get; set; }
+
     [StorableConstructor]
     protected RegressionProblem(bool deserializing) : base(deserializing) { }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolutionBase.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolutionBase.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolutionBase.cs	(revision 7085)
@@ -147,27 +147,27 @@
 
       OnlineCalculatorError errorState;
-      double trainingMSE = OnlineMeanSquaredErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingMSE = OnlineMeanSquaredErrorCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingMeanSquaredError = errorState == OnlineCalculatorError.None ? trainingMSE : double.NaN;
-      double testMSE = OnlineMeanSquaredErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testMSE = OnlineMeanSquaredErrorCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestMeanSquaredError = errorState == OnlineCalculatorError.None ? testMSE : double.NaN;
 
-      double trainingMAE = OnlineMeanAbsoluteErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingMAE = OnlineMeanAbsoluteErrorCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingMeanAbsoluteError = errorState == OnlineCalculatorError.None ? trainingMAE : double.NaN;
-      double testMAE = OnlineMeanAbsoluteErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testMAE = OnlineMeanAbsoluteErrorCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestMeanAbsoluteError = errorState == OnlineCalculatorError.None ? testMAE : double.NaN;
 
-      double trainingR2 = OnlinePearsonsRSquaredCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingR2 = OnlinePearsonsRSquaredCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingRSquared = errorState == OnlineCalculatorError.None ? trainingR2 : double.NaN;
-      double testR2 = OnlinePearsonsRSquaredCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testR2 = OnlinePearsonsRSquaredCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestRSquared = errorState == OnlineCalculatorError.None ? testR2 : double.NaN;
 
-      double trainingRelError = OnlineMeanAbsolutePercentageErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingRelError = OnlineMeanAbsolutePercentageErrorCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingRelativeError = errorState == OnlineCalculatorError.None ? trainingRelError : double.NaN;
-      double testRelError = OnlineMeanAbsolutePercentageErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testRelError = OnlineMeanAbsolutePercentageErrorCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestRelativeError = errorState == OnlineCalculatorError.None ? testRelError : double.NaN;
 
-      double trainingNMSE = OnlineNormalizedMeanSquaredErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingNMSE = OnlineNormalizedMeanSquaredErrorCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingNormalizedMeanSquaredError = errorState == OnlineCalculatorError.None ? trainingNMSE : double.NaN;
-      double testNMSE = OnlineNormalizedMeanSquaredErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testNMSE = OnlineNormalizedMeanSquaredErrorCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestNormalizedMeanSquaredError = errorState == OnlineCalculatorError.None ? testNMSE : double.NaN;
     }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/TimeSeriesPrognosisProblemData.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/TimeSeriesPrognosisProblemData.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/TimeSeriesPrognosisProblemData.cs	(revision 7085)
@@ -1565,5 +1565,5 @@
       problemData.Parameters.Add(new FixedValueParameter<IntRange>(TestPartitionParameterName, "", (IntRange)new IntRange(0, 0).AsReadOnly()));
       problemData.Parameters.Add(new ConstrainedValueParameter<StringValue>(TargetVariableParameterName, new ItemSet<StringValue>()));
-      emptyProblemData = problemData;
+      emptyProblemData = problemData;      
     }
     #endregion
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/TimeSeriesPrognosisSolutionBase.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/TimeSeriesPrognosisSolutionBase.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/TimeSeriesPrognosisSolutionBase.cs	(revision 7085)
@@ -40,10 +40,10 @@
     private const string TrainingNormalizedMeanSquaredErrorResultName = "Normalized mean squared error (training)";
     private const string TestNormalizedMeanSquaredErrorResultName = "Normalized mean squared error (test)";
-    private const string TrainingDirectionalSymmetryResultName = "Directional symmetry (training)";
-    private const string TestDirectionalSymmetryResultName = "Directional symmetry (test)";
-    private const string TrainingWeightedDirectionalSymmetryResultName = "Weighted directional symmetry (training)";
-    private const string TestWeightedDirectionalSymmetryResultName = "Weighted directional symmetry (test)";
-    private const string TrainingTheilsUStatisticResultName = "Theil's U (training)";
-    private const string TestTheilsUStatisticResultName = "Theil's U (test)";
+    private const string TrainingDirectionalSymmetryResultName = "Average directional symmetry (training)";
+    private const string TestDirectionalSymmetryResultName = "Average directional symmetry (test)";
+    private const string TrainingWeightedDirectionalSymmetryResultName = "Average weighted directional symmetry (training)";
+    private const string TestWeightedDirectionalSymmetryResultName = "Average weighted directional symmetry (test)";
+    private const string TrainingTheilsUStatisticResultName = "Average Theil's U (training)";
+    private const string TestTheilsUStatisticResultName = "Average Theil's U (test)";
 
     public new ITimeSeriesPrognosisModel Model {
@@ -146,10 +146,10 @@
       Add(new Result(TrainingNormalizedMeanSquaredErrorResultName, "Normalized mean of squared errors of the model on the training partition", new DoubleValue()));
       Add(new Result(TestNormalizedMeanSquaredErrorResultName, "Normalized mean of squared errors of the model on the test partition", new DoubleValue()));
-      Add(new Result(TrainingDirectionalSymmetryResultName, "The directional symmetry of the output of the model on the training partition", new DoubleValue()));
-      Add(new Result(TestDirectionalSymmetryResultName, "The directional symmetry of the output of the model on the test partition", new DoubleValue()));
-      Add(new Result(TrainingWeightedDirectionalSymmetryResultName, "The weighted directional symmetry of the output of the model on the training partition", new DoubleValue()));
-      Add(new Result(TestWeightedDirectionalSymmetryResultName, "The weighted directional symmetry of the output of the model on the test partition", new DoubleValue()));
-      Add(new Result(TrainingTheilsUStatisticResultName, "The Theil's U statistic of the output of the model on the training partition", new DoubleValue()));
-      Add(new Result(TestTheilsUStatisticResultName, "The Theil's U statistic of the output of the model on the test partition", new DoubleValue()));
+      Add(new Result(TrainingDirectionalSymmetryResultName, "The average directional symmetry of the forecasts of the model on the training partition", new PercentValue()));
+      Add(new Result(TestDirectionalSymmetryResultName, "The average directional symmetry of the forecasts of the model on the test partition", new PercentValue()));
+      Add(new Result(TrainingWeightedDirectionalSymmetryResultName, "The average weighted directional symmetry of the forecasts of the model on the training partition", new DoubleValue()));
+      Add(new Result(TestWeightedDirectionalSymmetryResultName, "The average weighted directional symmetry of the forecasts of the model on the test partition", new DoubleValue()));
+      Add(new Result(TrainingTheilsUStatisticResultName, "The average Theil's U statistic of the forecasts of the model on the training partition", new DoubleValue()));
+      Add(new Result(TestTheilsUStatisticResultName, "The average Theil's U statistic of the forecasts of the model on the test partition", new DoubleValue()));
     }
 
@@ -166,45 +166,59 @@
 
       OnlineCalculatorError errorState;
-      double trainingMse = OnlineMeanSquaredErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingMse = OnlineMeanSquaredErrorCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingMeanSquaredError = errorState == OnlineCalculatorError.None ? trainingMse : double.NaN;
-      double testMse = OnlineMeanSquaredErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testMse = OnlineMeanSquaredErrorCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestMeanSquaredError = errorState == OnlineCalculatorError.None ? testMse : double.NaN;
 
-      double trainingMae = OnlineMeanAbsoluteErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingMae = OnlineMeanAbsoluteErrorCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingMeanAbsoluteError = errorState == OnlineCalculatorError.None ? trainingMae : double.NaN;
-      double testMae = OnlineMeanAbsoluteErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testMae = OnlineMeanAbsoluteErrorCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestMeanAbsoluteError = errorState == OnlineCalculatorError.None ? testMae : double.NaN;
 
-      double trainingR2 = OnlinePearsonsRSquaredCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingR2 = OnlinePearsonsRSquaredCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingRSquared = errorState == OnlineCalculatorError.None ? trainingR2 : double.NaN;
-      double testR2 = OnlinePearsonsRSquaredCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testR2 = OnlinePearsonsRSquaredCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestRSquared = errorState == OnlineCalculatorError.None ? testR2 : double.NaN;
 
-      double trainingRelError = OnlineMeanAbsolutePercentageErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingRelError = OnlineMeanAbsolutePercentageErrorCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingRelativeError = errorState == OnlineCalculatorError.None ? trainingRelError : double.NaN;
-      double testRelError = OnlineMeanAbsolutePercentageErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testRelError = OnlineMeanAbsolutePercentageErrorCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestRelativeError = errorState == OnlineCalculatorError.None ? testRelError : double.NaN;
 
-      double trainingNmse = OnlineNormalizedMeanSquaredErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingNmse = OnlineNormalizedMeanSquaredErrorCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
       TrainingNormalizedMeanSquaredError = errorState == OnlineCalculatorError.None ? trainingNmse : double.NaN;
-      double testNmse = OnlineNormalizedMeanSquaredErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testNmse = OnlineNormalizedMeanSquaredErrorCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
       TestNormalizedMeanSquaredError = errorState == OnlineCalculatorError.None ? testNmse : double.NaN;
 
-      double trainingDirectionalSymmetry = OnlineDirectionalSymmetryCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      var startTrainingValues = originalTrainingValues;
+      // each continuation is only one element long
+      var actualContinuationsTraining = from x in originalTrainingValues.Skip(1)
+                                        select Enumerable.Repeat(x, 1);
+      // each forecast is only one elemnt long
+      // disregards the first estimated value (we could include this again by extending the list of original values by one step to the left
+      // this is the easier way
+      var predictedContinuationsTraining = from x in estimatedTrainingValues.Skip(1)
+                                           select Enumerable.Repeat(x, 1);
+
+      var startTestValues = originalTestValues;
+      var actualContinuationsTest = from x in originalTestValues.Skip(1)
+                                    select Enumerable.Repeat(x, 1);
+      var predictedContinuationsTest = from x in estimatedTestValues.Skip(1)
+                                       select Enumerable.Repeat(x, 1);
+
+      double trainingDirectionalSymmetry = OnlineDirectionalSymmetryCalculator.Calculate(startTrainingValues, actualContinuationsTraining, predictedContinuationsTraining, out errorState);
       TrainingDirectionalSymmetry = errorState == OnlineCalculatorError.None ? trainingDirectionalSymmetry : double.NaN;
-      double testDirectionalSymmetry = OnlineDirectionalSymmetryCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testDirectionalSymmetry = OnlineDirectionalSymmetryCalculator.Calculate(startTestValues, actualContinuationsTest, predictedContinuationsTest, out errorState);
       TestDirectionalSymmetry = errorState == OnlineCalculatorError.None ? testDirectionalSymmetry : double.NaN;
 
-      double trainingWeightedDirectionalSymmetry = OnlineWeightedDirectionalSymmetryCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingWeightedDirectionalSymmetry = OnlineWeightedDirectionalSymmetryCalculator.Calculate(startTrainingValues, actualContinuationsTraining, predictedContinuationsTraining, out errorState);
       TrainingWeightedDirectionalSymmetry = errorState == OnlineCalculatorError.None ? trainingWeightedDirectionalSymmetry : double.NaN;
-      double testWeightedDirectionalSymmetry = OnlineWeightedDirectionalSymmetryCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testWeightedDirectionalSymmetry = OnlineWeightedDirectionalSymmetryCalculator.Calculate(startTestValues, actualContinuationsTest, predictedContinuationsTest, out errorState);
       TestWeightedDirectionalSymmetry = errorState == OnlineCalculatorError.None ? testWeightedDirectionalSymmetry : double.NaN;
 
-      double trainingTheilsU = OnlineTheilsUStatisticCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      double trainingTheilsU = OnlineTheilsUStatisticCalculator.Calculate(startTrainingValues, actualContinuationsTraining, predictedContinuationsTraining, out errorState);
       TrainingTheilsUStatistic = errorState == OnlineCalculatorError.None ? trainingTheilsU : double.NaN;
-      double testTheilsU = OnlineTheilsUStatisticCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      double testTheilsU = OnlineTheilsUStatisticCalculator.Calculate(startTestValues, actualContinuationsTest, predictedContinuationsTest, out errorState);
       TestTheilsUStatistic = errorState == OnlineCalculatorError.None ? testTheilsU : double.NaN;
-
-
     }
   }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/TimeSeriesPrognosis/IOnlineTimeSeriesCalculator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/TimeSeriesPrognosis/IOnlineTimeSeriesCalculator.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/TimeSeriesPrognosis/IOnlineTimeSeriesCalculator.cs	(revision 7085)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  public interface IOnlineTimeSeriesCalculator {
+    OnlineCalculatorError ErrorState { get; }
+    double Value { get; }
+    void Reset();
+    void Add(double startValue, IEnumerable<double> actualContinuation, IEnumerable<double> predictedContinuation);
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/NormalizedGiniCalculator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/NormalizedGiniCalculator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/NormalizedGiniCalculator.cs	(revision 7085)
@@ -28,12 +28,14 @@
   public class NormalizedGiniCalculator {
 
-    public static double Calculate(IEnumerable<double> original, IEnumerable<double> estimated, out OnlineCalculatorError errorState) {
-      if (original.Count() != estimated.Count()) {
-        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
+    public static double Calculate(IEnumerable<double> originalValues, IEnumerable<double> estimatedValues, out OnlineCalculatorError errorState) {
+      var originalValuesArr = originalValues.ToArray();
+      var estimatedValuesArr = estimatedValues.ToArray();
+      if (originalValuesArr.Count() != estimatedValuesArr.Count()) {
+        throw new ArgumentException("Number of elements in originalValues and estimatedValues enumerations doesn't match.");
       }
-      double oe = Gini(original, estimated, out errorState);
+      double oe = Gini(originalValuesArr, estimatedValuesArr, out errorState);
       if (errorState != OnlineCalculatorError.None) return double.NaN;
 
-      return oe / (Gini(original, original, out errorState));
+      return oe / (Gini(originalValuesArr, originalValuesArr, out errorState));
     }
 
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineAccuracyCalculator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineAccuracyCalculator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineAccuracyCalculator.cs	(revision 7085)
@@ -68,13 +68,13 @@
     #endregion
 
-    public static double Calculate(IEnumerable<double> first, IEnumerable<double> second, out OnlineCalculatorError errorState) {
-      IEnumerator<double> firstEnumerator = first.GetEnumerator();
-      IEnumerator<double> secondEnumerator = second.GetEnumerator();
+    public static double Calculate(IEnumerable<double> originalValues, IEnumerable<double> estimatedValues, out OnlineCalculatorError errorState) {
+      IEnumerator<double> originalEnumerator = originalValues.GetEnumerator();
+      IEnumerator<double> estimatedEnumerator = estimatedValues.GetEnumerator();
       OnlineAccuracyCalculator accuracyCalculator = new OnlineAccuracyCalculator();
 
       // always move forward both enumerators (do not use short-circuit evaluation!)
-      while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) {
-        double estimated = secondEnumerator.Current;
-        double original = firstEnumerator.Current;
+      while (originalEnumerator.MoveNext() & estimatedEnumerator.MoveNext()) {
+        double original = originalEnumerator.Current;
+        double estimated = estimatedEnumerator.Current;
         accuracyCalculator.Add(original, estimated);
         if (accuracyCalculator.ErrorState != OnlineCalculatorError.None) break;
@@ -83,6 +83,6 @@
       // check if both enumerators are at the end to make sure both enumerations have the same length
       if (accuracyCalculator.ErrorState == OnlineCalculatorError.None &&
-          (secondEnumerator.MoveNext() || firstEnumerator.MoveNext())) {
-        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
+          (estimatedEnumerator.MoveNext() || originalEnumerator.MoveNext())) {
+        throw new ArgumentException("Number of elements in originalValues and estimatedValues enumerations doesn't match.");
       } else {
         errorState = accuracyCalculator.ErrorState;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineCovarianceCalcualtor.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineCovarianceCalcualtor.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineCovarianceCalcualtor.cs	(revision 7085)
@@ -26,5 +26,5 @@
   public class OnlineCovarianceCalculator : IOnlineCalculator {
 
-    private double originalMean, estimatedMean, Cn;
+    private double xMean, yMean, Cn;
     private int n;
     public double Covariance {
@@ -49,11 +49,11 @@
       n = 0;
       Cn = 0.0;
-      originalMean = 0.0;
-      estimatedMean = 0.0;
+      xMean = 0.0;
+      yMean = 0.0;
       errorState = OnlineCalculatorError.InsufficientElementsAdded;
     }
 
-    public void Add(double original, double estimated) {
-      if (double.IsNaN(estimated) || double.IsInfinity(estimated) || double.IsNaN(original) || double.IsInfinity(original) || (errorState & OnlineCalculatorError.InvalidValueAdded) > 0) {
+    public void Add(double x, double y) {
+      if (double.IsNaN(y) || double.IsInfinity(y) || double.IsNaN(x) || double.IsInfinity(x) || (errorState & OnlineCalculatorError.InvalidValueAdded) > 0) {
         errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
       } else {
@@ -62,10 +62,10 @@
 
         // online calculation of tMean
-        originalMean = originalMean + (original - originalMean) / n;
-        double delta = estimated - estimatedMean; // delta = (y - yMean(n-1))
-        estimatedMean = estimatedMean + delta / n;
+        xMean = xMean + (x - xMean) / n;
+        double delta = y - yMean; // delta = (y - yMean(n-1))
+        yMean = yMean + delta / n;
 
         // online calculation of covariance
-        Cn = Cn + delta * (original - originalMean); // C(n) = C(n-1) + (y - yMean(n-1)) (t - tMean(n))       
+        Cn = Cn + delta * (x - xMean); // C(n) = C(n-1) + (y - yMean(n-1)) (t - tMean(n))       
       }
     }
@@ -79,7 +79,7 @@
       // always move forward both enumerators (do not use short-circuit evaluation!)
       while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) {
-        double estimated = secondEnumerator.Current;
-        double original = firstEnumerator.Current;
-        covarianceCalculator.Add(original, estimated);
+        double x = secondEnumerator.Current;
+        double y = firstEnumerator.Current;
+        covarianceCalculator.Add(x, y);
         if (covarianceCalculator.ErrorState != OnlineCalculatorError.None) break;
       }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineDirectionalSymmetryCalculator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineDirectionalSymmetryCalculator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineDirectionalSymmetryCalculator.cs	(revision 7085)
@@ -22,10 +22,9 @@
 using System;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 
 namespace HeuristicLab.Problems.DataAnalysis {
-  public class OnlineDirectionalSymmetryCalculator : IOnlineCalculator {
-    private double prevEstimated;
-    private double prevOriginal;
+  public class OnlineDirectionalSymmetryCalculator : IOnlineTimeSeriesCalculator {
     private int n;
     private int nCorrect;
@@ -33,6 +32,6 @@
     public double DirectionalSymmetry {
       get {
-        if (n <= 1) return 0.0;
-        return (double)nCorrect / (n - 1) * 100.0;
+        if (n < 1) return 0.0;
+        return (double)nCorrect / n;
       }
     }
@@ -51,19 +50,33 @@
     }
 
-    public void Add(double original, double estimated) {
-      if (double.IsNaN(estimated) || double.IsInfinity(estimated) || double.IsNaN(original) || double.IsInfinity(original) || (errorState & OnlineCalculatorError.InvalidValueAdded) > 0) {
+    public void Add(double startValue, IEnumerable<double> actualContinuation, IEnumerable<double> predictedContinuation) {
+      if (double.IsNaN(startValue) || (errorState & OnlineCalculatorError.InvalidValueAdded) > 0) {
         errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
-      } else if (n == 0) {
-        prevOriginal = original;
-        prevEstimated = estimated;
-        n++;
       } else {
-        if ((original - prevOriginal) * (estimated - prevEstimated) >= 0.0) {
-          nCorrect++;
+        var actualEnumerator = actualContinuation.GetEnumerator();
+        var predictedEnumerator = predictedContinuation.GetEnumerator();
+        double prevActual = startValue;
+        double prevPredicted = startValue;
+        while (actualEnumerator.MoveNext() & predictedEnumerator.MoveNext() & errorState != OnlineCalculatorError.InvalidValueAdded) {
+          double actual = actualEnumerator.Current;
+          double predicted = predictedEnumerator.Current;
+          if (double.IsNaN(actual) || double.IsNaN(predicted)) {
+            errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
+          } else {
+            // count a prediction correct if the trend (positive/negative/no change) is predicted correctly
+            if ((actual - prevActual) * (predicted - prevPredicted) > 0.0 ||
+                (actual - prevActual).IsAlmost(predicted - prevPredicted)
+              ) {
+              nCorrect++;
+            }
+            n++;
+          }
         }
-        n++;
-        errorState = errorState & (~OnlineCalculatorError.InsufficientElementsAdded);        // n >= 1
-        prevOriginal = original;
-        prevEstimated = estimated;
+        // check if both enumerators are at the end to make sure both enumerations have the same length
+        if (actualEnumerator.MoveNext() || predictedEnumerator.MoveNext()) {
+          errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
+        } else {
+          errorState = errorState & (~OnlineCalculatorError.InsufficientElementsAdded); // n >= 1
+        }
       }
     }
@@ -72,32 +85,24 @@
       n = 0;
       nCorrect = 0;
-      prevOriginal = double.NaN;
-      prevEstimated = double.NaN;
       errorState = OnlineCalculatorError.InsufficientElementsAdded;
     }
 
 
-    public static double Calculate(IEnumerable<double> first, IEnumerable<double> second, out OnlineCalculatorError errorState) {
-      IEnumerator<double> firstEnumerator = first.GetEnumerator();
-      IEnumerator<double> secondEnumerator = second.GetEnumerator();
+    public static double Calculate(IEnumerable<double> startValues, IEnumerable<IEnumerable<double>> actualContinuations, IEnumerable<IEnumerable<double>> predictedContinuations, out OnlineCalculatorError errorState) {
+      IEnumerator<double> startValueEnumerator = startValues.GetEnumerator();
+      IEnumerator<IEnumerable<double>> actualContinuationsEnumerator = actualContinuations.GetEnumerator();
+      IEnumerator<IEnumerable<double>> predictedContinuationsEnumerator = predictedContinuations.GetEnumerator();
       OnlineDirectionalSymmetryCalculator dsCalculator = new OnlineDirectionalSymmetryCalculator();
 
-      // add first element of time series as a reference point
-      firstEnumerator.MoveNext();
-      secondEnumerator.MoveNext();
-      dsCalculator.Add(firstEnumerator.Current, secondEnumerator.Current);
-      
-      // always move forward both enumerators (do not use short-circuit evaluation!)
-      while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) {
-        double estimated = secondEnumerator.Current;
-        double original = firstEnumerator.Current;
-        dsCalculator.Add(original, estimated);
+      // always move forward all enumerators (do not use short-circuit evaluation!)
+      while (startValueEnumerator.MoveNext() & actualContinuationsEnumerator.MoveNext() & predictedContinuationsEnumerator.MoveNext()) {
+        dsCalculator.Add(startValueEnumerator.Current, actualContinuationsEnumerator.Current, predictedContinuationsEnumerator.Current);
         if (dsCalculator.ErrorState != OnlineCalculatorError.None) break;
       }
 
-      // check if both enumerators are at the end to make sure both enumerations have the same length
+      // check if all enumerators are at the end to make sure both enumerations have the same length
       if (dsCalculator.ErrorState == OnlineCalculatorError.None &&
-          (secondEnumerator.MoveNext() || firstEnumerator.MoveNext())) {
-        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
+          (startValueEnumerator.MoveNext() || actualContinuationsEnumerator.MoveNext() || predictedContinuationsEnumerator.MoveNext())) {
+        throw new ArgumentException("Number of elements in startValues, actualContinuations and estimatedValues predictedContinuations doesn't match.");
       } else {
         errorState = dsCalculator.ErrorState;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsoluteErrorCalculator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsoluteErrorCalculator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsoluteErrorCalculator.cs	(revision 7085)
@@ -65,13 +65,13 @@
     #endregion
 
-    public static double Calculate(IEnumerable<double> first, IEnumerable<double> second, out OnlineCalculatorError errorState) {
-      IEnumerator<double> firstEnumerator = first.GetEnumerator();
-      IEnumerator<double> secondEnumerator = second.GetEnumerator();
+    public static double Calculate(IEnumerable<double> originalValues, IEnumerable<double> estimatedValues, out OnlineCalculatorError errorState) {
+      IEnumerator<double> originalEnumerator = originalValues.GetEnumerator();
+      IEnumerator<double> estimatedEnumerator = estimatedValues.GetEnumerator();
       OnlineMeanAbsoluteErrorCalculator maeCalculator = new OnlineMeanAbsoluteErrorCalculator();
 
       // always move forward both enumerators (do not use short-circuit evaluation!)
-      while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) {
-        double estimated = secondEnumerator.Current;
-        double original = firstEnumerator.Current;
+      while (originalEnumerator.MoveNext() & estimatedEnumerator.MoveNext()) {
+        double original = originalEnumerator.Current;
+        double estimated = estimatedEnumerator.Current;
         maeCalculator.Add(original, estimated);
         if (maeCalculator.ErrorState != OnlineCalculatorError.None) break;
@@ -80,6 +80,6 @@
       // check if both enumerators are at the end to make sure both enumerations have the same length
       if (maeCalculator.ErrorState == OnlineCalculatorError.None &&
-         (secondEnumerator.MoveNext() || firstEnumerator.MoveNext())) {
-        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
+         (estimatedEnumerator.MoveNext() || originalEnumerator.MoveNext())) {
+        throw new ArgumentException("Number of elements in originalValues and estimatedValues enumerations doesn't match.");
       } else {
         errorState = maeCalculator.ErrorState;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsolutePercentageErrorCalculator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsolutePercentageErrorCalculator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsolutePercentageErrorCalculator.cs	(revision 7085)
@@ -67,13 +67,13 @@
     #endregion
 
-    public static double Calculate(IEnumerable<double> first, IEnumerable<double> second, out OnlineCalculatorError errorState) {
-      IEnumerator<double> firstEnumerator = first.GetEnumerator();
-      IEnumerator<double> secondEnumerator = second.GetEnumerator();
+    public static double Calculate(IEnumerable<double> originalValues, IEnumerable<double> estimatedValues, out OnlineCalculatorError errorState) {
+      IEnumerator<double> originalEnumerator = originalValues.GetEnumerator();
+      IEnumerator<double> estimatedEnumerator = estimatedValues.GetEnumerator();
       OnlineMeanAbsolutePercentageErrorCalculator calculator = new OnlineMeanAbsolutePercentageErrorCalculator();
 
       // always move forward both enumerators (do not use short-circuit evaluation!)
-      while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) {
-        double estimated = secondEnumerator.Current;
-        double original = firstEnumerator.Current;
+      while (originalEnumerator.MoveNext() & estimatedEnumerator.MoveNext()) {
+        double original = originalEnumerator.Current;
+        double estimated = estimatedEnumerator.Current;
         calculator.Add(original, estimated);
         if (calculator.ErrorState != OnlineCalculatorError.None) break;
@@ -82,6 +82,6 @@
       // check if both enumerators are at the end to make sure both enumerations have the same length
       if (calculator.ErrorState == OnlineCalculatorError.None &&
-            (secondEnumerator.MoveNext() || firstEnumerator.MoveNext())) {
-        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
+            (estimatedEnumerator.MoveNext() || originalEnumerator.MoveNext())) {
+        throw new ArgumentException("Number of elements in originalValues and second estimatedValues doesn't match.");
       } else {
         errorState = calculator.ErrorState;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanSquaredErrorCalculator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanSquaredErrorCalculator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanSquaredErrorCalculator.cs	(revision 7085)
@@ -65,13 +65,13 @@
     #endregion
 
-    public static double Calculate(IEnumerable<double> first, IEnumerable<double> second, out OnlineCalculatorError errorState) {
-      IEnumerator<double> firstEnumerator = first.GetEnumerator();
-      IEnumerator<double> secondEnumerator = second.GetEnumerator();
+    public static double Calculate(IEnumerable<double> originalValues, IEnumerable<double> estimatedValues, out OnlineCalculatorError errorState) {
+      IEnumerator<double> originalEnumerator = originalValues.GetEnumerator();
+      IEnumerator<double> estimatedEnumerator = estimatedValues.GetEnumerator();
       OnlineMeanSquaredErrorCalculator mseCalculator = new OnlineMeanSquaredErrorCalculator();
 
       // always move forward both enumerators (do not use short-circuit evaluation!)
-      while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) {
-        double estimated = secondEnumerator.Current;
-        double original = firstEnumerator.Current;
+      while (originalEnumerator.MoveNext() & estimatedEnumerator.MoveNext()) {
+        double original = originalEnumerator.Current;
+        double estimated = estimatedEnumerator.Current;
         mseCalculator.Add(original, estimated);
         if (mseCalculator.ErrorState != OnlineCalculatorError.None) break;
@@ -80,6 +80,6 @@
       // check if both enumerators are at the end to make sure both enumerations have the same length
       if (mseCalculator.ErrorState == OnlineCalculatorError.None &&
-         (secondEnumerator.MoveNext() || firstEnumerator.MoveNext())) {
-        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
+         (estimatedEnumerator.MoveNext() || originalEnumerator.MoveNext())) {
+        throw new ArgumentException("Number of elements in originalValues and estimatedValues enumerations doesn't match.");
       } else {
         errorState = mseCalculator.ErrorState;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineNormalizedMeanSquaredErrorCalculator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineNormalizedMeanSquaredErrorCalculator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineNormalizedMeanSquaredErrorCalculator.cs	(revision 7085)
@@ -63,20 +63,20 @@
     #endregion
 
-    public static double Calculate(IEnumerable<double> first, IEnumerable<double> second, out OnlineCalculatorError errorState) {
-      IEnumerator<double> firstEnumerator = first.GetEnumerator();
-      IEnumerator<double> secondEnumerator = second.GetEnumerator();
+    public static double Calculate(IEnumerable<double> originalValues, IEnumerable<double> estimatedValues, out OnlineCalculatorError errorState) {
+      IEnumerator<double> originalEnumerator = originalValues.GetEnumerator();
+      IEnumerator<double> estimatedEnumerator = estimatedValues.GetEnumerator();
       OnlineNormalizedMeanSquaredErrorCalculator normalizedMSECalculator = new OnlineNormalizedMeanSquaredErrorCalculator();
 
       //needed because otherwise the normalizedMSECalculator is in ErrorState.InsufficientValuesAdded
-      if (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) {
-        double estimated = secondEnumerator.Current;
-        double original = firstEnumerator.Current;
+      if (originalEnumerator.MoveNext() & estimatedEnumerator.MoveNext()) {
+        double original = originalEnumerator.Current;
+        double estimated = estimatedEnumerator.Current;
         normalizedMSECalculator.Add(original, estimated);
       }
 
       // always move forward both enumerators (do not use short-circuit evaluation!)
-      while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) {
-        double estimated = secondEnumerator.Current;
-        double original = firstEnumerator.Current;
+      while (originalEnumerator.MoveNext() & estimatedEnumerator.MoveNext()) {
+        double original = originalEnumerator.Current;
+        double estimated = estimatedEnumerator.Current;
         normalizedMSECalculator.Add(original, estimated);
         if (normalizedMSECalculator.ErrorState != OnlineCalculatorError.None) break;
@@ -85,6 +85,6 @@
       // check if both enumerators are at the end to make sure both enumerations have the same length
       if (normalizedMSECalculator.ErrorState == OnlineCalculatorError.None &&
-           (secondEnumerator.MoveNext() || firstEnumerator.MoveNext())) {
-        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
+           (estimatedEnumerator.MoveNext() || originalEnumerator.MoveNext())) {
+        throw new ArgumentException("Number of elements in originalValues and estimatedValues enumeration doesn't match.");
       } else {
         errorState = normalizedMSECalculator.ErrorState;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlinePearsonsRSquaredCalculator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlinePearsonsRSquaredCalculator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlinePearsonsRSquaredCalculator.cs	(revision 7085)
@@ -74,6 +74,6 @@
       // always move forward both enumerators (do not use short-circuit evaluation!)
       while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) {
+        double original = firstEnumerator.Current;
         double estimated = secondEnumerator.Current;
-        double original = firstEnumerator.Current;
         rSquaredCalculator.Add(original, estimated);
         if (rSquaredCalculator.ErrorState != OnlineCalculatorError.None) break;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineTheilsUStatisticCalculator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineTheilsUStatisticCalculator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineTheilsUStatisticCalculator.cs	(revision 7085)
@@ -22,11 +22,10 @@
 using System;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.DataAnalysis {
-  public class OnlineTheilsUStatisticCalculator : IOnlineCalculator {
+  public class OnlineTheilsUStatisticCalculator : IOnlineTimeSeriesCalculator {
     private OnlineMeanAndVarianceCalculator squaredErrorMeanCalculator;
     private OnlineMeanAndVarianceCalculator unbiasedEstimatorMeanCalculator;
-    private double prevOriginal;
-    private int n;
 
     public double TheilsUStatistic {
@@ -52,27 +51,34 @@
     }
 
-    public void Add(double original, double estimated) {
-      if (double.IsNaN(estimated) || double.IsInfinity(estimated) || double.IsNaN(original) || double.IsInfinity(original) || (errorState & OnlineCalculatorError.InvalidValueAdded) > 0) {
+    public void Add(double startValue, IEnumerable<double> actualContinuation, IEnumerable<double> predictedContinuation) {
+      if (double.IsNaN(startValue) || (errorState & OnlineCalculatorError.InvalidValueAdded) > 0) {
         errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
-      } else if (n == 0) {
-        prevOriginal = original;
-        n++;
       } else {
-        // error of predicted change
-        double errorEstimatedChange = (estimated - original);
-        squaredErrorMeanCalculator.Add(errorEstimatedChange * errorEstimatedChange);
+        var actualEnumerator = actualContinuation.GetEnumerator();
+        var predictedEnumerator = predictedContinuation.GetEnumerator();
+        while (actualEnumerator.MoveNext() & predictedEnumerator.MoveNext() & ErrorState != OnlineCalculatorError.InvalidValueAdded) {
+          double actual = actualEnumerator.Current;
+          double predicted = predictedEnumerator.Current;
+          if (double.IsNaN(actual) || double.IsNaN(predicted)) {
+            errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
+          } else {
+            // error of predicted change
+            double errorPredictedChange = (predicted - startValue) - (actual - startValue);
+            squaredErrorMeanCalculator.Add(errorPredictedChange * errorPredictedChange);
 
-        double errorNoChange = (original - prevOriginal);
-        unbiasedEstimatorMeanCalculator.Add(errorNoChange * errorNoChange);
-        errorState = errorState & (~OnlineCalculatorError.InsufficientElementsAdded);        // n >= 1
-        prevOriginal = original;
-        n++;
+            double errorNoChange = (actual - startValue);
+            unbiasedEstimatorMeanCalculator.Add(errorNoChange * errorNoChange);
+          }
+        }
+        // check if both enumerators are at the end to make sure both enumerations have the same length
+        if (actualEnumerator.MoveNext() || predictedEnumerator.MoveNext()) {
+          errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
+        } else {
+          errorState = errorState & (~OnlineCalculatorError.InsufficientElementsAdded); // n >= 1
+        }
       }
     }
 
-
     public void Reset() {
-      prevOriginal = double.NaN;
-      n = 0;
       squaredErrorMeanCalculator.Reset();
       unbiasedEstimatorMeanCalculator.Reset();
@@ -82,26 +88,20 @@
     #endregion
 
-    public static double Calculate(IEnumerable<double> estimatedValues, IEnumerable<double> originalValues, out OnlineCalculatorError errorState) {
-      IEnumerator<double> originalValuesEnumerator = originalValues.GetEnumerator();
-      IEnumerator<double> estimatedValuesEnumerator = estimatedValues.GetEnumerator();
+    public static double Calculate(IEnumerable<double> startValues, IEnumerable<IEnumerable<double>> actualContinuations, IEnumerable<IEnumerable<double>> predictedContinuations, out OnlineCalculatorError errorState) {
+      IEnumerator<double> startValueEnumerator = startValues.GetEnumerator();
+      IEnumerator<IEnumerable<double>> actualContinuationsEnumerator = actualContinuations.GetEnumerator();
+      IEnumerator<IEnumerable<double>> predictedContinuationsEnumerator = predictedContinuations.GetEnumerator();
       OnlineTheilsUStatisticCalculator calculator = new OnlineTheilsUStatisticCalculator();
 
-      // add first element of time series as a reference point
-      originalValuesEnumerator.MoveNext();
-      estimatedValuesEnumerator.MoveNext();
-      calculator.Add(originalValuesEnumerator.Current, estimatedValuesEnumerator.Current);
-
-      // always move forward both enumerators (do not use short-circuit evaluation!)
-      while (originalValuesEnumerator.MoveNext() & estimatedValuesEnumerator.MoveNext()) {
-        double estimated = estimatedValuesEnumerator.Current;
-        double original = originalValuesEnumerator.Current;
-        calculator.Add(original, estimated);
+      // always move forward all enumerators (do not use short-circuit evaluation!)
+      while (startValueEnumerator.MoveNext() & actualContinuationsEnumerator.MoveNext() & predictedContinuationsEnumerator.MoveNext()) {
+        calculator.Add(startValueEnumerator.Current, actualContinuationsEnumerator.Current, predictedContinuationsEnumerator.Current);
         if (calculator.ErrorState != OnlineCalculatorError.None) break;
       }
 
-      // check if both enumerators are at the end to make sure both enumerations have the same length
+      // check if all enumerators are at the end to make sure both enumerations have the same length
       if (calculator.ErrorState == OnlineCalculatorError.None &&
-          (estimatedValuesEnumerator.MoveNext() || originalValuesEnumerator.MoveNext())) {
-        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
+          (startValueEnumerator.MoveNext() || actualContinuationsEnumerator.MoveNext() || predictedContinuationsEnumerator.MoveNext())) {
+        throw new ArgumentException("Number of elements in startValues, actualContinuations and estimatedValues predictedContinuations doesn't match.");
       } else {
         errorState = calculator.ErrorState;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineWeightedDirectionalSymmetryCalculator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineWeightedDirectionalSymmetryCalculator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineWeightedDirectionalSymmetryCalculator.cs	(revision 7085)
@@ -22,10 +22,9 @@
 using System;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 
 namespace HeuristicLab.Problems.DataAnalysis {
-  public class OnlineWeightedDirectionalSymmetryCalculator : IOnlineCalculator {
-    private double prevEstimated;
-    private double prevOriginal;
+  public class OnlineWeightedDirectionalSymmetryCalculator : IOnlineTimeSeriesCalculator {
     private int n;
     private double correctSum;
@@ -52,22 +51,33 @@
     }
 
-    public void Add(double original, double estimated) {
-      if (double.IsNaN(estimated) || double.IsInfinity(estimated) || double.IsNaN(original) || double.IsInfinity(original) || (errorState & OnlineCalculatorError.InvalidValueAdded) > 0) {
+    public void Add(double startValue, IEnumerable<double> actualContinuation, IEnumerable<double> predictedContinuation) {
+      if (double.IsNaN(startValue) || (errorState & OnlineCalculatorError.InvalidValueAdded) > 0) {
         errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
-      } else if (n == 0) {
-        prevOriginal = original;
-        prevEstimated = estimated;
-        n++;
       } else {
-        double err = Math.Abs(original - estimated);
-        if ((original - prevOriginal) * (estimated - prevEstimated) >= 0.0) {
-          correctSum += err;
+        var actualEnumerator = actualContinuation.GetEnumerator();
+        var predictedEnumerator = predictedContinuation.GetEnumerator();
+        while (actualEnumerator.MoveNext() & predictedEnumerator.MoveNext() & errorState != OnlineCalculatorError.InvalidValueAdded) {
+          double actual = actualEnumerator.Current;
+          double predicted = predictedEnumerator.Current;
+          if (double.IsNaN(actual) || double.IsNaN(predicted)) {
+            errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
+          } else {
+            double err = Math.Abs(actual - predicted);
+            // count as correct only if the trend (positive/negative/no change) is predicted correctly
+            if ((actual - startValue) * (predicted - startValue) > 0.0 ||
+              (actual - startValue).IsAlmost(predicted - startValue)) {
+              correctSum += err;
+            } else {
+              incorrectSum += err;
+            }
+            n++;
+          }
+        }
+        // check if both enumerators are at the end to make sure both enumerations have the same length
+        if (actualEnumerator.MoveNext() || predictedEnumerator.MoveNext()) {
+          errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
         } else {
-          incorrectSum += err;
+          errorState = errorState & (~OnlineCalculatorError.InsufficientElementsAdded); // n >= 1
         }
-        n++;
-        errorState = errorState & (~OnlineCalculatorError.InsufficientElementsAdded);        // n >= 1
-        prevOriginal = original;
-        prevEstimated = estimated;
       }
     }
@@ -77,35 +87,27 @@
       correctSum = 0;
       incorrectSum = 0;
-      prevOriginal = double.NaN;
-      prevEstimated = double.NaN;
       errorState = OnlineCalculatorError.InsufficientElementsAdded;
     }
 
 
-    public static double Calculate(IEnumerable<double> first, IEnumerable<double> second, out OnlineCalculatorError errorState) {
-      IEnumerator<double> firstEnumerator = first.GetEnumerator();
-      IEnumerator<double> secondEnumerator = second.GetEnumerator();
-      OnlineWeightedDirectionalSymmetryCalculator dsCalculator = new OnlineWeightedDirectionalSymmetryCalculator();
-      
-      // add first element of time series as a reference point
-      firstEnumerator.MoveNext();
-      secondEnumerator.MoveNext();
-      dsCalculator.Add(firstEnumerator.Current, secondEnumerator.Current);
+    public static double Calculate(IEnumerable<double> startValues, IEnumerable<IEnumerable<double>> actualContinuations, IEnumerable<IEnumerable<double>> predictedContinuations, out OnlineCalculatorError errorState) {
+      IEnumerator<double> startValueEnumerator = startValues.GetEnumerator();
+      IEnumerator<IEnumerable<double>> actualContinuationsEnumerator = actualContinuations.GetEnumerator();
+      IEnumerator<IEnumerable<double>> predictedContinuationsEnumerator = predictedContinuations.GetEnumerator();
+      OnlineWeightedDirectionalSymmetryCalculator calculator = new OnlineWeightedDirectionalSymmetryCalculator();
 
-      // always move forward both enumerators (do not use short-circuit evaluation!)
-      while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) {
-        double estimated = secondEnumerator.Current;
-        double original = firstEnumerator.Current;
-        dsCalculator.Add(original, estimated);
-        if (dsCalculator.ErrorState != OnlineCalculatorError.None) break;
+      // always move forward all enumerators (do not use short-circuit evaluation!)
+      while (startValueEnumerator.MoveNext() & actualContinuationsEnumerator.MoveNext() & predictedContinuationsEnumerator.MoveNext()) {
+        calculator.Add(startValueEnumerator.Current, actualContinuationsEnumerator.Current, predictedContinuationsEnumerator.Current);
+        if (calculator.ErrorState != OnlineCalculatorError.None) break;
       }
 
-      // check if both enumerators are at the end to make sure both enumerations have the same length
-      if (dsCalculator.ErrorState == OnlineCalculatorError.None &&
-          (secondEnumerator.MoveNext() || firstEnumerator.MoveNext())) {
-        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
+      // check if all enumerators are at the end to make sure both enumerations have the same length
+      if (calculator.ErrorState == OnlineCalculatorError.None &&
+          (startValueEnumerator.MoveNext() || actualContinuationsEnumerator.MoveNext() || predictedContinuationsEnumerator.MoveNext())) {
+        throw new ArgumentException("Number of elements in startValues, actualContinuations and estimatedValues predictedContinuations doesn't match.");
       } else {
-        errorState = dsCalculator.ErrorState;
-        return dsCalculator.WeightedDirectionalSymmetry;
+        errorState = calculator.ErrorState;
+        return calculator.WeightedDirectionalSymmetry;
       }
     }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/TableFileParser.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/TableFileParser.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis/3.4/TableFileParser.cs	(revision 7085)
@@ -156,11 +156,15 @@
         } else if (OccurrencesOf(charCounts, ',') > 10) {
           // no points and many commas
-          int countCommaNonDigitPairs = 0;
-          for (int i = 0; i < charsRead - 1; i++) {
-            if (buffer[i] == ',' && !Char.IsDigit(buffer[i + 1])) {
-              countCommaNonDigitPairs++;
+          // count the number of tokens (chains of only digits and commas) that contain multiple comma characters
+          int tokensWithMultipleCommas = 0;
+          for (int i = 0; i < charsRead; i++) {
+            int nCommas = 0;
+            while (i < charsRead && (buffer[i] == ',' || Char.IsDigit(buffer[i]))) {
+              if (buffer[i] == ',') nCommas++;
+              i++;
             }
-          }
-          if (countCommaNonDigitPairs > 10) {
+            if (nCommas > 2) tokensWithMultipleCommas++;
+          }
+          if (tokensWithMultipleCommas > 1) {
             // English format (only integer values) with ',' as separator
             numberFormat = NumberFormatInfo.InvariantInfo;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/HeuristicLab.Problems.ExternalEvaluation.GP-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/HeuristicLab.Problems.ExternalEvaluation.GP-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/HeuristicLab.Problems.ExternalEvaluation.GP-3.3.csproj	(revision 7085)
@@ -95,4 +95,5 @@
     <Reference Include="Google.ProtocolBuffers-0.9.1, Version=0.9.0.0, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48, processorArchitecture=MSIL">
       <HintPath>..\..\bin\Google.ProtocolBuffers-0.9.1.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation.GP/3.4/HeuristicLab.Problems.ExternalEvaluation.GP-3.4.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation.GP/3.4/HeuristicLab.Problems.ExternalEvaluation.GP-3.4.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation.GP/3.4/HeuristicLab.Problems.ExternalEvaluation.GP-3.4.csproj	(revision 7085)
@@ -95,4 +95,5 @@
     <Reference Include="Google.ProtocolBuffers-0.9.1, Version=0.9.0.0, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48, processorArchitecture=MSIL">
       <HintPath>..\..\bin\Google.ProtocolBuffers-0.9.1.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/HeuristicLab.Problems.ExternalEvaluation.Views-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/HeuristicLab.Problems.ExternalEvaluation.Views-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/HeuristicLab.Problems.ExternalEvaluation.Views-3.3.csproj	(revision 7085)
@@ -95,8 +95,4 @@
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="HeuristicLab.Data.Views-3.3">
-      <HintPath>..\..\HeuristicLab.Data.Views\3.3\bin\x86\Release\HeuristicLab.Data.Views-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86" />
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -176,4 +172,9 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data.Views\3.3\HeuristicLab.Data.Views-3.3.csproj">
+      <Project>{72104A0B-90E7-42F3-9ABE-9BBBADD4B943}</Project>
+      <Name>HeuristicLab.Data.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
       <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
@@ -189,4 +190,9 @@
       <Project>{662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2}</Project>
       <Name>HeuristicLab.Optimization.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
       <Private>False</Private>
     </ProjectReference>
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLab.Problems.ExternalEvaluation-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLab.Problems.ExternalEvaluation-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLab.Problems.ExternalEvaluation-3.3.csproj	(revision 7085)
@@ -97,4 +97,5 @@
     <Reference Include="Google.ProtocolBuffers-0.9.1, Version=0.9.0.0, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48, processorArchitecture=MSIL">
       <HintPath>..\..\bin\Google.ProtocolBuffers-0.9.1.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSeachOperator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSeachOperator.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSeachOperator.cs	(revision 7085)
@@ -31,4 +31,5 @@
 namespace HeuristicLab.Problems.QuadraticAssignment.Algorithms {
   [Item("RobustTabooSearchOperator", "Performs an iteration of the robust taboo search algorithm as descrbied in Taillard 1991.")]
+  [StorableClass]
   public sealed class RobustTabooSeachOperator : SingleSuccessorOperator, IIterationBasedOperator, IStochasticOperator {
 
@@ -85,4 +86,8 @@
     public IValueLookupParameter<IntValue> AlternativeAspirationTenureParameter {
       get { return (IValueLookupParameter<IntValue>)Parameters["AlternativeAspirationTenure"]; }
+    }
+
+    private ILookupParameter<BoolValue> AllMovesTabuParameter {
+      get { return (ILookupParameter<BoolValue>)Parameters["AllMovesTabu"]; }
     }
     #endregion
@@ -111,8 +116,19 @@
       Parameters.Add(new ValueLookupParameter<BoolValue>("UseAlternativeAspiration", "True if the alternative aspiration condition should be used that takes moves that have not been made for some time above others."));
       Parameters.Add(new ValueLookupParameter<IntValue>("AlternativeAspirationTenure", "The time t that a move will be remembered for the alternative aspiration condition."));
+      Parameters.Add(new LookupParameter<BoolValue>("AllMovesTabu", "Indicates that all moves are tabu."));
     }
 
     public override IDeepCloneable Clone(Cloner cloner) {
       return new RobustTabooSeachOperator(this, cloner);
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (!Parameters.ContainsKey("AllMovesTabu")) {
+        Parameters.Add(new LookupParameter<BoolValue>("AllMovesTabu", "Indicates that all moves are tabu."));
+      }
+      #endregion
     }
 
@@ -131,4 +147,8 @@
         bestQuality = BestQualityParameter.ActualValue;
       }
+      bool allMovesTabu = false;
+      if (AllMovesTabuParameter.ActualValue == null)
+        AllMovesTabuParameter.ActualValue = new BoolValue(false);
+      else allMovesTabu = AllMovesTabuParameter.ActualValue.Value;
 
       int minTenure = MinimumTabuTenureParameter.ActualValue.Value;
@@ -147,4 +167,5 @@
         if (lastMove == null)
           moveQuality = QAPSwap2MoveEvaluator.Apply(solution, move, weights, distances);
+        else if (allMovesTabu) moveQuality = moveQualityMatrix[move.Index1, move.Index2];
         else moveQuality = QAPSwap2MoveEvaluator.Apply(solution, move, moveQualityMatrix[move.Index1, move.Index2], weights, distances, lastMove);
 
@@ -180,7 +201,10 @@
       }
 
-      LastMoveParameter.ActualValue = bestMove;
-
-      if (bestMove == null) return base.Apply();
+      allMovesTabu = bestMove == null;
+      if (!allMovesTabu)
+        LastMoveParameter.ActualValue = bestMove;
+      AllMovesTabuParameter.ActualValue.Value = allMovesTabu;
+
+      if (allMovesTabu) return base.Apply();
 
       bool useNewAdaptionScheme = UseNewTabuTenureAdaptionSchemeParameter.ActualValue.Value;
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs	(revision 7085)
@@ -51,6 +51,6 @@
 
     #region Parameter Properties
-    public FixedValueParameter<MultiAnalyzer> AnalyzerParameter {
-      get { return (FixedValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
+    public IValueParameter<MultiAnalyzer> AnalyzerParameter {
+      get { return (IValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
     }
     public FixedValueParameter<IntValue> SeedParameter {
@@ -77,4 +77,7 @@
     public FixedValueParameter<BoolValue> UseNewTabuTenureAdaptionSchemeParameter {
       get { return (FixedValueParameter<BoolValue>)Parameters["UseNewTabuTenureAdaptionScheme"]; }
+    }
+    public FixedValueParameter<BoolValue> TerminateOnOptimalSolutionParameter {
+      get { return (FixedValueParameter<BoolValue>)Parameters["TerminateOnOptimalSolution"]; }
     }
     #endregion
@@ -112,4 +115,8 @@
       get { return UseNewTabuTenureAdaptionSchemeParameter.Value.Value; }
       set { UseNewTabuTenureAdaptionSchemeParameter.Value.Value = value; }
+    }
+    public bool TerminateOnOptimalSolution {
+      get { return TerminateOnOptimalSolutionParameter.Value.Value; }
+      set { TerminateOnOptimalSolutionParameter.Value.Value = value; }
     }
     #endregion
@@ -132,5 +139,5 @@
     }
     public RobustTabooSearch() {
-      Parameters.Add(new FixedValueParameter<MultiAnalyzer>("Analyzer", "The analyzers that are applied after each iteration.", new MultiAnalyzer()));
+      Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The analyzers that are applied after each iteration.", new MultiAnalyzer()));
       Parameters.Add(new FixedValueParameter<IntValue>("Seed", "The seed value of the random number generator.", new IntValue(0)));
       Parameters.Add(new FixedValueParameter<BoolValue>("SetSeedRandomly", "True whether the seed should be set randomly for each run, false if it should be fixed.", new BoolValue(true)));
@@ -140,9 +147,11 @@
       Parameters.Add(new FixedValueParameter<BoolValue>("UseAlternativeAspiration", "True if the alternative aspiration condition should be used that takes moves that have not been made for some time above others.", new BoolValue(false)));
       Parameters.Add(new FixedValueParameter<IntValue>("AlternativeAspirationTenure", "The time t that a move will be remembered for the alternative aspiration condition.", new IntValue(int.MaxValue)));
-      Parameters.Add(new FixedValueParameter<BoolValue>("TerminateOnOptimalSolution", "True when the algorithm should stop if it reached a quality equal or smaller to the BestKnownQuality.", new BoolValue(true)));
+      Parameters.Add(new FixedValueParameter<BoolValue>("TerminateOnOptimalSolution", "True when the algorithm should stop if it reached a quality equal or smaller to the BestKnownQuality.", new BoolValue(false)));
       Parameters.Add(new FixedValueParameter<BoolValue>("UseNewTabuTenureAdaptionScheme", @"In an updated version of his implementation, Eric Taillard introduced a different way to change the tabu tenure.
 Instead of setting it uniformly between min and max, it will be set between 0 and max according to a right-skewed distribution.
 Set this option to false if you want to optimize using the earlier 1991 version, and set to true if you want to optimize using the newer version.
 Please note that the MinimumTabuTenure parameter has no effect in the new version.", new BoolValue(true)));
+
+      TerminateOnOptimalSolutionParameter.Hidden = true;
 
       qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
@@ -298,4 +307,12 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (Parameters["Analyzer"] is FixedValueParameter<MultiAnalyzer>) {
+        MultiAnalyzer analyzer = AnalyzerParameter.Value;
+        Parameters.Remove("Analyzer");
+        Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The analyzers that are applied after each iteration.", analyzer));
+      }
+      #endregion
       RegisterEventHandlers();
     }
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj	(revision 7085)
@@ -102,11 +102,4 @@
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86" />
-    <Reference Include="HeuristicLab.Data.Views-3.3">
-      <HintPath>..\..\HeuristicLab.Data.Views\3.3\bin\Debug\HeuristicLab.Data.Views-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Visualization.ChartControlsExtensions-3.3">
-      <HintPath>..\..\HeuristicLab.Visualization.ChartControlsExtensions\3.3\bin\Debug\HeuristicLab.Visualization.ChartControlsExtensions-3.3.dll</HintPath>
-    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -151,4 +144,9 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
       <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
@@ -171,4 +169,9 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data.Views\3.3\HeuristicLab.Data.Views-3.3.csproj">
+      <Project>{72104A0B-90E7-42F3-9ABE-9BBBADD4B943}</Project>
+      <Name>HeuristicLab.Data.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
       <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
@@ -209,4 +212,9 @@
       <Project>{79271BC8-4446-40E2-BB89-9BE4E17174FE}</Project>
       <Name>HeuristicLab.Problems.QuadraticAssignment-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Visualization.ChartControlsExtensions\3.3\HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj">
+      <Project>{315BDA09-3F4F-49B3-9790-B37CFC1C5750}</Project>
+      <Name>HeuristicLab.Visualization.ChartControlsExtensions-3.3</Name>
       <Private>False</Private>
     </ProjectReference>
Index: /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 7085)
@@ -466,4 +466,8 @@
             }
           }
+        } else {  // no solution exists
+          BestKnownSolution = null;
+          BestKnownSolutions = new ItemSet<Permutation>(new PermutationEqualityComparer());
+          BestKnownQuality = null;
         }
       }
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj	(revision 7085)
@@ -12,5 +12,6 @@
     <AssemblyName>HeuristicLab.Services.Deployment.DataAccess</AssemblyName>
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <TargetFrameworkProfile></TargetFrameworkProfile>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
     <FileAlignment>512</FileAlignment>
     <SignAssembly>true</SignAssembly>
@@ -136,5 +137,5 @@
     </None>
     <None Include="HeuristicLab.snk" />
-    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
     <None Include="Properties\Settings.settings">
       <Generator>SettingsSingleFileGenerator</Generator>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment.DataAccess/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment.DataAccess/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment.DataAccess/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Services.Deployment.DataAccess")]
+[assembly: AssemblyDescription("Data access layer for HeuristicLab deployment service")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("00484492-6cc5-4a0a-9876-327488f08c49")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: anches/RegressionBenchmarks/HeuristicLab.Services.Deployment.DataAccess/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment.DataAccess/3.3/Properties/AssemblyInfo.frame	(revision 7084)
+++ 	(revision )
@@ -1,56 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// 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("HeuristicLab.Services.Deployment.DataAccess")]
-[assembly: AssemblyDescription("Data access layer for HeuristicLab deployment service")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// 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)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("00484492-6cc5-4a0a-9876-327488f08c49")]
-
-// 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 Revision and Build Numbers 
-// by using the '*' as shown below:
-[assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj	(revision 7085)
@@ -14,5 +14,6 @@
     <StartArguments>/client:"WcfTestClient.exe"</StartArguments>
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <TargetFrameworkProfile></TargetFrameworkProfile>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
     <SignAssembly>true</SignAssembly>
     <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
@@ -124,5 +125,5 @@
   <ItemGroup>
     <None Include="HeuristicLab.snk" />
-    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
     <None Include="Properties\Settings.settings">
       <Generator>SettingsSingleFileGenerator</Generator>
@@ -134,5 +135,6 @@
       <Project>{EBEBA863-DD05-4331-BE25-5758B15F7407}</Project>
       <Name>HeuristicLab.Services.Deployment.DataAccess-3.3</Name>
-  <Private>False</Private></ProjectReference>
+      <Private>False</Private>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Services.Deployment")]
+[assembly: AssemblyDescription("HeuristicLab Deployment Service")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("00484492-6cc5-4a0a-9876-327488f08c49")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: anches/RegressionBenchmarks/HeuristicLab.Services.Deployment/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Deployment/3.3/Properties/AssemblyInfo.frame	(revision 7084)
+++ 	(revision )
@@ -1,56 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// 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("HeuristicLab.Services.Deployment")]
-[assembly: AssemblyDescription("HeuristicLab Deployment Service")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// 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)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("00484492-6cc5-4a0a-9876-327488f08c49")]
-
-// 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 Revision and Build Numbers 
-// by using the '*' as shown below:
-[assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Convert.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Convert.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Convert.cs	(revision 7085)
@@ -0,0 +1,363 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data.Linq;
+using System.Linq;
+using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  public static class Convert {
+    #region Job
+    public static DT.Job ToDto(Job source) {
+      if (source == null) return null;
+      return new DT.Job {
+        Id = source.JobId,
+        CoresNeeded = source.CoresNeeded,
+        ExecutionTime = TimeSpan.FromMilliseconds(source.ExecutionTimeMs),
+        MemoryNeeded = source.MemoryNeeded,
+        ParentJobId = source.ParentJobId,
+        Priority = source.Priority,
+        PluginsNeededIds = (source.RequiredPlugins == null ? new List<Guid>() : source.RequiredPlugins.Select(x => x.PluginId).ToList()),
+        LastHeartbeat = source.LastHeartbeat,
+        State = source.State,
+        StateLog = (source.StateLogs == null ? new List<DT.StateLog>() : source.StateLogs.Select(x => Convert.ToDto(x)).OrderBy(x => x.DateTime).ToList()),
+        IsParentJob = source.IsParentJob,
+        FinishWhenChildJobsFinished = source.FinishWhenChildJobsFinished,
+        Command = source.Command,
+        LastJobDataUpdate = (source.JobData == null ? DateTime.MinValue : source.JobData.LastUpdate),
+        HiveExperimentId = source.HiveExperimentId,
+        IsPrivileged = source.IsPrivileged
+      };
+    }
+    public static Job ToEntity(DT.Job source) {
+      if (source == null) return null;
+      var entity = new Job(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Job source, Job target) {
+      if ((source != null) && (target != null)) {
+        target.JobId = source.Id;
+        target.CoresNeeded = source.CoresNeeded;
+        target.ExecutionTimeMs = source.ExecutionTime.TotalMilliseconds;
+        target.MemoryNeeded = source.MemoryNeeded;
+        target.ParentJobId = source.ParentJobId;
+        target.Priority = source.Priority;
+        target.LastHeartbeat = source.LastHeartbeat;
+        target.State = source.State;
+        if (target.StateLogs == null) target.StateLogs = new EntitySet<StateLog>();
+        foreach (DT.StateLog sl in source.StateLog.Where(x => x.Id == Guid.Empty)) {
+          target.StateLogs.Add(Convert.ToEntity(sl));
+        }
+        target.IsParentJob = source.IsParentJob;
+        target.FinishWhenChildJobsFinished = source.FinishWhenChildJobsFinished;
+        target.Command = source.Command;
+        // RequiredPlugins are added by Dao
+        target.HiveExperimentId = source.HiveExperimentId;
+        target.IsPrivileged = source.IsPrivileged;
+      }
+    }
+    #endregion
+
+    #region JobData
+    public static DT.JobData ToDto(JobData source) {
+      if (source == null) return null;
+      return new DT.JobData { JobId = source.JobId, Data = source.Data.ToArray(), LastUpdate = source.LastUpdate };
+    }
+    public static JobData ToEntity(DT.JobData source) {
+      if (source == null) return null;
+      var entity = new JobData(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.JobData source, JobData target) {
+      if ((source != null) && (target != null)) {
+        target.JobId = source.JobId; target.Data = new Binary(source.Data); target.LastUpdate = source.LastUpdate;
+      }
+    }
+    #endregion
+
+    #region StateLog
+    public static DT.StateLog ToDto(StateLog source) {
+      if (source == null) return null;
+      return new DT.StateLog { Id = source.StateLogId, DateTime = source.DateTime, Exception = source.Exception, JobId = source.JobId, SlaveId = source.SlaveId, State = source.State, UserId = source.UserId };
+    }
+    public static StateLog ToEntity(DT.StateLog source) {
+      if (source == null) return null;
+      var entity = new StateLog(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.StateLog source, StateLog target) {
+      if ((source != null) && (target != null)) {
+        target.StateLogId = source.Id; target.DateTime = source.DateTime; target.Exception = source.Exception; target.JobId = source.JobId; target.SlaveId = source.SlaveId; target.State = source.State; target.UserId = source.UserId;
+      }
+    }
+    #endregion
+
+    #region Downtimes
+    public static DT.Downtime ToDto(Downtime source) {
+      if (source == null) return null;
+      return new DT.Downtime { Id = source.DowntimeId, AllDayEvent = source.AllDayEvent, EndDate = source.EndDate, Recurring = source.Recurring, RecurringId = source.RecurringId, ResourceId = source.ResourceId, StartDate = source.StartDate };
+    }
+    public static Downtime ToEntity(DT.Downtime source) {
+      if (source == null) return null;
+      var entity = new Downtime(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Downtime source, Downtime target) {
+      if ((source != null) && (target != null)) {
+        target.DowntimeId = source.Id; target.AllDayEvent = source.AllDayEvent; target.EndDate = source.EndDate; target.Recurring = source.Recurring; target.RecurringId = source.RecurringId; target.ResourceId = source.ResourceId; target.StartDate = source.StartDate;
+      }
+    }
+    #endregion
+
+    #region HiveExperiment
+    public static DT.HiveExperiment ToDto(HiveExperiment source) {
+      if (source == null) return null;
+      return new DT.HiveExperiment { Id = source.HiveExperimentId, Description = source.Description, Name = source.Name, OwnerUserId = source.OwnerUserId, DateCreated = source.DateCreated, ResourceNames = source.ResourceIds, LastAccessed = source.LastAccessed };
+    }
+    public static HiveExperiment ToEntity(DT.HiveExperiment source) {
+      if (source == null) return null;
+      var entity = new HiveExperiment(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.HiveExperiment source, HiveExperiment target) {
+      if ((source != null) && (target != null)) {
+        target.HiveExperimentId = source.Id; target.Description = source.Description; target.Name = source.Name; target.OwnerUserId = source.OwnerUserId; target.DateCreated = source.DateCreated; target.ResourceIds = source.ResourceNames; target.LastAccessed = source.LastAccessed;
+      }
+    }
+    #endregion
+
+    #region HiveExperimentPermission
+    public static DT.HiveExperimentPermission ToDto(HiveExperimentPermission source) {
+      if (source == null) return null;
+      return new DT.HiveExperimentPermission { HiveExperimentId = source.HiveExperimentId, GrantedUserId = source.GrantedUserId, GrantedByUserId = source.GrantedByUserId, Permission = source.Permission };
+    }
+    public static HiveExperimentPermission ToEntity(DT.HiveExperimentPermission source) {
+      if (source == null) return null;
+      var entity = new HiveExperimentPermission(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.HiveExperimentPermission source, HiveExperimentPermission target) {
+      if ((source != null) && (target != null)) {
+        target.HiveExperimentId = source.HiveExperimentId; target.GrantedUserId = source.GrantedUserId; target.GrantedByUserId = source.GrantedByUserId; target.Permission = source.Permission;
+      }
+    }
+    #endregion
+
+    #region Plugin
+    public static DT.Plugin ToDto(Plugin source) {
+      if (source == null) return null;
+      return new DT.Plugin { Id = source.PluginId, Name = source.Name, Version = new Version(source.Version), UserId = source.UserId, DateCreated = source.DateCreated, Hash = source.Hash };
+    }
+    public static Plugin ToEntity(DT.Plugin source) {
+      if (source == null) return null;
+      var entity = new Plugin(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Plugin source, Plugin target) {
+      if ((source != null) && (target != null)) {
+        target.PluginId = source.Id; target.Name = source.Name; target.Version = source.Version.ToString(); target.UserId = source.UserId; target.DateCreated = source.DateCreated; target.Hash = source.Hash;
+      }
+    }
+    #endregion
+
+    #region PluginData
+    public static DT.PluginData ToDto(PluginData source) {
+      if (source == null) return null;
+      return new DT.PluginData { Id = source.PluginDataId, PluginId = source.PluginId, Data = source.Data.ToArray(), FileName = source.FileName };
+    }
+    public static PluginData ToEntity(DT.PluginData source) {
+      if (source == null) return null;
+      var entity = new PluginData(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.PluginData source, PluginData target) {
+      if ((source != null) && (target != null)) {
+        target.PluginDataId = source.Id; target.PluginId = source.PluginId; target.Data = new Binary(source.Data); target.FileName = source.FileName;
+      }
+    }
+    #endregion
+
+    #region Slave
+    public static DT.Slave ToDto(Slave source) {
+      if (source == null) return null;
+      return new DT.Slave {
+        Id = source.ResourceId,
+        ParentResourceId = source.ParentResourceId,
+        Cores = source.Cores,
+        CpuSpeed = source.CpuSpeed,
+        FreeCores = source.FreeCores,
+        FreeMemory = source.FreeMemory,
+        IsAllowedToCalculate = source.IsAllowedToCalculate,
+        Memory = source.Memory,
+        Name = source.Name,
+        SlaveState = source.SlaveState,
+        CpuArchitecture = source.CpuArchitecture,
+        OperatingSystem = source.OperatingSystem,
+        LastHeartbeat = source.LastHeartbeat,
+        CpuUtilization = source.CpuUtilization
+      };
+    }
+    public static Slave ToEntity(DT.Slave source) {
+      if (source == null) return null;
+      var entity = new Slave(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Slave source, Slave target) {
+      if ((source != null) && (target != null)) {
+        target.ResourceId = source.Id;
+        target.ParentResourceId = source.ParentResourceId;
+        target.Cores = source.Cores;
+        target.CpuSpeed = source.CpuSpeed;
+        target.FreeCores = source.FreeCores;
+        target.FreeMemory = source.FreeMemory;
+        target.IsAllowedToCalculate = source.IsAllowedToCalculate;
+        target.Memory = source.Memory;
+        target.Name = source.Name;
+        target.SlaveState = source.SlaveState;
+        target.CpuArchitecture = source.CpuArchitecture;
+        target.OperatingSystem = source.OperatingSystem;
+        target.LastHeartbeat = source.LastHeartbeat;
+        target.CpuUtilization = source.CpuUtilization;
+      }
+    }
+    #endregion
+
+    #region SlaveGroup
+    public static DT.SlaveGroup ToDto(SlaveGroup source) {
+      if (source == null) return null;
+      return new DT.SlaveGroup { Id = source.ResourceId, Name = source.Name, ParentResourceId = source.ParentResourceId };
+    }
+    public static SlaveGroup ToEntity(DT.SlaveGroup source) {
+      if (source == null) return null;
+      var entity = new SlaveGroup(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.SlaveGroup source, SlaveGroup target) {
+      if ((source != null) && (target != null)) {
+        target.ResourceId = source.Id; target.Name = source.Name; target.ParentResourceId = source.ParentResourceId;
+      }
+    }
+    #endregion
+
+    #region Resource
+    public static DT.Resource ToDto(Resource source) {
+      if (source == null) return null;
+      return new DT.Resource { Id = source.ResourceId, Name = source.Name, ParentResourceId = source.ParentResourceId };
+    }
+    public static Resource ToEntity(DT.Resource source) {
+      if (source == null) return null;
+      var entity = new Resource(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Resource source, Resource target) {
+      if ((source != null) && (target != null)) {
+        target.ResourceId = source.Id; target.Name = source.Name; target.ParentResourceId = source.ParentResourceId;
+      }
+    }
+    #endregion
+
+    #region Statistics
+    public static DT.Statistics ToDto(Statistics source) {
+      if (source == null) return null;
+      return new DT.Statistics {
+        Id = source.StatisticsId,
+        TimeStamp = source.Timestamp,
+        SlaveStatistics = source.SlaveStatistics.Select(x => Convert.ToDto(x)).ToArray(),
+        UserStatistics = source.UserStatistics.Select(x => Convert.ToDto(x)).ToArray()
+      };
+    }
+    public static Statistics ToEntity(DT.Statistics source) {
+      if (source == null) return null;
+      var entity = new Statistics(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Statistics source, Statistics target) {
+      if ((source != null) && (target != null)) {
+        target.StatisticsId = source.Id;
+        target.Timestamp = source.TimeStamp;
+
+      }
+    }
+    #endregion
+
+    #region SlaveStatistics
+    public static DT.SlaveStatistics ToDto(SlaveStatistics source) {
+      if (source == null) return null;
+      return new DT.SlaveStatistics {
+        Id = source.StatisticsId,
+        SlaveId = source.SlaveId,
+        Cores = source.Cores,
+        CpuUtilization = source.CpuUtilization,
+        FreeCores = source.FreeCores,
+        FreeMemory = source.FreeMemory,
+        Memory = source.Memory
+      };
+    }
+    public static SlaveStatistics ToEntity(DT.SlaveStatistics source) {
+      if (source == null) return null;
+      var entity = new SlaveStatistics(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.SlaveStatistics source, SlaveStatistics target) {
+      if ((source != null) && (target != null)) {
+        target.StatisticsId = source.Id;
+        target.SlaveId = source.SlaveId;
+        target.Cores = source.Cores;
+        target.CpuUtilization = source.CpuUtilization;
+        target.FreeCores = source.FreeCores;
+        target.FreeMemory = source.FreeMemory;
+        target.Memory = source.Memory;
+      }
+    }
+    #endregion
+
+    #region UserStatistics
+    public static DT.UserStatistics ToDto(UserStatistics source) {
+      if (source == null) return null;
+      return new DT.UserStatistics {
+        Id = source.StatisticsId,
+        UserId = source.UserId,
+        UsedCores = source.UsedCores,
+        ExecutionTime = TimeSpan.FromMilliseconds(source.ExecutionTimeMs),
+        ExecutionTimeFinishedJobs = TimeSpan.FromMilliseconds(source.ExecutionTimeMsFinishedJobs),
+        StartToEndTime = TimeSpan.FromMilliseconds(source.StartToEndTimeMs)
+      };
+    }
+    public static UserStatistics ToEntity(DT.UserStatistics source) {
+      if (source == null) return null;
+      var entity = new UserStatistics(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.UserStatistics source, UserStatistics target) {
+      if ((source != null) && (target != null)) {
+        target.StatisticsId = source.Id;
+        target.UserId = source.UserId;
+        target.UsedCores = source.UsedCores;
+        target.ExecutionTimeMs = source.ExecutionTime.TotalMilliseconds;
+        target.ExecutionTimeMsFinishedJobs = source.ExecutionTimeFinishedJobs.TotalMilliseconds;
+        target.StartToEndTimeMs = source.StartToEndTime.TotalMilliseconds;
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Command.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Command.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Command.cs	(revision 7085)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+
+  [Serializable]
+  public enum Command {
+    Stop,
+    Abort,
+    Pause
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/CpuArchitecture.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/CpuArchitecture.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/CpuArchitecture.cs	(revision 7085)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+
+  [Serializable]
+  public enum CpuArchitecture {
+    x86, x64
+  };
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Permission.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Permission.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Permission.cs	(revision 7085)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+namespace HeuristicLab.Services.Hive.DataAccess {
+
+  [Serializable]
+  public enum Permission {
+    /// <summary>
+    /// User is not allowed to access
+    /// </summary>
+    NotAllowed,
+
+    /// <summary>
+    /// User can only download and view jobs
+    /// </summary>
+    Read,
+
+    /// <summary>
+    /// User can pause, stop, restart, delete jobs. can also grant other 
+    /// </summary>
+    Full
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/SlaveState.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/SlaveState.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/SlaveState.cs	(revision 7085)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+
+  [Serializable]
+  public enum SlaveState {
+    Idle,
+    Calculating,
+    Offline
+  };
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/TaskState.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/TaskState.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/TaskState.cs	(revision 7085)
@@ -0,0 +1,67 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  [Serializable]
+  public enum TaskState {
+    /// <summary>
+    /// A job is offline as long as he is not yet submitted to the hive
+    /// </summary>
+    Offline,
+
+    /// <summary>
+    /// Job is waiting to be calculated
+    /// </summary>
+    Waiting,
+
+    /// <summary>
+    /// Job is beeing transferred
+    /// </summary>
+    Transferring,
+
+    /// <summary>
+    /// Job is actively calculated on a Slave
+    /// </summary>
+    Calculating,
+
+    /// <summary>
+    /// Job is paused, will not be picked up by slaves
+    /// </summary>
+    Paused,
+
+    /// <summary>
+    /// Job as finished and is ready to be collected by the Client
+    /// </summary>
+    Finished,
+
+    /// <summary>
+    /// Job is aborted and result can be collected by the Client
+    /// </summary>
+    Aborted,
+
+    /// <summary>
+    /// Job as been aborted due to an error. Results are ready to be collected
+    /// </summary>
+    Failed
+  };
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Exceptions/DaoException.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Exceptions/DaoException.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Exceptions/DaoException.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  public class DaoException : Exception {
+    public DaoException(string message) : base(message) { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj	(revision 7085)
@@ -0,0 +1,172 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Services.Hive.DataAccess</RootNamespace>
+    <AssemblyName>HeuristicLab.Services.Hive.DataAccess-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data.Linq" />
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Enums\Command.cs" />
+    <Compile Include="Enums\CpuArchitecture.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="HiveDataContext.cs">
+      <DependentUpon>HiveDataContext.dbml</DependentUpon>
+    </Compile>
+    <Compile Include="HiveDataContext.designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>HiveDataContext.dbml</DependentUpon>
+    </Compile>
+    <Compile Include="ITransactionManager.cs" />
+    <Compile Include="Enums\TaskState.cs" />
+    <Compile Include="Logger.cs" />
+    <Compile Include="Enums\Permission.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Include="Enums\SlaveState.cs" />
+    <Compile Include="TransactionManager.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{3259AA49-8AA1-44D3-9025-A0B520596A8C}" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="HeuristicLab.snk" />
+    <None Include="HiveDataContext.dbml">
+      <Generator>MSLinqToSQLGenerator</Generator>
+      <LastGenOutput>HiveDataContext.designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Settings.settings">
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HiveDataContext.dbml.layout">
+      <DependentUpon>HiveDataContext.dbml</DependentUpon>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="SQL Scripts\Initialize Hive Database.sql" />
+    <Content Include="SQL Scripts\Prepare Hive Database.sql" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDao.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDao.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDao.cs	(revision 7085)
@@ -0,0 +1,830 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.Hive.Common.DataTransfer;
+using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  public class HiveDao : IHiveDao {
+    public static HiveDataContext CreateContext(bool longRunning = false) {
+      var context = new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString);
+      if (longRunning) context.CommandTimeout = (int)Settings.Default.LongRunningDatabaseCommandTimeout.TotalSeconds;
+      return context;
+    }
+
+    public HiveDao() { }
+
+    #region Job Methods
+    public DT.Job GetJob(Guid id) {
+      using (var db = CreateContext()) {
+        return Convert.ToDto(db.Jobs.SingleOrDefault(x => x.JobId == id));
+      }
+    }
+
+    public IEnumerable<DT.Job> GetJobs(Expression<Func<Job, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Jobs.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddJob(DT.Job dto) {
+      using (var db = CreateContext()) {
+        var entity = Convert.ToEntity(dto);
+        db.Jobs.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        foreach (Guid pluginId in dto.PluginsNeededIds) {
+          db.RequiredPlugins.InsertOnSubmit(new RequiredPlugin() { JobId = entity.JobId, PluginId = pluginId });
+        }
+        db.SubmitChanges();
+        return entity.JobId;
+      }
+    }
+
+    public void UpdateJob(DT.Job dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Jobs.FirstOrDefault(x => x.JobId == dto.Id);
+        if (entity == null) db.Jobs.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        foreach (Guid pluginId in dto.PluginsNeededIds) {
+          if (db.RequiredPlugins.Count(p => p.PluginId == pluginId) == 0) {
+            db.RequiredPlugins.InsertOnSubmit(new RequiredPlugin() { JobId = entity.JobId, PluginId = pluginId });
+          }
+        }
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteJob(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Jobs.FirstOrDefault(x => x.JobId == id);
+        if (entity != null) db.Jobs.DeleteOnSubmit(entity);
+        db.SubmitChanges(); // JobData and child jobs are deleted by db-trigger
+      }
+    }
+
+    /// <summary>
+    /// returns all parent jobs which are waiting for their child jobs to finish
+    /// </summary>
+    /// <param name="resourceIds">list of resourceids which for which the jobs should be valid</param>
+    /// <param name="count">maximum number of jobs to return</param>
+    /// <param name="finished">if true, all parent jobs which have FinishWhenChildJobsFinished=true are returned, otherwise only FinishWhenChildJobsFinished=false are returned</param>
+    /// <returns></returns>
+    public IEnumerable<DT.Job> GetParentJobs(IEnumerable<Guid> resourceIds, int count, bool finished) {
+      using (var db = CreateContext()) {
+        var query = from ar in db.AssignedResources
+                    where resourceIds.Contains(ar.ResourceId)
+                       && ar.Job.State == JobState.Waiting
+                       && ar.Job.IsParentJob
+                       && (finished ? ar.Job.FinishWhenChildJobsFinished : !ar.Job.FinishWhenChildJobsFinished)
+                       && (from child in db.Jobs
+                           where child.ParentJobId == ar.Job.JobId
+                           select child.State == JobState.Finished
+                               || child.State == JobState.Aborted
+                               || child.State == JobState.Failed).All(x => x)
+                       && (from child in db.Jobs // avoid returning WaitForChildJobs jobs where no child-jobs exist (yet)
+                           where child.ParentJobId == ar.Job.JobId
+                           select child).Count() > 0
+                    orderby ar.Job.Priority descending, db.Random()
+                    select Convert.ToDto(ar.Job);
+        return count == 0 ? query.ToArray() : query.Take(count).ToArray();
+      }
+    }
+
+    public IEnumerable<DT.Job> GetWaitingJobs(DT.Slave slave, int count) {
+      using (var db = CreateContext()) {
+        var resourceIds = GetParentResources(slave.Id).Select(r => r.Id);
+        var waitingParentJobs = GetParentJobs(resourceIds, count, false);
+        if (count > 0 && waitingParentJobs.Count() >= count) return waitingParentJobs.Take(count).ToArray();
+
+        var query = from ar in db.AssignedResources
+                    where resourceIds.Contains(ar.ResourceId)
+                       && !(ar.Job.IsParentJob && ar.Job.FinishWhenChildJobsFinished)
+                       && ar.Job.State == JobState.Waiting
+                       && ar.Job.CoresNeeded <= slave.FreeCores
+                       && ar.Job.MemoryNeeded <= slave.FreeMemory
+                    orderby ar.Job.Priority descending, db.Random() // take random job to avoid the race condition that occurs when this method is called concurrently (the same job would be returned)
+                    select Convert.ToDto(ar.Job);
+        var waitingJobs = (count == 0 ? query : query.Take(count)).ToArray();
+        return waitingJobs.Union(waitingParentJobs).OrderByDescending(x => x.Priority);
+      }
+    }
+
+    public DT.Job UpdateJobState(Guid jobId, JobState jobState, Guid? slaveId, Guid? userId, string exception) {
+      using (var db = CreateContext()) {
+        var job = db.Jobs.SingleOrDefault(x => x.JobId == jobId);
+        job.State = jobState;
+        db.StateLogs.InsertOnSubmit(new StateLog {
+          JobId = jobId,
+          State = jobState,
+          SlaveId = slaveId,
+          UserId = userId,
+          Exception = exception,
+          DateTime = DateTime.Now
+        });
+        db.SubmitChanges();
+        job = db.Jobs.SingleOrDefault(x => x.JobId == jobId);
+        return Convert.ToDto(job);
+      }
+    }
+    #endregion
+
+    #region JobData Methods
+    public DT.JobData GetJobData(Guid id) {
+      using (var db = CreateContext(true)) {
+        return Convert.ToDto(db.JobDatas.SingleOrDefault(x => x.JobId == id));
+      }
+    }
+
+    public IEnumerable<DT.JobData> GetJobDatas(Expression<Func<JobData, bool>> predicate) {
+      using (var db = CreateContext(true)) {
+        return db.JobDatas.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddJobData(DT.JobData dto) {
+      using (var db = CreateContext(true)) {
+        var entity = Convert.ToEntity(dto);
+        db.JobDatas.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.JobId;
+      }
+    }
+
+    public void UpdateJobData(DT.JobData dto) {
+      using (var db = CreateContext(true)) {
+        var entity = db.JobDatas.FirstOrDefault(x => x.JobId == dto.JobId);
+        if (entity == null) db.JobDatas.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteJobData(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.JobDatas.FirstOrDefault(x => x.JobId == id); // check if all the byte[] is loaded into memory here. otherwise work around to delete without loading it
+        if (entity != null) db.JobDatas.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region StateLog Methods
+    public DT.StateLog GetStateLog(Guid id) {
+      using (var db = CreateContext()) {
+        return Convert.ToDto(db.StateLogs.SingleOrDefault(x => x.StateLogId == id));
+      }
+    }
+
+    public IEnumerable<DT.StateLog> GetStateLogs(Expression<Func<StateLog, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.StateLogs.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddStateLog(DT.StateLog dto) {
+      using (var db = CreateContext()) {
+        var entity = Convert.ToEntity(dto);
+        db.StateLogs.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.StateLogId;
+      }
+    }
+
+    public void UpdateStateLog(DT.StateLog dto) {
+      using (var db = CreateContext()) {
+        var entity = db.StateLogs.FirstOrDefault(x => x.StateLogId == dto.Id);
+        if (entity == null) db.StateLogs.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteStateLog(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.StateLogs.FirstOrDefault(x => x.StateLogId == id);
+        if (entity != null) db.StateLogs.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region HiveExperiment Methods
+    public DT.HiveExperiment GetHiveExperiment(Guid id) {
+      using (var db = CreateContext()) {
+        return AddStatsToExperiment(db, Convert.ToDto(db.HiveExperiments.SingleOrDefault(x => x.HiveExperimentId == id)));
+      }
+    }
+
+    private DT.HiveExperiment AddStatsToExperiment(HiveDataContext db, DT.HiveExperiment exp) {
+      if (exp == null)
+        return null;
+
+      var jobs = db.Jobs.Where(j => j.HiveExperimentId == exp.Id);
+      exp.JobCount = jobs.Count();
+      exp.CalculatingCount = jobs.Count(j => j.State == JobState.Calculating);
+      exp.FinishedCount = jobs.Count(j => j.State == JobState.Finished);
+      return exp;
+    }
+
+    public IEnumerable<DT.HiveExperiment> GetHiveExperiments(Expression<Func<HiveExperiment, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.HiveExperiments.Where(predicate).Select(x => AddStatsToExperiment(db, Convert.ToDto(x))).ToArray();
+      }
+    }
+
+    public Guid AddHiveExperiment(DT.HiveExperiment dto) {
+      using (var db = CreateContext()) {
+        var entity = Convert.ToEntity(dto);
+        db.HiveExperiments.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.HiveExperimentId;
+      }
+    }
+
+    public void UpdateHiveExperiment(DT.HiveExperiment dto) {
+      using (var db = CreateContext()) {
+        var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == dto.Id);
+        if (entity == null) db.HiveExperiments.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteHiveExperiment(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == id);
+        if (entity != null) db.HiveExperiments.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region HiveExperimentPermission Methods
+    public DT.HiveExperimentPermission GetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId) {
+      using (var db = CreateContext()) {
+        return Convert.ToDto(db.HiveExperimentPermissions.SingleOrDefault(x => x.HiveExperimentId == hiveExperimentId && x.GrantedUserId == grantedUserId));
+      }
+    }
+
+    public IEnumerable<DT.HiveExperimentPermission> GetHiveExperimentPermissions(Expression<Func<HiveExperimentPermission, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.HiveExperimentPermissions.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public void AddHiveExperimentPermission(DT.HiveExperimentPermission dto) {
+      using (var db = CreateContext()) {
+        var entity = Convert.ToEntity(dto);
+        db.HiveExperimentPermissions.InsertOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void UpdateHiveExperimentPermission(DT.HiveExperimentPermission dto) {
+      using (var db = CreateContext()) {
+        var entity = db.HiveExperimentPermissions.FirstOrDefault(x => x.HiveExperimentId == dto.HiveExperimentId && x.GrantedUserId == dto.GrantedUserId);
+        if (entity == null) db.HiveExperimentPermissions.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId) {
+      using (var db = CreateContext()) {
+        var entity = db.HiveExperimentPermissions.FirstOrDefault(x => x.HiveExperimentId == hiveExperimentId && x.GrantedUserId == grantedUserId);
+        if (entity != null) db.HiveExperimentPermissions.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    /// <summary>
+    /// Sets the permissions for a experiment. makes sure that only one permission per user exists.
+    /// </summary>
+    public void SetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedByUserId, Guid grantedUserId, Permission permission) {
+      using (var db = CreateContext()) {
+        HiveExperimentPermission hiveExperimentPermission = db.HiveExperimentPermissions.SingleOrDefault(x => x.HiveExperimentId == hiveExperimentId && x.GrantedUserId == grantedUserId);
+        if (hiveExperimentPermission != null) {
+          if (permission == Permission.NotAllowed) {
+            // not allowed, delete
+            db.HiveExperimentPermissions.DeleteOnSubmit(hiveExperimentPermission);
+          } else {
+            // update
+            hiveExperimentPermission.Permission = permission;
+            hiveExperimentPermission.GrantedByUserId = grantedByUserId; // update grantedByUserId, always the last "granter" is stored
+          }
+        } else {
+          // insert
+          if (permission != Permission.NotAllowed) {
+            hiveExperimentPermission = new HiveExperimentPermission() { HiveExperimentId = hiveExperimentId, GrantedByUserId = grantedByUserId, GrantedUserId = grantedUserId, Permission = permission };
+            db.HiveExperimentPermissions.InsertOnSubmit(hiveExperimentPermission);
+          }
+        }
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Plugin Methods
+    public DT.Plugin GetPlugin(Guid id) {
+      using (var db = CreateContext()) {
+        return Convert.ToDto(db.Plugins.SingleOrDefault(x => x.PluginId == id));
+      }
+    }
+
+    public IEnumerable<DT.Plugin> GetPlugins(Expression<Func<Plugin, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Plugins.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddPlugin(DT.Plugin dto) {
+      using (var db = CreateContext()) {
+        var entity = Convert.ToEntity(dto);
+        db.Plugins.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.PluginId;
+      }
+    }
+
+    public void UpdatePlugin(DT.Plugin dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Plugins.FirstOrDefault(x => x.PluginId == dto.Id);
+        if (entity == null) db.Plugins.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeletePlugin(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Plugins.FirstOrDefault(x => x.PluginId == id);
+        if (entity != null) db.Plugins.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region PluginData Methods
+    public DT.PluginData GetPluginData(Guid id) {
+      using (var db = CreateContext()) {
+        return Convert.ToDto(db.PluginDatas.SingleOrDefault(x => x.PluginDataId == id));
+      }
+    }
+
+    public IEnumerable<DT.PluginData> GetPluginDatas(Expression<Func<PluginData, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.PluginDatas.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddPluginData(DT.PluginData dto) {
+      using (var db = CreateContext()) {
+        var entity = Convert.ToEntity(dto);
+        db.PluginDatas.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.PluginDataId;
+      }
+    }
+
+    public void UpdatePluginData(DT.PluginData dto) {
+      using (var db = CreateContext()) {
+        var entity = db.PluginDatas.FirstOrDefault(x => x.PluginId == dto.PluginId);
+        if (entity == null) db.PluginDatas.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeletePluginData(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.PluginDatas.FirstOrDefault(x => x.PluginDataId == id);
+        if (entity != null) db.PluginDatas.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Slave Methods
+    public DT.Slave GetSlave(Guid id) {
+      using (var db = CreateContext()) {
+        return Convert.ToDto(db.Resources.OfType<Slave>().SingleOrDefault(x => x.ResourceId == id));
+      }
+    }
+
+    public IEnumerable<DT.Slave> GetSlaves(Expression<Func<Slave, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Resources.OfType<Slave>().Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddSlave(DT.Slave dto) {
+      using (var db = CreateContext()) {
+        var entity = Convert.ToEntity(dto);
+        db.Resources.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.ResourceId;
+      }
+    }
+
+    public void UpdateSlave(DT.Slave dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == dto.Id);
+        if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteSlave(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == id);
+        if (entity != null) db.Resources.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region SlaveGroup Methods
+    public DT.SlaveGroup GetSlaveGroup(Guid id) {
+      using (var db = CreateContext()) {
+        return Convert.ToDto(db.Resources.OfType<SlaveGroup>().SingleOrDefault(x => x.ResourceId == id));
+      }
+    }
+
+    public IEnumerable<DT.SlaveGroup> GetSlaveGroups(Expression<Func<SlaveGroup, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Resources.OfType<SlaveGroup>().Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddSlaveGroup(DT.SlaveGroup dto) {
+      using (var db = CreateContext()) {
+        if (dto.Id == Guid.Empty)
+          dto.Id = Guid.NewGuid();
+        var entity = Convert.ToEntity(dto);
+        db.Resources.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.ResourceId;
+      }
+    }
+
+    public void UpdateSlaveGroup(DT.SlaveGroup dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == dto.Id);
+        if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteSlaveGroup(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == id);
+        if (entity != null) {
+          if (db.Resources.Where(r => r.ParentResourceId == id).Count() > 0) {
+            throw new InvalidOperationException("Cannot delete SlaveGroup as long as there are Slaves in the group");
+          }
+          db.Resources.DeleteOnSubmit(entity);
+        }
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Resource Methods
+    public DT.Resource GetResource(Guid id) {
+      using (var db = CreateContext()) {
+        return Convert.ToDto(db.Resources.SingleOrDefault(x => x.ResourceId == id));
+      }
+    }
+
+    public IEnumerable<DT.Resource> GetResources(Expression<Func<Resource, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Resources.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddResource(DT.Resource dto) {
+      using (var db = CreateContext()) {
+        var entity = Convert.ToEntity(dto);
+        db.Resources.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.ResourceId;
+      }
+    }
+
+    public void UpdateResource(DT.Resource dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.FirstOrDefault(x => x.ResourceId == dto.Id);
+        if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteResource(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.FirstOrDefault(x => x.ResourceId == id);
+        if (entity != null) db.Resources.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void AssignJobToResource(Guid jobId, Guid resourceId) {
+      using (var db = CreateContext()) {
+        var job = db.Jobs.Where(x => x.JobId == jobId).Single();
+        job.AssignedResources.Add(new AssignedResource() { JobId = jobId, ResourceId = resourceId });
+        db.SubmitChanges();
+      }
+    }
+
+    public IEnumerable<DT.Resource> GetAssignedResources(Guid jobId) {
+      using (var db = CreateContext()) {
+        var job = db.Jobs.Where(x => x.JobId == jobId).Single();
+        return job.AssignedResources.Select(x => Convert.ToDto(x.Resource)).ToArray();
+      }
+    }
+
+    /// <summary>
+    /// Returns all parent resources of a resource (the given resource is also added)
+    /// </summary>
+    public IEnumerable<DT.Resource> GetParentResources(Guid resourceId) {
+      using (var db = CreateContext()) {
+        var resources = new List<Resource>();
+        CollectParentResources(resources, db.Resources.Where(r => r.ResourceId == resourceId).Single());
+        return resources.Select(r => Convert.ToDto(r)).ToArray();
+      }
+    }
+
+    private void CollectParentResources(List<Resource> resources, Resource resource) {
+      if (resource == null) return;
+      resources.Add(resource);
+      CollectParentResources(resources, resource.ParentResource);
+    }
+
+    /// <summary>
+    /// Returns all child resources of a resource (without the given resource)
+    /// </summary>
+    public IEnumerable<DT.Resource> GetChildResources(Guid resourceId) {
+      using (var db = CreateContext()) {
+        var childs = new List<DT.Resource>();
+        foreach (var child in db.Resources.Where(x => x.ParentResourceId == resourceId)) {
+          childs.Add(Convert.ToDto(child));
+          childs.AddRange(GetChildResources(child.ResourceId));
+        }
+        return childs;
+      }
+    }
+
+    public IEnumerable<DT.Job> GetJobsByResourceId(Guid resourceId) {
+      using (var db = CreateContext()) {
+        var resources = GetChildResources(resourceId).Select(x => x.Id).ToList();
+        resources.Add(resourceId);
+
+        var jobs = db.Jobs.Where(j =>
+          j.State == JobState.Calculating &&
+          j.StateLogs.OrderByDescending(x => x.DateTime).First().SlaveId.HasValue &&
+          resources.Contains(j.StateLogs.OrderByDescending(x => x.DateTime).First().SlaveId.Value));
+        return jobs.Select(j => Convert.ToDto(j)).ToArray();
+      }
+    }
+    #endregion
+
+    #region Authorization Methods
+    public Permission GetPermissionForJob(Guid jobId, Guid userId) {
+      using (var db = CreateContext()) {
+        return GetPermissionForExperiment(GetExperimentForJob(jobId), userId);
+      }
+    }
+
+    public Permission GetPermissionForExperiment(Guid experimentId, Guid userId) {
+      using (var db = CreateContext()) {
+        HiveExperiment hiveExperiment = db.HiveExperiments.SingleOrDefault(x => x.HiveExperimentId == experimentId);
+        if (hiveExperiment == null) return Permission.NotAllowed;
+        if (hiveExperiment.OwnerUserId == userId) return Permission.Full;
+        HiveExperimentPermission permission = db.HiveExperimentPermissions.SingleOrDefault(p => p.HiveExperimentId == experimentId && p.GrantedUserId == userId);
+        return permission != null ? permission.Permission : Permission.NotAllowed;
+      }
+    }
+
+    public Guid GetExperimentForJob(Guid jobId) {
+      using (var db = CreateContext()) {
+        return db.Jobs.Single(j => j.JobId == jobId).HiveExperimentId;
+      }
+    }
+    #endregion
+
+    #region Lifecycle Methods
+    public DateTime GetLastCleanup() {
+      using (var db = CreateContext()) {
+        var entity = db.Lifecycles.SingleOrDefault();
+        return entity != null ? entity.LastCleanup : DateTime.MinValue;
+      }
+    }
+
+    public void SetLastCleanup(DateTime datetime) {
+      using (var db = CreateContext()) {
+        var entity = db.Lifecycles.SingleOrDefault();
+        if (entity != null) {
+          entity.LastCleanup = datetime;
+        } else {
+          entity = new Lifecycle();
+          entity.LifecycleId = 0; // always only one entry with ID:0
+          entity.LastCleanup = datetime;
+          db.Lifecycles.InsertOnSubmit(entity);
+        }
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Downtime Methods
+    public DT.Downtime GetDowntime(Guid id) {
+      using (var db = CreateContext()) {
+        return Convert.ToDto(db.Downtimes.SingleOrDefault(x => x.DowntimeId == id));
+      }
+    }
+
+    public IEnumerable<DT.Downtime> GetDowntimes(Expression<Func<Downtime, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Downtimes.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddDowntime(DT.Downtime dto) {
+      using (var db = CreateContext()) {
+        var entity = Convert.ToEntity(dto);
+        db.Downtimes.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.DowntimeId;
+      }
+    }
+
+    public void UpdateDowntime(DT.Downtime dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Downtimes.FirstOrDefault(x => x.DowntimeId == dto.Id);
+        if (entity == null) db.Downtimes.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteDowntime(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Downtimes.FirstOrDefault(x => x.DowntimeId == id);
+        if (entity != null) db.Downtimes.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Statistics Methods
+    public DT.Statistics GetStatistic(Guid id) {
+      using (var db = CreateContext()) {
+        return Convert.ToDto(db.Statistics.SingleOrDefault(x => x.StatisticsId == id));
+      }
+    }
+
+    public IEnumerable<DT.Statistics> GetStatistics(Expression<Func<Statistics, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Statistics.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddStatistics(DT.Statistics dto) {
+      using (var db = CreateContext()) {
+        var entity = Convert.ToEntity(dto);
+        db.Statistics.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        foreach (var slaveStat in dto.SlaveStatistics) {
+          slaveStat.Id = entity.StatisticsId;
+          db.SlaveStatistics.InsertOnSubmit(Convert.ToEntity(slaveStat));
+        }
+        foreach (var userStat in dto.UserStatistics) {
+          userStat.Id = entity.StatisticsId;
+          db.UserStatistics.InsertOnSubmit(Convert.ToEntity(userStat));
+        }
+        db.SubmitChanges();
+        return entity.StatisticsId;
+      }
+    }
+
+    public void DeleteStatistics(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Statistics.FirstOrDefault(x => x.StatisticsId == id);
+        if (entity != null) db.Statistics.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public List<DT.UserStatistics> GetUserStatistics() {
+      using (var db = CreateContext()) {
+        var userStats = new Dictionary<Guid, DT.UserStatistics>();
+
+        var usedCoresByUser = from job in db.Jobs
+                              where job.State == JobState.Calculating
+                              group job by job.HiveExperiment.OwnerUserId into g
+                              select new { UserId = g.Key, UsedCores = g.Count() };
+
+        foreach (var item in usedCoresByUser) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].UsedCores += item.UsedCores;
+        }
+
+        var executionTimesByUser = from job in db.Jobs
+                                   group job by job.HiveExperiment.OwnerUserId into g
+                                   select new { UserId = g.Key, ExecutionTime = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMs).Sum()) };
+        foreach (var item in executionTimesByUser) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].ExecutionTime += item.ExecutionTime;
+        }
+
+        // execution times only of finished jobs - necessary to compute efficieny
+        var executionTimesFinishedJobs = from job in db.Jobs
+                                         where job.State == JobState.Finished
+                                         group job by job.HiveExperiment.OwnerUserId into g
+                                         select new { UserId = g.Key, ExecutionTimeFinishedJobs = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMs).Sum()) };
+
+        foreach (var item in executionTimesFinishedJobs) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].ExecutionTimeFinishedJobs += item.ExecutionTimeFinishedJobs;
+        }
+
+        // start to end times only of finished jobs - necessary to compute efficiency
+        var startToEndTimesFinishedJobs = from job in db.Jobs
+                                          where job.State == JobState.Finished
+                                          group job by job.HiveExperiment.OwnerUserId into g
+                                          select new {
+                                            UserId = g.Key,
+                                            StartToEndTime = new TimeSpan(g.Select(x => x.StateLogs.OrderByDescending(sl => sl.DateTime).First().DateTime - x.StateLogs.OrderBy(sl => sl.DateTime).First().DateTime).Sum(ts => ts.Ticks))
+                                          };
+        foreach (var item in startToEndTimesFinishedJobs) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].StartToEndTime += item.StartToEndTime;
+        }
+
+        // also consider executiontimes of DeletedJobStats 
+        var deletedJobsExecutionTimesByUsers = from del in db.DeletedJobStatistics
+                                               group del by del.UserId into g
+                                               select new {
+                                                 UserId = g.Key,
+                                                 ExecutionTime = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMs).Sum()),
+                                                 ExecutionTimeFinishedJobs = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMsFinishedJobs).Sum()),
+                                                 StartToEndTime = TimeSpan.FromMilliseconds(g.Select(x => x.StartToEndTimeMs).Sum())
+                                               };
+        foreach (var item in deletedJobsExecutionTimesByUsers) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].ExecutionTime += item.ExecutionTime;
+          userStats[item.UserId].ExecutionTimeFinishedJobs += item.ExecutionTimeFinishedJobs;
+          userStats[item.UserId].StartToEndTime += item.StartToEndTime;
+        }
+
+        return userStats.Values.ToList();
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void CollectChildJobs(HiveDataContext db, Guid parentJobId, List<Job> collection) {
+      var jobs = db.Jobs.Where(j => j.ParentJobId == parentJobId);
+      foreach (var job in jobs) {
+        collection.Add(job);
+        if (job.IsParentJob)
+          CollectChildJobs(db, job.JobId, collection);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.cs	(revision 7085)
@@ -0,0 +1,15 @@
+using System;
+using System.Data.Linq.Mapping;
+namespace HeuristicLab.Services.Hive.DataAccess {
+  partial class SlaveStatistics {
+  }
+
+  partial class HiveDataContext {
+    // source: http://stackoverflow.com/questions/648196/random-row-from-linq-to-sql
+    [Function(Name = "NEWID", IsComposable = true)]
+    public Guid Random() { 
+      // to prove not used by our C# code... 
+      throw new NotImplementedException();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml	(revision 7085)
@@ -0,0 +1,194 @@
+﻿<?xml version="1.0" encoding="utf-8"?><Database Name="HeuristicLab.Hive" Class="HiveDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
+  <Connection Mode="AppSettings" ConnectionString="Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.3;Integrated Security=True" SettingsObjectName="HeuristicLab.Services.Hive.DataAccess.Settings" SettingsPropertyName="HeuristicLab_Hive_LinqConnectionString" Provider="System.Data.SqlClient" />
+  <Table Name="dbo.AssignedResources" Member="AssignedResources">
+    <Type Name="AssignedResource">
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="TaskId" Storage="_JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Association Name="Resource_AssignedResource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" />
+      <Association Name="Task_AssignedResource" Member="Task" Storage="_Job" ThisKey="TaskId" OtherKey="TaskId" Type="Task" IsForeignKey="true" DeleteRule="CASCADE" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Plugin" Member="Plugins">
+    <Type Name="Plugin">
+      <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Column Name="Version" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="false" />
+      <Column Name="DateCreated" Type="System.DateTime" DbType="DateTime" CanBeNull="false" />
+      <Column Name="Hash" Type="System.Byte[]" DbType="VarBinary(20) NOT NULL" CanBeNull="false" />
+      <Association Name="Plugin_RequiredPlugin" Member="RequiredPlugins" ThisKey="PluginId" OtherKey="PluginId" Type="RequiredPlugin" />
+      <Association Name="Plugin_PluginData" Member="PluginData" ThisKey="PluginId" OtherKey="PluginId" Type="PluginData" />
+    </Type>
+  </Table>
+  <Table Name="dbo.RequiredPlugins" Member="RequiredPlugins">
+    <Type Name="RequiredPlugin">
+      <Column Name="RequiredPluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" UpdateCheck="Never" />
+      <Column Name="TaskId" Storage="_JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Association Name="Plugin_RequiredPlugin" Member="Plugin" Storage="_PluginInfo" ThisKey="PluginId" OtherKey="PluginId" Type="Plugin" IsForeignKey="true" DeleteRule="CASCADE" />
+      <Association Name="Task_RequiredPlugin" Member="Task" Storage="_Job" ThisKey="TaskId" OtherKey="TaskId" Type="Task" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Resource" Member="Resources">
+    <Type Name="Resource" InheritanceCode="RESOURCE">
+      <Column Name="ResourceId" AutoSync="OnInsert" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Column Name="ResourceType" Type="System.String" CanBeNull="false" IsDiscriminator="true" />
+      <Column Name="ParentResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="HbInterval" Type="System.Int32" DbType="Int" CanBeNull="false" />
+      <Association Name="Resource_AssignedResource" Member="AssignedResources" ThisKey="ResourceId" OtherKey="ResourceId" Type="AssignedResource" />
+      <Association Name="Resource_Resource" Member="ChildResources" ThisKey="ResourceId" OtherKey="ParentResourceId" Type="Resource" />
+      <Association Name="Resource_Downtime" Member="Downtimes" Storage="_UptimeCalendars" ThisKey="ResourceId" OtherKey="ResourceId" Type="Downtime" />
+      <Association Name="Resource_StateLog" Member="StateLogs" ThisKey="ResourceId" OtherKey="SlaveId" Type="StateLog" />
+      <Association Name="Resource_Resource" Member="ParentResource" ThisKey="ParentResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" />
+      <Type Name="Slave" InheritanceCode="Slave" IsInheritanceDefault="true">
+        <Column Name="CpuSpeed" Storage="_CPUSpeed" Type="System.Int32" DbType="Int" CanBeNull="true" />
+        <Column Name="Memory" Type="System.Int32" DbType="Int" CanBeNull="true" />
+        <Column Name="Login" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+        <Column Name="SlaveState" Storage="_Status" Type="global::HeuristicLab.Services.Hive.DataAccess.SlaveState" DbType="VarChar(15)" CanBeNull="true" />
+        <Column Name="Cores" Storage="_NumberOfCores" Type="System.Int32" DbType="Int" CanBeNull="true" />
+        <Column Name="FreeCores" Storage="_NumberOfFreeCores" Type="System.Int32" DbType="Int" CanBeNull="true" />
+        <Column Name="FreeMemory" Type="System.Int32" DbType="Int" CanBeNull="true" />
+        <Column Name="IsAllowedToCalculate" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
+        <Column Name="CpuArchitecture" Type="global::HeuristicLab.Services.Hive.DataAccess.CpuArchitecture" DbType="VarChar(3)" CanBeNull="false" />
+        <Column Name="OperatingSystem" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" UpdateCheck="Never" />
+        <Column Name="LastHeartbeat" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+        <Column Name="CpuUtilization" Type="System.Double" DbType="float" CanBeNull="false" />
+      </Type>
+      <Type Name="SlaveGroup" InheritanceCode="GROUP" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Task" Member="Tasks">
+    <Type Name="Task">
+      <Column Name="TaskId" Storage="_JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="TaskState" Member="State" Type="global::HeuristicLab.Services.Hive.DataAccess.TaskState" DbType="VarChar(30)" CanBeNull="false" />
+      <Column Name="ExecutionTimeMs" Storage="_ExecutionTime" Type="System.Double" DbType="float" CanBeNull="false" />
+      <Column Name="LastHeartbeat" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="ParentTaskId" Storage="_ParentJobId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="Priority" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="CoresNeeded" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="MemoryNeeded" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="IsParentTask" Storage="_IsParentJob" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
+      <Column Name="FinishWhenChildJobsFinished" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
+      <Column Name="Command" Type="global::HeuristicLab.Services.Hive.DataAccess.Command?" DbType="VarChar(30)" CanBeNull="true" />
+      <Column Name="JobId" Storage="_HiveExperimentId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="IsPrivileged" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
+      <Association Name="Task_AssignedResource" Member="AssignedResources" ThisKey="TaskId" OtherKey="TaskId" Type="AssignedResource" />
+      <Association Name="Task_RequiredPlugin" Member="RequiredPlugins" ThisKey="TaskId" OtherKey="TaskId" Type="RequiredPlugin" />
+      <Association Name="Task_Task" Member="ChildJobs" Storage="_Jobs" ThisKey="TaskId" OtherKey="ParentTaskId" Type="Task" />
+      <Association Name="Task_TaskData" Member="JobData" ThisKey="TaskId" OtherKey="TaskId" Type="TaskData" Cardinality="One" />
+      <Association Name="Task_StateLog" Member="StateLogs" ThisKey="TaskId" OtherKey="TaskId" Type="StateLog" />
+      <Association Name="Task_Task" Member="ParentJob" Storage="_Job1" ThisKey="ParentTaskId" OtherKey="TaskId" Type="Task" IsForeignKey="true" />
+      <Association Name="Job_Task" Member="Job" Storage="_HiveExperiment" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Downtime" Member="Downtimes">
+    <Type Name="Downtime">
+      <Column Name="DowntimeId" Storage="_UptimeCalendarId" Type="System.Guid" DbType="UniqueIdentifier" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="false" />
+      <Column Name="StartDate" Type="System.DateTime" DbType="DateTime" CanBeNull="false" />
+      <Column Name="EndDate" Type="System.DateTime" DbType="DateTime" CanBeNull="false" />
+      <Column Name="AllDayEvent" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
+      <Column Name="Recurring" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
+      <Column Name="RecurringId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="false" />
+      <Association Name="Resource_Downtime" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Job" Member="Jobs">
+    <Type Name="Job">
+      <Column Name="JobId" Storage="_HiveExperimentId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Column Name="Description" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="ResourceIds" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="OwnerUserId" Storage="_UserId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="false" />
+      <Column Name="DateCreated" Type="System.DateTime" DbType="DateTime" CanBeNull="false" />
+      <Association Name="Job_Task" Member="Tasks" Storage="_Jobs" ThisKey="JobId" OtherKey="JobId" Type="Task" />
+      <Association Name="Job_JobPermission" Member="JobPermissions" Storage="_HiveExperimentPermissions" ThisKey="JobId" OtherKey="JobId" Type="JobPermission" />
+    </Type>
+  </Table>
+  <Table Name="dbo.TaskData" Member="TaskDatas">
+    <Type Name="TaskData">
+      <Column Name="TaskId" Storage="_JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="Data" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX)" CanBeNull="false" UpdateCheck="Never" />
+      <Column Name="LastUpdate" Type="System.DateTime" DbType="DateTime" CanBeNull="false" />
+      <Association Name="Task_TaskData" Member="Task" Storage="_Job" ThisKey="TaskId" OtherKey="TaskId" Type="Task" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.PluginData" Member="PluginDatas">
+    <Type Name="PluginData">
+      <Column Name="PluginDataId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="Data" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX) NOT NULL" CanBeNull="false" UpdateCheck="Never" />
+      <Column Name="FileName" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Association Name="Plugin_PluginData" Member="Plugin" ThisKey="PluginId" OtherKey="PluginId" Type="Plugin" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.StateLog" Member="StateLogs">
+    <Type Name="StateLog">
+      <Column Name="StateLogId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="State" Type="global::HeuristicLab.Services.Hive.DataAccess.TaskState" DbType="VarChar(30) NOT NULL" CanBeNull="false" />
+      <Column Name="DateTime" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="TaskId" Storage="_JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="SlaveId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="Exception" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Association Name="Task_StateLog" Member="Task" Storage="_Job" ThisKey="TaskId" OtherKey="TaskId" Type="Task" IsForeignKey="true" />
+      <Association Name="Resource_StateLog" Member="Resource" ThisKey="SlaveId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.JobPermission" Member="JobPermissions">
+    <Type Name="JobPermission">
+      <Column Name="JobId" Storage="_HiveExperimentId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="GrantedUserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="GrantedByUserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="Permission" Type="global::HeuristicLab.Services.Hive.DataAccess.Permission" DbType="VarChar(15) NOT NULL" CanBeNull="false" />
+      <Association Name="Job_JobPermission" Member="Job" Storage="_HiveExperiment" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="" Member="Lifecycles">
+    <Type Name="Lifecycle">
+      <Column Name="LifecycleId" Type="System.Int32" DbType="Int" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="LastCleanup" Type="System.DateTime" DbType="DateTime" CanBeNull="false" />
+    </Type>
+  </Table>
+  <Table Name="" Member="DeletedJobStatistics">
+    <Type Name="DeletedJobStatistics">
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="ExecutionTimeS" Storage="_ExecutionTime" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
+      <Column Name="ExecutionTimeSFinishedJobs" Storage="_ExecutionTimeFinishedJobs" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
+      <Column Name="StartToEndTimeS" Storage="_StartToEndTime" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
+      <Column Name="DeletedJobStatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+    </Type>
+  </Table>
+  <Table Name="" Member="UserStatistics">
+    <Type Name="UserStatistics">
+      <Column Name="StatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ExecutionTimeMs" Storage="_ExecutionTime" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
+      <Column Name="UsedCores" Storage="_CoresUsed" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="ExecutionTimeMsFinishedJobs" Storage="_ExecutionTimeFinishedJobs" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
+      <Column Name="StartToEndTimeMs" Storage="_StartToEndTime" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
+      <Association Name="Statistics_UserStatistics" Member="Statistics" ThisKey="StatisticsId" OtherKey="StatisticsId" Type="Statistics" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="" Member="SlaveStatistics">
+    <Type Name="SlaveStatistics">
+      <Column Name="StatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="SlaveId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="Cores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="FreeCores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="CpuUtilization" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
+      <Column Name="Memory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="FreeMemory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Association Name="Statistics_SlaveStatistics" Member="Statistics" ThisKey="StatisticsId" OtherKey="StatisticsId" Type="Statistics" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="" Member="Statistics">
+    <Type Name="Statistics">
+      <Column Name="StatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Timestamp" Type="System.DateTime" CanBeNull="false" />
+      <Association Name="Statistics_UserStatistics" Member="UserStatistics" ThisKey="StatisticsId" OtherKey="StatisticsId" Type="UserStatistics" />
+      <Association Name="Statistics_SlaveStatistics" Member="SlaveStatistics" ThisKey="StatisticsId" OtherKey="StatisticsId" Type="SlaveStatistics" />
+    </Type>
+  </Table>
+</Database>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml.layout
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml.layout	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml.layout	(revision 7085)
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 24.25, 8.5" name="HiveDataContext">
+  <DataContextMoniker Name="/HiveDataContext" />
+  <nestedChildShapes>
+    <classShape Id="a929c9dc-69f4-4488-ba1c-a2342bf81d89" absoluteBounds="8.875, 4, 2, 1.1939925130208327">
+      <DataClassMoniker Name="/HiveDataContext/AssignedResource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="8b005775-f0ee-41b0-ae10-6d1151003708" absoluteBounds="8.89, 4.4600000000000009, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="7d998e56-4fba-41ca-a1a8-1dcdb9068edf" absoluteBounds="8.875, 5.5, 2, 1.9631982421874996">
+      <DataClassMoniker Name="/HiveDataContext/Plugin" />
+      <nestedChildShapes>
+        <elementListCompartment Id="ec4ba325-6dff-4418-baad-59af81ae2024" absoluteBounds="8.89, 5.9600000000000009, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="97b00810-fa30-457e-b484-b4e80b22f91b" absoluteBounds="6.5, 5.5, 2, 1.3862939453124987">
+      <DataClassMoniker Name="/HiveDataContext/RequiredPlugin" />
+      <nestedChildShapes>
+        <elementListCompartment Id="df6451e5-069e-4ca0-a909-61b8213b5047" absoluteBounds="6.5150000000000006, 5.9600000000000009, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="706a4581-6daf-4e71-ae2a-87d50b27a051" absoluteBounds="11.25, 1, 2, 1.7708968098958331">
+      <DataClassMoniker Name="/HiveDataContext/Resource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="8c24f5bf-2164-4d0f-832e-1730eb0066df" absoluteBounds="11.265, 1.46, 1.9700000000000002, 1.2108968098958333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="695bfc39-59f3-4e60-8644-f847964bf62c" absoluteBounds="6.5, 1, 2, 3.3093082682291666">
+      <DataClassMoniker Name="/HiveDataContext/Task" />
+      <nestedChildShapes>
+        <elementListCompartment Id="a6a30e11-03d1-4869-82e6-b733f4ef9974" absoluteBounds="6.5150000000000006, 1.46, 1.9700000000000002, 2.7493082682291665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="8d5712f7-7a1a-4a89-bd4d-fd60200d3306" absoluteBounds="13.5, 2.5, 2, 2.1554996744791666">
+      <DataClassMoniker Name="/HiveDataContext/Downtime" />
+      <nestedChildShapes>
+        <elementListCompartment Id="7d8f121b-35bb-4753-a25f-3fac1562e68e" absoluteBounds="13.515, 2.9600000000000009, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="e6f840cc-2968-4be1-b234-eef624ccacbb" absoluteBounds="4.125, 2.625, 2, 1.9631982421874996">
+      <DataClassMoniker Name="/HiveDataContext/Job" />
+      <nestedChildShapes>
+        <elementListCompartment Id="0c65d4e1-256a-4a91-9a57-392f25e4de7f" absoluteBounds="4.1400000000000006, 3.0850000000000009, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="26f4edfa-91dd-4941-a058-359f89e567a8" absoluteBounds="8.875, 0.75, 2, 3.1170068359375">
+      <DataClassMoniker Name="/HiveDataContext/Slave" />
+      <nestedChildShapes>
+        <elementListCompartment Id="1e61f36b-08dc-4df7-8594-c9dcd95c0791" absoluteBounds="8.89, 1.21, 1.9700000000000002, 2.5570068359375" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="bbd91675-92f2-4a69-8429-0950008fc8a4" absoluteBounds="13.5, 1, 2, 0.8093896484375">
+      <DataClassMoniker Name="/HiveDataContext/SlaveGroup" />
+      <nestedChildShapes>
+        <elementListCompartment Id="5a790e8f-6e2e-4bf5-bd2b-f8a82224d9d7" absoluteBounds="13.5, 1, 0.125, 0.2493896484375" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <inheritanceConnector edgePoints="[(11.25 : 2.34259724934896); (10.875 : 2.34259724934896)]" fixedFrom="NotFixed" fixedTo="NotFixed" TargetRelationshipDomainClassId="7a7fe09e-e9ef-4b01-9ff3-bde95e827b62">
+      <nodes>
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+        <classShapeMoniker Id="26f4edfa-91dd-4941-a058-359f89e567a8" />
+      </nodes>
+    </inheritanceConnector>
+    <inheritanceConnector edgePoints="[(13.25 : 1.40469482421875); (13.5 : 1.40469482421875)]" fixedFrom="NotFixed" fixedTo="NotFixed" TargetRelationshipDomainClassId="7a7fe09e-e9ef-4b01-9ff3-bde95e827b62">
+      <nodes>
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+        <classShapeMoniker Id="bbd91675-92f2-4a69-8429-0950008fc8a4" />
+      </nodes>
+    </inheritanceConnector>
+    <associationConnector edgePoints="[(12.015626 : 2.77089680989583); (12.015626 : 4.59699625651042); (10.875 : 4.59699625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_AssignedResource" />
+      <nodes>
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+        <classShapeMoniker Id="a929c9dc-69f4-4488-ba1c-a2342bf81d89" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="6bc13f26-f9a8-4597-b054-35be34190d12" absoluteBounds="4.125, 1, 2, 1.3862939453125">
+      <DataClassMoniker Name="/HiveDataContext/TaskData" />
+      <nestedChildShapes>
+        <elementListCompartment Id="a068522c-7974-4679-b356-e33c941c465b" absoluteBounds="4.14, 1.46, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="ad25bd0f-80e8-4a06-abd8-190eb678eec7" absoluteBounds="11.25, 5.5, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/HiveDataContext/PluginData" />
+      <nestedChildShapes>
+        <elementListCompartment Id="acddb513-7de6-4bb4-8335-d6982fb2ef35" absoluteBounds="11.265, 5.9600000000000009, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(10.875 : 6.28929768880208); (11.25 : 6.28929768880208)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Plugin/Plugin_PluginData" />
+      <nodes>
+        <classShapeMoniker Id="7d998e56-4fba-41ca-a1a8-1dcdb9068edf" />
+        <classShapeMoniker Id="ad25bd0f-80e8-4a06-abd8-190eb678eec7" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8.875 : 6.19314697265625); (8.5 : 6.19314697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Plugin/Plugin_RequiredPlugin" />
+      <nodes>
+        <classShapeMoniker Id="7d998e56-4fba-41ca-a1a8-1dcdb9068edf" />
+        <classShapeMoniker Id="97b00810-fa30-457e-b484-b4e80b22f91b" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(13.25 : 1.62798725335537); (13.5 : 1.62798725335537); (13.5 : 2.1551696113782); (13.25 : 2.1551696113782)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_Resource" />
+      <nodes>
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="00352397-340e-449a-8e23-6ddd216e8617" absoluteBounds="1.75, 1, 2, 2.1554996744791666">
+      <DataClassMoniker Name="/HiveDataContext/StateLog" />
+      <nestedChildShapes>
+        <elementListCompartment Id="9a003897-deef-4bb5-b180-4c4bcdb7fadc" absoluteBounds="1.765, 1.46, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="4d800dc9-1b18-469f-b02c-d4554757c5e1" absoluteBounds="1.75, 3.625, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/HiveDataContext/JobPermission" />
+      <nestedChildShapes>
+        <elementListCompartment Id="dedd97d3-a9a2-45a2-9b95-d7366fb65a7f" absoluteBounds="1.765, 4.085, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(11.25 : 1.64004662467448); (10.9375 : 1.64004662467448); (10.9375 : 0.6875); (2.75 : 0.6875); (2.75 : 1)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_StateLog" />
+      <nodes>
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+        <classShapeMoniker Id="00352397-340e-449a-8e23-6ddd216e8617" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="b4e7aaa8-a382-4560-a1fd-498de77e9340" absoluteBounds="1.75, 5.5, 2, 1.1939925130208327">
+      <DataClassMoniker Name="/HiveDataContext/Lifecycle" />
+      <nestedChildShapes>
+        <elementListCompartment Id="03597a2c-5c5d-4c2c-b741-c49ab5aa34d5" absoluteBounds="1.7650000000000001, 5.96, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="cdddf4da-eaef-46a1-9cfd-987bb6b3d03e" absoluteBounds="17, 3.125, 2.5, 1.7708968098958327">
+      <DataClassMoniker Name="/HiveDataContext/DeletedJobStatistics" />
+      <nestedChildShapes>
+        <elementListCompartment Id="b8738381-f696-4dba-a517-47e9cd96a9a6" absoluteBounds="17.015, 3.585, 2.4699999999999998, 1.2108968098958333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="25442617-ff41-49a0-b5d5-4cbe0b2f0f45" absoluteBounds="22, 4.5, 2, 1.9631982421874996">
+      <DataClassMoniker Name="/HiveDataContext/UserStatistics" />
+      <nestedChildShapes>
+        <elementListCompartment Id="6edf08e7-054a-4253-8d4f-5bf2dfec2d29" absoluteBounds="22.015, 4.96, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="f78ec989-4862-4bac-87e3-9b0aad4bc037" absoluteBounds="19.875, 4.5, 2, 2.1554996744791666">
+      <DataClassMoniker Name="/HiveDataContext/SlaveStatistics" />
+      <nestedChildShapes>
+        <elementListCompartment Id="98cb46fe-820e-4041-aee8-04e8bed3df23" absoluteBounds="19.89, 4.96, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="4d9f0606-b7ee-4dae-a8ac-aff88d25a941" absoluteBounds="21, 3, 2, 1.1939925130208327">
+      <DataClassMoniker Name="/HiveDataContext/Statistics" />
+      <nestedChildShapes>
+        <elementListCompartment Id="17821282-8edf-40b7-9065-84f53391d5c1" absoluteBounds="21.015, 3.46, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(21.4375 : 4.19399251302083); (21.4375 : 4.5)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Statistics/Statistics_SlaveStatistics" />
+      <nodes>
+        <classShapeMoniker Id="4d9f0606-b7ee-4dae-a8ac-aff88d25a941" />
+        <classShapeMoniker Id="f78ec989-4862-4bac-87e3-9b0aad4bc037" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(22.5 : 4.19399251302083); (22.5 : 4.5)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Statistics/Statistics_UserStatistics" />
+      <nodes>
+        <classShapeMoniker Id="4d9f0606-b7ee-4dae-a8ac-aff88d25a941" />
+        <classShapeMoniker Id="25442617-ff41-49a0-b5d5-4cbe0b2f0f45" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(12.664065 : 2.77089680989583); (12.664065 : 3.7131987421875); (13.5 : 3.7131987421875)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_Downtime" />
+      <nodes>
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+        <classShapeMoniker Id="8d5712f7-7a1a-4a89-bd4d-fd60200d3306" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(7.5 : 4.30930826822917); (7.5 : 4.751650890625); (7.97916666666667 : 4.751650890625 : JumpStart); (8.14583333333333 : 4.751650890625 : JumpEnd); (8.875 : 4.751650890625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Task/Task_AssignedResource" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="a929c9dc-69f4-4488-ba1c-a2342bf81d89" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8.0625 : 4.30930826822917); (8.0625 : 5.5)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Task/Task_RequiredPlugin" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="97b00810-fa30-457e-b484-b4e80b22f91b" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(7.20923076923077 : 1); (7.20923076923077 : 0.875); (7.80461538461539 : 0.875); (7.80461538461539 : 1)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Task/Task_Task" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(6.5 : 1.69314697265625); (6.125 : 1.69314697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Task/Task_TaskData" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="6bc13f26-f9a8-4597-b054-35be34190d12" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(6.5 : 2.50564697265625); (3.75 : 2.50564697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Task/Task_StateLog" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="00352397-340e-449a-8e23-6ddd216e8617" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(6.125 : 3.46715413411458); (6.5 : 3.46715413411458)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_Task" />
+      <nodes>
+        <classShapeMoniker Id="e6f840cc-2968-4be1-b234-eef624ccacbb" />
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.125 : 4.10659912109375); (3.75 : 4.10659912109375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_JobPermission" />
+      <nodes>
+        <classShapeMoniker Id="e6f840cc-2968-4be1-b234-eef624ccacbb" />
+        <classShapeMoniker Id="4d800dc9-1b18-469f-b02c-d4554757c5e1" />
+      </nodes>
+    </associationConnector>
+  </nestedChildShapes>
+</ordesignerObjectsDiagram>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.designer.cs	(revision 7085)
@@ -0,0 +1,4178 @@
+﻿#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.239
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Services.Hive.DataAccess
+{
+	using System.Data.Linq;
+	using System.Data.Linq.Mapping;
+	using System.Data;
+	using System.Collections.Generic;
+	using System.Reflection;
+	using System.Linq;
+	using System.Linq.Expressions;
+	using System.ComponentModel;
+	using System;
+	
+	
+	[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="HeuristicLab.Hive")]
+	public partial class HiveDataContext : System.Data.Linq.DataContext
+	{
+		
+		private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
+		
+    #region Extensibility Method Definitions
+    partial void OnCreated();
+    partial void InsertAssignedResource(AssignedResource instance);
+    partial void UpdateAssignedResource(AssignedResource instance);
+    partial void DeleteAssignedResource(AssignedResource instance);
+    partial void InsertPlugin(Plugin instance);
+    partial void UpdatePlugin(Plugin instance);
+    partial void DeletePlugin(Plugin instance);
+    partial void InsertRequiredPlugin(RequiredPlugin instance);
+    partial void UpdateRequiredPlugin(RequiredPlugin instance);
+    partial void DeleteRequiredPlugin(RequiredPlugin instance);
+    partial void InsertResource(Resource instance);
+    partial void UpdateResource(Resource instance);
+    partial void DeleteResource(Resource instance);
+    partial void InsertTask(Task instance);
+    partial void UpdateTask(Task instance);
+    partial void DeleteTask(Task instance);
+    partial void InsertDowntime(Downtime instance);
+    partial void UpdateDowntime(Downtime instance);
+    partial void DeleteDowntime(Downtime instance);
+    partial void InsertJob(Job instance);
+    partial void UpdateJob(Job instance);
+    partial void DeleteJob(Job instance);
+    partial void InsertTaskData(TaskData instance);
+    partial void UpdateTaskData(TaskData instance);
+    partial void DeleteTaskData(TaskData instance);
+    partial void InsertPluginData(PluginData instance);
+    partial void UpdatePluginData(PluginData instance);
+    partial void DeletePluginData(PluginData instance);
+    partial void InsertStateLog(StateLog instance);
+    partial void UpdateStateLog(StateLog instance);
+    partial void DeleteStateLog(StateLog instance);
+    partial void InsertJobPermission(JobPermission instance);
+    partial void UpdateJobPermission(JobPermission instance);
+    partial void DeleteJobPermission(JobPermission instance);
+    partial void InsertLifecycle(Lifecycle instance);
+    partial void UpdateLifecycle(Lifecycle instance);
+    partial void DeleteLifecycle(Lifecycle instance);
+    partial void InsertDeletedJobStatistics(DeletedJobStatistics instance);
+    partial void UpdateDeletedJobStatistics(DeletedJobStatistics instance);
+    partial void DeleteDeletedJobStatistics(DeletedJobStatistics instance);
+    partial void InsertUserStatistics(UserStatistics instance);
+    partial void UpdateUserStatistics(UserStatistics instance);
+    partial void DeleteUserStatistics(UserStatistics instance);
+    partial void InsertSlaveStatistics(SlaveStatistics instance);
+    partial void UpdateSlaveStatistics(SlaveStatistics instance);
+    partial void DeleteSlaveStatistics(SlaveStatistics instance);
+    partial void InsertStatistics(Statistics instance);
+    partial void UpdateStatistics(Statistics instance);
+    partial void DeleteStatistics(Statistics instance);
+    #endregion
+		
+		public HiveDataContext() : 
+				base(global::HeuristicLab.Services.Hive.DataAccess.Settings.Default.HeuristicLab_Hive_LinqConnectionString, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(string connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(System.Data.IDbConnection connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public System.Data.Linq.Table<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this.GetTable<AssignedResource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Plugin> Plugins
+		{
+			get
+			{
+				return this.GetTable<Plugin>();
+			}
+		}
+		
+		public System.Data.Linq.Table<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this.GetTable<RequiredPlugin>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Resource> Resources
+		{
+			get
+			{
+				return this.GetTable<Resource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Task> Tasks
+		{
+			get
+			{
+				return this.GetTable<Task>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Downtime> Downtimes
+		{
+			get
+			{
+				return this.GetTable<Downtime>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Job> Jobs
+		{
+			get
+			{
+				return this.GetTable<Job>();
+			}
+		}
+		
+		public System.Data.Linq.Table<TaskData> TaskDatas
+		{
+			get
+			{
+				return this.GetTable<TaskData>();
+			}
+		}
+		
+		public System.Data.Linq.Table<PluginData> PluginDatas
+		{
+			get
+			{
+				return this.GetTable<PluginData>();
+			}
+		}
+		
+		public System.Data.Linq.Table<StateLog> StateLogs
+		{
+			get
+			{
+				return this.GetTable<StateLog>();
+			}
+		}
+		
+		public System.Data.Linq.Table<JobPermission> JobPermissions
+		{
+			get
+			{
+				return this.GetTable<JobPermission>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Lifecycle> Lifecycles
+		{
+			get
+			{
+				return this.GetTable<Lifecycle>();
+			}
+		}
+		
+		public System.Data.Linq.Table<DeletedJobStatistics> DeletedJobStatistics
+		{
+			get
+			{
+				return this.GetTable<DeletedJobStatistics>();
+			}
+		}
+		
+		public System.Data.Linq.Table<UserStatistics> UserStatistics
+		{
+			get
+			{
+				return this.GetTable<UserStatistics>();
+			}
+		}
+		
+		public System.Data.Linq.Table<SlaveStatistics> SlaveStatistics
+		{
+			get
+			{
+				return this.GetTable<SlaveStatistics>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Statistics> Statistics
+		{
+			get
+			{
+				return this.GetTable<Statistics>();
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.AssignedResources")]
+	public partial class AssignedResource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private System.Guid _JobId;
+		
+		private EntityRef<Resource> _Resource;
+		
+		private EntityRef<Task> _Job;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnTaskIdChanging(System.Guid value);
+    partial void OnTaskIdChanged();
+    #endregion
+		
+		public AssignedResource()
+		{
+			this._Resource = default(EntityRef<Resource>);
+			this._Job = default(EntityRef<Task>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid TaskId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					if (this._Job.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnTaskIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("TaskId");
+					this.OnTaskIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_AssignedResource", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.AssignedResources.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.AssignedResources.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_AssignedResource", Storage="_Job", ThisKey="TaskId", OtherKey="TaskId", IsForeignKey=true, DeleteRule="CASCADE")]
+		public Task Task
+		{
+			get
+			{
+				return this._Job.Entity;
+			}
+			set
+			{
+				Task previousValue = this._Job.Entity;
+				if (((previousValue != value) 
+							|| (this._Job.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job.Entity = null;
+						previousValue.AssignedResources.Remove(this);
+					}
+					this._Job.Entity = value;
+					if ((value != null))
+					{
+						value.AssignedResources.Add(this);
+						this._JobId = value.TaskId;
+					}
+					else
+					{
+						this._JobId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Task");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Plugin")]
+	public partial class Plugin : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _PluginId;
+		
+		private string _Name;
+		
+		private string _Version;
+		
+		private System.Guid _UserId;
+		
+		private System.DateTime _DateCreated;
+		
+		private byte[] _Hash;
+		
+		private EntitySet<RequiredPlugin> _RequiredPlugins;
+		
+		private EntitySet<PluginData> _PluginData;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnPluginIdChanging(System.Guid value);
+    partial void OnPluginIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnVersionChanging(string value);
+    partial void OnVersionChanged();
+    partial void OnUserIdChanging(System.Guid value);
+    partial void OnUserIdChanged();
+    partial void OnDateCreatedChanging(System.DateTime value);
+    partial void OnDateCreatedChanged();
+    partial void OnHashChanging(byte[] value);
+    partial void OnHashChanged();
+    #endregion
+		
+		public Plugin()
+		{
+			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
+			this._PluginData = new EntitySet<PluginData>(new Action<PluginData>(this.attach_PluginData), new Action<PluginData>(this.detach_PluginData));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid PluginId
+		{
+			get
+			{
+				return this._PluginId;
+			}
+			set
+			{
+				if ((this._PluginId != value))
+				{
+					this.OnPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._PluginId = value;
+					this.SendPropertyChanged("PluginId");
+					this.OnPluginIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Version", DbType="VarChar(MAX)", CanBeNull=false)]
+		public string Version
+		{
+			get
+			{
+				return this._Version;
+			}
+			set
+			{
+				if ((this._Version != value))
+				{
+					this.OnVersionChanging(value);
+					this.SendPropertyChanging();
+					this._Version = value;
+					this.SendPropertyChanged("Version");
+					this.OnVersionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier")]
+		public System.Guid UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DateCreated", DbType="DateTime")]
+		public System.DateTime DateCreated
+		{
+			get
+			{
+				return this._DateCreated;
+			}
+			set
+			{
+				if ((this._DateCreated != value))
+				{
+					this.OnDateCreatedChanging(value);
+					this.SendPropertyChanging();
+					this._DateCreated = value;
+					this.SendPropertyChanged("DateCreated");
+					this.OnDateCreatedChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Hash", DbType="VarBinary(20) NOT NULL", CanBeNull=false)]
+		public byte[] Hash
+		{
+			get
+			{
+				return this._Hash;
+			}
+			set
+			{
+				if ((this._Hash != value))
+				{
+					this.OnHashChanging(value);
+					this.SendPropertyChanging();
+					this._Hash = value;
+					this.SendPropertyChanged("Hash");
+					this.OnHashChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Plugin_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="PluginId", OtherKey="PluginId")]
+		public EntitySet<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this._RequiredPlugins;
+			}
+			set
+			{
+				this._RequiredPlugins.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Plugin_PluginData", Storage="_PluginData", ThisKey="PluginId", OtherKey="PluginId")]
+		public EntitySet<PluginData> PluginData
+		{
+			get
+			{
+				return this._PluginData;
+			}
+			set
+			{
+				this._PluginData.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.Plugin = this;
+		}
+		
+		private void detach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.Plugin = null;
+		}
+		
+		private void attach_PluginData(PluginData entity)
+		{
+			this.SendPropertyChanging();
+			entity.Plugin = this;
+		}
+		
+		private void detach_PluginData(PluginData entity)
+		{
+			this.SendPropertyChanging();
+			entity.Plugin = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.RequiredPlugins")]
+	public partial class RequiredPlugin : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _RequiredPluginId;
+		
+		private System.Guid _JobId;
+		
+		private System.Guid _PluginId;
+		
+		private EntityRef<Plugin> _PluginInfo;
+		
+		private EntityRef<Task> _Job;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnRequiredPluginIdChanging(System.Guid value);
+    partial void OnRequiredPluginIdChanged();
+    partial void OnTaskIdChanging(System.Guid value);
+    partial void OnTaskIdChanged();
+    partial void OnPluginIdChanging(System.Guid value);
+    partial void OnPluginIdChanged();
+    #endregion
+		
+		public RequiredPlugin()
+		{
+			this._PluginInfo = default(EntityRef<Plugin>);
+			this._Job = default(EntityRef<Task>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RequiredPluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		public System.Guid RequiredPluginId
+		{
+			get
+			{
+				return this._RequiredPluginId;
+			}
+			set
+			{
+				if ((this._RequiredPluginId != value))
+				{
+					this.OnRequiredPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._RequiredPluginId = value;
+					this.SendPropertyChanged("RequiredPluginId");
+					this.OnRequiredPluginIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid TaskId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					if (this._Job.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnTaskIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("TaskId");
+					this.OnTaskIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PluginId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid PluginId
+		{
+			get
+			{
+				return this._PluginId;
+			}
+			set
+			{
+				if ((this._PluginId != value))
+				{
+					if (this._PluginInfo.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._PluginId = value;
+					this.SendPropertyChanged("PluginId");
+					this.OnPluginIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Plugin_RequiredPlugin", Storage="_PluginInfo", ThisKey="PluginId", OtherKey="PluginId", IsForeignKey=true, DeleteRule="CASCADE")]
+		public Plugin Plugin
+		{
+			get
+			{
+				return this._PluginInfo.Entity;
+			}
+			set
+			{
+				Plugin previousValue = this._PluginInfo.Entity;
+				if (((previousValue != value) 
+							|| (this._PluginInfo.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._PluginInfo.Entity = null;
+						previousValue.RequiredPlugins.Remove(this);
+					}
+					this._PluginInfo.Entity = value;
+					if ((value != null))
+					{
+						value.RequiredPlugins.Add(this);
+						this._PluginId = value.PluginId;
+					}
+					else
+					{
+						this._PluginId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Plugin");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_RequiredPlugin", Storage="_Job", ThisKey="TaskId", OtherKey="TaskId", IsForeignKey=true)]
+		public Task Task
+		{
+			get
+			{
+				return this._Job.Entity;
+			}
+			set
+			{
+				Task previousValue = this._Job.Entity;
+				if (((previousValue != value) 
+							|| (this._Job.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job.Entity = null;
+						previousValue.RequiredPlugins.Remove(this);
+					}
+					this._Job.Entity = value;
+					if ((value != null))
+					{
+						value.RequiredPlugins.Add(this);
+						this._JobId = value.TaskId;
+					}
+					else
+					{
+						this._JobId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Task");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Resource")]
+	[global::System.Data.Linq.Mapping.InheritanceMappingAttribute(Code="RESOURCE", Type=typeof(Resource))]
+	[global::System.Data.Linq.Mapping.InheritanceMappingAttribute(Code="Slave", Type=typeof(Slave), IsDefault=true)]
+	[global::System.Data.Linq.Mapping.InheritanceMappingAttribute(Code="GROUP", Type=typeof(SlaveGroup))]
+	public partial class Resource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private string _Name;
+		
+		private string _ResourceType;
+		
+		private System.Nullable<System.Guid> _ParentResourceId;
+		
+		private int _HbInterval;
+		
+		private EntitySet<AssignedResource> _AssignedResources;
+		
+		private EntitySet<Resource> _ChildResources;
+		
+		private EntitySet<Downtime> _UptimeCalendars;
+		
+		private EntitySet<StateLog> _StateLogs;
+		
+		private EntityRef<Resource> _ParentResource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnResourceTypeChanging(string value);
+    partial void OnResourceTypeChanged();
+    partial void OnParentResourceIdChanging(System.Nullable<System.Guid> value);
+    partial void OnParentResourceIdChanged();
+    partial void OnHbIntervalChanging(int value);
+    partial void OnHbIntervalChanged();
+    #endregion
+		
+		public Resource()
+		{
+			this._AssignedResources = new EntitySet<AssignedResource>(new Action<AssignedResource>(this.attach_AssignedResources), new Action<AssignedResource>(this.detach_AssignedResources));
+			this._ChildResources = new EntitySet<Resource>(new Action<Resource>(this.attach_ChildResources), new Action<Resource>(this.detach_ChildResources));
+			this._UptimeCalendars = new EntitySet<Downtime>(new Action<Downtime>(this.attach_UptimeCalendars), new Action<Downtime>(this.detach_UptimeCalendars));
+			this._StateLogs = new EntitySet<StateLog>(new Action<StateLog>(this.attach_StateLogs), new Action<StateLog>(this.detach_StateLogs));
+			this._ParentResource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceType", CanBeNull=false, IsDiscriminator=true)]
+		public string ResourceType
+		{
+			get
+			{
+				return this._ResourceType;
+			}
+			set
+			{
+				if ((this._ResourceType != value))
+				{
+					this.OnResourceTypeChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceType = value;
+					this.SendPropertyChanged("ResourceType");
+					this.OnResourceTypeChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ParentResourceId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ParentResourceId
+		{
+			get
+			{
+				return this._ParentResourceId;
+			}
+			set
+			{
+				if ((this._ParentResourceId != value))
+				{
+					if (this._ParentResource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnParentResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ParentResourceId = value;
+					this.SendPropertyChanged("ParentResourceId");
+					this.OnParentResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_HbInterval", DbType="Int")]
+		public int HbInterval
+		{
+			get
+			{
+				return this._HbInterval;
+			}
+			set
+			{
+				if ((this._HbInterval != value))
+				{
+					this.OnHbIntervalChanging(value);
+					this.SendPropertyChanging();
+					this._HbInterval = value;
+					this.SendPropertyChanged("HbInterval");
+					this.OnHbIntervalChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_AssignedResource", Storage="_AssignedResources", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this._AssignedResources;
+			}
+			set
+			{
+				this._AssignedResources.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_Resource", Storage="_ChildResources", ThisKey="ResourceId", OtherKey="ParentResourceId")]
+		public EntitySet<Resource> ChildResources
+		{
+			get
+			{
+				return this._ChildResources;
+			}
+			set
+			{
+				this._ChildResources.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_Downtime", Storage="_UptimeCalendars", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<Downtime> Downtimes
+		{
+			get
+			{
+				return this._UptimeCalendars;
+			}
+			set
+			{
+				this._UptimeCalendars.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_StateLog", Storage="_StateLogs", ThisKey="ResourceId", OtherKey="SlaveId")]
+		public EntitySet<StateLog> StateLogs
+		{
+			get
+			{
+				return this._StateLogs;
+			}
+			set
+			{
+				this._StateLogs.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_Resource", Storage="_ParentResource", ThisKey="ParentResourceId", OtherKey="ResourceId", IsForeignKey=true)]
+		public Resource ParentResource
+		{
+			get
+			{
+				return this._ParentResource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._ParentResource.Entity;
+				if (((previousValue != value) 
+							|| (this._ParentResource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ParentResource.Entity = null;
+						previousValue.ChildResources.Remove(this);
+					}
+					this._ParentResource.Entity = value;
+					if ((value != null))
+					{
+						value.ChildResources.Add(this);
+						this._ParentResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ParentResourceId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("ParentResource");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+		
+		private void attach_ChildResources(Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.ParentResource = this;
+		}
+		
+		private void detach_ChildResources(Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.ParentResource = null;
+		}
+		
+		private void attach_UptimeCalendars(Downtime entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_UptimeCalendars(Downtime entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+		
+		private void attach_StateLogs(StateLog entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_StateLogs(StateLog entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+	}
+	
+	public partial class Slave : Resource
+	{
+		
+		private System.Nullable<int> _CPUSpeed;
+		
+		private System.Nullable<int> _Memory;
+		
+		private System.Nullable<System.DateTime> _Login;
+		
+		private global::HeuristicLab.Services.Hive.DataAccess.SlaveState _Status;
+		
+		private System.Nullable<int> _NumberOfCores;
+		
+		private System.Nullable<int> _NumberOfFreeCores;
+		
+		private System.Nullable<int> _FreeMemory;
+		
+		private bool _IsAllowedToCalculate;
+		
+		private global::HeuristicLab.Services.Hive.DataAccess.CpuArchitecture _CpuArchitecture;
+		
+		private string _OperatingSystem;
+		
+		private System.Nullable<System.DateTime> _LastHeartbeat;
+		
+		private double _CpuUtilization;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnCpuSpeedChanging(System.Nullable<int> value);
+    partial void OnCpuSpeedChanged();
+    partial void OnMemoryChanging(System.Nullable<int> value);
+    partial void OnMemoryChanged();
+    partial void OnLoginChanging(System.Nullable<System.DateTime> value);
+    partial void OnLoginChanged();
+    partial void OnSlaveStateChanging(global::HeuristicLab.Services.Hive.DataAccess.SlaveState value);
+    partial void OnSlaveStateChanged();
+    partial void OnCoresChanging(System.Nullable<int> value);
+    partial void OnCoresChanged();
+    partial void OnFreeCoresChanging(System.Nullable<int> value);
+    partial void OnFreeCoresChanged();
+    partial void OnFreeMemoryChanging(System.Nullable<int> value);
+    partial void OnFreeMemoryChanged();
+    partial void OnIsAllowedToCalculateChanging(bool value);
+    partial void OnIsAllowedToCalculateChanged();
+    partial void OnCpuArchitectureChanging(global::HeuristicLab.Services.Hive.DataAccess.CpuArchitecture value);
+    partial void OnCpuArchitectureChanged();
+    partial void OnOperatingSystemChanging(string value);
+    partial void OnOperatingSystemChanged();
+    partial void OnLastHeartbeatChanging(System.Nullable<System.DateTime> value);
+    partial void OnLastHeartbeatChanged();
+    partial void OnCpuUtilizationChanging(double value);
+    partial void OnCpuUtilizationChanged();
+    #endregion
+		
+		public Slave()
+		{
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CPUSpeed", DbType="Int")]
+		public System.Nullable<int> CpuSpeed
+		{
+			get
+			{
+				return this._CPUSpeed;
+			}
+			set
+			{
+				if ((this._CPUSpeed != value))
+				{
+					this.OnCpuSpeedChanging(value);
+					this.SendPropertyChanging();
+					this._CPUSpeed = value;
+					this.SendPropertyChanged("CpuSpeed");
+					this.OnCpuSpeedChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Memory", DbType="Int")]
+		public System.Nullable<int> Memory
+		{
+			get
+			{
+				return this._Memory;
+			}
+			set
+			{
+				if ((this._Memory != value))
+				{
+					this.OnMemoryChanging(value);
+					this.SendPropertyChanging();
+					this._Memory = value;
+					this.SendPropertyChanged("Memory");
+					this.OnMemoryChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Login", DbType="DateTime")]
+		public System.Nullable<System.DateTime> Login
+		{
+			get
+			{
+				return this._Login;
+			}
+			set
+			{
+				if ((this._Login != value))
+				{
+					this.OnLoginChanging(value);
+					this.SendPropertyChanging();
+					this._Login = value;
+					this.SendPropertyChanged("Login");
+					this.OnLoginChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Status", DbType="VarChar(15)", CanBeNull=true)]
+		public global::HeuristicLab.Services.Hive.DataAccess.SlaveState SlaveState
+		{
+			get
+			{
+				return this._Status;
+			}
+			set
+			{
+				if ((this._Status != value))
+				{
+					this.OnSlaveStateChanging(value);
+					this.SendPropertyChanging();
+					this._Status = value;
+					this.SendPropertyChanged("SlaveState");
+					this.OnSlaveStateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_NumberOfCores", DbType="Int")]
+		public System.Nullable<int> Cores
+		{
+			get
+			{
+				return this._NumberOfCores;
+			}
+			set
+			{
+				if ((this._NumberOfCores != value))
+				{
+					this.OnCoresChanging(value);
+					this.SendPropertyChanging();
+					this._NumberOfCores = value;
+					this.SendPropertyChanged("Cores");
+					this.OnCoresChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_NumberOfFreeCores", DbType="Int")]
+		public System.Nullable<int> FreeCores
+		{
+			get
+			{
+				return this._NumberOfFreeCores;
+			}
+			set
+			{
+				if ((this._NumberOfFreeCores != value))
+				{
+					this.OnFreeCoresChanging(value);
+					this.SendPropertyChanging();
+					this._NumberOfFreeCores = value;
+					this.SendPropertyChanged("FreeCores");
+					this.OnFreeCoresChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FreeMemory", DbType="Int")]
+		public System.Nullable<int> FreeMemory
+		{
+			get
+			{
+				return this._FreeMemory;
+			}
+			set
+			{
+				if ((this._FreeMemory != value))
+				{
+					this.OnFreeMemoryChanging(value);
+					this.SendPropertyChanging();
+					this._FreeMemory = value;
+					this.SendPropertyChanged("FreeMemory");
+					this.OnFreeMemoryChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsAllowedToCalculate", DbType="Bit")]
+		public bool IsAllowedToCalculate
+		{
+			get
+			{
+				return this._IsAllowedToCalculate;
+			}
+			set
+			{
+				if ((this._IsAllowedToCalculate != value))
+				{
+					this.OnIsAllowedToCalculateChanging(value);
+					this.SendPropertyChanging();
+					this._IsAllowedToCalculate = value;
+					this.SendPropertyChanged("IsAllowedToCalculate");
+					this.OnIsAllowedToCalculateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CpuArchitecture", DbType="VarChar(3)", CanBeNull=false)]
+		public global::HeuristicLab.Services.Hive.DataAccess.CpuArchitecture CpuArchitecture
+		{
+			get
+			{
+				return this._CpuArchitecture;
+			}
+			set
+			{
+				if ((this._CpuArchitecture != value))
+				{
+					this.OnCpuArchitectureChanging(value);
+					this.SendPropertyChanging();
+					this._CpuArchitecture = value;
+					this.SendPropertyChanged("CpuArchitecture");
+					this.OnCpuArchitectureChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_OperatingSystem", DbType="VarChar(MAX)", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		public string OperatingSystem
+		{
+			get
+			{
+				return this._OperatingSystem;
+			}
+			set
+			{
+				if ((this._OperatingSystem != value))
+				{
+					this.OnOperatingSystemChanging(value);
+					this.SendPropertyChanging();
+					this._OperatingSystem = value;
+					this.SendPropertyChanged("OperatingSystem");
+					this.OnOperatingSystemChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LastHeartbeat", DbType="DateTime")]
+		public System.Nullable<System.DateTime> LastHeartbeat
+		{
+			get
+			{
+				return this._LastHeartbeat;
+			}
+			set
+			{
+				if ((this._LastHeartbeat != value))
+				{
+					this.OnLastHeartbeatChanging(value);
+					this.SendPropertyChanging();
+					this._LastHeartbeat = value;
+					this.SendPropertyChanged("LastHeartbeat");
+					this.OnLastHeartbeatChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CpuUtilization", DbType="float")]
+		public double CpuUtilization
+		{
+			get
+			{
+				return this._CpuUtilization;
+			}
+			set
+			{
+				if ((this._CpuUtilization != value))
+				{
+					this.OnCpuUtilizationChanging(value);
+					this.SendPropertyChanging();
+					this._CpuUtilization = value;
+					this.SendPropertyChanged("CpuUtilization");
+					this.OnCpuUtilizationChanged();
+				}
+			}
+		}
+	}
+	
+	public partial class SlaveGroup : Resource
+	{
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    #endregion
+		
+		public SlaveGroup()
+		{
+			OnCreated();
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Task")]
+	public partial class Task : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _JobId;
+		
+		private global::HeuristicLab.Services.Hive.DataAccess.TaskState _State;
+		
+		private double _ExecutionTime;
+		
+		private System.Nullable<System.DateTime> _LastHeartbeat;
+		
+		private System.Nullable<System.Guid> _ParentJobId;
+		
+		private int _Priority;
+		
+		private int _CoresNeeded;
+		
+		private int _MemoryNeeded;
+		
+		private bool _IsParentJob;
+		
+		private bool _FinishWhenChildJobsFinished;
+		
+		private global::HeuristicLab.Services.Hive.DataAccess.Command? _Command;
+		
+		private System.Guid _HiveExperimentId;
+		
+		private bool _IsPrivileged;
+		
+		private EntitySet<AssignedResource> _AssignedResources;
+		
+		private EntitySet<RequiredPlugin> _RequiredPlugins;
+		
+		private EntitySet<Task> _Jobs;
+		
+		private EntityRef<TaskData> _JobData;
+		
+		private EntitySet<StateLog> _StateLogs;
+		
+		private EntityRef<Task> _Job1;
+		
+		private EntityRef<Job> _HiveExperiment;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnTaskIdChanging(System.Guid value);
+    partial void OnTaskIdChanged();
+    partial void OnStateChanging(global::HeuristicLab.Services.Hive.DataAccess.TaskState value);
+    partial void OnStateChanged();
+    partial void OnExecutionTimeMsChanging(double value);
+    partial void OnExecutionTimeMsChanged();
+    partial void OnLastHeartbeatChanging(System.Nullable<System.DateTime> value);
+    partial void OnLastHeartbeatChanged();
+    partial void OnParentTaskIdChanging(System.Nullable<System.Guid> value);
+    partial void OnParentTaskIdChanged();
+    partial void OnPriorityChanging(int value);
+    partial void OnPriorityChanged();
+    partial void OnCoresNeededChanging(int value);
+    partial void OnCoresNeededChanged();
+    partial void OnMemoryNeededChanging(int value);
+    partial void OnMemoryNeededChanged();
+    partial void OnIsParentTaskChanging(bool value);
+    partial void OnIsParentTaskChanged();
+    partial void OnFinishWhenChildJobsFinishedChanging(bool value);
+    partial void OnFinishWhenChildJobsFinishedChanged();
+    partial void OnCommandChanging(global::HeuristicLab.Services.Hive.DataAccess.Command? value);
+    partial void OnCommandChanged();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnIsPrivilegedChanging(bool value);
+    partial void OnIsPrivilegedChanged();
+    #endregion
+		
+		public Task()
+		{
+			this._AssignedResources = new EntitySet<AssignedResource>(new Action<AssignedResource>(this.attach_AssignedResources), new Action<AssignedResource>(this.detach_AssignedResources));
+			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
+			this._Jobs = new EntitySet<Task>(new Action<Task>(this.attach_Jobs), new Action<Task>(this.detach_Jobs));
+			this._JobData = default(EntityRef<TaskData>);
+			this._StateLogs = new EntitySet<StateLog>(new Action<StateLog>(this.attach_StateLogs), new Action<StateLog>(this.detach_StateLogs));
+			this._Job1 = default(EntityRef<Task>);
+			this._HiveExperiment = default(EntityRef<Job>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid TaskId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					this.OnTaskIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("TaskId");
+					this.OnTaskIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Name="TaskState", Storage="_State", DbType="VarChar(30)", CanBeNull=false)]
+		public global::HeuristicLab.Services.Hive.DataAccess.TaskState State
+		{
+			get
+			{
+				return this._State;
+			}
+			set
+			{
+				if ((this._State != value))
+				{
+					this.OnStateChanging(value);
+					this.SendPropertyChanging();
+					this._State = value;
+					this.SendPropertyChanged("State");
+					this.OnStateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExecutionTime", DbType="float")]
+		public double ExecutionTimeMs
+		{
+			get
+			{
+				return this._ExecutionTime;
+			}
+			set
+			{
+				if ((this._ExecutionTime != value))
+				{
+					this.OnExecutionTimeMsChanging(value);
+					this.SendPropertyChanging();
+					this._ExecutionTime = value;
+					this.SendPropertyChanged("ExecutionTimeMs");
+					this.OnExecutionTimeMsChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LastHeartbeat", DbType="DateTime")]
+		public System.Nullable<System.DateTime> LastHeartbeat
+		{
+			get
+			{
+				return this._LastHeartbeat;
+			}
+			set
+			{
+				if ((this._LastHeartbeat != value))
+				{
+					this.OnLastHeartbeatChanging(value);
+					this.SendPropertyChanging();
+					this._LastHeartbeat = value;
+					this.SendPropertyChanged("LastHeartbeat");
+					this.OnLastHeartbeatChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ParentJobId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ParentTaskId
+		{
+			get
+			{
+				return this._ParentJobId;
+			}
+			set
+			{
+				if ((this._ParentJobId != value))
+				{
+					if (this._Job1.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnParentTaskIdChanging(value);
+					this.SendPropertyChanging();
+					this._ParentJobId = value;
+					this.SendPropertyChanged("ParentTaskId");
+					this.OnParentTaskIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Priority", DbType="Int NOT NULL")]
+		public int Priority
+		{
+			get
+			{
+				return this._Priority;
+			}
+			set
+			{
+				if ((this._Priority != value))
+				{
+					this.OnPriorityChanging(value);
+					this.SendPropertyChanging();
+					this._Priority = value;
+					this.SendPropertyChanged("Priority");
+					this.OnPriorityChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CoresNeeded", DbType="Int NOT NULL")]
+		public int CoresNeeded
+		{
+			get
+			{
+				return this._CoresNeeded;
+			}
+			set
+			{
+				if ((this._CoresNeeded != value))
+				{
+					this.OnCoresNeededChanging(value);
+					this.SendPropertyChanging();
+					this._CoresNeeded = value;
+					this.SendPropertyChanged("CoresNeeded");
+					this.OnCoresNeededChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_MemoryNeeded", DbType="Int NOT NULL")]
+		public int MemoryNeeded
+		{
+			get
+			{
+				return this._MemoryNeeded;
+			}
+			set
+			{
+				if ((this._MemoryNeeded != value))
+				{
+					this.OnMemoryNeededChanging(value);
+					this.SendPropertyChanging();
+					this._MemoryNeeded = value;
+					this.SendPropertyChanged("MemoryNeeded");
+					this.OnMemoryNeededChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsParentJob", DbType="Bit")]
+		public bool IsParentTask
+		{
+			get
+			{
+				return this._IsParentJob;
+			}
+			set
+			{
+				if ((this._IsParentJob != value))
+				{
+					this.OnIsParentTaskChanging(value);
+					this.SendPropertyChanging();
+					this._IsParentJob = value;
+					this.SendPropertyChanged("IsParentTask");
+					this.OnIsParentTaskChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FinishWhenChildJobsFinished", DbType="Bit")]
+		public bool FinishWhenChildJobsFinished
+		{
+			get
+			{
+				return this._FinishWhenChildJobsFinished;
+			}
+			set
+			{
+				if ((this._FinishWhenChildJobsFinished != value))
+				{
+					this.OnFinishWhenChildJobsFinishedChanging(value);
+					this.SendPropertyChanging();
+					this._FinishWhenChildJobsFinished = value;
+					this.SendPropertyChanged("FinishWhenChildJobsFinished");
+					this.OnFinishWhenChildJobsFinishedChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Command", DbType="VarChar(30)", CanBeNull=true)]
+		public global::HeuristicLab.Services.Hive.DataAccess.Command? Command
+		{
+			get
+			{
+				return this._Command;
+			}
+			set
+			{
+				if ((this._Command != value))
+				{
+					this.OnCommandChanging(value);
+					this.SendPropertyChanging();
+					this._Command = value;
+					this.SendPropertyChanged("Command");
+					this.OnCommandChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_HiveExperimentId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._HiveExperimentId;
+			}
+			set
+			{
+				if ((this._HiveExperimentId != value))
+				{
+					if (this._HiveExperiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._HiveExperimentId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsPrivileged", DbType="Bit")]
+		public bool IsPrivileged
+		{
+			get
+			{
+				return this._IsPrivileged;
+			}
+			set
+			{
+				if ((this._IsPrivileged != value))
+				{
+					this.OnIsPrivilegedChanging(value);
+					this.SendPropertyChanging();
+					this._IsPrivileged = value;
+					this.SendPropertyChanged("IsPrivileged");
+					this.OnIsPrivilegedChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_AssignedResource", Storage="_AssignedResources", ThisKey="TaskId", OtherKey="TaskId")]
+		public EntitySet<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this._AssignedResources;
+			}
+			set
+			{
+				this._AssignedResources.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="TaskId", OtherKey="TaskId")]
+		public EntitySet<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this._RequiredPlugins;
+			}
+			set
+			{
+				this._RequiredPlugins.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_Task", Storage="_Jobs", ThisKey="TaskId", OtherKey="ParentTaskId")]
+		public EntitySet<Task> ChildJobs
+		{
+			get
+			{
+				return this._Jobs;
+			}
+			set
+			{
+				this._Jobs.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_TaskData", Storage="_JobData", ThisKey="TaskId", OtherKey="TaskId", IsUnique=true, IsForeignKey=false)]
+		public TaskData JobData
+		{
+			get
+			{
+				return this._JobData.Entity;
+			}
+			set
+			{
+				TaskData previousValue = this._JobData.Entity;
+				if (((previousValue != value) 
+							|| (this._JobData.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._JobData.Entity = null;
+						previousValue.Task = null;
+					}
+					this._JobData.Entity = value;
+					if ((value != null))
+					{
+						value.Task = this;
+					}
+					this.SendPropertyChanged("JobData");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_StateLog", Storage="_StateLogs", ThisKey="TaskId", OtherKey="TaskId")]
+		public EntitySet<StateLog> StateLogs
+		{
+			get
+			{
+				return this._StateLogs;
+			}
+			set
+			{
+				this._StateLogs.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_Task", Storage="_Job1", ThisKey="ParentTaskId", OtherKey="TaskId", IsForeignKey=true)]
+		public Task ParentJob
+		{
+			get
+			{
+				return this._Job1.Entity;
+			}
+			set
+			{
+				Task previousValue = this._Job1.Entity;
+				if (((previousValue != value) 
+							|| (this._Job1.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job1.Entity = null;
+						previousValue.ChildJobs.Remove(this);
+					}
+					this._Job1.Entity = value;
+					if ((value != null))
+					{
+						value.ChildJobs.Add(this);
+						this._ParentJobId = value.TaskId;
+					}
+					else
+					{
+						this._ParentJobId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("ParentJob");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_Task", Storage="_HiveExperiment", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true)]
+		public Job Job
+		{
+			get
+			{
+				return this._HiveExperiment.Entity;
+			}
+			set
+			{
+				Job previousValue = this._HiveExperiment.Entity;
+				if (((previousValue != value) 
+							|| (this._HiveExperiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._HiveExperiment.Entity = null;
+						previousValue.Tasks.Remove(this);
+					}
+					this._HiveExperiment.Entity = value;
+					if ((value != null))
+					{
+						value.Tasks.Add(this);
+						this._HiveExperimentId = value.JobId;
+					}
+					else
+					{
+						this._HiveExperimentId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Job");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Task = this;
+		}
+		
+		private void detach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Task = null;
+		}
+		
+		private void attach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.Task = this;
+		}
+		
+		private void detach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.Task = null;
+		}
+		
+		private void attach_Jobs(Task entity)
+		{
+			this.SendPropertyChanging();
+			entity.ParentJob = this;
+		}
+		
+		private void detach_Jobs(Task entity)
+		{
+			this.SendPropertyChanging();
+			entity.ParentJob = null;
+		}
+		
+		private void attach_StateLogs(StateLog entity)
+		{
+			this.SendPropertyChanging();
+			entity.Task = this;
+		}
+		
+		private void detach_StateLogs(StateLog entity)
+		{
+			this.SendPropertyChanging();
+			entity.Task = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Downtime")]
+	public partial class Downtime : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _UptimeCalendarId;
+		
+		private System.Guid _ResourceId;
+		
+		private System.DateTime _StartDate;
+		
+		private System.DateTime _EndDate;
+		
+		private bool _AllDayEvent;
+		
+		private bool _Recurring;
+		
+		private System.Guid _RecurringId;
+		
+		private EntityRef<Resource> _Resource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnDowntimeIdChanging(System.Guid value);
+    partial void OnDowntimeIdChanged();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnStartDateChanging(System.DateTime value);
+    partial void OnStartDateChanged();
+    partial void OnEndDateChanging(System.DateTime value);
+    partial void OnEndDateChanged();
+    partial void OnAllDayEventChanging(bool value);
+    partial void OnAllDayEventChanged();
+    partial void OnRecurringChanging(bool value);
+    partial void OnRecurringChanged();
+    partial void OnRecurringIdChanging(System.Guid value);
+    partial void OnRecurringIdChanged();
+    #endregion
+		
+		public Downtime()
+		{
+			this._Resource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UptimeCalendarId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid DowntimeId
+		{
+			get
+			{
+				return this._UptimeCalendarId;
+			}
+			set
+			{
+				if ((this._UptimeCalendarId != value))
+				{
+					this.OnDowntimeIdChanging(value);
+					this.SendPropertyChanging();
+					this._UptimeCalendarId = value;
+					this.SendPropertyChanged("DowntimeId");
+					this.OnDowntimeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", DbType="UniqueIdentifier")]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StartDate", DbType="DateTime")]
+		public System.DateTime StartDate
+		{
+			get
+			{
+				return this._StartDate;
+			}
+			set
+			{
+				if ((this._StartDate != value))
+				{
+					this.OnStartDateChanging(value);
+					this.SendPropertyChanging();
+					this._StartDate = value;
+					this.SendPropertyChanged("StartDate");
+					this.OnStartDateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_EndDate", DbType="DateTime")]
+		public System.DateTime EndDate
+		{
+			get
+			{
+				return this._EndDate;
+			}
+			set
+			{
+				if ((this._EndDate != value))
+				{
+					this.OnEndDateChanging(value);
+					this.SendPropertyChanging();
+					this._EndDate = value;
+					this.SendPropertyChanged("EndDate");
+					this.OnEndDateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AllDayEvent", DbType="Bit")]
+		public bool AllDayEvent
+		{
+			get
+			{
+				return this._AllDayEvent;
+			}
+			set
+			{
+				if ((this._AllDayEvent != value))
+				{
+					this.OnAllDayEventChanging(value);
+					this.SendPropertyChanging();
+					this._AllDayEvent = value;
+					this.SendPropertyChanged("AllDayEvent");
+					this.OnAllDayEventChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Recurring", DbType="Bit")]
+		public bool Recurring
+		{
+			get
+			{
+				return this._Recurring;
+			}
+			set
+			{
+				if ((this._Recurring != value))
+				{
+					this.OnRecurringChanging(value);
+					this.SendPropertyChanging();
+					this._Recurring = value;
+					this.SendPropertyChanged("Recurring");
+					this.OnRecurringChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RecurringId", DbType="UniqueIdentifier")]
+		public System.Guid RecurringId
+		{
+			get
+			{
+				return this._RecurringId;
+			}
+			set
+			{
+				if ((this._RecurringId != value))
+				{
+					this.OnRecurringIdChanging(value);
+					this.SendPropertyChanging();
+					this._RecurringId = value;
+					this.SendPropertyChanged("RecurringId");
+					this.OnRecurringIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_Downtime", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.Downtimes.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.Downtimes.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Job")]
+	public partial class Job : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _HiveExperimentId;
+		
+		private string _Name;
+		
+		private string _Description;
+		
+		private string _ResourceIds;
+		
+		private System.Guid _UserId;
+		
+		private System.DateTime _DateCreated;
+		
+		private EntitySet<Task> _Jobs;
+		
+		private EntitySet<JobPermission> _HiveExperimentPermissions;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    partial void OnResourceIdsChanging(string value);
+    partial void OnResourceIdsChanged();
+    partial void OnOwnerUserIdChanging(System.Guid value);
+    partial void OnOwnerUserIdChanged();
+    partial void OnDateCreatedChanging(System.DateTime value);
+    partial void OnDateCreatedChanged();
+    #endregion
+		
+		public Job()
+		{
+			this._Jobs = new EntitySet<Task>(new Action<Task>(this.attach_Jobs), new Action<Task>(this.detach_Jobs));
+			this._HiveExperimentPermissions = new EntitySet<JobPermission>(new Action<JobPermission>(this.attach_HiveExperimentPermissions), new Action<JobPermission>(this.detach_HiveExperimentPermissions));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_HiveExperimentId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._HiveExperimentId;
+			}
+			set
+			{
+				if ((this._HiveExperimentId != value))
+				{
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._HiveExperimentId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="VarChar(MAX)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceIds", DbType="VarChar(MAX)")]
+		public string ResourceIds
+		{
+			get
+			{
+				return this._ResourceIds;
+			}
+			set
+			{
+				if ((this._ResourceIds != value))
+				{
+					this.OnResourceIdsChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceIds = value;
+					this.SendPropertyChanged("ResourceIds");
+					this.OnResourceIdsChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier")]
+		public System.Guid OwnerUserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnOwnerUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("OwnerUserId");
+					this.OnOwnerUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DateCreated", DbType="DateTime")]
+		public System.DateTime DateCreated
+		{
+			get
+			{
+				return this._DateCreated;
+			}
+			set
+			{
+				if ((this._DateCreated != value))
+				{
+					this.OnDateCreatedChanging(value);
+					this.SendPropertyChanging();
+					this._DateCreated = value;
+					this.SendPropertyChanged("DateCreated");
+					this.OnDateCreatedChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_Task", Storage="_Jobs", ThisKey="JobId", OtherKey="JobId")]
+		public EntitySet<Task> Tasks
+		{
+			get
+			{
+				return this._Jobs;
+			}
+			set
+			{
+				this._Jobs.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_JobPermission", Storage="_HiveExperimentPermissions", ThisKey="JobId", OtherKey="JobId")]
+		public EntitySet<JobPermission> JobPermissions
+		{
+			get
+			{
+				return this._HiveExperimentPermissions;
+			}
+			set
+			{
+				this._HiveExperimentPermissions.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_Jobs(Task entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = this;
+		}
+		
+		private void detach_Jobs(Task entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = null;
+		}
+		
+		private void attach_HiveExperimentPermissions(JobPermission entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = this;
+		}
+		
+		private void detach_HiveExperimentPermissions(JobPermission entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.TaskData")]
+	public partial class TaskData : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _JobId;
+		
+		private System.Data.Linq.Binary _Data;
+		
+		private System.DateTime _LastUpdate;
+		
+		private EntityRef<Task> _Job;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnTaskIdChanging(System.Guid value);
+    partial void OnTaskIdChanged();
+    partial void OnDataChanging(System.Data.Linq.Binary value);
+    partial void OnDataChanged();
+    partial void OnLastUpdateChanging(System.DateTime value);
+    partial void OnLastUpdateChanged();
+    #endregion
+		
+		public TaskData()
+		{
+			this._Job = default(EntityRef<Task>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid TaskId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					if (this._Job.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnTaskIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("TaskId");
+					this.OnTaskIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Data", DbType="VarBinary(MAX)", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		public System.Data.Linq.Binary Data
+		{
+			get
+			{
+				return this._Data;
+			}
+			set
+			{
+				if ((this._Data != value))
+				{
+					this.OnDataChanging(value);
+					this.SendPropertyChanging();
+					this._Data = value;
+					this.SendPropertyChanged("Data");
+					this.OnDataChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LastUpdate", DbType="DateTime")]
+		public System.DateTime LastUpdate
+		{
+			get
+			{
+				return this._LastUpdate;
+			}
+			set
+			{
+				if ((this._LastUpdate != value))
+				{
+					this.OnLastUpdateChanging(value);
+					this.SendPropertyChanging();
+					this._LastUpdate = value;
+					this.SendPropertyChanged("LastUpdate");
+					this.OnLastUpdateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_TaskData", Storage="_Job", ThisKey="TaskId", OtherKey="TaskId", IsForeignKey=true)]
+		public Task Task
+		{
+			get
+			{
+				return this._Job.Entity;
+			}
+			set
+			{
+				Task previousValue = this._Job.Entity;
+				if (((previousValue != value) 
+							|| (this._Job.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job.Entity = null;
+						previousValue.JobData = null;
+					}
+					this._Job.Entity = value;
+					if ((value != null))
+					{
+						value.JobData = this;
+						this._JobId = value.TaskId;
+					}
+					else
+					{
+						this._JobId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Task");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.PluginData")]
+	public partial class PluginData : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _PluginDataId;
+		
+		private System.Guid _PluginId;
+		
+		private System.Data.Linq.Binary _Data;
+		
+		private string _FileName;
+		
+		private EntityRef<Plugin> _Plugin;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnPluginDataIdChanging(System.Guid value);
+    partial void OnPluginDataIdChanged();
+    partial void OnPluginIdChanging(System.Guid value);
+    partial void OnPluginIdChanged();
+    partial void OnDataChanging(System.Data.Linq.Binary value);
+    partial void OnDataChanged();
+    partial void OnFileNameChanging(string value);
+    partial void OnFileNameChanged();
+    #endregion
+		
+		public PluginData()
+		{
+			this._Plugin = default(EntityRef<Plugin>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PluginDataId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid PluginDataId
+		{
+			get
+			{
+				return this._PluginDataId;
+			}
+			set
+			{
+				if ((this._PluginDataId != value))
+				{
+					this.OnPluginDataIdChanging(value);
+					this.SendPropertyChanging();
+					this._PluginDataId = value;
+					this.SendPropertyChanged("PluginDataId");
+					this.OnPluginDataIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PluginId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid PluginId
+		{
+			get
+			{
+				return this._PluginId;
+			}
+			set
+			{
+				if ((this._PluginId != value))
+				{
+					if (this._Plugin.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._PluginId = value;
+					this.SendPropertyChanged("PluginId");
+					this.OnPluginIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Data", DbType="VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		public System.Data.Linq.Binary Data
+		{
+			get
+			{
+				return this._Data;
+			}
+			set
+			{
+				if ((this._Data != value))
+				{
+					this.OnDataChanging(value);
+					this.SendPropertyChanging();
+					this._Data = value;
+					this.SendPropertyChanged("Data");
+					this.OnDataChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FileName", DbType="VarChar(MAX)", CanBeNull=false)]
+		public string FileName
+		{
+			get
+			{
+				return this._FileName;
+			}
+			set
+			{
+				if ((this._FileName != value))
+				{
+					this.OnFileNameChanging(value);
+					this.SendPropertyChanging();
+					this._FileName = value;
+					this.SendPropertyChanged("FileName");
+					this.OnFileNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Plugin_PluginData", Storage="_Plugin", ThisKey="PluginId", OtherKey="PluginId", IsForeignKey=true)]
+		public Plugin Plugin
+		{
+			get
+			{
+				return this._Plugin.Entity;
+			}
+			set
+			{
+				Plugin previousValue = this._Plugin.Entity;
+				if (((previousValue != value) 
+							|| (this._Plugin.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Plugin.Entity = null;
+						previousValue.PluginData.Remove(this);
+					}
+					this._Plugin.Entity = value;
+					if ((value != null))
+					{
+						value.PluginData.Add(this);
+						this._PluginId = value.PluginId;
+					}
+					else
+					{
+						this._PluginId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Plugin");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.StateLog")]
+	public partial class StateLog : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _StateLogId;
+		
+		private global::HeuristicLab.Services.Hive.DataAccess.TaskState _State;
+		
+		private System.DateTime _DateTime;
+		
+		private System.Guid _JobId;
+		
+		private System.Nullable<System.Guid> _UserId;
+		
+		private System.Nullable<System.Guid> _SlaveId;
+		
+		private string _Exception;
+		
+		private EntityRef<Task> _Job;
+		
+		private EntityRef<Resource> _Resource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnStateLogIdChanging(System.Guid value);
+    partial void OnStateLogIdChanged();
+    partial void OnStateChanging(global::HeuristicLab.Services.Hive.DataAccess.TaskState value);
+    partial void OnStateChanged();
+    partial void OnDateTimeChanging(System.DateTime value);
+    partial void OnDateTimeChanged();
+    partial void OnTaskIdChanging(System.Guid value);
+    partial void OnTaskIdChanged();
+    partial void OnUserIdChanging(System.Nullable<System.Guid> value);
+    partial void OnUserIdChanged();
+    partial void OnSlaveIdChanging(System.Nullable<System.Guid> value);
+    partial void OnSlaveIdChanged();
+    partial void OnExceptionChanging(string value);
+    partial void OnExceptionChanged();
+    #endregion
+		
+		public StateLog()
+		{
+			this._Job = default(EntityRef<Task>);
+			this._Resource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StateLogId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid StateLogId
+		{
+			get
+			{
+				return this._StateLogId;
+			}
+			set
+			{
+				if ((this._StateLogId != value))
+				{
+					this.OnStateLogIdChanging(value);
+					this.SendPropertyChanging();
+					this._StateLogId = value;
+					this.SendPropertyChanged("StateLogId");
+					this.OnStateLogIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_State", DbType="VarChar(30) NOT NULL", CanBeNull=false)]
+		public global::HeuristicLab.Services.Hive.DataAccess.TaskState State
+		{
+			get
+			{
+				return this._State;
+			}
+			set
+			{
+				if ((this._State != value))
+				{
+					this.OnStateChanging(value);
+					this.SendPropertyChanging();
+					this._State = value;
+					this.SendPropertyChanged("State");
+					this.OnStateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DateTime", DbType="DateTime NOT NULL")]
+		public System.DateTime DateTime
+		{
+			get
+			{
+				return this._DateTime;
+			}
+			set
+			{
+				if ((this._DateTime != value))
+				{
+					this.OnDateTimeChanging(value);
+					this.SendPropertyChanging();
+					this._DateTime = value;
+					this.SendPropertyChanged("DateTime");
+					this.OnDateTimeChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid TaskId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					if (this._Job.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnTaskIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("TaskId");
+					this.OnTaskIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SlaveId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> SlaveId
+		{
+			get
+			{
+				return this._SlaveId;
+			}
+			set
+			{
+				if ((this._SlaveId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnSlaveIdChanging(value);
+					this.SendPropertyChanging();
+					this._SlaveId = value;
+					this.SendPropertyChanged("SlaveId");
+					this.OnSlaveIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Exception", DbType="VarChar(MAX)", CanBeNull=false)]
+		public string Exception
+		{
+			get
+			{
+				return this._Exception;
+			}
+			set
+			{
+				if ((this._Exception != value))
+				{
+					this.OnExceptionChanging(value);
+					this.SendPropertyChanging();
+					this._Exception = value;
+					this.SendPropertyChanged("Exception");
+					this.OnExceptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_StateLog", Storage="_Job", ThisKey="TaskId", OtherKey="TaskId", IsForeignKey=true)]
+		public Task Task
+		{
+			get
+			{
+				return this._Job.Entity;
+			}
+			set
+			{
+				Task previousValue = this._Job.Entity;
+				if (((previousValue != value) 
+							|| (this._Job.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job.Entity = null;
+						previousValue.StateLogs.Remove(this);
+					}
+					this._Job.Entity = value;
+					if ((value != null))
+					{
+						value.StateLogs.Add(this);
+						this._JobId = value.TaskId;
+					}
+					else
+					{
+						this._JobId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Task");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_StateLog", Storage="_Resource", ThisKey="SlaveId", OtherKey="ResourceId", IsForeignKey=true)]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.StateLogs.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.StateLogs.Add(this);
+						this._SlaveId = value.ResourceId;
+					}
+					else
+					{
+						this._SlaveId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.JobPermission")]
+	public partial class JobPermission : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _HiveExperimentId;
+		
+		private System.Guid _GrantedUserId;
+		
+		private System.Guid _GrantedByUserId;
+		
+		private global::HeuristicLab.Services.Hive.DataAccess.Permission _Permission;
+		
+		private EntityRef<Job> _HiveExperiment;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnGrantedUserIdChanging(System.Guid value);
+    partial void OnGrantedUserIdChanged();
+    partial void OnGrantedByUserIdChanging(System.Guid value);
+    partial void OnGrantedByUserIdChanged();
+    partial void OnPermissionChanging(global::HeuristicLab.Services.Hive.DataAccess.Permission value);
+    partial void OnPermissionChanged();
+    #endregion
+		
+		public JobPermission()
+		{
+			this._HiveExperiment = default(EntityRef<Job>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_HiveExperimentId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._HiveExperimentId;
+			}
+			set
+			{
+				if ((this._HiveExperimentId != value))
+				{
+					if (this._HiveExperiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._HiveExperimentId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_GrantedUserId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid GrantedUserId
+		{
+			get
+			{
+				return this._GrantedUserId;
+			}
+			set
+			{
+				if ((this._GrantedUserId != value))
+				{
+					this.OnGrantedUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._GrantedUserId = value;
+					this.SendPropertyChanged("GrantedUserId");
+					this.OnGrantedUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_GrantedByUserId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid GrantedByUserId
+		{
+			get
+			{
+				return this._GrantedByUserId;
+			}
+			set
+			{
+				if ((this._GrantedByUserId != value))
+				{
+					this.OnGrantedByUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._GrantedByUserId = value;
+					this.SendPropertyChanged("GrantedByUserId");
+					this.OnGrantedByUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Permission", DbType="VarChar(15) NOT NULL", CanBeNull=false)]
+		public global::HeuristicLab.Services.Hive.DataAccess.Permission Permission
+		{
+			get
+			{
+				return this._Permission;
+			}
+			set
+			{
+				if ((this._Permission != value))
+				{
+					this.OnPermissionChanging(value);
+					this.SendPropertyChanging();
+					this._Permission = value;
+					this.SendPropertyChanged("Permission");
+					this.OnPermissionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_JobPermission", Storage="_HiveExperiment", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true)]
+		public Job Job
+		{
+			get
+			{
+				return this._HiveExperiment.Entity;
+			}
+			set
+			{
+				Job previousValue = this._HiveExperiment.Entity;
+				if (((previousValue != value) 
+							|| (this._HiveExperiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._HiveExperiment.Entity = null;
+						previousValue.JobPermissions.Remove(this);
+					}
+					this._HiveExperiment.Entity = value;
+					if ((value != null))
+					{
+						value.JobPermissions.Add(this);
+						this._HiveExperimentId = value.JobId;
+					}
+					else
+					{
+						this._HiveExperimentId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Job");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="")]
+	public partial class Lifecycle : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private int _LifecycleId;
+		
+		private System.DateTime _LastCleanup;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnLifecycleIdChanging(int value);
+    partial void OnLifecycleIdChanged();
+    partial void OnLastCleanupChanging(System.DateTime value);
+    partial void OnLastCleanupChanged();
+    #endregion
+		
+		public Lifecycle()
+		{
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LifecycleId", DbType="Int", IsPrimaryKey=true)]
+		public int LifecycleId
+		{
+			get
+			{
+				return this._LifecycleId;
+			}
+			set
+			{
+				if ((this._LifecycleId != value))
+				{
+					this.OnLifecycleIdChanging(value);
+					this.SendPropertyChanging();
+					this._LifecycleId = value;
+					this.SendPropertyChanged("LifecycleId");
+					this.OnLifecycleIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LastCleanup", DbType="DateTime")]
+		public System.DateTime LastCleanup
+		{
+			get
+			{
+				return this._LastCleanup;
+			}
+			set
+			{
+				if ((this._LastCleanup != value))
+				{
+					this.OnLastCleanupChanging(value);
+					this.SendPropertyChanging();
+					this._LastCleanup = value;
+					this.SendPropertyChanged("LastCleanup");
+					this.OnLastCleanupChanged();
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="")]
+	public partial class DeletedJobStatistics : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _UserId;
+		
+		private double _ExecutionTime;
+		
+		private double _ExecutionTimeFinishedJobs;
+		
+		private double _StartToEndTime;
+		
+		private System.Guid _DeletedJobStatisticsId;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnUserIdChanging(System.Guid value);
+    partial void OnUserIdChanged();
+    partial void OnExecutionTimeSChanging(double value);
+    partial void OnExecutionTimeSChanged();
+    partial void OnExecutionTimeSFinishedJobsChanging(double value);
+    partial void OnExecutionTimeSFinishedJobsChanged();
+    partial void OnStartToEndTimeSChanging(double value);
+    partial void OnStartToEndTimeSChanged();
+    partial void OnDeletedJobStatisticsIdChanging(System.Guid value);
+    partial void OnDeletedJobStatisticsIdChanged();
+    #endregion
+		
+		public DeletedJobStatistics()
+		{
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExecutionTime", DbType="float NOT NULL")]
+		public double ExecutionTimeS
+		{
+			get
+			{
+				return this._ExecutionTime;
+			}
+			set
+			{
+				if ((this._ExecutionTime != value))
+				{
+					this.OnExecutionTimeSChanging(value);
+					this.SendPropertyChanging();
+					this._ExecutionTime = value;
+					this.SendPropertyChanged("ExecutionTimeS");
+					this.OnExecutionTimeSChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExecutionTimeFinishedJobs", DbType="float NOT NULL")]
+		public double ExecutionTimeSFinishedJobs
+		{
+			get
+			{
+				return this._ExecutionTimeFinishedJobs;
+			}
+			set
+			{
+				if ((this._ExecutionTimeFinishedJobs != value))
+				{
+					this.OnExecutionTimeSFinishedJobsChanging(value);
+					this.SendPropertyChanging();
+					this._ExecutionTimeFinishedJobs = value;
+					this.SendPropertyChanged("ExecutionTimeSFinishedJobs");
+					this.OnExecutionTimeSFinishedJobsChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StartToEndTime", DbType="float NOT NULL")]
+		public double StartToEndTimeS
+		{
+			get
+			{
+				return this._StartToEndTime;
+			}
+			set
+			{
+				if ((this._StartToEndTime != value))
+				{
+					this.OnStartToEndTimeSChanging(value);
+					this.SendPropertyChanging();
+					this._StartToEndTime = value;
+					this.SendPropertyChanged("StartToEndTimeS");
+					this.OnStartToEndTimeSChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DeletedJobStatisticsId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid DeletedJobStatisticsId
+		{
+			get
+			{
+				return this._DeletedJobStatisticsId;
+			}
+			set
+			{
+				if ((this._DeletedJobStatisticsId != value))
+				{
+					this.OnDeletedJobStatisticsIdChanging(value);
+					this.SendPropertyChanging();
+					this._DeletedJobStatisticsId = value;
+					this.SendPropertyChanged("DeletedJobStatisticsId");
+					this.OnDeletedJobStatisticsIdChanged();
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="")]
+	public partial class UserStatistics : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _StatisticsId;
+		
+		private System.Guid _UserId;
+		
+		private double _ExecutionTime;
+		
+		private int _CoresUsed;
+		
+		private double _ExecutionTimeFinishedJobs;
+		
+		private double _StartToEndTime;
+		
+		private EntityRef<Statistics> _Statistics;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnStatisticsIdChanging(System.Guid value);
+    partial void OnStatisticsIdChanged();
+    partial void OnUserIdChanging(System.Guid value);
+    partial void OnUserIdChanged();
+    partial void OnExecutionTimeMsChanging(double value);
+    partial void OnExecutionTimeMsChanged();
+    partial void OnUsedCoresChanging(int value);
+    partial void OnUsedCoresChanged();
+    partial void OnExecutionTimeMsFinishedJobsChanging(double value);
+    partial void OnExecutionTimeMsFinishedJobsChanged();
+    partial void OnStartToEndTimeMsChanging(double value);
+    partial void OnStartToEndTimeMsChanged();
+    #endregion
+		
+		public UserStatistics()
+		{
+			this._Statistics = default(EntityRef<Statistics>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StatisticsId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid StatisticsId
+		{
+			get
+			{
+				return this._StatisticsId;
+			}
+			set
+			{
+				if ((this._StatisticsId != value))
+				{
+					if (this._Statistics.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnStatisticsIdChanging(value);
+					this.SendPropertyChanging();
+					this._StatisticsId = value;
+					this.SendPropertyChanged("StatisticsId");
+					this.OnStatisticsIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExecutionTime", DbType="float NOT NULL")]
+		public double ExecutionTimeMs
+		{
+			get
+			{
+				return this._ExecutionTime;
+			}
+			set
+			{
+				if ((this._ExecutionTime != value))
+				{
+					this.OnExecutionTimeMsChanging(value);
+					this.SendPropertyChanging();
+					this._ExecutionTime = value;
+					this.SendPropertyChanged("ExecutionTimeMs");
+					this.OnExecutionTimeMsChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CoresUsed", DbType="Int NOT NULL")]
+		public int UsedCores
+		{
+			get
+			{
+				return this._CoresUsed;
+			}
+			set
+			{
+				if ((this._CoresUsed != value))
+				{
+					this.OnUsedCoresChanging(value);
+					this.SendPropertyChanging();
+					this._CoresUsed = value;
+					this.SendPropertyChanged("UsedCores");
+					this.OnUsedCoresChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExecutionTimeFinishedJobs", DbType="float NOT NULL")]
+		public double ExecutionTimeMsFinishedJobs
+		{
+			get
+			{
+				return this._ExecutionTimeFinishedJobs;
+			}
+			set
+			{
+				if ((this._ExecutionTimeFinishedJobs != value))
+				{
+					this.OnExecutionTimeMsFinishedJobsChanging(value);
+					this.SendPropertyChanging();
+					this._ExecutionTimeFinishedJobs = value;
+					this.SendPropertyChanged("ExecutionTimeMsFinishedJobs");
+					this.OnExecutionTimeMsFinishedJobsChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StartToEndTime", DbType="float NOT NULL")]
+		public double StartToEndTimeMs
+		{
+			get
+			{
+				return this._StartToEndTime;
+			}
+			set
+			{
+				if ((this._StartToEndTime != value))
+				{
+					this.OnStartToEndTimeMsChanging(value);
+					this.SendPropertyChanging();
+					this._StartToEndTime = value;
+					this.SendPropertyChanged("StartToEndTimeMs");
+					this.OnStartToEndTimeMsChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Statistics_UserStatistics", Storage="_Statistics", ThisKey="StatisticsId", OtherKey="StatisticsId", IsForeignKey=true)]
+		public Statistics Statistics
+		{
+			get
+			{
+				return this._Statistics.Entity;
+			}
+			set
+			{
+				Statistics previousValue = this._Statistics.Entity;
+				if (((previousValue != value) 
+							|| (this._Statistics.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Statistics.Entity = null;
+						previousValue.UserStatistics.Remove(this);
+					}
+					this._Statistics.Entity = value;
+					if ((value != null))
+					{
+						value.UserStatistics.Add(this);
+						this._StatisticsId = value.StatisticsId;
+					}
+					else
+					{
+						this._StatisticsId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Statistics");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="")]
+	public partial class SlaveStatistics : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _StatisticsId;
+		
+		private System.Guid _SlaveId;
+		
+		private int _Cores;
+		
+		private int _FreeCores;
+		
+		private double _CpuUtilization;
+		
+		private int _Memory;
+		
+		private int _FreeMemory;
+		
+		private EntityRef<Statistics> _Statistics;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnStatisticsIdChanging(System.Guid value);
+    partial void OnStatisticsIdChanged();
+    partial void OnSlaveIdChanging(System.Guid value);
+    partial void OnSlaveIdChanged();
+    partial void OnCoresChanging(int value);
+    partial void OnCoresChanged();
+    partial void OnFreeCoresChanging(int value);
+    partial void OnFreeCoresChanged();
+    partial void OnCpuUtilizationChanging(double value);
+    partial void OnCpuUtilizationChanged();
+    partial void OnMemoryChanging(int value);
+    partial void OnMemoryChanged();
+    partial void OnFreeMemoryChanging(int value);
+    partial void OnFreeMemoryChanged();
+    #endregion
+		
+		public SlaveStatistics()
+		{
+			this._Statistics = default(EntityRef<Statistics>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StatisticsId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid StatisticsId
+		{
+			get
+			{
+				return this._StatisticsId;
+			}
+			set
+			{
+				if ((this._StatisticsId != value))
+				{
+					if (this._Statistics.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnStatisticsIdChanging(value);
+					this.SendPropertyChanging();
+					this._StatisticsId = value;
+					this.SendPropertyChanged("StatisticsId");
+					this.OnStatisticsIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SlaveId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid SlaveId
+		{
+			get
+			{
+				return this._SlaveId;
+			}
+			set
+			{
+				if ((this._SlaveId != value))
+				{
+					this.OnSlaveIdChanging(value);
+					this.SendPropertyChanging();
+					this._SlaveId = value;
+					this.SendPropertyChanged("SlaveId");
+					this.OnSlaveIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Cores", DbType="Int NOT NULL")]
+		public int Cores
+		{
+			get
+			{
+				return this._Cores;
+			}
+			set
+			{
+				if ((this._Cores != value))
+				{
+					this.OnCoresChanging(value);
+					this.SendPropertyChanging();
+					this._Cores = value;
+					this.SendPropertyChanged("Cores");
+					this.OnCoresChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FreeCores", DbType="Int NOT NULL")]
+		public int FreeCores
+		{
+			get
+			{
+				return this._FreeCores;
+			}
+			set
+			{
+				if ((this._FreeCores != value))
+				{
+					this.OnFreeCoresChanging(value);
+					this.SendPropertyChanging();
+					this._FreeCores = value;
+					this.SendPropertyChanged("FreeCores");
+					this.OnFreeCoresChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CpuUtilization", DbType="float NOT NULL")]
+		public double CpuUtilization
+		{
+			get
+			{
+				return this._CpuUtilization;
+			}
+			set
+			{
+				if ((this._CpuUtilization != value))
+				{
+					this.OnCpuUtilizationChanging(value);
+					this.SendPropertyChanging();
+					this._CpuUtilization = value;
+					this.SendPropertyChanged("CpuUtilization");
+					this.OnCpuUtilizationChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Memory", DbType="Int NOT NULL")]
+		public int Memory
+		{
+			get
+			{
+				return this._Memory;
+			}
+			set
+			{
+				if ((this._Memory != value))
+				{
+					this.OnMemoryChanging(value);
+					this.SendPropertyChanging();
+					this._Memory = value;
+					this.SendPropertyChanged("Memory");
+					this.OnMemoryChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FreeMemory", DbType="Int NOT NULL")]
+		public int FreeMemory
+		{
+			get
+			{
+				return this._FreeMemory;
+			}
+			set
+			{
+				if ((this._FreeMemory != value))
+				{
+					this.OnFreeMemoryChanging(value);
+					this.SendPropertyChanging();
+					this._FreeMemory = value;
+					this.SendPropertyChanged("FreeMemory");
+					this.OnFreeMemoryChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Statistics_SlaveStatistics", Storage="_Statistics", ThisKey="StatisticsId", OtherKey="StatisticsId", IsForeignKey=true)]
+		public Statistics Statistics
+		{
+			get
+			{
+				return this._Statistics.Entity;
+			}
+			set
+			{
+				Statistics previousValue = this._Statistics.Entity;
+				if (((previousValue != value) 
+							|| (this._Statistics.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Statistics.Entity = null;
+						previousValue.SlaveStatistics.Remove(this);
+					}
+					this._Statistics.Entity = value;
+					if ((value != null))
+					{
+						value.SlaveStatistics.Add(this);
+						this._StatisticsId = value.StatisticsId;
+					}
+					else
+					{
+						this._StatisticsId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Statistics");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="")]
+	public partial class Statistics : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _StatisticsId;
+		
+		private System.DateTime _Timestamp;
+		
+		private EntitySet<UserStatistics> _UserStatistics;
+		
+		private EntitySet<SlaveStatistics> _SlaveStatistics;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnStatisticsIdChanging(System.Guid value);
+    partial void OnStatisticsIdChanged();
+    partial void OnTimestampChanging(System.DateTime value);
+    partial void OnTimestampChanged();
+    #endregion
+		
+		public Statistics()
+		{
+			this._UserStatistics = new EntitySet<UserStatistics>(new Action<UserStatistics>(this.attach_UserStatistics), new Action<UserStatistics>(this.detach_UserStatistics));
+			this._SlaveStatistics = new EntitySet<SlaveStatistics>(new Action<SlaveStatistics>(this.attach_SlaveStatistics), new Action<SlaveStatistics>(this.detach_SlaveStatistics));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StatisticsId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid StatisticsId
+		{
+			get
+			{
+				return this._StatisticsId;
+			}
+			set
+			{
+				if ((this._StatisticsId != value))
+				{
+					this.OnStatisticsIdChanging(value);
+					this.SendPropertyChanging();
+					this._StatisticsId = value;
+					this.SendPropertyChanged("StatisticsId");
+					this.OnStatisticsIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Timestamp")]
+		public System.DateTime Timestamp
+		{
+			get
+			{
+				return this._Timestamp;
+			}
+			set
+			{
+				if ((this._Timestamp != value))
+				{
+					this.OnTimestampChanging(value);
+					this.SendPropertyChanging();
+					this._Timestamp = value;
+					this.SendPropertyChanged("Timestamp");
+					this.OnTimestampChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Statistics_UserStatistics", Storage="_UserStatistics", ThisKey="StatisticsId", OtherKey="StatisticsId")]
+		public EntitySet<UserStatistics> UserStatistics
+		{
+			get
+			{
+				return this._UserStatistics;
+			}
+			set
+			{
+				this._UserStatistics.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Statistics_SlaveStatistics", Storage="_SlaveStatistics", ThisKey="StatisticsId", OtherKey="StatisticsId")]
+		public EntitySet<SlaveStatistics> SlaveStatistics
+		{
+			get
+			{
+				return this._SlaveStatistics;
+			}
+			set
+			{
+				this._SlaveStatistics.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_UserStatistics(UserStatistics entity)
+		{
+			this.SendPropertyChanging();
+			entity.Statistics = this;
+		}
+		
+		private void detach_UserStatistics(UserStatistics entity)
+		{
+			this.SendPropertyChanging();
+			entity.Statistics = null;
+		}
+		
+		private void attach_SlaveStatistics(SlaveStatistics entity)
+		{
+			this.SendPropertyChanging();
+			entity.Statistics = this;
+		}
+		
+		private void detach_SlaveStatistics(SlaveStatistics entity)
+		{
+			this.SendPropertyChanging();
+			entity.Statistics = null;
+		}
+	}
+}
+#pragma warning restore 1591
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/ITransactionManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/ITransactionManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/ITransactionManager.cs	(revision 7085)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  public interface ITransactionManager {
+    void UseTransaction(Action call, bool serializable = false, bool longRunning = false);
+    T UseTransaction<T>(Func<T> call, bool serializable = false, bool longRunning = false);
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Interfaces/IHiveDao.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Interfaces/IHiveDao.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Interfaces/IHiveDao.cs	(revision 7085)
@@ -0,0 +1,149 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using HeuristicLab.Services.Hive.Common.DataTransfer;
+using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  public interface IHiveDao {
+    #region Job Methods
+    DT.Job GetJob(Guid id);
+    IEnumerable<DT.Job> GetJobs(Expression<Func<Job, bool>> predicate);
+    Guid AddJob(DT.Job dto);
+    void UpdateJob(DT.Job dto);
+    void DeleteJob(Guid id);
+    IEnumerable<DT.Job> GetWaitingJobs(DT.Slave slave, int count);
+    IEnumerable<DT.Job> GetParentJobs(IEnumerable<Guid> resourceIds, int count, bool finished);
+    DT.Job UpdateJobState(Guid jobId, JobState jobState, Guid? slaveId, Guid? userId, string exception);
+    #endregion
+
+    #region JobData Methods
+    DT.JobData GetJobData(Guid id);
+    IEnumerable<DT.JobData> GetJobDatas(Expression<Func<JobData, bool>> predicate);
+    Guid AddJobData(DT.JobData dto);
+    void UpdateJobData(DT.JobData dto);
+    void DeleteJobData(Guid id);
+    #endregion
+
+    #region StateLog Methods
+    DT.StateLog GetStateLog(Guid id);
+    IEnumerable<DT.StateLog> GetStateLogs(Expression<Func<StateLog, bool>> predicate);
+    Guid AddStateLog(DT.StateLog dto);
+    void UpdateStateLog(DT.StateLog dto);
+    void DeleteStateLog(Guid id);
+    #endregion
+
+    #region HiveExperiment Methods
+    DT.HiveExperiment GetHiveExperiment(Guid id);
+    IEnumerable<DT.HiveExperiment> GetHiveExperiments(Expression<Func<HiveExperiment, bool>> predicate);
+    Guid AddHiveExperiment(DT.HiveExperiment dto);
+    void UpdateHiveExperiment(DT.HiveExperiment dto);
+    void DeleteHiveExperiment(Guid id);
+    #endregion
+
+    #region HiveExperimentPermission Methods
+    DT.HiveExperimentPermission GetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId);
+    IEnumerable<DT.HiveExperimentPermission> GetHiveExperimentPermissions(Expression<Func<HiveExperimentPermission, bool>> predicate);
+    void AddHiveExperimentPermission(DT.HiveExperimentPermission dto);
+    void UpdateHiveExperimentPermission(DT.HiveExperimentPermission dto);
+    void DeleteHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId);
+    void SetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedByUserId, Guid grantedUserId, Permission permission);
+    #endregion
+
+    #region Plugin Methods
+    DT.Plugin GetPlugin(Guid id);
+    IEnumerable<DT.Plugin> GetPlugins(Expression<Func<Plugin, bool>> predicate);
+    Guid AddPlugin(DT.Plugin dto);
+    void UpdatePlugin(DT.Plugin dto);
+    void DeletePlugin(Guid id);
+    #endregion
+
+    #region PluginData Methods
+    DT.PluginData GetPluginData(Guid id);
+    IEnumerable<DT.PluginData> GetPluginDatas(Expression<Func<PluginData, bool>> predicate);
+    Guid AddPluginData(DT.PluginData dto);
+    void UpdatePluginData(DT.PluginData dto);
+    void DeletePluginData(Guid id);
+    #endregion
+
+    #region Calendar Methods
+    #endregion
+
+    #region Slave Methods
+    DT.Slave GetSlave(Guid id);
+    IEnumerable<DT.Slave> GetSlaves(Expression<Func<Slave, bool>> predicate);
+    Guid AddSlave(DT.Slave dto);
+    void UpdateSlave(DT.Slave dto);
+    void DeleteSlave(Guid id);
+    #endregion
+
+    #region SlaveGroup Methods
+    DT.SlaveGroup GetSlaveGroup(Guid id);
+    IEnumerable<DT.SlaveGroup> GetSlaveGroups(Expression<Func<SlaveGroup, bool>> predicate);
+    Guid AddSlaveGroup(DT.SlaveGroup dto);
+    void UpdateSlaveGroup(DT.SlaveGroup dto);
+    void DeleteSlaveGroup(Guid id);
+    #endregion
+
+    #region Resource Methods
+    DT.Resource GetResource(Guid id);
+    IEnumerable<DT.Resource> GetResources(Expression<Func<Resource, bool>> predicate);
+    Guid AddResource(DT.Resource dto);
+    void UpdateResource(DT.Resource dto);
+    void DeleteResource(Guid id);
+    void AssignJobToResource(Guid jobId, Guid resourceId);
+    IEnumerable<DT.Resource> GetAssignedResources(Guid jobId);
+    IEnumerable<DT.Resource> GetParentResources(Guid resourceId);
+    IEnumerable<DT.Resource> GetChildResources(Guid resourceId);
+    IEnumerable<DT.Job> GetJobsByResourceId(Guid resourceId);
+    #endregion
+
+    #region Authorization Methods
+    Permission GetPermissionForJob(Guid jobId, Guid userId);
+    Permission GetPermissionForExperiment(Guid experimentId, Guid userId);
+    Guid GetExperimentForJob(Guid jobId);
+    #endregion
+
+    #region Lifecycle Methods
+    DateTime GetLastCleanup();
+    void SetLastCleanup(DateTime datetime);
+    #endregion
+
+    #region Downtime Methods
+    DT.Downtime GetDowntime(Guid id);
+    IEnumerable<DT.Downtime> GetDowntimes(Expression<Func<Downtime, bool>> predicate);
+    Guid AddDowntime(DT.Downtime dto);
+    void UpdateDowntime(DT.Downtime dto);
+    void DeleteDowntime(Guid id);
+    #endregion
+
+    #region Statistics Methods
+    DT.Statistics GetStatistic(Guid id);
+    IEnumerable<DT.Statistics> GetStatistics(Expression<Func<Statistics, bool>> predicate);
+    Guid AddStatistics(DT.Statistics dto);
+    void DeleteStatistics(Guid id);
+    List<DT.UserStatistics> GetUserStatistics();
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Logger.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Logger.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Logger.cs	(revision 7085)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Diagnostics;
+using System.Security;
+using System.Threading;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  public class LogFactory {
+    public static ILogger GetLogger(string source) {
+      return new Logger(Settings.Default.EventLogName, source);
+    }
+  }
+
+  public interface ILogger {
+    void Log(string message);
+    void Error(Exception e);
+  }
+
+  internal class Logger : ILogger {
+    private EventLog log;
+
+    /// <summary>
+    /// Creating an EventSource requires certain permissions, which by default a IIS AppPool user does not have.
+    /// In this case just ignore security exceptions.
+    /// In order to make this work, the eventsource needs to be created manually
+    /// </summary>
+    public Logger(string name, string source) {
+      try {
+        if (!EventLog.SourceExists(source)) {
+          EventLog.CreateEventSource(source, name);
+        }
+        log = new EventLog(name);
+        log.Source = source;
+      }
+      catch (SecurityException) { }
+    }
+
+    public void Log(string message) {
+      try {
+        if (log != null) {
+          log.WriteEntry(string.Format("{0} (AppDomain: {1}, Thread: {2})", message, AppDomain.CurrentDomain.Id, Thread.CurrentThread.ManagedThreadId), EventLogEntryType.Information);
+        }
+      }
+      catch (SecurityException) { }
+    }
+
+    public void Error(Exception e) {
+      try {
+        if (log != null) {
+          log.WriteEntry(string.Format("{0} (AppDomain: {1}, Thread: {2})", e.Message, AppDomain.CurrentDomain.Id, Thread.CurrentThread.ManagedThreadId), EventLogEntryType.Error);
+        }
+      }
+      catch (SecurityException) { }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  [Plugin("HeuristicLab.Services.Hive.DataAccess", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Services.Hive.DataAccess-3.3.dll", PluginFileType.Assembly)]  
+  public class HeuristicLabServicesHiveDataAccessPlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Services.Hive.Server.DataAccess")]
+[assembly: AssemblyDescription("Data access layer for HeuristicLab.Hive database")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("38842322-b8e5-47aa-8e86-4a6bdd96d53e")]
+
+// 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("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Properties/Settings.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Properties/Settings.Designer.cs	(revision 7085)
@@ -0,0 +1,37 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Services.Hive.DataAccess.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.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;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
+        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.4;Integrated Security=T" +
+            "rue;")]
+        public string HeuristicLab_Hive_LinqConnectionString {
+            get {
+                return ((string)(this["HeuristicLab_Hive_LinqConnectionString"]));
+            }
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Properties/Settings.settings
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Properties/Settings.settings	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Properties/Settings.settings	(revision 7085)
@@ -0,0 +1,14 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Services.Hive.DataAccess.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="HeuristicLab_Hive_LinqConnectionString" Type="(Connection string)" Scope="Application">
+      <DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
+&lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
+  &lt;ConnectionString&gt;Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.4;Integrated Security=True;&lt;/ConnectionString&gt;
+  &lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
+&lt;/SerializableConnectionString&gt;</DesignTimeValue>
+      <Value Profile="(Default)">Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.4;Integrated Security=True;</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Initialize Hive Database.sql
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Initialize Hive Database.sql	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Initialize Hive Database.sql	(revision 7085)
@@ -0,0 +1,176 @@
+﻿USE [HeuristicLab.Hive-3.3]
+/* create and initialize hive database tables */
+
+SET ARITHABORT ON
+CREATE TABLE [dbo].[AssignedResources](
+  [ResourceId] UniqueIdentifier NOT NULL,
+  [TaskId] UniqueIdentifier NOT NULL,   
+  CONSTRAINT [PK_dbo.ResourceIdTaskId] PRIMARY KEY ([ResourceId], [TaskId])
+  )
+CREATE TABLE [dbo].[Plugin](
+  [PluginId] UniqueIdentifier NOT NULL, 
+  [Name] VarChar(MAX), 
+  [Version] VarChar(MAX), 
+  [UserId] UniqueIdentifier, 
+  [DateCreated] DateTime, 
+  [Hash] VarBinary(20), 
+  CONSTRAINT [PK_dbo.Plugin] PRIMARY KEY ([PluginId])
+  )
+CREATE TABLE [dbo].[RequiredPlugins](
+  [RequiredPluginId] UniqueIdentifier NOT NULL, 
+  [TaskId] UniqueIdentifier NOT NULL, 
+  [PluginId] UniqueIdentifier NOT NULL, 
+  CONSTRAINT [PK_dbo.RequiredPlugins] PRIMARY KEY ([RequiredPluginId])
+  )
+CREATE TABLE [dbo].[Resource](
+  [ResourceId] UniqueIdentifier NOT NULL, 
+  [Name] VarChar(MAX), 
+  [ResourceType] NVarChar(4000) NOT NULL, 
+  [ParentResourceId] UniqueIdentifier, 
+  [CpuSpeed] Int, 
+  [Memory] Int, 
+  [Login] DateTime, 
+  [SlaveState] VarChar(15), 
+  [Cores] Int, 
+  [FreeCores] Int, 
+  [FreeMemory] Int, 
+  [IsAllowedToCalculate] Bit, 
+  [CpuArchitecture] VarChar(3), 
+  [OperatingSystem] VarChar(MAX), 
+  [LastHeartbeat] DateTime, 
+  [CpuUtilization] float, 
+  [HbInterval] int,
+  CONSTRAINT [PK_dbo.Resource] PRIMARY KEY ([ResourceId])
+  )
+CREATE TABLE [dbo].[Task](
+  [TaskId] UniqueIdentifier NOT NULL, 
+  [TaskState] VarChar(30), 
+  [ExecutionTimeMs] float, 
+  [LastHeartbeat] DateTime, 
+  [ParentTaskId] UniqueIdentifier, 
+  [Priority] Int NOT NULL, 
+  [CoresNeeded] Int NOT NULL, 
+  [MemoryNeeded] Int NOT NULL, 
+  [IsParentTask] Bit, 
+  [FinishWhenChildJobsFinished] Bit, 
+  [Command] VarChar(30), 
+  [JobId] UniqueIdentifier NOT NULL, 
+  [IsPrivileged] Bit, 
+  CONSTRAINT [PK_dbo.Task] PRIMARY KEY ([TaskId])
+  )
+CREATE TABLE [dbo].[Downtime](
+  [DowntimeId] UniqueIdentifier, 
+  [ResourceId] UniqueIdentifier, 
+  [StartDate] DateTime, 
+  [EndDate] DateTime, 
+  [AllDayEvent] Bit, 
+  [Recurring] Bit, 
+  [RecurringId] UniqueIdentifier, 
+  CONSTRAINT [PK_dbo.Downtime] PRIMARY KEY ([DowntimeId])
+  )
+CREATE TABLE [dbo].[Job](
+  [JobId] UniqueIdentifier NOT NULL, 
+  [Name] VarChar(MAX), 
+  [Description] VarChar(MAX), 
+  [ResourceIds] VarChar(MAX), 
+  [OwnerUserId] UniqueIdentifier, 
+  [DateCreated] DateTime,   
+  CONSTRAINT [PK_dbo.Job] PRIMARY KEY ([JobId])
+  )
+CREATE TABLE [dbo].[TaskData](
+  [TaskId] UniqueIdentifier NOT NULL, 
+  [Data] VarBinary(MAX), 
+  [LastUpdate] DateTime, 
+  CONSTRAINT [PK_dbo.TaskData] PRIMARY KEY ([TaskId])
+  )
+CREATE TABLE [dbo].[PluginData](
+  [PluginDataId] UniqueIdentifier NOT NULL, 
+  [PluginId] UniqueIdentifier NOT NULL, 
+  [Data] VarBinary(MAX) NOT NULL, 
+  [FileName] VarChar(MAX), 
+  CONSTRAINT [PK_dbo.PluginData] PRIMARY KEY ([PluginDataId])
+  )
+CREATE TABLE [dbo].[StateLog](
+  [StateLogId] UniqueIdentifier NOT NULL, 
+  [State] VarChar(30) NOT NULL, 
+  [DateTime] DateTime NOT NULL, 
+  [TaskId] UniqueIdentifier NOT NULL, 
+  [UserId] UniqueIdentifier, 
+  [SlaveId] UniqueIdentifier, 
+  [Exception] VarChar(MAX), 
+  CONSTRAINT [PK_dbo.StateLog] PRIMARY KEY ([StateLogId])
+  )
+CREATE TABLE [dbo].[JobPermission](
+  [JobId] UniqueIdentifier NOT NULL, 
+  [GrantedUserId] UniqueIdentifier NOT NULL, 
+  [GrantedByUserId] UniqueIdentifier NOT NULL, 
+  [Permission] VarChar(15) NOT NULL, 
+  CONSTRAINT [PK_dbo.JobPermission] PRIMARY KEY ([JobId], [GrantedUserId])
+  )
+CREATE TABLE [Lifecycle](
+  [LifecycleId] Int, 
+  [LastCleanup] DateTime, 
+  CONSTRAINT [PK_Lifecycle] PRIMARY KEY ([LifecycleId])
+  )
+CREATE TABLE [DeletedJobStatistics](
+  [UserId] UniqueIdentifier NOT NULL, 
+  [ExecutionTimeS] float NOT NULL, 
+  [ExecutionTimeSFinishedJobs] float NOT NULL, 
+  [StartToEndTimeS] float NOT NULL, 
+  [DeletedJobStatisticsId] UniqueIdentifier NOT NULL, 
+  CONSTRAINT [PK_DeletedJobStatistics] PRIMARY KEY ([DeletedJobStatisticsId])
+  )
+CREATE TABLE [UserStatistics](
+  [StatisticsId] UniqueIdentifier NOT NULL, 
+  [UserId] UniqueIdentifier NOT NULL, 
+  [ExecutionTimeMs] float NOT NULL, 
+  [UsedCores] Int NOT NULL, 
+  [ExecutionTimeMsFinishedJobs] float NOT NULL, 
+  [StartToEndTimeMs] float NOT NULL, 
+  CONSTRAINT [PK_UserStatistics] PRIMARY KEY ([StatisticsId], [UserId])
+  )
+CREATE TABLE [SlaveStatistics](
+  [StatisticsId] UniqueIdentifier NOT NULL, 
+  [SlaveId] UniqueIdentifier NOT NULL, 
+  [Cores] Int NOT NULL, 
+  [FreeCores] Int NOT NULL, 
+  [CpuUtilization] float NOT NULL, 
+  [Memory] Int NOT NULL, 
+  [FreeMemory] Int NOT NULL, 
+  CONSTRAINT [PK_SlaveStatistics] PRIMARY KEY ([StatisticsId], [SlaveId])
+  )
+CREATE TABLE [Statistics](
+  [StatisticsId] UniqueIdentifier NOT NULL, 
+  [Timestamp] DateTime NOT NULL, 
+  CONSTRAINT [PK_Statistics] PRIMARY KEY ([StatisticsId])
+  )
+ALTER TABLE [dbo].[AssignedResources]
+  ADD CONSTRAINT [Resource_AssignedResource] FOREIGN KEY ([ResourceId]) REFERENCES [dbo].[Resource]([ResourceId])
+ALTER TABLE [dbo].[AssignedResources]
+  ADD CONSTRAINT [Task_AssignedResource] FOREIGN KEY ([TaskId]) REFERENCES [dbo].[Task]([TaskId])
+ALTER TABLE [dbo].[RequiredPlugins]
+  ADD CONSTRAINT [Plugin_RequiredPlugin] FOREIGN KEY ([PluginId]) REFERENCES [dbo].[Plugin]([PluginId])
+ALTER TABLE [dbo].[RequiredPlugins]
+  ADD CONSTRAINT [Task_RequiredPlugin] FOREIGN KEY ([TaskId]) REFERENCES [dbo].[Task]([TaskId])
+ALTER TABLE [dbo].[Resource]
+  ADD CONSTRAINT [Resource_Resource] FOREIGN KEY ([ParentResourceId]) REFERENCES [dbo].[Resource]([ResourceId])
+ALTER TABLE [dbo].[Task]
+  ADD CONSTRAINT [Task_Task] FOREIGN KEY ([ParentTaskId]) REFERENCES [dbo].[Task]([TaskId])
+ALTER TABLE [dbo].[Task]
+  ADD CONSTRAINT [Job_Job] FOREIGN KEY ([JobId]) REFERENCES [dbo].[Job]([JobId])
+ALTER TABLE [dbo].[Downtime]
+  ADD CONSTRAINT [Resource_Downtime] FOREIGN KEY ([ResourceId]) REFERENCES [dbo].[Resource]([ResourceId])
+ALTER TABLE [dbo].[TaskData]
+  ADD CONSTRAINT [Task_TaskData] FOREIGN KEY ([TaskId]) REFERENCES [dbo].[Task]([TaskId])
+ALTER TABLE [dbo].[PluginData]
+  ADD CONSTRAINT [Plugin_PluginData] FOREIGN KEY ([PluginId]) REFERENCES [dbo].[Plugin]([PluginId])
+ALTER TABLE [dbo].[StateLog]
+  ADD CONSTRAINT [Task_StateLog] FOREIGN KEY ([TaskId]) REFERENCES [dbo].[Task]([TaskId])
+ALTER TABLE [dbo].[StateLog]
+  ADD CONSTRAINT [Resource_StateLog] FOREIGN KEY ([SlaveId]) REFERENCES [dbo].[Resource]([ResourceId])
+ALTER TABLE [dbo].[JobPermission]
+  ADD CONSTRAINT [Job_JobPermission] FOREIGN KEY ([JobId]) REFERENCES [dbo].[Job]([JobId])
+ALTER TABLE [UserStatistics]
+  ADD CONSTRAINT [Statistics_UserStatistics] FOREIGN KEY ([StatisticsId]) REFERENCES [Statistics]([StatisticsId])
+ALTER TABLE [SlaveStatistics]
+  ADD CONSTRAINT [Statistics_SlaveStatistics] FOREIGN KEY ([StatisticsId]) REFERENCES [Statistics]([StatisticsId])
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Prepare Hive Database.sql
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Prepare Hive Database.sql	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Prepare Hive Database.sql	(revision 7085)
@@ -0,0 +1,248 @@
+USE [HeuristicLab.Hive-3.3]
+/* this script is supposed to be executed after the plain DB is generated by the linq-to-sql schema */
+/* adds default values */
+/* creates delete and update cascades */
+/* creates indices */
+/* creates views */
+/* creates triggers */
+
+
+ALTER TABLE [dbo].[AssignedResources]  DROP  CONSTRAINT [Task_AssignedResource]
+ALTER TABLE [dbo].[AssignedResources]  WITH CHECK ADD  CONSTRAINT [Task_AssignedResource] FOREIGN KEY([TaskId])
+REFERENCES [dbo].[Task] ([TaskId])
+ON UPDATE CASCADE
+ON DELETE CASCADE
+GO
+ALTER TABLE [dbo].[AssignedResources]  DROP  CONSTRAINT [Resource_AssignedResource]
+ALTER TABLE [dbo].[AssignedResources]  WITH CHECK ADD  CONSTRAINT [Resource_AssignedResource] FOREIGN KEY([ResourceId])
+REFERENCES [dbo].[Resource] ([ResourceId])
+ON UPDATE CASCADE
+ON DELETE CASCADE
+GO
+
+ALTER TABLE dbo.Task ALTER COLUMN TaskId ADD ROWGUIDCOL;
+ALTER TABLE dbo.Task WITH NOCHECK ADD CONSTRAINT [DF_Task_TaskId] DEFAULT (NEWSEQUENTIALID()) FOR TaskId;
+GO
+
+ALTER TABLE [dbo].[StateLog]  DROP  CONSTRAINT [Task_StateLog]
+ALTER TABLE [dbo].[StateLog]  WITH CHECK ADD CONSTRAINT [Task_StateLog] FOREIGN KEY([TaskId])
+REFERENCES [dbo].[Task] ([TaskId])
+ON UPDATE CASCADE
+ON DELETE CASCADE
+GO
+ALTER TABLE [dbo].[StateLog]  DROP  CONSTRAINT [Resource_StateLog]
+ALTER TABLE [dbo].[StateLog]  WITH CHECK ADD CONSTRAINT [Resource_StateLog] FOREIGN KEY([SlaveId])
+REFERENCES [dbo].[Resource] ([ResourceId])
+ON UPDATE CASCADE
+ON DELETE SET NULL
+GO
+
+ALTER TABLE dbo.Plugin ALTER COLUMN PluginId ADD ROWGUIDCOL;
+ALTER TABLE dbo.Plugin WITH NOCHECK ADD CONSTRAINT [DF_Plugin_PluginId] DEFAULT (NEWSEQUENTIALID()) FOR PluginId;
+
+ALTER TABLE dbo.PluginData ALTER COLUMN PluginDataId ADD ROWGUIDCOL;
+ALTER TABLE dbo.PluginData WITH NOCHECK ADD CONSTRAINT [DF_PluginData_PluginDataId] DEFAULT (NEWSEQUENTIALID()) FOR PluginDataId;
+
+ALTER TABLE [dbo].[PluginData]  DROP  CONSTRAINT [Plugin_PluginData]
+ALTER TABLE [dbo].[PluginData]  WITH CHECK ADD  CONSTRAINT [Plugin_PluginData] FOREIGN KEY([PluginId])
+REFERENCES [dbo].[Plugin] ([PluginId])
+ON UPDATE CASCADE
+ON DELETE CASCADE
+GO
+
+ALTER TABLE dbo.RequiredPlugins ALTER COLUMN RequiredPluginId ADD ROWGUIDCOL;
+ALTER TABLE dbo.RequiredPlugins WITH NOCHECK ADD CONSTRAINT [DF_RequiredPlugins_RequiredPluginId] DEFAULT (NEWSEQUENTIALID()) FOR RequiredPluginId;
+
+ALTER TABLE [dbo].[RequiredPlugins]  DROP  CONSTRAINT [Task_RequiredPlugin]
+ALTER TABLE [dbo].[RequiredPlugins]  WITH CHECK ADD  CONSTRAINT [Task_RequiredPlugin] FOREIGN KEY([TaskId])
+REFERENCES [dbo].[Task] ([TaskId])
+ON UPDATE CASCADE
+ON DELETE CASCADE
+GO
+
+ALTER TABLE [dbo].[RequiredPlugins]  DROP  CONSTRAINT [Plugin_RequiredPlugin]
+ALTER TABLE [dbo].[RequiredPlugins]  WITH CHECK ADD  CONSTRAINT [Plugin_RequiredPlugin] FOREIGN KEY([PluginId])
+REFERENCES [dbo].[Plugin] ([PluginId])
+ON UPDATE CASCADE
+ON DELETE CASCADE
+GO
+
+ALTER TABLE dbo.Resource ALTER COLUMN ResourceId ADD ROWGUIDCOL;
+ALTER TABLE dbo.Resource WITH NOCHECK ADD CONSTRAINT [DF_Resource_ResourceId] DEFAULT (NEWSEQUENTIALID()) FOR ResourceId;
+
+ALTER TABLE dbo.Downtime ALTER COLUMN DowntimeId ADD ROWGUIDCOL;
+ALTER TABLE dbo.Downtime WITH NOCHECK ADD CONSTRAINT [DF_Downtime_DowntimeId] DEFAULT (NEWSEQUENTIALID()) FOR DowntimeId;
+
+ALTER TABLE dbo.Job ALTER COLUMN JobId ADD ROWGUIDCOL;
+ALTER TABLE dbo.Job WITH NOCHECK ADD CONSTRAINT [DF_Job_JobId] DEFAULT (NEWSEQUENTIALID()) FOR JobId;
+
+ALTER TABLE dbo.StateLog ALTER COLUMN StateLogId ADD ROWGUIDCOL;
+ALTER TABLE dbo.StateLog WITH NOCHECK ADD CONSTRAINT [DF_StateLog_StateLogId] DEFAULT (NEWSEQUENTIALID()) FOR StateLogId;
+
+ALTER TABLE [dbo].[JobPermission]  DROP  CONSTRAINT [Job_JobPermission]
+ALTER TABLE [dbo].[JobPermission]  WITH CHECK ADD CONSTRAINT [Job_JobPermission] FOREIGN KEY([JobId])
+REFERENCES [dbo].[Job] ([JobId])
+ON UPDATE CASCADE
+ON DELETE CASCADE
+GO
+
+ALTER TABLE [dbo].[Statistics] ALTER COLUMN StatisticsId ADD ROWGUIDCOL;
+ALTER TABLE [dbo].[Statistics] WITH NOCHECK ADD CONSTRAINT [DF_Statistics_StatisticsId] DEFAULT (NEWSEQUENTIALID()) FOR StatisticsId;
+GO
+
+ALTER TABLE [dbo].[DeletedJobStatistics] ALTER COLUMN DeletedJobStatisticsId ADD ROWGUIDCOL;
+ALTER TABLE [dbo].[DeletedJobStatistics] WITH NOCHECK ADD CONSTRAINT [DF_DeletedJobStatistics_DeletedJobStatisticsId] DEFAULT (NEWSEQUENTIALID()) FOR DeletedJobStatisticsId;
+GO
+
+ALTER TABLE [dbo].[SlaveStatistics]  DROP  CONSTRAINT [Statistics_SlaveStatistics]
+ALTER TABLE [dbo].[SlaveStatistics]  WITH CHECK ADD  CONSTRAINT [Statistics_SlaveStatistics] FOREIGN KEY([StatisticsId])
+REFERENCES [dbo].[Statistics] ([StatisticsId])
+ON UPDATE CASCADE
+ON DELETE CASCADE
+GO
+
+ALTER TABLE [dbo].[UserStatistics]  DROP  CONSTRAINT [Statistics_UserStatistics]
+ALTER TABLE [dbo].[UserStatistics]  WITH CHECK ADD  CONSTRAINT [Statistics_UserStatistics] FOREIGN KEY([StatisticsId])
+REFERENCES [dbo].[Statistics] ([StatisticsId])
+ON UPDATE CASCADE
+ON DELETE CASCADE
+GO
+
+/* create indices */
+CREATE INDEX Index_RequiredPlugins_TaskId ON RequiredPlugins(TaskId);
+GO
+
+/* views */
+-- =============================================
+-- Author:		cneumuel
+-- Description:	Returns the first StateLog entry for each job
+-- =============================================
+CREATE VIEW [dbo].[view_FirstState]
+AS
+SELECT     sl.TaskId, sl.DateTime, sl.State
+FROM         dbo.StateLog AS sl INNER JOIN
+                          (SELECT     TaskId, MIN(DateTime) AS DateTime
+                            FROM          dbo.StateLog
+                            GROUP BY TaskId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.TaskId = minDate.TaskId
+
+GO
+
+-- =============================================
+-- Author:		cneumuel
+-- Description:	Returns the last StateLog entry for each job
+-- =============================================
+CREATE VIEW [dbo].[view_LastState]
+AS
+SELECT     sl.TaskId, sl.DateTime, sl.State
+FROM         dbo.StateLog AS sl INNER JOIN
+                          (SELECT     TaskId, MAX(DateTime) AS DateTime
+                            FROM          dbo.StateLog
+                            GROUP BY TaskId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.TaskId = minDate.TaskId
+GO
+
+-- =============================================
+-- Author:		cneumuel
+-- Description:	returns aggregates statistic information for every minute
+-- =============================================
+CREATE VIEW [dbo].[view_Statistics]
+AS
+SELECT  CONVERT(VARCHAR(19), MIN(s.Timestamp), 120) AS DateTime, SUM(ss.Cores) AS Cores, SUM(ss.FreeCores) AS FreeCores, 
+        AVG(ss.CpuUtilization) AS CpuUtilization, SUM(ss.Memory) AS Memory, SUM(ss.FreeMemory) AS FreeMemory, x.exSum AS ExecutionTimeHours, 
+        x.exFinishedSum AS ExecutionTimeFinished, x.exStartToEndSum AS StartToEndTimeFinished
+FROM         dbo.SlaveStatistics AS ss INNER JOIN
+                      dbo.[Statistics] AS s ON ss.StatisticsId = s.StatisticsId INNER JOIN
+                      dbo.Resource AS r ON ss.SlaveId = r.ResourceId INNER JOIN
+                          (SELECT     StatisticsId, SUM(ExecutionTimeMs) / 1000 / 60 / 60 AS exSum, SUM(ExecutionTimeMsFinishedJobs) / 1000 / 60 / 60 AS exFinishedSum, 
+                                                   SUM(StartToEndTimeMs) / 1000 / 60 / 60 AS exStartToEndSum
+                            FROM          dbo.UserStatistics AS us
+                            GROUP BY StatisticsId) AS x ON s.StatisticsId = x.StatisticsId
+GROUP BY s.StatisticsId, x.exSum, x.exFinishedSum, x.exStartToEndSum
+
+/* triggers */
+GO
+/****** Object:  Trigger [dbo].[tr_JobDeleteCascade]    Script Date: 04/19/2011 16:31:53 ******/
+SET ANSI_NULLS ON
+GO
+SET QUOTED_IDENTIFIER ON
+GO
+-- =============================================
+-- Author:		cneumuel
+-- Create date: 19.04.2011
+-- Description:	(1) Writes the execution times of deleted jobs into DeletedJobStats to ensure correct statistics
+--				(2) Deletes all associated jobs. This cannot be done with cascading delete, 
+--              because the job table defines a INSTEAD OF DELETE trigger itself, which
+--              is not compatible with cascading deletes.
+-- =============================================
+CREATE TRIGGER [dbo].[tr_JobDeleteCascade] ON [dbo].[Job] INSTEAD OF DELETE AS 
+BEGIN
+	DELETE Task FROM deleted, Task WHERE deleted.JobId = Task.JobId
+	DELETE Job FROM deleted, Job WHERE deleted.JobId = Job.JobId
+END
+GO
+
+-- =============================================
+-- Author:		cneumuel
+-- Create date: 11.11.2010
+-- Description:	Recursively deletes all child-jobs of a job when it is deleted. (Source: http://devio.wordpress.com/2008/05/23/recursive-delete-in-sql-server/)
+-- =============================================
+CREATE TRIGGER [dbo].[tr_TaskDeleteCascade] ON [dbo].[Task] INSTEAD OF DELETE AS 
+BEGIN
+	-- add statistics
+	INSERT INTO dbo.DeletedJobStatistics (UserId, ExecutionTimeS, ExecutionTimeSFinishedJobs, StartToEndTimeS)
+	SELECT 
+		he.OwnerUserId AS UserId, 
+		ROUND(SUM(j.ExecutionTimeMs) / 1000, 0) AS ExecutionTimeS,  
+		ROUND(ISNULL(SUM(CASE ls.State WHEN 'Finished' THEN j.ExecutionTimeMs END), 0) / 1000, 0) AS ExecutionTimeSFinishedJobs,
+		ISNULL(SUM(CASE ls.State WHEN 'Finished' THEN DATEDIFF(s, fs.DateTime, ls.DateTime) ELSE 0 END), 0) AS StartToEndTimeS
+	FROM 
+		deleted j, 
+		Job he, 
+		view_FirstState fs, 
+		view_LastState ls
+	WHERE 
+		he.JobId = j.JobId AND 
+		fs.TaskId = j.TaskId AND 
+		ls.TaskId = j.TaskId
+	GROUP BY he.OwnerUserId
+
+	-- recursively delete jobs
+	CREATE TABLE #Table( 
+		TaskId uniqueidentifier 
+	)
+	INSERT INTO #Table (TaskId)
+	SELECT TaskId FROM deleted
+	
+	DECLARE @c INT
+	SET @c = 0
+	
+	WHILE @c <> (SELECT COUNT(TaskId) FROM #Table) BEGIN
+		SELECT @c = COUNT(TaskId) FROM #Table
+		
+		INSERT INTO #Table (TaskId)
+			SELECT Task.TaskId
+			FROM Task
+			LEFT OUTER JOIN #Table ON Task.TaskId = #Table.TaskId
+			WHERE Task.ParentTaskId IN (SELECT TaskId FROM #Table)
+				AND #Table.TaskId IS NULL
+	END
+	
+	DELETE TaskData FROM TaskData INNER JOIN #Table ON TaskData.TaskId = #Table.TaskId
+	DELETE Task FROM Task INNER JOIN #Table ON Task.TaskId = #Table.TaskId
+END
+GO
+
+-- ============================================================
+-- Description:	Create indices to speed up execution of queries
+-- ============================================================
+
+-- speed up joins between Job and Task
+CREATE NONCLUSTERED INDEX [TaskJobIdIndex]
+ON [dbo].[Task] ([JobId])
+INCLUDE ([TaskId],[TaskState],[ExecutionTimeMs],[LastHeartbeat],[ParentTaskId],[Priority],[CoresNeeded],[MemoryNeeded],[IsParentTask],[FinishWhenChildJobsFinished],[Command],[IsPrivileged])
+GO
+
+-- this is an index to speed up the GetWaitingTasks() method 
+CREATE NONCLUSTERED INDEX [TaskGetWaitingTasksIndex]
+ON [dbo].[Task] ([TaskState],[IsParentTask],[FinishWhenChildJobsFinished],[CoresNeeded],[MemoryNeeded])
+INCLUDE ([TaskId],[ExecutionTimeMs],[LastHeartbeat],[ParentTaskId],[Priority],[Command],[JobId],[IsPrivileged])
+GO
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Settings.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Settings.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Settings.Designer.cs	(revision 7085)
@@ -0,0 +1,55 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.235
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    public 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;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
+        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.3;Integrated Security=T" +
+            "rue;")]
+        public string HeuristicLab_Hive_LinqConnectionString {
+            get {
+                return ((string)(this["HeuristicLab_Hive_LinqConnectionString"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:05:00")]
+        public global::System.TimeSpan LongRunningDatabaseCommandTimeout {
+            get {
+                return ((global::System.TimeSpan)(this["LongRunningDatabaseCommandTimeout"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("HL.Hive")]
+        public string EventLogName {
+            get {
+                return ((string)(this["EventLogName"]));
+            }
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Settings.settings
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Settings.settings	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/Settings.settings	(revision 7085)
@@ -0,0 +1,20 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Services.Hive.DataAccess" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="HeuristicLab_Hive_LinqConnectionString" Type="(Connection string)" Scope="Application">
+      <DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
+&lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
+  &lt;ConnectionString&gt;Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.3;Integrated Security=True;&lt;/ConnectionString&gt;
+  &lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
+&lt;/SerializableConnectionString&gt;</DesignTimeValue>
+      <Value Profile="(Default)">Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.3;Integrated Security=True;</Value>
+    </Setting>
+    <Setting Name="LongRunningDatabaseCommandTimeout" Type="System.TimeSpan" Scope="Application">
+      <Value Profile="(Default)">00:05:00</Value>
+    </Setting>
+    <Setting Name="EventLogName" Type="System.String" Scope="Application">
+      <Value Profile="(Default)">HL.Hive</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/TransactionManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/TransactionManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/TransactionManager.cs	(revision 7085)
@@ -0,0 +1,83 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Transactions;
+using HeuristicLab.Services.Hive.DataAccess;
+
+namespace HeuristicLab.Services.Hive.DataAccess {  
+  public class TransactionManager : ITransactionManager {    
+    public void UseTransaction(Action call, bool serializable = false, bool longRunning = false) {
+      int n = 10;
+      while (n > 0) {
+        TransactionScope transaction = CreateTransaction(serializable, longRunning);
+        try {
+          call();
+          transaction.Complete();
+          n = 0;
+        }
+        catch (System.Data.SqlClient.SqlException e) {
+          n--; // probably deadlock situation, let it roll back and repeat the transaction n times
+          LogFactory.GetLogger(typeof(TransactionManager).Namespace).Log(string.Format("Exception occured, repeating transaction {0} more times. Details: {1}", n, e.ToString()));          
+          if (n <= 0) throw;
+        }
+        finally {
+          transaction.Dispose();
+        }
+      }
+    }
+
+    public T UseTransaction<T>(Func<T> call, bool serializable = false, bool longRunning = false) {
+      int n = 10;
+      while (n > 0) {
+        TransactionScope transaction = CreateTransaction(serializable, longRunning);
+        try {
+          T result = call();
+          transaction.Complete();
+          n = 0;
+          return result;
+        }
+        catch (System.Data.SqlClient.SqlException e) {
+          n--; // probably deadlock situation, let it roll back and repeat the transaction n times
+          LogFactory.GetLogger(typeof(TransactionManager).Namespace).Log(string.Format("Exception occured, repeating transaction {0} more times. Details: {1}", n, e.ToString()));
+          if (n <= 0) throw;
+        }
+        finally {
+          transaction.Dispose();
+        }
+      }
+      throw new Exception("This code should not be reached");
+    }
+
+    private TransactionScope CreateTransaction(bool serializable, bool longRunning) {
+      var options = new TransactionOptions();
+      if (serializable)
+        options.IsolationLevel = IsolationLevel.Serializable;
+      else
+        options.IsolationLevel = IsolationLevel.ReadUncommitted;
+
+      if (longRunning)
+        options.Timeout = Settings.Default.LongRunningDatabaseCommandTimeout;
+
+      return new TransactionScope(TransactionScopeOption.Required, options);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/app.config
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/app.config	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.DataAccess/3.3/app.config	(revision 7085)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<configuration>
+  <configSections>
+    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+      <section name="HeuristicLab.Services.Hive.DataAccess.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+    </sectionGroup>
+  </configSections>
+  <connectionStrings>
+    <add name="HeuristicLab.Services.Hive.DataAccess.Settings.HeuristicLab_Hive_LinqConnectionString"
+      connectionString="Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.3;Integrated Security=True;"
+      providerName="System.Data.SqlClient" />
+  </connectionStrings>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup><applicationSettings>
+    <HeuristicLab.Services.Hive.DataAccess.Settings>
+      <setting name="LongRunningDatabaseCommandTimeout" serializeAs="String">
+        <value>00:05:00</value>
+      </setting>
+      <setting name="EventLogName" serializeAs="String">
+        <value>HL.Hive</value>
+      </setting>
+    </HeuristicLab.Services.Hive.DataAccess.Settings>
+  </applicationSettings>
+</configuration>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/HiveService.svc
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/HiveService.svc	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/HiveService.svc	(revision 7085)
@@ -0,0 +1,5 @@
+﻿<%@ ServiceHost 
+  Language="C#" 
+  Debug="true" 
+  Service="HeuristicLab.Services.Hive.HiveService" 
+  %>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/Status.aspx
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/Status.aspx	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/Status.aspx	(revision 7085)
@@ -0,0 +1,128 @@
+﻿<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Status.aspx.cs" Inherits="Status" %>
+
+<%@ Register Assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
+  Namespace="System.Web.UI.DataVisualization.Charting" TagPrefix="asp" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head runat="server">
+  <title>HeuristicLab Hive Status Monitor</title> 
+  <link rel="icon" type="image/ico" href="HeuristicLab.ico" /> 
+</head>
+<body>
+  <center>
+    <h1>HeuristicLab Hive Status Monitor</h1>
+  </center>
+  <form id="form1" runat="server">
+  <div>
+    Available Cores:
+    <asp:Label ID="availableCoresLabel" runat="server" />
+    <br />
+    Used Cores / Calculating Jobs:
+    <asp:Label ID="usedCoresLabel" runat="server" />
+    <br />
+    Waiting Jobs:
+    <asp:Label ID="waitingJobsLabel" runat="server" />
+    <br />
+    Avg. CPU Utilization:
+    <asp:Label ID="cpuUtilizationLabel" runat="server" />
+      <br />
+    Slaves (CPU Utilization):
+    <asp:Label ID="slavesLabel" runat="server" />
+      <br />
+    <br />
+    Days:
+    <asp:DropDownList ID="daysDropDownList" runat="server" AutoPostBack="True">
+      <asp:ListItem Value="1"></asp:ListItem>
+      <asp:ListItem Value="2"></asp:ListItem>
+      <asp:ListItem Value="3"></asp:ListItem>
+      <asp:ListItem Value="4"></asp:ListItem>
+      <asp:ListItem Value="5"></asp:ListItem>
+      <asp:ListItem Value="6"></asp:ListItem>
+      <asp:ListItem Value="7"></asp:ListItem>
+      <asp:ListItem Value="8"></asp:ListItem>
+      <asp:ListItem Value="9"></asp:ListItem>
+      <asp:ListItem Value="10"></asp:ListItem>
+      <asp:ListItem Value="11"></asp:ListItem>
+      <asp:ListItem Value="12"></asp:ListItem>
+      <asp:ListItem Value="13"></asp:ListItem>
+      <asp:ListItem Value="14"></asp:ListItem>
+      <asp:ListItem Value="All"></asp:ListItem>
+    </asp:DropDownList>
+    <br />
+    <br />
+    Avg. CPU Utilization History of all Slaves<br />
+    <asp:Chart ID="cpuUtilizationChart" runat="server" Height="270px" Width="1900px">
+      <Series>
+        <asp:Series BorderWidth="2" ChartType="Line" Color="0, 176, 80" Name="Series1" XValueType="DateTime"
+          YValueType="Double">
+        </asp:Series>
+      </Series>
+      <ChartAreas>
+        <asp:ChartArea BackColor="Black" BackHatchStyle="DottedGrid" BackSecondaryColor="0, 96, 43"
+          BorderColor="DarkGreen" BorderDashStyle="Dot" Name="ChartArea1">
+          <AxisY>
+            <MajorGrid Enabled="False" />
+          </AxisY>
+          <AxisX IntervalAutoMode="VariableCount" IntervalOffset="1" IntervalOffsetType="Hours"
+            IntervalType="Hours" IsLabelAutoFit="False" >
+            <MajorGrid Enabled="False" />
+            <LabelStyle Format="d/M/yyyy HH:mm" IsStaggered="True" />
+          </AxisX>
+        </asp:ChartArea>
+      </ChartAreas>
+    </asp:Chart>
+    <br />
+    Cores/Used Cores History<br />
+    <asp:Chart ID="coresChart" runat="server" Palette="None" Width="1900px" PaletteCustomColors="137, 165, 78; 185, 205, 150">
+      <Series>
+        <asp:Series ChartType="Area" Name="Cores" XValueType="DateTime" YValueType="Double">
+        </asp:Series>
+        <asp:Series ChartArea="ChartArea1" ChartType="Area" Name="FreeCores" XValueType="DateTime"
+          YValueType="Double">
+        </asp:Series>
+      </Series>
+      <ChartAreas>
+        <asp:ChartArea BackColor="Black" BackHatchStyle="DottedGrid" BackSecondaryColor="0, 96, 43"
+          BorderColor="DarkGreen" BorderDashStyle="Dot" Name="ChartArea1">
+          <AxisY>
+            <MajorGrid Enabled="False" />
+          </AxisY>
+          <AxisX IntervalAutoMode="VariableCount" IntervalOffset="1" IntervalOffsetType="Hours"
+            IntervalType="Hours" IsLabelAutoFit="False" >
+            <MajorGrid Enabled="False" />
+            <LabelStyle Format="d/M/yyyy HH:mm" IsStaggered="True" />
+          </AxisX>
+        </asp:ChartArea>
+      </ChartAreas>
+    </asp:Chart>
+    <br />
+    Memory/Used Memory History (GB)<br />
+    <asp:Chart ID="memoryChart" runat="server" Palette="None" PaletteCustomColors="170, 70, 67; 209, 147, 146"
+      Width="1900px">
+      <Series>
+        <asp:Series ChartType="Area" Name="Cores" XValueType="DateTime" YValueType="Double">
+        </asp:Series>
+        <asp:Series ChartArea="ChartArea1" ChartType="Area" Name="FreeCores" XValueType="DateTime"
+          YValueType="Double">
+        </asp:Series>
+      </Series>
+      <ChartAreas>
+        <asp:ChartArea BackColor="Black" BackHatchStyle="DottedGrid" BackSecondaryColor="0, 96, 43"
+          BorderColor="DarkGreen" BorderDashStyle="Dot" Name="ChartArea1">
+          <AxisY>
+            <MajorGrid Enabled="False" />
+          </AxisY>
+          <AxisX IntervalAutoMode="VariableCount" IntervalOffset="1" IntervalOffsetType="Hours"
+            IntervalType="Hours" IsLabelAutoFit="False" >
+            <MajorGrid Enabled="False" />
+            <LabelStyle Format="d/M/yyyy HH:mm" IsStaggered="True" />
+          </AxisX>
+        </asp:ChartArea>
+      </ChartAreas>
+    </asp:Chart>
+    <br />
+      <br />
+  </div>
+  </form>
+</body>
+</html>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/Status.aspx.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/Status.aspx.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/Status.aspx.cs	(revision 7085)
@@ -0,0 +1,104 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+using HeuristicLab.Services.Hive.DataAccess;
+using HeuristicLab.Services.Hive;
+using HeuristicLab.Services.Hive.DataTransfer;
+using System.Text;
+using System.Web.UI.DataVisualization.Charting;
+using DA = HeuristicLab.Services.Hive.DataAccess;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
+public partial class Status : System.Web.UI.Page {
+  protected void Page_Load(object sender, EventArgs e) {
+    var dao = ServiceLocator.Instance.HiveDao;
+    var transactionManager = ServiceLocator.Instance.TransactionManager;
+    var resourceName = Request.QueryString["resource"];
+    IEnumerable<Guid> resourceIds = new List<Guid>();
+    IEnumerable<DT.Slave> onlineSlaves = new List<DT.Slave>();
+    int currentlyJobsWaiting = 0;
+
+    if (!string.IsNullOrEmpty(resourceName)) {
+        transactionManager.UseTransaction(() =>
+        {
+            var resId = dao.GetResources(x => x.Name == resourceName).Single().Id;
+            resourceIds = dao.GetChildResources(resId).Select(x => x.Id).Union(new List<Guid> { resId });
+        }, false, false);        
+    } else {
+        transactionManager.UseTransaction(() =>
+        {
+             resourceIds = dao.GetResources(x => true).Select(y => y.Id);
+        }, false, false);
+    }   
+
+    transactionManager.UseTransaction(() =>
+    {                     
+        onlineSlaves = dao.GetSlaves(x => (x.SlaveState == DA.SlaveState.Calculating || x.SlaveState == DA.SlaveState.Idle) && resourceIds.Contains(x.ResourceId));
+        currentlyJobsWaiting = dao.GetTasks(x => x.State == DA.TaskState.Waiting).Count();
+    }, false, false);
+
+    int currentlyAvailableCores = onlineSlaves.Where(s => s.Cores.HasValue).Sum(s => s.Cores.Value);
+    int currentlyUsedCores = currentlyAvailableCores - onlineSlaves.Where(s => s.FreeCores.HasValue).Sum(s => s.FreeCores.Value);
+    
+    this.availableCoresLabel.Text = currentlyAvailableCores.ToString();
+    this.usedCoresLabel.Text = currentlyUsedCores.ToString();
+    this.waitingJobsLabel.Text = currentlyJobsWaiting.ToString();
+
+    slavesLabel.Text = string.Join(", ", onlineSlaves.Select(x => string.Format("<a href=\"?resource={0}\">{0}</a> ({1} %)", x.Name, Math.Round(x.CpuUtilization, 2))));
+
+    cpuUtilizationLabel.Text = (onlineSlaves.Count() > 0 ? Math.Round(onlineSlaves.Average(s => s.CpuUtilization), 2).ToString() : "0.0") + " %";
+
+    DT.Statistics[] stats = new DT.Statistics[0];    
+    transactionManager.UseTransaction(() =>
+    {   
+        if (daysDropDownList.SelectedValue == "All") {
+          stats = dao.GetStatistics(x => true).OrderBy(x => x.TimeStamp).ToArray();
+        } else {
+          stats = dao.GetStatistics(x => x.Timestamp >= DateTime.Now.Subtract(TimeSpan.FromDays(int.Parse(daysDropDownList.SelectedValue)))).OrderBy(x => x.TimeStamp).ToArray();
+        }
+    }, false, false);
+    
+    for (int i = 0; i < stats.Length; i++) {
+      var s = stats[i];
+      var slaveStats = s.SlaveStatistics.Where(x => resourceIds.Contains(x.SlaveId));
+
+      var averageCpuUtilization = slaveStats.Count() > 0 ? slaveStats.Average(x => x.CpuUtilization) : 0.0;
+      cpuUtilizationChart.Series[0].Points.Add(new DataPoint(s.TimeStamp.ToOADate(), averageCpuUtilization));
+
+      var cores = slaveStats.Sum(x => x.Cores);
+
+      var usedCores = cores - slaveStats.Sum(x => x.FreeCores);
+      coresChart.Series[0].Points.AddXY(s.TimeStamp.ToOADate(), cores);
+      coresChart.Series[1].Points.AddXY(s.TimeStamp.ToOADate(), usedCores);
+
+      var memory = slaveStats.Sum(x => x.Memory);
+      var usedMemory = memory - slaveStats.Sum(x => x.FreeMemory);
+      memoryChart.Series[0].Points.AddXY(s.TimeStamp.ToOADate(), memory / 1024.0);
+      memoryChart.Series[1].Points.AddXY(s.TimeStamp.ToOADate(), usedMemory / 1024.0);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/Web.config
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/Web.config	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/Hive-3.3/Web.config	(revision 7085)
@@ -0,0 +1,104 @@
+<?xml version="1.0"?>
+<configuration>
+  <configSections>
+    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+      <section name="HeuristicLab.Services.Hive.DataAccess.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+    </sectionGroup>
+  </configSections>
+   
+  <appSettings>
+    <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
+  </appSettings>
+  <applicationSettings>
+     <HeuristicLab.Services.Hive.DataAccess.Settings>
+      <setting name="LongRunningDatabaseCommandTimeout" serializeAs="String">
+        <value>00:05:00</value>
+      </setting>
+      <setting name="EventLogName" serializeAs="String">
+        <value>HL.Hive</value>
+      </setting>
+    </HeuristicLab.Services.Hive.DataAccess.Settings>
+  </applicationSettings>
+  <connectionStrings>
+    <add name="HeuristicLab.Authentication" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=HeuristicLab.Authentication"/>
+	 <add name="HeuristicLab.Services.Hive.DataAccess.Settings.HeuristicLab_Hive_LinqConnectionString"
+      connectionString="Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.3;Integrated Security=True;"
+      providerName="System.Data.SqlClient" />
+  </connectionStrings>
+  <system.web>
+    <authentication mode="Forms" />
+    <compilation debug="true" targetFramework="4.0">
+      <assemblies>
+        <add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+      </assemblies>
+    </compilation>
+    <membership>
+      <providers>
+        <clear/>
+        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="HeuristicLab.Authentication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="HeuristicLab.Authentication"/>
+      </providers>
+    </membership>
+    <roleManager enabled="true">
+      <providers>
+        <clear/>
+        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="HeuristicLab.Authentication" applicationName="HeuristicLab.Authentication"/>
+      </providers>
+    </roleManager>
+    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
+      <controls>
+        <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting"
+         assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+      </controls>
+    </pages>
+    <httpRuntime maxRequestLength="1048576"/>
+  </system.web>
+  <system.serviceModel>
+    <diagnostics>
+      <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000"/>
+    </diagnostics>
+    <bindings>
+      <wsHttpBinding>
+        <binding name="WSHttpBinding_IHiveService" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
+          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
+          <security mode="Message">
+            <transport clientCredentialType="Certificate"/>
+            <message clientCredentialType="UserName"/>
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+    <behaviors>
+      <serviceBehaviors>
+        <behavior name="ServiceBehaviour_IHiveService">
+          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
+          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false"/>
+          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
+          <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="AspNetSqlRoleProvider"/>
+          <serviceCredentials>
+            <serviceCertificate findValue="localhost" x509FindType="FindBySubjectName"/>
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="AspNetSqlMembershipProvider"/>
+          </serviceCredentials>
+          <serviceSecurityAudit auditLogLocation="Application" suppressAuditFailure="false" messageAuthenticationAuditLevel="SuccessOrFailure"/>
+          <serviceThrottling maxConcurrentCalls="100"/>
+          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
+        </behavior>
+      </serviceBehaviors>
+    </behaviors>
+    <services>
+      <service behaviorConfiguration="ServiceBehaviour_IHiveService" name="HeuristicLab.Services.Hive.HiveService">
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="MexEndpoint" contract="IMetadataExchange"/>
+        <endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IHiveService" name="WSHttpBinding_IHiveService" contract="HeuristicLab.Services.Hive.ServiceContracts.IHiveService"/>
+      </service>
+    </services>
+    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
+  </system.serviceModel>
+  <system.webServer>
+    <directoryBrowse enabled="true" />
+    <handlers>
+      <remove name="ChartImageHandler" />
+      <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST"
+       path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+    </handlers>
+  </system.webServer>  
+</configuration>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/web_services.config
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/web_services.config	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive.Web/web_services.config	(revision 7085)
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0"?>
+<configuration>
+
+  <configSections>
+    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+      <section name="HeuristicLab.Services.Hive.DataAccess.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+    </sectionGroup>
+  </configSections>  
+  <applicationSettings>
+    <HeuristicLab.Services.Hive.DataAccess.Settings>
+      <setting name="LongRunningDatabaseCommandTimeout" serializeAs="String">
+        <value>00:05:00</value>
+      </setting>
+      <setting name="EventLogName" serializeAs="String">
+        <value>HL.Hive</value>
+      </setting>
+    </HeuristicLab.Services.Hive.DataAccess.Settings>
+  </applicationSettings>
+  
+  <appSettings>
+     <add key="ChartImageHandler" value="storage=file;timeout=20;dir=C:\inetpub\temp\MsChartControlsTempImageFiles\;"/>
+  </appSettings>
+
+  <connectionStrings>
+    <add name="HeuristicLab.Authentication" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=HeuristicLab.Authentication"/>
+	 <add name="HeuristicLab.Services.Hive.DataAccess.Settings.HeuristicLab_Hive_LinqConnectionString"
+      connectionString="Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.3;Integrated Security=True;"
+      providerName="System.Data.SqlClient" />
+  </connectionStrings>
+  
+  <system.web>
+	<customErrors mode="Off"/>
+    <authentication mode="Forms" />
+    <compilation debug="true" targetFramework="4.0">
+      <assemblies>
+        <add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+      </assemblies>
+    </compilation>
+    <membership>
+      <providers>
+        <clear/>
+        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="HeuristicLab.Authentication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="HeuristicLab.Authentication"/>
+      </providers>
+    </membership>
+    <roleManager enabled="true">
+      <providers>
+        <clear/>
+        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="HeuristicLab.Authentication" applicationName="HeuristicLab.Authentication"/>
+      </providers>
+    </roleManager>
+    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
+	 <controls>
+        <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting"
+         assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+      </controls>
+    </pages>
+    <httpRuntime maxRequestLength="2147483647"/>
+	
+  </system.web>
+  
+  <system.serviceModel>
+    <diagnostics>
+      <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000"/>
+    </diagnostics>
+    
+    <bindings>
+      <wsHttpBinding>
+        <binding name="WSHttpBinding_IHiveService" 
+		  receiveTimeout="00:10:00"
+          sendTimeout="00:10:00" 
+		  maxBufferPoolSize="2147483647" 
+		  maxReceivedMessageSize="2147483647">
+         <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
+          <security mode="Message">
+            <transport clientCredentialType="Certificate"/>
+            <message clientCredentialType="UserName" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+    
+    <behaviors>
+      <serviceBehaviors>
+        <behavior name="ServiceBehaviour_IHiveService">
+          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
+          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
+          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
+          <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="AspNetSqlRoleProvider" />
+          <serviceCredentials>
+            <serviceCertificate findValue="services.heuristiclab.com" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="AspNetSqlMembershipProvider" />
+          </serviceCredentials>
+          <serviceSecurityAudit auditLogLocation="Application" suppressAuditFailure="false" messageAuthenticationAuditLevel="Failure" />
+          <serviceThrottling maxConcurrentCalls="100" />
+		  <dataContractSerializer maxItemsInObjectGraph="2147483647" />
+        </behavior>
+      </serviceBehaviors>
+	  
+	  <endpointBehaviors>
+        <behavior>
+          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
+        </behavior>
+      </endpointBehaviors>
+    </behaviors>
+
+    <services>
+      <service behaviorConfiguration="ServiceBehaviour_IHiveService" name="HeuristicLab.Services.Hive.HiveService">
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="MexEndpoint" contract="IMetadataExchange" />
+        <endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IHiveService" name="WSHttpBinding_IHiveService" contract="HeuristicLab.Services.Hive.ServiceContracts.IHiveService" />
+      </service>
+    </services>
+    
+    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
+  </system.serviceModel>
+
+  <system.webServer>
+	<handlers>
+		<remove name="ChartImageHandler" />
+		<add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST"
+			path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler,
+			System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+	</handlers>
+    <directoryBrowse enabled="true"/>
+  </system.webServer>
+  
+</configuration>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Convert.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Convert.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Convert.cs	(revision 7085)
@@ -0,0 +1,509 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data.Linq;
+using System.Linq;
+using DB = HeuristicLab.Services.Hive.DataAccess;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  public static class Convert {
+    #region Task
+    public static DT.Task ToDto(DB.Task source) {
+      if (source == null) return null;
+      return new DT.Task {
+        Id = source.TaskId,
+        CoresNeeded = source.CoresNeeded,
+        ExecutionTime = TimeSpan.FromMilliseconds(source.ExecutionTimeMs),
+        MemoryNeeded = source.MemoryNeeded,
+        ParentTaskId = source.ParentTaskId,
+        Priority = source.Priority,
+        PluginsNeededIds = (source.RequiredPlugins == null ? new List<Guid>() : source.RequiredPlugins.Select(x => x.PluginId).ToList()),
+        LastHeartbeat = source.LastHeartbeat,
+        State = Convert.ToDto(source.State),
+        StateLog = (source.StateLogs == null ? new List<DT.StateLog>() : source.StateLogs.Select(x => Convert.ToDto(x)).OrderBy(x => x.DateTime).ToList()),
+        IsParentTask = source.IsParentTask,
+        FinishWhenChildJobsFinished = source.FinishWhenChildJobsFinished,
+        Command = Convert.ToDto(source.Command),
+        LastTaskDataUpdate = (source.JobData == null ? DateTime.MinValue : source.JobData.LastUpdate),
+        JobId = source.JobId,
+        IsPrivileged = source.IsPrivileged
+      };
+    }
+
+    public static DB.Task ToEntity(DT.Task source) {
+      if (source == null) return null;
+      var entity = new DB.Task(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Task source, DB.Task target) {
+      if ((source != null) && (target != null)) {
+        target.TaskId = source.Id;
+        target.CoresNeeded = source.CoresNeeded;
+        target.ExecutionTimeMs = source.ExecutionTime.TotalMilliseconds;
+        target.MemoryNeeded = source.MemoryNeeded;
+        target.ParentTaskId = source.ParentTaskId;
+        target.Priority = source.Priority;
+        target.LastHeartbeat = source.LastHeartbeat;
+        target.State = Convert.ToEntity(source.State);
+        if (target.StateLogs == null) target.StateLogs = new EntitySet<DB.StateLog>();
+        foreach (DT.StateLog sl in source.StateLog.Where(x => x.Id == Guid.Empty)) {
+          target.StateLogs.Add(Convert.ToEntity(sl));
+        }
+        target.IsParentTask = source.IsParentTask;
+        target.FinishWhenChildJobsFinished = source.FinishWhenChildJobsFinished;
+        target.Command = Convert.ToEntity(source.Command);
+        // RequiredPlugins are added by Dao
+        target.JobId = source.JobId;
+        target.IsPrivileged = source.IsPrivileged;
+      }
+    }
+    #endregion
+
+    #region TaskData
+    public static DT.TaskData ToDto(DB.TaskData source) {
+      if (source == null) return null;
+      return new DT.TaskData { TaskId = source.TaskId, Data = source.Data.ToArray(), LastUpdate = source.LastUpdate };
+    }
+    public static DB.TaskData ToEntity(DT.TaskData source) {
+      if (source == null) return null;
+      var entity = new DB.TaskData(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.TaskData source, DB.TaskData target) {
+      if ((source != null) && (target != null)) {
+        target.TaskId = source.TaskId; target.Data = new Binary(source.Data); target.LastUpdate = source.LastUpdate;
+      }
+    }
+    #endregion
+
+    #region StateLog
+    public static DT.StateLog ToDto(DB.StateLog source) {
+      if (source == null) return null;
+      return new DT.StateLog { Id = source.StateLogId, DateTime = source.DateTime, Exception = source.Exception, TaskId = source.TaskId, SlaveId = source.SlaveId, State = Convert.ToDto(source.State), UserId = source.UserId };
+    }
+    public static DB.StateLog ToEntity(DT.StateLog source) {
+      if (source == null) return null;
+      var entity = new DB.StateLog(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.StateLog source, DB.StateLog target) {
+      if ((source != null) && (target != null)) {
+        target.StateLogId = source.Id; target.DateTime = source.DateTime; target.Exception = source.Exception; target.TaskId = source.TaskId; target.SlaveId = source.SlaveId; target.State = Convert.ToEntity(source.State); target.UserId = source.UserId;
+      }
+    }
+    #endregion
+
+    #region Downtimes
+    public static DT.Downtime ToDto(DB.Downtime source) {
+      if (source == null) return null;
+      return new DT.Downtime { Id = source.DowntimeId, AllDayEvent = source.AllDayEvent, EndDate = source.EndDate, Recurring = source.Recurring, RecurringId = source.RecurringId, ResourceId = source.ResourceId, StartDate = source.StartDate };
+    }
+    public static DB.Downtime ToEntity(DT.Downtime source) {
+      if (source == null) return null;
+      var entity = new DB.Downtime(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Downtime source, DB.Downtime target) {
+      if ((source != null) && (target != null)) {
+        target.DowntimeId = source.Id; target.AllDayEvent = source.AllDayEvent; target.EndDate = source.EndDate; target.Recurring = source.Recurring; target.RecurringId = source.RecurringId; target.ResourceId = source.ResourceId; target.StartDate = source.StartDate;
+      }
+    }
+    #endregion
+
+    #region Job
+    public static DT.Job ToDto(DB.Job source) {
+      if (source == null) return null;
+      return new DT.Job { Id = source.JobId, Description = source.Description, Name = source.Name, OwnerUserId = source.OwnerUserId, DateCreated = source.DateCreated, ResourceNames = source.ResourceIds };
+    }
+    public static DB.Job ToEntity(DT.Job source) {
+      if (source == null) return null;
+      var entity = new DB.Job(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Job source, DB.Job target) {
+      if ((source != null) && (target != null)) {
+        target.JobId = source.Id; target.Description = source.Description; target.Name = source.Name; target.OwnerUserId = source.OwnerUserId; target.DateCreated = source.DateCreated; target.ResourceIds = source.ResourceNames;
+      }
+    }
+    #endregion
+
+    #region JobPermission
+    public static DT.JobPermission ToDto(DB.JobPermission source) {
+      if (source == null) return null;
+      return new DT.JobPermission { JobId = source.JobId, GrantedUserId = source.GrantedUserId, GrantedByUserId = source.GrantedByUserId, Permission = Convert.ToDto(source.Permission) };
+    }
+    public static DB.JobPermission ToEntity(DT.JobPermission source) {
+      if (source == null) return null;
+      var entity = new DB.JobPermission(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.JobPermission source, DB.JobPermission target) {
+      if ((source != null) && (target != null)) {
+        target.JobId = source.JobId; target.GrantedUserId = source.GrantedUserId; target.GrantedByUserId = source.GrantedByUserId; target.Permission = Convert.ToEntity(source.Permission);
+      }
+    }
+    #endregion
+
+    #region Plugin
+    public static DT.Plugin ToDto(DB.Plugin source) {
+      if (source == null) return null;
+      return new DT.Plugin { Id = source.PluginId, Name = source.Name, Version = new Version(source.Version), UserId = source.UserId, DateCreated = source.DateCreated, Hash = source.Hash };
+    }
+    public static DB.Plugin ToEntity(DT.Plugin source) {
+      if (source == null) return null;
+      var entity = new DB.Plugin(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Plugin source, DB.Plugin target) {
+      if ((source != null) && (target != null)) {
+        target.PluginId = source.Id; target.Name = source.Name; target.Version = source.Version.ToString(); target.UserId = source.UserId; target.DateCreated = source.DateCreated; target.Hash = source.Hash;
+      }
+    }
+    #endregion
+
+    #region PluginData
+    public static DT.PluginData ToDto(DB.PluginData source) {
+      if (source == null) return null;
+      return new DT.PluginData { Id = source.PluginDataId, PluginId = source.PluginId, Data = source.Data.ToArray(), FileName = source.FileName };
+    }
+    public static DB.PluginData ToEntity(DT.PluginData source) {
+      if (source == null) return null;
+      var entity = new DB.PluginData(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.PluginData source, DB.PluginData target) {
+      if ((source != null) && (target != null)) {
+        target.PluginDataId = source.Id; target.PluginId = source.PluginId; target.Data = new Binary(source.Data); target.FileName = source.FileName;
+      }
+    }
+    #endregion
+
+    #region Slave
+    public static DT.Slave ToDto(DB.Slave source) {
+      if (source == null) return null;
+      return new DT.Slave {
+        Id = source.ResourceId,
+        ParentResourceId = source.ParentResourceId,
+        Cores = source.Cores,
+        CpuSpeed = source.CpuSpeed,
+        FreeCores = source.FreeCores,
+        FreeMemory = source.FreeMemory,
+        IsAllowedToCalculate = source.IsAllowedToCalculate,
+        Memory = source.Memory,
+        Name = source.Name,
+        SlaveState = Convert.ToDto(source.SlaveState),
+        CpuArchitecture = Convert.ToDto(source.CpuArchitecture),
+        OperatingSystem = source.OperatingSystem,
+        LastHeartbeat = source.LastHeartbeat,
+        CpuUtilization = source.CpuUtilization,
+        HbInterval = source.HbInterval
+      };
+    }
+    public static DB.Slave ToEntity(DT.Slave source) {
+      if (source == null) return null;
+      var entity = new DB.Slave(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Slave source, DB.Slave target) {
+      if ((source != null) && (target != null)) {
+        target.ResourceId = source.Id;
+        target.ParentResourceId = source.ParentResourceId;
+        target.Cores = source.Cores;
+        target.CpuSpeed = source.CpuSpeed;
+        target.FreeCores = source.FreeCores;
+        target.FreeMemory = source.FreeMemory;
+        target.IsAllowedToCalculate = source.IsAllowedToCalculate;
+        target.Memory = source.Memory;
+        target.Name = source.Name;
+        target.SlaveState = Convert.ToEntity(source.SlaveState);
+        target.CpuArchitecture = Convert.ToEntity(source.CpuArchitecture);
+        target.OperatingSystem = source.OperatingSystem;
+        target.LastHeartbeat = source.LastHeartbeat;
+        target.CpuUtilization = source.CpuUtilization;
+        target.HbInterval = source.HbInterval;
+      }
+    }
+    #endregion
+
+    #region SlaveGroup
+    public static DT.SlaveGroup ToDto(DB.SlaveGroup source) {
+      if (source == null) return null;
+      return new DT.SlaveGroup { Id = source.ResourceId, Name = source.Name, ParentResourceId = source.ParentResourceId, HbInterval = source.HbInterval };
+    }
+    public static DB.SlaveGroup ToEntity(DT.SlaveGroup source) {
+      if (source == null) return null;
+      var entity = new DB.SlaveGroup(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.SlaveGroup source, DB.SlaveGroup target) {
+      if ((source != null) && (target != null)) {
+        target.ResourceId = source.Id; target.Name = source.Name; target.ParentResourceId = source.ParentResourceId; target.HbInterval = source.HbInterval;
+      }
+    }
+    #endregion
+
+    #region Resource
+    public static DT.Resource ToDto(DB.Resource source) {
+      if (source == null) return null;
+      return new DT.Resource { Id = source.ResourceId, Name = source.Name, ParentResourceId = source.ParentResourceId, HbInterval = source.HbInterval };
+    }
+    public static DB.Resource ToEntity(DT.Resource source) {
+      if (source == null) return null;
+      var entity = new DB.Resource(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Resource source, DB.Resource target) {
+      if ((source != null) && (target != null)) {
+        target.ResourceId = source.Id; target.Name = source.Name; target.ParentResourceId = source.ParentResourceId; target.HbInterval = source.HbInterval;
+      }
+    }
+    #endregion
+
+    #region Statistics
+    public static DT.Statistics ToDto(DB.Statistics source) {
+      if (source == null) return null;
+      return new DT.Statistics {
+        Id = source.StatisticsId,
+        TimeStamp = source.Timestamp,
+        SlaveStatistics = source.SlaveStatistics.Select(x => Convert.ToDto(x)).ToArray(),
+        UserStatistics = source.UserStatistics.Select(x => Convert.ToDto(x)).ToArray()
+      };
+    }
+    public static DB.Statistics ToEntity(DT.Statistics source) {
+      if (source == null) return null;
+      var entity = new DB.Statistics(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Statistics source, DB.Statistics target) {
+      if ((source != null) && (target != null)) {
+        target.StatisticsId = source.Id;
+        target.Timestamp = source.TimeStamp;
+
+      }
+    }
+    #endregion
+
+    #region SlaveStatistics
+    public static DT.SlaveStatistics ToDto(DB.SlaveStatistics source) {
+      if (source == null) return null;
+      return new DT.SlaveStatistics {
+        Id = source.StatisticsId,
+        SlaveId = source.SlaveId,
+        Cores = source.Cores,
+        CpuUtilization = source.CpuUtilization,
+        FreeCores = source.FreeCores,
+        FreeMemory = source.FreeMemory,
+        Memory = source.Memory
+      };
+    }
+    public static DB.SlaveStatistics ToEntity(DT.SlaveStatistics source) {
+      if (source == null) return null;
+      var entity = new DB.SlaveStatistics(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.SlaveStatistics source, DB.SlaveStatistics target) {
+      if ((source != null) && (target != null)) {
+        target.StatisticsId = source.Id;
+        target.SlaveId = source.SlaveId;
+        target.Cores = source.Cores;
+        target.CpuUtilization = source.CpuUtilization;
+        target.FreeCores = source.FreeCores;
+        target.FreeMemory = source.FreeMemory;
+        target.Memory = source.Memory;
+      }
+    }
+    #endregion
+
+    #region UserStatistics
+    public static DT.UserStatistics ToDto(DB.UserStatistics source) {
+      if (source == null) return null;
+      return new DT.UserStatistics {
+        Id = source.StatisticsId,
+        UserId = source.UserId,
+        UsedCores = source.UsedCores,
+        ExecutionTime = TimeSpan.FromMilliseconds(source.ExecutionTimeMs),
+        ExecutionTimeFinishedJobs = TimeSpan.FromMilliseconds(source.ExecutionTimeMsFinishedJobs),
+        StartToEndTime = TimeSpan.FromMilliseconds(source.StartToEndTimeMs)
+      };
+    }
+    public static DB.UserStatistics ToEntity(DT.UserStatistics source) {
+      if (source == null) return null;
+      var entity = new DB.UserStatistics(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.UserStatistics source, DB.UserStatistics target) {
+      if ((source != null) && (target != null)) {
+        target.StatisticsId = source.Id;
+        target.UserId = source.UserId;
+        target.UsedCores = source.UsedCores;
+        target.ExecutionTimeMs = source.ExecutionTime.TotalMilliseconds;
+        target.ExecutionTimeMsFinishedJobs = source.ExecutionTimeFinishedJobs.TotalMilliseconds;
+        target.StartToEndTimeMs = source.StartToEndTime.TotalMilliseconds;
+      }
+    }
+    #endregion
+
+    #region TaskData
+    public static DT.TaskState ToDto(DB.TaskState source) {
+      if (source == DB.TaskState.Aborted) {
+        return TaskState.Aborted;
+      } else if (source == DB.TaskState.Calculating) {
+        return TaskState.Calculating;
+      } else if (source == DB.TaskState.Failed) {
+        return TaskState.Failed;
+      } else if (source == DB.TaskState.Finished) {
+        return TaskState.Finished;
+      } else if (source == DB.TaskState.Offline) {
+        return TaskState.Offline;
+      } else if (source == DB.TaskState.Paused) {
+        return TaskState.Paused;
+      } else if (source == DB.TaskState.Transferring) {
+        return TaskState.Transferring;
+      } else if (source == DB.TaskState.Waiting) {
+        return TaskState.Waiting;
+      } else
+        return TaskState.Failed;
+    }
+
+    public static DB.TaskState ToEntity(DT.TaskState source) {
+      if (source == DT.TaskState.Aborted) {
+        return DB.TaskState.Aborted;
+      } else if (source == DT.TaskState.Calculating) {
+        return DB.TaskState.Calculating;
+      } else if (source == DT.TaskState.Failed) {
+        return DB.TaskState.Failed;
+      } else if (source == DT.TaskState.Finished) {
+        return DB.TaskState.Finished;
+      } else if (source == DT.TaskState.Offline) {
+        return DB.TaskState.Offline;
+      } else if (source == DT.TaskState.Paused) {
+        return DB.TaskState.Paused;
+      } else if (source == DT.TaskState.Transferring) {
+        return DB.TaskState.Transferring;
+      } else if (source == DT.TaskState.Waiting) {
+        return DB.TaskState.Waiting;
+      } else
+        return DB.TaskState.Failed;
+    }
+    #endregion
+
+    #region Permission
+    public static DT.Permission ToDto(DB.Permission source) {
+      if (source == DB.Permission.Full) {
+        return Permission.Full;
+      } else if (source == DB.Permission.NotAllowed) {
+        return Permission.NotAllowed;
+      } else if (source == DB.Permission.Read) {
+        return Permission.Read;
+      } else
+        return Permission.NotAllowed;
+    }
+
+    public static DB.Permission ToEntity(DT.Permission source) {
+      if (source == DT.Permission.Full) {
+        return DB.Permission.Full;
+      } else if (source == DT.Permission.NotAllowed) {
+        return DB.Permission.NotAllowed;
+      } else if (source == DT.Permission.Read) {
+        return DB.Permission.Read;
+      } else
+        return DB.Permission.NotAllowed;
+    }
+    #endregion
+
+    #region Command
+    public static DT.Command? ToDto(DB.Command? source) {
+      if (source.HasValue) {
+        if (source.Value == DB.Command.Abort) {
+          return Command.Abort;
+        } else if (source.Value == DB.Command.Pause) {
+          return Command.Pause;
+        } else if (source.Value == DB.Command.Stop) {
+          return Command.Stop;
+        } else
+          return Command.Pause;
+      }
+      return null;
+    }
+
+    public static DB.Command? ToEntity(DT.Command? source) {
+      if (source.HasValue) {
+        if (source == DT.Command.Abort) {
+          return DB.Command.Abort;
+        } else if (source == DT.Command.Pause) {
+          return DB.Command.Pause;
+        } else if (source == DT.Command.Stop) {
+          return DB.Command.Stop;
+        } else
+          return DB.Command.Pause;
+      } else
+        return null;
+    }
+    #endregion
+
+    #region CpuArchiteture
+    public static DT.CpuArchitecture ToDto(DB.CpuArchitecture source) {
+      if (source == DB.CpuArchitecture.x64) {
+        return CpuArchitecture.x64;
+      } else if (source == DB.CpuArchitecture.x86) {
+        return CpuArchitecture.x86;
+      } else
+        return CpuArchitecture.x86;
+    }
+
+    public static DB.CpuArchitecture ToEntity(DT.CpuArchitecture source) {
+      if (source == DT.CpuArchitecture.x64) {
+        return DB.CpuArchitecture.x64;
+      } else if (source == DT.CpuArchitecture.x86) {
+        return DB.CpuArchitecture.x86;
+      } else
+        return DB.CpuArchitecture.x86;
+    }
+    #endregion
+
+    #region SlaveState
+    public static DT.SlaveState ToDto(DB.SlaveState source) {
+      if (source == DB.SlaveState.Calculating) {
+        return SlaveState.Calculating;
+      } else if (source == DB.SlaveState.Idle) {
+        return SlaveState.Idle;
+      } else if (source == DB.SlaveState.Offline) {
+        return SlaveState.Offline;
+      } else
+        return SlaveState.Offline;
+    }
+
+    public static DB.SlaveState ToEntity(DT.SlaveState source) {
+      if (source == DT.SlaveState.Calculating) {
+        return DB.SlaveState.Calculating;
+      } else if (source == DT.SlaveState.Idle) {
+        return DB.SlaveState.Idle;
+      } else if (source == DT.SlaveState.Offline) {
+        return DB.SlaveState.Offline;
+      } else
+        return DB.SlaveState.Offline;
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Command.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Command.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Command.cs	(revision 7085)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [Serializable]
+  public enum Command {
+    Stop,
+    Abort,
+    Pause
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Downtime.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Downtime.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Downtime.cs	(revision 7085)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  public class Downtime : HiveItem {
+    [DataMember]
+    public DateTime StartDate { get; set; }
+    [DataMember]
+    public DateTime EndDate { get; set; }
+    [DataMember]
+    public bool AllDayEvent { get; set; }
+    [DataMember]
+    public bool Recurring { get; set; }
+    [DataMember]
+    public Guid RecurringId { get; set; }
+    [DataMember]
+    public Guid ResourceId { get; set; }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Heartbeat.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Heartbeat.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Heartbeat.cs	(revision 7085)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+
+  [DataContract]
+  public class Heartbeat {
+    [DataMember]
+    public Guid SlaveId { get; set; }
+    [DataMember]
+    public int FreeMemory { get; set; }
+    [DataMember]
+    public int FreeCores { get; set; }
+    [DataMember]
+    public Dictionary<Guid, TimeSpan> JobProgress { get; set; }
+    [DataMember]
+    public bool AssignJob { get; set; } // if false, the server will not assign a new task
+    [DataMember]
+    public float CpuUtilization { get; set; }
+    [DataMember]
+    public int HbInterval { get; set; }
+
+    public override string ToString() {
+      String val = "SlaveId: " + SlaveId + ", FreeCores: " + FreeCores;
+      foreach (KeyValuePair<Guid, TimeSpan> kvp in JobProgress) {
+        val += Environment.NewLine + "Id" + kvp.Key + " ExecutionTime " + kvp.Value;
+      }
+      return val;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveItem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveItem.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveItem.cs	(revision 7085)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public abstract class HiveItem  {
+    [DataMember]
+    public Guid Id { get; set; }
+
+    public HiveItem() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Job.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Job.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Job.cs	(revision 7085)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class Job : NamedHiveItem {
+    [DataMember]
+    public Guid OwnerUserId { get; set; }
+    [DataMember]
+    public DateTime DateCreated { get; set; }
+    [DataMember]
+    public string ResourceNames { get; set; }
+    [DataMember]
+    public Permission Permission { get; set; } // the permission for the currently logged in user
+    [DataMember]
+    public string OwnerUsername { get; set; }
+
+    /* ==== some computed statistics ==== */
+    [DataMember]
+    public int JobCount { get; set; }
+    [DataMember]
+    public int FinishedCount { get; set; }
+    [DataMember]
+    public int CalculatingCount { get; set; }
+    /* ================================== */
+
+    public Job() { }
+
+    public override string ToString() {
+      return base.ToString() + "Name: " + Name + ", Description: " + Description;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/JobPermission.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/JobPermission.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/JobPermission.cs	(revision 7085)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class JobPermission : HiveItem {
+    // info: this class is derived from HiveItem to simplify handling on the client side, altough it does not have a Id.
+    [DataMember]
+    public Guid JobId { get; set; }
+    [DataMember]
+    public Guid GrantedUserId { get; set; }
+    [DataMember]
+    public Guid GrantedByUserId { get; set; }
+    [DataMember]
+    public Permission Permission { get; set; }
+
+    public JobPermission() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/LightweightTask.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/LightweightTask.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/LightweightTask.cs	(revision 7085)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class LightweightTask : HiveItem {
+    [DataMember]
+    public TimeSpan ExecutionTime { get; set; }
+    [DataMember]
+    public Guid? ParentTaskId { get; set; }
+    [DataMember]
+    public List<StateLog> StateLog { get; set; }
+    [DataMember]
+    public TaskState State { get; set; }
+    [DataMember]
+    public Command? Command { get; set; }
+    [DataMember]
+    public DateTime LastTaskDataUpdate { get; set; }
+
+    public StateLog CurrentStateLog { get { return StateLog.LastOrDefault(); } }
+    public DateTime? DateCreated { get { return StateLog.Count > 0 ? new DateTime?(StateLog.First().DateTime) : null; } }
+    public DateTime? DateFinished { get { return (StateLog.Count > 0 && CurrentStateLog.State == TaskState.Finished) ? new DateTime?(CurrentStateLog.DateTime) : null; } }
+
+    public LightweightTask() {
+      StateLog = new List<DataTransfer.StateLog>();
+    }
+
+    public LightweightTask(Task task) {
+      this.Id = task.Id;
+      this.ExecutionTime = task.ExecutionTime;
+      this.ParentTaskId = task.ParentTaskId;
+      this.StateLog = new List<StateLog>(task.StateLog);
+      this.State = task.State;
+      this.Command = task.Command;
+      this.LastTaskDataUpdate = task.LastTaskDataUpdate;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/NamedHiveItem.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/NamedHiveItem.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/NamedHiveItem.cs	(revision 7085)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  public abstract class NamedHiveItem : HiveItem {
+    [DataMember]
+    public string Name { get; set; }
+    [DataMember]
+    public string Description { get; set; }
+
+    protected NamedHiveItem() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Permission.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Permission.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Permission.cs	(revision 7085)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  public enum Permission {
+    /// <summary>
+    /// User is not allowed to access
+    /// </summary>
+    NotAllowed,
+
+    /// <summary>
+    /// User can only download and view jobs
+    /// </summary>
+    Read,
+
+    /// <summary>
+    /// User can pause, stop, restart, delete job. can also grant other 
+    /// </summary>
+    Full
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Plugin.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Plugin.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Plugin.cs	(revision 7085)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class Plugin : NamedHiveItem {
+    [DataMember]
+    public Version Version { get; set; }
+
+    [DataMember]
+    public Guid UserId { get; set; }
+
+    [DataMember]
+    public DateTime DateCreated { get; set; }
+
+    [DataMember]
+    public byte[] Hash { get; set; }
+
+    public Plugin() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/PluginData.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/PluginData.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/PluginData.cs	(revision 7085)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [Serializable]
+  [DataContract]
+  public class PluginData : HiveItem {
+    [DataMember]
+    public Guid PluginId { get; set; }
+    [DataMember]
+    public byte[] Data { get; set; }
+    [DataMember]
+    public String FileName { get; set; }
+
+    public PluginData() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Resource.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Resource.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Resource.cs	(revision 7085)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class Resource : NamedHiveItem {
+    [DataMember]
+    public Guid? ParentResourceId { get; set; }
+
+    [DataMember]
+    public int HbInterval { get; set; }
+
+    public Resource() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Slave.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Slave.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Slave.cs	(revision 7085)
@@ -0,0 +1,64 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  public enum CpuArchitecture {
+    x86, x64
+  }
+
+  [DataContract]
+  [Serializable]
+  public class Slave : Resource {
+    [DataMember]
+    public int? Cores { get; set; }
+    [DataMember]
+    public int? FreeCores { get; set; }
+    [DataMember]
+    public int? CpuSpeed { get; set; } // MHz
+    [DataMember]
+    public CpuArchitecture CpuArchitecture { get; set; }
+    [DataMember]
+    public int? Memory { get; set; } // MB
+    [DataMember]
+    public int? FreeMemory { get; set; } // MB
+    [DataMember]
+    public string OperatingSystem { get; set; }
+    [DataMember]
+    public SlaveState SlaveState { get; set; }
+    [DataMember]
+    public bool IsAllowedToCalculate { get; set; }
+    [DataMember]
+    public DateTime? LastHeartbeat { get; set; }
+    [DataMember]
+    public double CpuUtilization { get; set; }
+
+    public Slave() {
+      SlaveState = DataTransfer.SlaveState.Idle;
+    }
+
+    public override string ToString() {
+      return string.Format("Cores: {0}, FreeCores: {1}", Cores, FreeCores);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveGroup.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveGroup.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveGroup.cs	(revision 7085)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  public class SlaveGroup : Resource {
+    public SlaveGroup() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveState.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveState.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveState.cs	(revision 7085)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  public enum SlaveState {
+    Idle,
+    Calculating,
+    Offline
+  };
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveStatistics.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveStatistics.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveStatistics.cs	(revision 7085)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class SlaveStatistics : HiveItem {
+    [DataMember]
+    public Guid SlaveId { get; set; }
+    [DataMember]
+    public int Cores { get; set; }
+    [DataMember]
+    public int FreeCores { get; set; }
+    [DataMember]
+    public int Memory { get; set; }
+    [DataMember]
+    public int FreeMemory { get; set; }
+    [DataMember]
+    public double CpuUtilization { get; set; }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/StateLog.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/StateLog.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/StateLog.cs	(revision 7085)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class StateLog : HiveItem {
+    [DataMember]
+    public DateTime DateTime { get; set; }
+    [DataMember]
+    public Guid? UserId { get; set; }
+    [DataMember]
+    public Guid? SlaveId { get; set; }
+    [DataMember]
+    public string Exception { get; set; }
+    [DataMember]
+    public TaskState State { get; set; }
+    [DataMember]
+    public Guid TaskId { get; set; }
+
+    public StateLog() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Statistics.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Statistics.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Statistics.cs	(revision 7085)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class Statistics : HiveItem {
+    [DataMember]
+    public DateTime TimeStamp { get; set; }
+    [DataMember]
+    public IEnumerable<UserStatistics> UserStatistics { get; set; }
+    [DataMember]
+    public IEnumerable<SlaveStatistics> SlaveStatistics { get; set; }
+
+    public Statistics() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Task.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Task.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/Task.cs	(revision 7085)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class Task : LightweightTask {
+    [DataMember]
+    public int Priority { get; set; }
+    [DataMember]
+    public int CoresNeeded { get; set; }
+    [DataMember]
+    public int MemoryNeeded { get; set; }
+    [DataMember]
+    public List<Guid> PluginsNeededIds { get; set; }
+    [DataMember]
+    public DateTime? LastHeartbeat { get; set; }
+    [DataMember]
+    public bool IsParentTask { get; set; }
+    [DataMember]
+    public bool FinishWhenChildJobsFinished { get; set; }
+    [DataMember]
+    public Guid JobId { get; set; }
+    [DataMember]
+    public bool IsPrivileged { get; set; }
+
+    public Task() {
+      this.PluginsNeededIds = new List<Guid>();
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskData.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskData.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskData.cs	(revision 7085)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class TaskData {
+    [DataMember]
+    public Guid TaskId { get; set; }
+    [DataMember]
+    public byte[] Data { get; set; }
+    [DataMember]
+    public DateTime LastUpdate { get; set; }
+
+    public TaskData() { }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskState.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskState.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskState.cs	(revision 7085)
@@ -0,0 +1,92 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [Serializable]
+  public enum TaskState {
+    /// <summary>
+    /// A task is offline as long as job is not yet submitted to the hive
+    /// </summary>
+    Offline,
+
+    /// <summary>
+    /// Task is waiting to be calculated
+    /// </summary>
+    Waiting,
+
+    /// <summary>
+    /// Task is beeing transferred
+    /// </summary>
+    Transferring,
+
+    /// <summary>
+    /// Task is actively calculated on a Slave
+    /// </summary>
+    Calculating,
+
+    /// <summary>
+    /// Task is paused, will not be picked up by slaves
+    /// </summary>
+    Paused,
+
+    /// <summary>
+    /// Task as finished and is ready to be collected by the Client
+    /// </summary>
+    Finished,
+
+    /// <summary>
+    /// Task is aborted and result can be collected by the Client
+    /// </summary>
+    Aborted,
+
+    /// <summary>
+    /// Task as been aborted due to an error. Results are ready to be collected
+    /// </summary>
+    Failed
+  };
+
+  public static class TaskStateExtensions {
+    /// <summary>
+    /// This task is not yet done
+    /// </summary>
+    public static bool IsActive(this TaskState taskState) {
+      return !taskState.IsDone();
+    }
+
+    /// <summary>
+    /// This task is Waiting
+    /// </summary>
+    public static bool IsWaiting(this TaskState taskState) {
+      return taskState == TaskState.Waiting;
+    }
+
+    /// <summary>
+    /// This task is Finished || Failed || Aborted
+    /// </summary>
+    public static bool IsDone(this TaskState taskState) {
+      return taskState == TaskState.Finished ||
+        taskState == TaskState.Aborted ||
+        taskState == TaskState.Failed;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/UserStatistics.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/UserStatistics.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/DataTransfer/UserStatistics.cs	(revision 7085)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class UserStatistics : HiveItem {
+    [DataMember]
+    public Guid UserId { get; set; }
+    [DataMember]
+    public int UsedCores { get; set; }
+    [DataMember]
+    public TimeSpan ExecutionTime { get; set; }
+    [DataMember]
+    public TimeSpan ExecutionTimeFinishedJobs { get; set; }
+    [DataMember]
+    public TimeSpan StartToEndTime { get; set; }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj	(revision 7085)
@@ -0,0 +1,209 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Services.Hive</RootNamespace>
+    <AssemblyName>HeuristicLab.Services.Hive-3.3</AssemblyName>
+    <ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data.Linq" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Web.ApplicationServices" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Convert.cs" />
+    <Compile Include="DataTransfer\Command.cs" />
+    <Compile Include="DataTransfer\Downtime.cs" />
+    <Compile Include="DataTransfer\Heartbeat.cs" />
+    <Compile Include="DataTransfer\Job.cs" />
+    <Compile Include="DataTransfer\JobPermission.cs" />
+    <Compile Include="DataTransfer\HiveItem.cs" />
+    <Compile Include="DataTransfer\Task.cs" />
+    <Compile Include="DataTransfer\TaskData.cs" />
+    <Compile Include="DataTransfer\TaskState.cs" />
+    <Compile Include="DataTransfer\LightweightTask.cs" />
+    <Compile Include="DataTransfer\NamedHiveItem.cs" />
+    <Compile Include="DataTransfer\Permission.cs" />
+    <Compile Include="DataTransfer\Plugin.cs" />
+    <Compile Include="DataTransfer\PluginData.cs" />
+    <Compile Include="DataTransfer\Resource.cs" />
+    <Compile Include="DataTransfer\Slave.cs" />
+    <Compile Include="DataTransfer\SlaveGroup.cs" />
+    <Compile Include="DataTransfer\SlaveState.cs" />
+    <Compile Include="DataTransfer\SlaveStatistics.cs" />
+    <Compile Include="DataTransfer\StateLog.cs" />
+    <Compile Include="DataTransfer\Statistics.cs" />
+    <Compile Include="DataTransfer\UserStatistics.cs" />
+    <Compile Include="HiveDao.cs" />
+    <Compile Include="Interfaces\IHiveDao.cs" />
+    <Compile Include="Interfaces\IUserManager.cs" />
+    <Compile Include="Manager\UserManager.cs" />
+    <Compile Include="Settings.cs" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="Manager\AuthenticationManager.cs" />
+    <Compile Include="Manager\HeartbeatManager.cs" />
+    <Compile Include="Interfaces\IAuthenticationManager.cs" />
+    <Compile Include="Interfaces\IEventManager.cs" />
+    <Compile Include="Interfaces\IServiceLocator.cs" />
+    <Compile Include="Manager\AuthorizationManager.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Manager\EventManager.cs" />
+    <Compile Include="HiveRoles.cs" />
+    <Compile Include="HiveService.cs" />
+    <Compile Include="Interfaces\IAuthorizationManager.cs" />
+    <Compile Include="MessageContainer.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <DependentUpon>Settings.settings</DependentUpon>
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="ServiceContracts\IHiveService.cs" />
+    <Compile Include="ServiceFaults\PluginAlreadyExistsFault.cs" />
+    <Compile Include="ServiceLocator.cs" />
+    <None Include="Properties\Settings.settings">
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Services.Hive.DataAccess\3.3\HeuristicLab.Services.Hive.DataAccess-3.3.csproj">
+      <Project>{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}</Project>
+      <Name>HeuristicLab.Services.Hive.DataAccess-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <ProjectExtensions>
+    <VisualStudio>
+      <FlavorProperties GUID="{3D9AD99F-2412-4246-B90B-4EAA41C64699}">
+        <WcfProjectProperties>
+          <AutoStart>False</AutoStart>
+        </WcfProjectProperties>
+      </FlavorProperties>
+    </VisualStudio>
+  </ProjectExtensions>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HiveDao.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HiveDao.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HiveDao.cs	(revision 7085)
@@ -0,0 +1,831 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  public class HiveDao : IHiveDao {
+    public static HiveDataContext CreateContext(bool longRunning = false) {
+      var context = new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString);
+      if (longRunning) context.CommandTimeout = (int)Settings.Default.LongRunningDatabaseCommandTimeout.TotalSeconds;
+      return context;
+    }
+
+    public HiveDao() { }
+
+    #region Task Methods
+    public DT.Task GetTask(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Tasks.SingleOrDefault(x => x.TaskId == id));
+      }
+    }
+
+    public IEnumerable<DT.Task> GetTasks(Expression<Func<Task, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Tasks.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddTask(DT.Task dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Tasks.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        foreach (Guid pluginId in dto.PluginsNeededIds) {
+          db.RequiredPlugins.InsertOnSubmit(new RequiredPlugin() { TaskId = entity.TaskId, PluginId = pluginId });
+        }
+        db.SubmitChanges();
+        return entity.TaskId;
+      }
+    }
+
+    public void UpdateTask(DT.Task dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Tasks.FirstOrDefault(x => x.TaskId == dto.Id);
+        if (entity == null) db.Tasks.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        foreach (Guid pluginId in dto.PluginsNeededIds) {
+          if (db.RequiredPlugins.Count(p => p.PluginId == pluginId) == 0) {
+            db.RequiredPlugins.InsertOnSubmit(new RequiredPlugin() { TaskId = entity.TaskId, PluginId = pluginId });
+          }
+        }
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteTask(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Tasks.FirstOrDefault(x => x.TaskId == id);
+        if (entity != null) db.Tasks.DeleteOnSubmit(entity);
+        db.SubmitChanges(); // taskData and child tasks are deleted by db-trigger
+      }
+    }
+
+    /// <summary>
+    /// returns all parent tasks which are waiting for their child tasks to finish
+    /// </summary>
+    /// <param name="resourceIds">list of resourceids which for which the task should be valid</param>
+    /// <param name="count">maximum number of task to return</param>
+    /// <param name="finished">if true, all parent task which have FinishWhenChildJobsFinished=true are returned, otherwise only FinishWhenChildJobsFinished=false are returned</param>
+    /// <returns></returns>
+    public IEnumerable<DT.Task> GetParentTasks(IEnumerable<Guid> resourceIds, int count, bool finished) {
+      using (var db = CreateContext()) {
+        var query = from ar in db.AssignedResources
+                    where resourceIds.Contains(ar.ResourceId)
+                       && ar.Task.State == TaskState.Waiting
+                       && ar.Task.IsParentTask
+                       && (finished ? ar.Task.FinishWhenChildJobsFinished : !ar.Task.FinishWhenChildJobsFinished)
+                       && (from child in db.Tasks
+                           where child.ParentTaskId == ar.Task.TaskId
+                           select child.State == TaskState.Finished
+                               || child.State == TaskState.Aborted
+                               || child.State == TaskState.Failed).All(x => x)
+                       && (from child in db.Tasks // avoid returning WaitForChildTasks task where no child-task exist (yet)
+                           where child.ParentTaskId == ar.Task.TaskId
+                           select child).Count() > 0
+                    orderby ar.Task.Priority descending, db.Random()
+                    select DT.Convert.ToDto(ar.Task);
+        return count == 0 ? query.ToArray() : query.Take(count).ToArray();
+      }
+    }
+
+    public IEnumerable<DT.Task> GetWaitingTasks(DT.Slave slave, int count) {
+      using (var db = CreateContext()) {
+        var resourceIds = GetParentResources(slave.Id).Select(r => r.Id);
+        var waitingParentJobs = GetParentTasks(resourceIds, count, false);
+        if (count > 0 && waitingParentJobs.Count() >= count) return waitingParentJobs.Take(count).ToArray();
+
+        var query = from ar in db.AssignedResources
+                    where resourceIds.Contains(ar.ResourceId)
+                       && !(ar.Task.IsParentTask && ar.Task.FinishWhenChildJobsFinished)
+                       && ar.Task.State == TaskState.Waiting
+                       && ar.Task.CoresNeeded <= slave.FreeCores
+                       && ar.Task.MemoryNeeded <= slave.FreeMemory
+                    orderby ar.Task.Priority descending, db.Random() // take random task to avoid the race condition that occurs when this method is called concurrently (the same task would be returned)
+                    select DT.Convert.ToDto(ar.Task);
+        var waitingTasks = (count == 0 ? query : query.Take(count)).ToArray();
+        return waitingTasks.Union(waitingParentJobs).OrderByDescending(x => x.Priority);
+      }
+    }
+
+    public DT.Task UpdateTaskState(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception) {
+      using (var db = CreateContext()) {
+        var job = db.Tasks.SingleOrDefault(x => x.TaskId == taskId);
+        job.State = taskState;
+        db.StateLogs.InsertOnSubmit(new StateLog {
+          TaskId = taskId,
+          State = taskState,
+          SlaveId = slaveId,
+          UserId = userId,
+          Exception = exception,
+          DateTime = DateTime.Now
+        });
+        db.SubmitChanges();
+        job = db.Tasks.SingleOrDefault(x => x.TaskId == taskId);
+        return DT.Convert.ToDto(job);
+      }
+    }
+    #endregion
+
+    #region TaskData Methods
+    public DT.TaskData GetTaskData(Guid id) {
+      using (var db = CreateContext(true)) {
+        return DT.Convert.ToDto(db.TaskDatas.SingleOrDefault(x => x.TaskId == id));
+      }
+    }
+
+    public IEnumerable<DT.TaskData> GetTaskDatas(Expression<Func<TaskData, bool>> predicate) {
+      using (var db = CreateContext(true)) {
+        return db.TaskDatas.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddTaskData(DT.TaskData dto) {
+      using (var db = CreateContext(true)) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.TaskDatas.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.TaskId;
+      }
+    }
+
+    public void UpdateTaskData(DT.TaskData dto) {
+      using (var db = CreateContext(true)) {
+        var entity = db.TaskDatas.FirstOrDefault(x => x.TaskId == dto.TaskId);
+        if (entity == null) db.TaskDatas.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteTaskData(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.TaskDatas.FirstOrDefault(x => x.TaskId == id); // check if all the byte[] is loaded into memory here. otherwise work around to delete without loading it
+        if (entity != null) db.TaskDatas.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region StateLog Methods
+    public DT.StateLog GetStateLog(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.StateLogs.SingleOrDefault(x => x.StateLogId == id));
+      }
+    }
+
+    public IEnumerable<DT.StateLog> GetStateLogs(Expression<Func<StateLog, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.StateLogs.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddStateLog(DT.StateLog dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.StateLogs.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.StateLogId;
+      }
+    }
+
+    public void UpdateStateLog(DT.StateLog dto) {
+      using (var db = CreateContext()) {
+        var entity = db.StateLogs.FirstOrDefault(x => x.StateLogId == dto.Id);
+        if (entity == null) db.StateLogs.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteStateLog(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.StateLogs.FirstOrDefault(x => x.StateLogId == id);
+        if (entity != null) db.StateLogs.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Job Methods
+    public DT.Job GetJob(Guid id) {
+      using (var db = CreateContext()) {
+        return AddStatsToJob(db, DT.Convert.ToDto(db.Jobs.SingleOrDefault(x => x.JobId == id)));
+      }
+    }
+
+    private DT.Job AddStatsToJob(HiveDataContext db, DT.Job exp) {
+      if (exp == null)
+        return null;
+
+      var jobs = db.Tasks.Where(j => j.JobId == exp.Id);
+      exp.JobCount = jobs.Count();
+      exp.CalculatingCount = jobs.Count(j => j.State == TaskState.Calculating);
+      exp.FinishedCount = jobs.Count(j => j.State == TaskState.Finished);
+      return exp;
+    }
+
+    public IEnumerable<DT.Job> GetJobs(Expression<Func<Job, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Jobs.Where(predicate).Select(x => AddStatsToJob(db, DT.Convert.ToDto(x))).ToArray();
+      }
+    }
+
+    public Guid AddJob(DT.Job dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Jobs.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.JobId;
+      }
+    }
+
+    public void UpdateJob(DT.Job dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Jobs.FirstOrDefault(x => x.JobId == dto.Id);
+        if (entity == null) db.Jobs.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteJob(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Jobs.FirstOrDefault(x => x.JobId == id);
+        if (entity != null) db.Jobs.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region JobPermission Methods
+    public DT.JobPermission GetJobPermission(Guid jobId, Guid grantedUserId) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.JobPermissions.SingleOrDefault(x => x.JobId == jobId && x.GrantedUserId == grantedUserId));
+      }
+    }
+
+    public IEnumerable<DT.JobPermission> GetJobPermissions(Expression<Func<JobPermission, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.JobPermissions.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public void AddJobPermission(DT.JobPermission dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.JobPermissions.InsertOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void UpdateJobPermission(DT.JobPermission dto) {
+      using (var db = CreateContext()) {
+        var entity = db.JobPermissions.FirstOrDefault(x => x.JobId == dto.JobId && x.GrantedUserId == dto.GrantedUserId);
+        if (entity == null) db.JobPermissions.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteJobPermission(Guid jobId, Guid grantedUserId) {
+      using (var db = CreateContext()) {
+        var entity = db.JobPermissions.FirstOrDefault(x => x.JobId == jobId && x.GrantedUserId == grantedUserId);
+        if (entity != null) db.JobPermissions.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    /// <summary>
+    /// Sets the permissions for a experiment. makes sure that only one permission per user exists.
+    /// </summary>
+    public void SetJobPermission(Guid jobId, Guid grantedByUserId, Guid grantedUserId, Permission permission) {
+      using (var db = CreateContext()) {
+        JobPermission jobPermission = db.JobPermissions.SingleOrDefault(x => x.JobId == jobId && x.GrantedUserId == grantedUserId);
+        if (jobPermission != null) {
+          if (permission == Permission.NotAllowed) {
+            // not allowed, delete
+            db.JobPermissions.DeleteOnSubmit(jobPermission);
+          } else {
+            // update
+            jobPermission.Permission = permission;
+            jobPermission.GrantedByUserId = grantedByUserId; // update grantedByUserId, always the last "granter" is stored
+          }
+        } else {
+          // insert
+          if (permission != Permission.NotAllowed) {
+            jobPermission = new JobPermission() { JobId = jobId, GrantedByUserId = grantedByUserId, GrantedUserId = grantedUserId, Permission = permission };
+            db.JobPermissions.InsertOnSubmit(jobPermission);
+          }
+        }
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Plugin Methods
+    public DT.Plugin GetPlugin(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Plugins.SingleOrDefault(x => x.PluginId == id));
+      }
+    }
+
+    public IEnumerable<DT.Plugin> GetPlugins(Expression<Func<Plugin, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Plugins.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddPlugin(DT.Plugin dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Plugins.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.PluginId;
+      }
+    }
+
+    public void UpdatePlugin(DT.Plugin dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Plugins.FirstOrDefault(x => x.PluginId == dto.Id);
+        if (entity == null) db.Plugins.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeletePlugin(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Plugins.FirstOrDefault(x => x.PluginId == id);
+        if (entity != null) db.Plugins.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region PluginData Methods
+    public DT.PluginData GetPluginData(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.PluginDatas.SingleOrDefault(x => x.PluginDataId == id));
+      }
+    }
+
+    public IEnumerable<DT.PluginData> GetPluginDatas(Expression<Func<PluginData, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.PluginDatas.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddPluginData(DT.PluginData dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.PluginDatas.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.PluginDataId;
+      }
+    }
+
+    public void UpdatePluginData(DT.PluginData dto) {
+      using (var db = CreateContext()) {
+        var entity = db.PluginDatas.FirstOrDefault(x => x.PluginId == dto.PluginId);
+        if (entity == null) db.PluginDatas.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeletePluginData(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.PluginDatas.FirstOrDefault(x => x.PluginDataId == id);
+        if (entity != null) db.PluginDatas.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Slave Methods
+    public DT.Slave GetSlave(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Resources.OfType<Slave>().SingleOrDefault(x => x.ResourceId == id));
+      }
+    }
+
+    public IEnumerable<DT.Slave> GetSlaves(Expression<Func<Slave, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Resources.OfType<Slave>().Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddSlave(DT.Slave dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Resources.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.ResourceId;
+      }
+    }
+
+    public void UpdateSlave(DT.Slave dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == dto.Id);
+        if (entity == null) db.Resources.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteSlave(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == id);
+        if (entity != null) db.Resources.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region SlaveGroup Methods
+    public DT.SlaveGroup GetSlaveGroup(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Resources.OfType<SlaveGroup>().SingleOrDefault(x => x.ResourceId == id));
+      }
+    }
+
+    public IEnumerable<DT.SlaveGroup> GetSlaveGroups(Expression<Func<SlaveGroup, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Resources.OfType<SlaveGroup>().Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddSlaveGroup(DT.SlaveGroup dto) {
+      using (var db = CreateContext()) {
+        if (dto.Id == Guid.Empty)
+          dto.Id = Guid.NewGuid();
+        var entity = DT.Convert.ToEntity(dto);
+        db.Resources.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.ResourceId;
+      }
+    }
+
+    public void UpdateSlaveGroup(DT.SlaveGroup dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == dto.Id);
+        if (entity == null) db.Resources.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteSlaveGroup(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == id);
+        if (entity != null) {
+          if (db.Resources.Where(r => r.ParentResourceId == id).Count() > 0) {
+            throw new InvalidOperationException("Cannot delete SlaveGroup as long as there are Slaves in the group");
+          }
+          db.Resources.DeleteOnSubmit(entity);
+        }
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Resource Methods
+    public DT.Resource GetResource(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Resources.SingleOrDefault(x => x.ResourceId == id));
+      }
+    }
+
+    public IEnumerable<DT.Resource> GetResources(Expression<Func<Resource, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Resources.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddResource(DT.Resource dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Resources.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.ResourceId;
+      }
+    }
+
+    public void UpdateResource(DT.Resource dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.FirstOrDefault(x => x.ResourceId == dto.Id);
+        if (entity == null) db.Resources.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteResource(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.FirstOrDefault(x => x.ResourceId == id);
+        if (entity != null) db.Resources.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void AssignJobToResource(Guid jobId, Guid resourceId) {
+      using (var db = CreateContext()) {
+        var job = db.Tasks.Where(x => x.TaskId == jobId).Single();
+        job.AssignedResources.Add(new AssignedResource() { TaskId = jobId, ResourceId = resourceId });
+        db.SubmitChanges();
+      }
+    }
+
+    public IEnumerable<DT.Resource> GetAssignedResources(Guid jobId) {
+      using (var db = CreateContext()) {
+        var job = db.Tasks.Where(x => x.TaskId == jobId).Single();
+        return job.AssignedResources.Select(x => DT.Convert.ToDto(x.Resource)).ToArray();
+      }
+    }
+
+    /// <summary>
+    /// Returns all parent resources of a resource (the given resource is also added)
+    /// </summary>
+    public IEnumerable<DT.Resource> GetParentResources(Guid resourceId) {
+      using (var db = CreateContext()) {
+        var resources = new List<Resource>();
+        CollectParentResources(resources, db.Resources.Where(r => r.ResourceId == resourceId).Single());
+        return resources.Select(r => DT.Convert.ToDto(r)).ToArray();
+      }
+    }
+
+    private void CollectParentResources(List<Resource> resources, Resource resource) {
+      if (resource == null) return;
+      resources.Add(resource);
+      CollectParentResources(resources, resource.ParentResource);
+    }
+
+    /// <summary>
+    /// Returns all child resources of a resource (without the given resource)
+    /// </summary>
+    public IEnumerable<DT.Resource> GetChildResources(Guid resourceId) {
+      using (var db = CreateContext()) {
+        var childs = new List<DT.Resource>();
+        foreach (var child in db.Resources.Where(x => x.ParentResourceId == resourceId)) {
+          childs.Add(DT.Convert.ToDto(child));
+          childs.AddRange(GetChildResources(child.ResourceId));
+        }
+        return childs;
+      }
+    }
+
+    public IEnumerable<DT.Task> GetJobsByResourceId(Guid resourceId) {
+      using (var db = CreateContext()) {
+        var resources = GetChildResources(resourceId).Select(x => x.Id).ToList();
+        resources.Add(resourceId);
+
+        var jobs = db.Tasks.Where(j =>
+          j.State == TaskState.Calculating &&
+          j.StateLogs.OrderByDescending(x => x.DateTime).First().SlaveId.HasValue &&
+          resources.Contains(j.StateLogs.OrderByDescending(x => x.DateTime).First().SlaveId.Value));
+        return jobs.Select(j => DT.Convert.ToDto(j)).ToArray();
+      }
+    }
+    #endregion
+
+    #region Authorization Methods
+    public Permission GetPermissionForTask(Guid taskId, Guid userId) {
+      using (var db = CreateContext()) {
+        return GetPermissionForJob(GetJobForTask(taskId), userId);
+      }
+    }
+
+    public Permission GetPermissionForJob(Guid jobId, Guid userId) {
+      using (var db = CreateContext()) {
+        Job job = db.Jobs.SingleOrDefault(x => x.JobId == jobId);
+        if (job == null) return Permission.NotAllowed;
+        if (job.OwnerUserId == userId) return Permission.Full;
+        JobPermission permission = db.JobPermissions.SingleOrDefault(p => p.JobId == jobId && p.GrantedUserId == userId);
+        return permission != null ? permission.Permission : Permission.NotAllowed;
+      }
+    }
+
+    public Guid GetJobForTask(Guid taskId) {
+      using (var db = CreateContext()) {
+        return db.Tasks.Single(j => j.TaskId == taskId).JobId;
+      }
+    }
+    #endregion
+
+    #region Lifecycle Methods
+    public DateTime GetLastCleanup() {
+      using (var db = CreateContext()) {
+        var entity = db.Lifecycles.SingleOrDefault();
+        return entity != null ? entity.LastCleanup : DateTime.MinValue;
+      }
+    }
+
+    public void SetLastCleanup(DateTime datetime) {
+      using (var db = CreateContext()) {
+        var entity = db.Lifecycles.SingleOrDefault();
+        if (entity != null) {
+          entity.LastCleanup = datetime;
+        } else {
+          entity = new Lifecycle();
+          entity.LifecycleId = 0; // always only one entry with ID:0
+          entity.LastCleanup = datetime;
+          db.Lifecycles.InsertOnSubmit(entity);
+        }
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Downtime Methods
+    public DT.Downtime GetDowntime(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Downtimes.SingleOrDefault(x => x.DowntimeId == id));
+      }
+    }
+
+    public IEnumerable<DT.Downtime> GetDowntimes(Expression<Func<Downtime, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Downtimes.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddDowntime(DT.Downtime dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Downtimes.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.DowntimeId;
+      }
+    }
+
+    public void UpdateDowntime(DT.Downtime dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Downtimes.FirstOrDefault(x => x.DowntimeId == dto.Id);
+        if (entity == null) db.Downtimes.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteDowntime(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Downtimes.FirstOrDefault(x => x.DowntimeId == id);
+        if (entity != null) db.Downtimes.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Statistics Methods
+    public DT.Statistics GetStatistic(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Statistics.SingleOrDefault(x => x.StatisticsId == id));
+      }
+    }
+
+    public IEnumerable<DT.Statistics> GetStatistics(Expression<Func<Statistics, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Statistics.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddStatistics(DT.Statistics dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Statistics.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        foreach (var slaveStat in dto.SlaveStatistics) {
+          slaveStat.Id = entity.StatisticsId;
+          db.SlaveStatistics.InsertOnSubmit(DT.Convert.ToEntity(slaveStat));
+        }
+        if (dto.UserStatistics != null) {
+          foreach (var userStat in dto.UserStatistics) {
+            userStat.Id = entity.StatisticsId;
+            db.UserStatistics.InsertOnSubmit(DT.Convert.ToEntity(userStat));
+          }
+        }
+        db.SubmitChanges();
+        return entity.StatisticsId;
+      }
+    }
+
+    public void DeleteStatistics(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Statistics.FirstOrDefault(x => x.StatisticsId == id);
+        if (entity != null) db.Statistics.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public List<DT.UserStatistics> GetUserStatistics() {
+      using (var db = CreateContext()) {
+        var userStats = new Dictionary<Guid, DT.UserStatistics>();
+
+        var usedCoresByUser = from job in db.Tasks
+                              where job.State == TaskState.Calculating
+                              group job by job.Job.OwnerUserId into g
+                              select new { UserId = g.Key, UsedCores = g.Count() };
+
+        foreach (var item in usedCoresByUser) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].UsedCores += item.UsedCores;
+        }
+
+        var executionTimesByUser = from task in db.Tasks
+                                   group task by task.Job.OwnerUserId into g
+                                   select new { UserId = g.Key, ExecutionTime = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMs).Sum()) };
+        foreach (var item in executionTimesByUser) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].ExecutionTime += item.ExecutionTime;
+        }
+
+        // execution times only of finished task - necessary to compute efficieny
+        var executionTimesFinishedJobs = from job in db.Tasks
+                                         where job.State == TaskState.Finished
+                                         group job by job.Job.OwnerUserId into g
+                                         select new { UserId = g.Key, ExecutionTimeFinishedJobs = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMs).Sum()) };
+
+        foreach (var item in executionTimesFinishedJobs) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].ExecutionTimeFinishedJobs += item.ExecutionTimeFinishedJobs;
+        }
+
+        // start to end times only of finished task - necessary to compute efficiency
+        var startToEndTimesFinishedJobs = from job in db.Tasks
+                                          where job.State == TaskState.Finished
+                                          group job by job.Job.OwnerUserId into g
+                                          select new {
+                                            UserId = g.Key,
+                                            StartToEndTime = new TimeSpan(g.Select(x => x.StateLogs.OrderByDescending(sl => sl.DateTime).First().DateTime - x.StateLogs.OrderBy(sl => sl.DateTime).First().DateTime).Sum(ts => ts.Ticks))
+                                          };
+        foreach (var item in startToEndTimesFinishedJobs) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].StartToEndTime += item.StartToEndTime;
+        }
+
+        // also consider executiontimes of DeletedJobStats 
+        var deletedJobsExecutionTimesByUsers = from del in db.DeletedJobStatistics
+                                               group del by del.UserId into g
+                                               select new {
+                                                 UserId = g.Key,
+                                                 ExecutionTime = TimeSpan.FromSeconds(g.Select(x => x.ExecutionTimeS).Sum()),
+                                                 ExecutionTimeFinishedJobs = TimeSpan.FromSeconds(g.Select(x => x.ExecutionTimeSFinishedJobs).Sum()),
+                                                 StartToEndTime = TimeSpan.FromSeconds(g.Select(x => x.StartToEndTimeS).Sum())
+                                               };
+        foreach (var item in deletedJobsExecutionTimesByUsers) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].ExecutionTime += item.ExecutionTime;
+          userStats[item.UserId].ExecutionTimeFinishedJobs += item.ExecutionTimeFinishedJobs;
+          userStats[item.UserId].StartToEndTime += item.StartToEndTime;
+        }
+
+        return userStats.Values.ToList();
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void CollectChildTasks(HiveDataContext db, Guid parentTaskId, List<Task> collection) {
+      var tasks = db.Tasks.Where(j => j.ParentTaskId == parentTaskId);
+      foreach (var task in tasks) {
+        collection.Add(task);
+        if (task.IsParentTask)
+          CollectChildTasks(db, task.TaskId, collection);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HiveRoles.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HiveRoles.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HiveRoles.cs	(revision 7085)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Services.Hive {
+  public static class HiveRoles {
+    public const string Administrator = "Hive Administrator";
+    public const string Slave = "Hive Slave";
+    public const string Client = "Hive User";
+    public const string IsAllowedPrivileged = "Hive IsAllowedPrivileged";
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HiveService.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 7085)
@@ -0,0 +1,631 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.ServiceModel;
+using HeuristicLab.Services.Hive.DataTransfer;
+using HeuristicLab.Services.Hive.ServiceContracts;
+using DA = HeuristicLab.Services.Hive.DataAccess;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
+
+namespace HeuristicLab.Services.Hive {
+
+  /// <summary>
+  /// Implementation of the Hive service (interface <see cref="IHiveService"/>).
+  /// We need 'IgnoreExtensionDataObject' Attribute for the slave to work. 
+  /// </summary>
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, IgnoreExtensionDataObject = true)]
+  public class HiveService : IHiveService {
+    private IHiveDao dao {
+      get { return ServiceLocator.Instance.HiveDao; }
+    }
+    private IAuthenticationManager authen {
+      get { return ServiceLocator.Instance.AuthenticationManager; }
+    }
+    private IAuthorizationManager author {
+      get { return ServiceLocator.Instance.AuthorizationManager; }
+    }
+    private DataAccess.ITransactionManager trans {
+      get { return ServiceLocator.Instance.TransactionManager; }
+    }
+    private IEventManager eventManager {
+      get { return ServiceLocator.Instance.EventManager; }
+    }
+    private IUserManager userManager {
+      get { return ServiceLocator.Instance.UserManager; }
+    }
+    private HeartbeatManager heartbeatManager {
+      get { return ServiceLocator.Instance.HeartbeatManager; }
+    }
+
+    #region Task Methods
+    public Guid AddTask(Task task, TaskData taskData, IEnumerable<Guid> resourceIds) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      return trans.UseTransaction(() => {
+        task.Id = dao.AddTask(task);
+        taskData.TaskId = task.Id;
+        taskData.LastUpdate = DateTime.Now;
+        foreach (Guid slaveGroupId in resourceIds) {
+          dao.AssignJobToResource(task.Id, slaveGroupId);
+        }
+        dao.AddTaskData(taskData);
+        dao.UpdateTaskState(task.Id, DA.TaskState.Waiting, null, userManager.CurrentUserId, null);
+        return taskData.TaskId;
+      }, false, true);
+    }
+
+    public Guid AddChildTask(Guid parentTaskId, Task task, TaskData taskData) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      return trans.UseTransaction(() => {
+        task.ParentTaskId = parentTaskId;
+        return AddTask(task, taskData, dao.GetAssignedResources(parentTaskId).Select(x => x.Id));
+      }, false, true);
+    }
+
+    public Task GetTask(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Read);
+
+      return trans.UseTransaction(() => {
+        return dao.GetTask(taskId);
+      }, false, false);
+    }
+
+    public IEnumerable<Task> GetTasks() {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      var tasks = dao.GetTasks(x => true);
+      foreach (var task in tasks)
+        author.AuthorizeForTask(task.Id, Permission.Read);
+      return tasks;
+    }
+
+    public IEnumerable<LightweightTask> GetLightweightTasks(IEnumerable<Guid> taskIds) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+
+      return trans.UseTransaction(() => {
+        var tasks = dao.GetTasks(x => taskIds.Contains(x.TaskId)).Select(x => new LightweightTask(x)).ToArray();
+        foreach (var task in tasks)
+          author.AuthorizeForTask(task.Id, Permission.Read);
+        return tasks;
+      }, false, false);
+    }
+
+    public IEnumerable<LightweightTask> GetLightweightChildTasks(Guid? parentTaskId, bool recursive, bool includeParent) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+
+      return trans.UseTransaction(() => {
+        var tasks = GetChildTasks(parentTaskId, recursive, includeParent).Select(x => new LightweightTask(x)).ToArray();
+        foreach (var task in tasks)
+          author.AuthorizeForTask(task.Id, Permission.Read);
+        return tasks;
+      }, false, false);
+    }
+
+    public IEnumerable<LightweightTask> GetLightweightJobTasks(Guid jobId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      author.AuthorizeForJob(jobId, Permission.Read);
+
+      return trans.UseTransaction(() => {
+        return dao.GetTasks(x => x.JobId == jobId).Select(x => new LightweightTask(x)).ToArray();
+      }, false, false);
+    }
+
+    public TaskData GetTaskData(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Read);
+      return dao.GetTaskData(taskId);
+    }
+
+    public void UpdateTask(Task taskDto) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskDto.Id, Permission.Full);
+      trans.UseTransaction(() => {
+        dao.UpdateTask(taskDto);
+      });
+    }
+
+    public void UpdateTaskData(Task task, TaskData taskData) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(task.Id, Permission.Full);
+      author.AuthorizeForTask(taskData.TaskId, Permission.Full);
+      //trans.UseTransaction(() => { // cneumuel: try without transaction
+      taskData.LastUpdate = DateTime.Now;
+      dao.UpdateTask(task);
+      dao.UpdateTaskData(taskData);
+      //}, false, true);
+    }
+
+    public void DeleteTask(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Full);
+      trans.UseTransaction(() => {
+        dao.DeleteTask(taskId);
+      });
+    }
+
+    public void DeleteChildTasks(Guid parentTaskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(parentTaskId, Permission.Full);
+      trans.UseTransaction(() => {
+        var tasks = GetChildTasks(parentTaskId, true, false);
+        foreach (var task in tasks) {
+          dao.DeleteTask(task.Id);
+          dao.DeleteTaskData(task.Id);
+        };
+      });
+    }
+
+    public Task UpdateTaskState(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Full);
+      return trans.UseTransaction(() => {
+        Task task = dao.UpdateTaskState(taskId, DataTransfer.Convert.ToEntity(taskState), slaveId, userId, exception);
+
+        if (task.Command.HasValue && task.Command.Value == Command.Pause && task.State == TaskState.Paused) {
+          task.Command = null;
+        } else if (task.Command.HasValue && task.Command.Value == Command.Abort && task.State == TaskState.Aborted) {
+          task.Command = null;
+        } else if (task.Command.HasValue && task.Command.Value == Command.Stop && task.State == TaskState.Aborted) {
+          task.Command = null;
+        } else if (taskState == TaskState.Paused && !task.Command.HasValue) {
+          // slave paused and uploaded the task (no user-command) -> set waiting.
+          task = dao.UpdateTaskState(taskId, DataTransfer.Convert.ToEntity(TaskState.Waiting), slaveId, userId, exception);
+        }
+
+        dao.UpdateTask(task);
+        return task;
+      });
+    }
+
+    public IEnumerable<Task> GetTasksByResourceId(Guid resourceId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      var tasks = trans.UseTransaction(() => dao.GetJobsByResourceId(resourceId));
+      foreach (var task in tasks)
+        author.AuthorizeForTask(task.Id, Permission.Read);
+      return tasks;
+    }
+    #endregion
+
+    #region Task Control Methods
+    public void StopTask(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Full);
+      trans.UseTransaction(() => {
+        var task = dao.GetTask(taskId);
+        if (task.State == TaskState.Calculating || task.State == TaskState.Transferring) {
+          task.Command = Command.Stop;
+          dao.UpdateTask(task);
+        } else {
+          if (task.State != TaskState.Aborted && task.State != TaskState.Finished && task.State != TaskState.Failed) {
+            task = UpdateTaskState(taskId, TaskState.Aborted, null, null, string.Empty);
+          }
+        }
+      });
+    }
+
+    public void PauseTask(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Full);
+      trans.UseTransaction(() => {
+        var job = dao.GetTask(taskId);
+        if (job.State == TaskState.Calculating || job.State == TaskState.Transferring) {
+          job.Command = Command.Pause;
+          dao.UpdateTask(job);
+        } else {
+          job = UpdateTaskState(taskId, TaskState.Paused, null, null, string.Empty);
+        }
+      });
+    }
+
+    public void RestartTask(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Full);
+      trans.UseTransaction(() => {
+        Task task = dao.UpdateTaskState(taskId, DA.TaskState.Waiting, null, userManager.CurrentUserId, string.Empty);
+        task.Command = null;
+        dao.UpdateTask(task);
+      });
+    }
+    #endregion
+
+    #region Job Methods
+    public Job GetJob(Guid id) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      author.AuthorizeForJob(id, Permission.Read);
+      var job = dao.GetJobs(x =>
+            x.JobId == id
+            && (x.OwnerUserId == userManager.CurrentUserId || x.JobPermissions.Count(hep => hep.Permission != DA.Permission.NotAllowed && hep.GrantedUserId == userManager.CurrentUserId) > 0)
+          ).FirstOrDefault();
+      if (job != null) {
+        job.Permission = DT.Convert.ToDto(dao.GetPermissionForJob(job.Id, userManager.CurrentUserId));
+        job.OwnerUsername = userManager.GetUserById(job.OwnerUserId).UserName;
+      }
+      return job;
+    }
+
+    public IEnumerable<Job> GetJobs() {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      var jobs = dao.GetJobs(x => x.OwnerUserId == userManager.CurrentUserId || x.JobPermissions.Count(hep => hep.Permission != DA.Permission.NotAllowed && hep.GrantedUserId == userManager.CurrentUserId) > 0);
+      foreach (var job in jobs) {
+        author.AuthorizeForJob(job.Id, Permission.Read);
+        job.Permission = DT.Convert.ToDto(dao.GetPermissionForJob(job.Id, userManager.CurrentUserId));
+        job.OwnerUsername = userManager.GetUserById(job.OwnerUserId).UserName;
+      }
+      return jobs;
+    }
+
+    public IEnumerable<Job> GetAllJobs() {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      var jobs = dao.GetJobs(x => true);
+      foreach (var job in jobs) { // no authorization here, since this method is admin-only! (admin is allowed to read all task)
+        job.Permission = DT.Convert.ToDto(dao.GetPermissionForJob(job.Id, userManager.CurrentUserId));
+        job.OwnerUsername = userManager.GetUserById(job.OwnerUserId).UserName;
+      }
+      return jobs;
+    }
+
+    public Guid AddJob(Job jobDto) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      return trans.UseTransaction(() => {
+        jobDto.OwnerUserId = userManager.CurrentUserId;
+        jobDto.DateCreated = DateTime.Now;
+        return dao.AddJob(jobDto);
+      });
+    }
+
+    public void UpdateJob(Job jobDto) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      author.AuthorizeForJob(jobDto.Id, Permission.Full);
+      trans.UseTransaction(() => {
+        dao.UpdateJob(jobDto);
+      });
+    }
+
+    public void DeleteJob(Guid jobId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      author.AuthorizeForJob(jobId, Permission.Full);
+      trans.UseTransaction(() => {
+        dao.DeleteJob(jobId); // child task will be deleted by db-trigger
+      });
+    }
+    #endregion
+
+    #region JobPermission Methods
+    public void GrantPermission(Guid jobId, Guid grantedUserId, Permission permission) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      trans.UseTransaction(() => {
+        Job job = dao.GetJob(jobId);
+        if (job == null) throw new FaultException<FaultReason>(new FaultReason("Could not find task with id " + jobId));
+        Permission perm = DT.Convert.ToDto(dao.GetPermissionForJob(job.Id, userManager.CurrentUserId));
+        if (perm != Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permissions for this experiment"));
+        dao.SetJobPermission(jobId, userManager.CurrentUserId, grantedUserId, DT.Convert.ToEntity(permission));
+      });
+    }
+
+    public void RevokePermission(Guid jobId, Guid grantedUserId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      trans.UseTransaction(() => {
+        Job job = dao.GetJob(jobId);
+        if (job == null) throw new FaultException<FaultReason>(new FaultReason("Could not find task with id " + jobId));
+        DA.Permission perm = dao.GetPermissionForJob(job.Id, userManager.CurrentUserId);
+        if (perm != DA.Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permissions for this experiment"));
+        dao.SetJobPermission(jobId, userManager.CurrentUserId, grantedUserId, DA.Permission.NotAllowed);
+      });
+    }
+    public IEnumerable<JobPermission> GetJobPermissions(Guid jobId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      return trans.UseTransaction(() => {
+        DA.Permission currentUserPermission = dao.GetPermissionForJob(jobId, userManager.CurrentUserId);
+        if (currentUserPermission != DA.Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to list permissions for this experiment"));
+        return dao.GetJobPermissions(x => x.JobId == jobId);
+      });
+    }
+
+    public bool IsAllowedPrivileged() {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      return authen.IsInRole(HiveRoles.IsAllowedPrivileged);
+    }
+    #endregion
+
+    #region Login Methods
+    public void Hello(Slave slaveInfo) {
+      authen.AuthenticateForAnyRole(HiveRoles.Slave);
+      trans.UseTransaction(() => {
+        var slave = dao.GetSlave(slaveInfo.Id);
+
+        if (slave == null) {
+          dao.AddSlave(slaveInfo);
+        } else {
+          var dbSlave = dao.GetSlave(slaveInfo.Id);
+
+          dbSlave.Name = slaveInfo.Name;
+          dbSlave.Description = slaveInfo.Description;
+
+          dbSlave.Cores = slaveInfo.Cores;
+          dbSlave.CpuArchitecture = slaveInfo.CpuArchitecture;
+          dbSlave.CpuSpeed = slaveInfo.CpuSpeed;
+          dbSlave.FreeCores = slaveInfo.FreeCores;
+          dbSlave.FreeMemory = slaveInfo.FreeMemory;
+          dbSlave.Memory = slaveInfo.Memory;
+          dbSlave.OperatingSystem = slaveInfo.OperatingSystem;
+
+          dbSlave.LastHeartbeat = DateTime.Now;
+          dbSlave.SlaveState = SlaveState.Idle;
+
+          // don't update those properties: dbSlave.IsAllowedToCalculate, dbSlave.ParentResourceId 
+
+          dao.UpdateSlave(dbSlave);
+        }
+      });
+    }
+
+    public void GoodBye(Guid slaveId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Slave);
+      trans.UseTransaction(() => {
+        var slave = dao.GetSlave(slaveId);
+        if (slave != null) {
+          slave.SlaveState = SlaveState.Offline;
+          dao.UpdateSlave(slave);
+        }
+      });
+    }
+    #endregion
+
+    #region Heartbeat Methods
+    public List<MessageContainer> Heartbeat(Heartbeat heartbeat) {
+      authen.AuthenticateForAnyRole(HiveRoles.Slave);
+      TriggerEventManager(false);
+      return trans.UseTransaction(() => heartbeatManager.ProcessHeartbeat(heartbeat));
+    }
+    #endregion
+
+    #region Plugin Methods
+    public Guid AddPlugin(Plugin plugin, List<PluginData> pluginDatas) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      return trans.UseTransaction(() => {
+        plugin.UserId = userManager.CurrentUserId;
+        plugin.DateCreated = DateTime.Now;
+
+        var existing = dao.GetPlugins(x => x.Hash != null).Where(x => x.Hash.SequenceEqual(plugin.Hash));
+        if (existing.Count() > 0) {
+          // a plugin already exists.
+          throw new FaultException<PluginAlreadyExistsFault>(new PluginAlreadyExistsFault(existing.Single().Id));
+        }
+
+        Guid pluginId = dao.AddPlugin(plugin);
+        foreach (PluginData pluginData in pluginDatas) {
+          pluginData.PluginId = pluginId;
+          dao.AddPluginData(pluginData);
+        }
+        return pluginId;
+      });
+    }
+
+    public Plugin GetPlugin(Guid pluginId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      return dao.GetPlugin(pluginId);
+    }
+
+    public Plugin GetPluginByHash(byte[] hash) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      return dao.GetPlugins(x => x.Hash == hash).FirstOrDefault();
+    }
+
+    // note: this is a possible security problem, since a client is able to download all plugins, which may contain proprietary code (which can be disassembled)
+    //       change so that only with GetPluginByHash it is possible to download plugins
+    public IEnumerable<Plugin> GetPlugins() {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      return dao.GetPlugins(x => x.Hash != null);
+    }
+
+    public IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      var pluginDatas = new List<PluginData>();
+      return trans.UseTransaction(() => {
+        foreach (Guid guid in pluginIds) {
+          pluginDatas.AddRange(dao.GetPluginDatas(x => x.PluginId == guid).ToList());
+        }
+        return pluginDatas;
+      });
+    }
+
+    public void DeletePlugin(Guid pluginId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      dao.DeletePlugin(pluginId);
+    }
+    #endregion
+
+    #region Slave Methods
+    public int GetNewHeartbeatInterval(Guid slaveId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Slave);
+      Slave s = dao.GetSlave(slaveId);
+      if (s != null) {
+        return s.HbInterval;
+      } else {
+        return -1;
+      }
+    }
+
+    public Guid AddSlave(Slave slave) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      return trans.UseTransaction(() => dao.AddSlave(slave));
+    }
+
+    public Guid AddSlaveGroup(SlaveGroup slaveGroup) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      return trans.UseTransaction(() => dao.AddSlaveGroup(slaveGroup));
+    }
+
+    public Slave GetSlave(Guid slaveId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      return dao.GetSlave(slaveId);
+    }
+
+    public SlaveGroup GetSlaveGroup(Guid slaveGroupId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      return dao.GetSlaveGroup(slaveGroupId);
+    }
+
+    public IEnumerable<Slave> GetSlaves() {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      return dao.GetSlaves(x => true);
+    }
+
+    public IEnumerable<SlaveGroup> GetSlaveGroups() {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      return dao.GetSlaveGroups(x => true);
+    }
+
+    public void UpdateSlave(Slave slave) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      trans.UseTransaction(() => {
+        dao.UpdateSlave(slave);
+      });
+    }
+
+    public void UpdateSlaveGroup(SlaveGroup slaveGroup) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      trans.UseTransaction(() => {
+        dao.UpdateSlaveGroup(slaveGroup);
+      });
+    }
+
+    public void DeleteSlave(Guid slaveId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      trans.UseTransaction(() => {
+        dao.DeleteSlave(slaveId);
+      });
+    }
+
+    public void DeleteSlaveGroup(Guid slaveGroupId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      trans.UseTransaction(() => {
+        dao.DeleteSlaveGroup(slaveGroupId);
+      });
+    }
+
+    public void AddResourceToGroup(Guid slaveGroupId, Guid resourceId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      trans.UseTransaction(() => {
+        var resource = dao.GetResource(resourceId);
+        resource.ParentResourceId = slaveGroupId;
+        dao.UpdateResource(resource);
+      });
+    }
+
+    public void RemoveResourceFromGroup(Guid slaveGroupId, Guid resourceId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      trans.UseTransaction(() => {
+        var resource = dao.GetResource(resourceId);
+        resource.ParentResourceId = null;
+        dao.UpdateResource(resource);
+      });
+    }
+
+    public Guid GetResourceId(string resourceName) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      return trans.UseTransaction(() => {
+        var resource = dao.GetResources(x => x.Name == resourceName).FirstOrDefault();
+        if (resource != null) {
+          return resource.Id;
+        } else {
+          return Guid.Empty;
+        }
+      });
+    }
+
+    public void TriggerEventManager(bool force) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Slave);
+      // use a serializable transaction here to ensure not two threads execute this simultaniously (mutex-lock would not work since IIS may use multiple AppDomains)
+      trans.UseTransaction(() => {
+        DateTime lastCleanup = dao.GetLastCleanup();
+        if (force || DateTime.Now - lastCleanup > TimeSpan.FromSeconds(59)) {
+          dao.SetLastCleanup(DateTime.Now);
+          eventManager.Cleanup();
+        }
+      }, true);
+    }
+    #endregion
+
+    #region Downtime Methods
+    public Guid AddDowntime(Downtime downtime) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      return trans.UseTransaction(() => dao.AddDowntime(downtime));
+    }
+
+    public void DeleteDowntime(Guid downtimeId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      trans.UseTransaction(() => {
+        dao.DeleteDowntime(downtimeId);
+      });
+    }
+
+    public void UpdateDowntime(Downtime downtime) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      trans.UseTransaction(() => {
+        dao.UpdateDowntime(downtime);
+      });
+    }
+
+    public IEnumerable<Downtime> GetDowntimesForResource(Guid resourceId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      return trans.UseTransaction(() => dao.GetDowntimes(x => x.ResourceId == resourceId));
+    }
+    #endregion
+
+    #region User Methods
+    public string GetUsernameByUserId(Guid userId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      var user = ServiceLocator.Instance.UserManager.GetUserById(userId);
+      if (user != null)
+        return user.UserName;
+      else
+        return null;
+    }
+
+    public Guid GetUserIdByUsername(string username) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      var user = ServiceLocator.Instance.UserManager.GetUserByName(username);
+      return user != null ? (Guid)user.ProviderUserKey : Guid.Empty;
+    }
+    #endregion
+
+    #region Helper Methods
+    private IEnumerable<Task> GetChildTasks(Guid? parentTaskId, bool recursive, bool includeParent) {
+      var tasks = new List<Task>(dao.GetTasks(x => parentTaskId == null ? !x.ParentTaskId.HasValue : x.ParentTaskId.Value == parentTaskId));
+
+      if (recursive) {
+        var childs = new List<Task>();
+        foreach (var task in tasks) {
+          childs.AddRange(GetChildTasks(task.Id, recursive, false));
+        }
+        tasks.AddRange(childs);
+      }
+
+      if (includeParent) tasks.Add(GetTask(parentTaskId.Value));
+      return tasks;
+    }
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthenticationManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthenticationManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthenticationManager.cs	(revision 7085)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Services.Hive {
+  public interface IAuthenticationManager {
+    bool IsInRole(string role);
+    bool IsInAnyRole(params string[] roles);
+    bool IsInAllRoles(params string[] roles);
+    void AuthenticateForAnyRole(params string[] roles);
+    void AuthenticateForAllRoles(params string[] roles);
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthorizationManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthorizationManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthorizationManager.cs	(revision 7085)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Services.Hive.DataTransfer;
+
+namespace HeuristicLab.Services.Hive {
+  public interface IAuthorizationManager {
+    /// <summary>
+    /// Compares the current UserId with the given userId and takes appropriate actions if the mismatch
+    /// </summary>
+    void Authorize(Guid userId);
+
+    void AuthorizeForTask(Guid taskId, Permission requiredPermission);
+
+    void AuthorizeForJob(Guid jobId, Permission requiredPermission);
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IEventManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IEventManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IEventManager.cs	(revision 7085)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Services.Hive {
+  /// <summary>
+  /// The only object in hive which holds a state. Must allow restarts without resetting all task
+  /// </summary>
+  public interface IEventManager {
+    void Cleanup();
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs	(revision 7085)
@@ -0,0 +1,146 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using HeuristicLab.Services.Hive.DataAccess;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
+namespace HeuristicLab.Services.Hive {
+  public interface IHiveDao {
+    #region Task Methods
+    DT.Task GetTask(Guid id);
+    IEnumerable<DT.Task> GetTasks(Expression<Func<Task, bool>> predicate);
+    Guid AddTask(DT.Task dto);
+    void UpdateTask(DT.Task dto);
+    void DeleteTask(Guid id);
+    IEnumerable<DT.Task> GetWaitingTasks(DT.Slave slave, int count);
+    IEnumerable<DT.Task> GetParentTasks(IEnumerable<Guid> resourceIds, int count, bool finished);
+    DT.Task UpdateTaskState(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception);
+    #endregion
+
+    #region TaskData Methods
+    DT.TaskData GetTaskData(Guid id);
+    IEnumerable<DT.TaskData> GetTaskDatas(Expression<Func<TaskData, bool>> predicate);
+    Guid AddTaskData(DT.TaskData dto);
+    void UpdateTaskData(DT.TaskData dto);
+    void DeleteTaskData(Guid id);
+    #endregion
+
+    #region StateLog Methods
+    DT.StateLog GetStateLog(Guid id);
+    IEnumerable<DT.StateLog> GetStateLogs(Expression<Func<StateLog, bool>> predicate);
+    Guid AddStateLog(DT.StateLog dto);
+    void UpdateStateLog(DT.StateLog dto);
+    void DeleteStateLog(Guid id);
+    #endregion
+
+    #region Job Methods
+    DT.Job GetJob(Guid id);
+    IEnumerable<DT.Job> GetJobs(Expression<Func<Job, bool>> predicate);
+    Guid AddJob(DT.Job dto);
+    void UpdateJob(DT.Job dto);
+    void DeleteJob(Guid id);
+    #endregion
+
+    #region JobPermission Methods
+    DT.JobPermission GetJobPermission(Guid jobId, Guid grantedUserId);
+    IEnumerable<DT.JobPermission> GetJobPermissions(Expression<Func<JobPermission, bool>> predicate);
+    void AddJobPermission(DT.JobPermission dto);
+    void UpdateJobPermission(DT.JobPermission dto);
+    void DeleteJobPermission(Guid jobId, Guid grantedUserId);
+    void SetJobPermission(Guid jobId, Guid grantedByUserId, Guid grantedUserId, Permission permission);
+    #endregion
+
+    #region Plugin Methods
+    DT.Plugin GetPlugin(Guid id);
+    IEnumerable<DT.Plugin> GetPlugins(Expression<Func<Plugin, bool>> predicate);
+    Guid AddPlugin(DT.Plugin dto);
+    void UpdatePlugin(DT.Plugin dto);
+    void DeletePlugin(Guid id);
+    #endregion
+
+    #region PluginData Methods
+    DT.PluginData GetPluginData(Guid id);
+    IEnumerable<DT.PluginData> GetPluginDatas(Expression<Func<PluginData, bool>> predicate);
+    Guid AddPluginData(DT.PluginData dto);
+    void UpdatePluginData(DT.PluginData dto);
+    void DeletePluginData(Guid id);
+    #endregion
+
+    #region Slave Methods
+    DT.Slave GetSlave(Guid id);
+    IEnumerable<DT.Slave> GetSlaves(Expression<Func<Slave, bool>> predicate);
+    Guid AddSlave(DT.Slave dto);
+    void UpdateSlave(DT.Slave dto);
+    void DeleteSlave(Guid id);
+    #endregion
+
+    #region SlaveGroup Methods
+    DT.SlaveGroup GetSlaveGroup(Guid id);
+    IEnumerable<DT.SlaveGroup> GetSlaveGroups(Expression<Func<SlaveGroup, bool>> predicate);
+    Guid AddSlaveGroup(DT.SlaveGroup dto);
+    void UpdateSlaveGroup(DT.SlaveGroup dto);
+    void DeleteSlaveGroup(Guid id);
+    #endregion
+
+    #region Resource Methods
+    DT.Resource GetResource(Guid id);
+    IEnumerable<DT.Resource> GetResources(Expression<Func<Resource, bool>> predicate);
+    Guid AddResource(DT.Resource dto);
+    void UpdateResource(DT.Resource dto);
+    void DeleteResource(Guid id);
+    void AssignJobToResource(Guid jobId, Guid resourceId);
+    IEnumerable<DT.Resource> GetAssignedResources(Guid jobId);
+    IEnumerable<DT.Resource> GetParentResources(Guid resourceId);
+    IEnumerable<DT.Resource> GetChildResources(Guid resourceId);
+    IEnumerable<DT.Task> GetJobsByResourceId(Guid resourceId);
+    #endregion
+
+    #region Authorization Methods
+    Permission GetPermissionForTask(Guid taskId, Guid userId);
+    Permission GetPermissionForJob(Guid jobId, Guid userId);
+    Guid GetJobForTask(Guid taskId);
+    #endregion
+
+    #region Lifecycle Methods
+    DateTime GetLastCleanup();
+    void SetLastCleanup(DateTime datetime);
+    #endregion
+
+    #region Downtime Methods
+    DT.Downtime GetDowntime(Guid id);
+    IEnumerable<DT.Downtime> GetDowntimes(Expression<Func<Downtime, bool>> predicate);
+    Guid AddDowntime(DT.Downtime dto);
+    void UpdateDowntime(DT.Downtime dto);
+    void DeleteDowntime(Guid id);
+    #endregion
+
+    #region Statistics Methods
+    DT.Statistics GetStatistic(Guid id);
+    IEnumerable<DT.Statistics> GetStatistics(Expression<Func<Statistics, bool>> predicate);
+    Guid AddStatistics(DT.Statistics dto);
+    void DeleteStatistics(Guid id);
+    List<DT.UserStatistics> GetUserStatistics();
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IServiceLocator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IServiceLocator.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IServiceLocator.cs	(revision 7085)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Services.Hive.DataAccess;
+
+namespace HeuristicLab.Services.Hive {
+  public interface IServiceLocator {
+    IAuthenticationManager AuthenticationManager { get; }
+    IAuthorizationManager AuthorizationManager { get; }
+    IHiveDao HiveDao { get; }
+    IEventManager EventManager { get; }
+    ITransactionManager TransactionManager { get; }
+    IUserManager UserManager { get; }
+    HeartbeatManager HeartbeatManager { get; }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IUserManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IUserManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Interfaces/IUserManager.cs	(revision 7085)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Web.Security;
+
+namespace HeuristicLab.Services.Hive {
+  public interface IUserManager {
+    MembershipUser CurrentUser { get; }
+    Guid CurrentUserId { get; }
+    MembershipUser GetUserByName(string username);
+    MembershipUser GetUserById(Guid userId);
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/AuthenticationManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/AuthenticationManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/AuthenticationManager.cs	(revision 7085)
@@ -0,0 +1,46 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Linq;
+using System.Security.Authentication;
+using System.Web.Security;
+
+namespace HeuristicLab.Services.Hive {
+  public class AuthenticationManager : HeuristicLab.Services.Hive.IAuthenticationManager {
+    public bool IsInRole(string role) {
+      return Roles.IsUserInRole(role);
+    }
+    public bool IsInAnyRole(params string[] roles) {
+      return roles.Any(x => Roles.IsUserInRole(x));
+    }
+    public bool IsInAllRoles(params string[] roles) {
+      return roles.All(x => Roles.IsUserInRole(x));
+    }
+    public void AuthenticateForAnyRole(params string[] roles) {
+      if (!IsInAnyRole(roles))
+        throw new AuthenticationException("Could not authenticate user for any role required.");
+    }
+    public void AuthenticateForAllRoles(params string[] roles) {
+      if (!IsInAllRoles(roles))
+        throw new AuthenticationException("Could not authenticate user for all roles required.");
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs	(revision 7085)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Security;
+using HeuristicLab.Services.Hive.DataAccess;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
+
+namespace HeuristicLab.Services.Hive {
+  public class AuthorizationManager : IAuthorizationManager {
+    public void Authorize(Guid userId) {
+      if (userId != ServiceLocator.Instance.UserManager.CurrentUserId)
+        throw new SecurityException("Current user is not authorized to access object");
+    }
+
+    public void AuthorizeForTask(Guid taskId, DT.Permission requiredPermission) {
+      if (ServiceLocator.Instance.AuthenticationManager.IsInRole(HiveRoles.Slave)) return; // slave-users can access all tasks
+
+      Permission permission = ServiceLocator.Instance.HiveDao.GetPermissionForTask(taskId, ServiceLocator.Instance.UserManager.CurrentUserId);
+      if (permission == Permission.NotAllowed || (permission != DT.Convert.ToEntity(requiredPermission) && DT.Convert.ToEntity(requiredPermission) == Permission.Full))
+        throw new SecurityException("Current user is not authorized to access task");
+    }
+
+    public void AuthorizeForJob(Guid jobId, DT.Permission requiredPermission) {
+      Permission permission = ServiceLocator.Instance.HiveDao.GetPermissionForJob(jobId, ServiceLocator.Instance.UserManager.CurrentUserId);
+      if (permission == Permission.NotAllowed || (permission != DT.Convert.ToEntity(requiredPermission) && DT.Convert.ToEntity(requiredPermission) == Permission.Full))
+        throw new SecurityException("Current user is not authorized to access task");
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs	(revision 7085)
@@ -0,0 +1,122 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Services.Hive.DataAccess;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
+
+namespace HeuristicLab.Services.Hive {
+  /// <summary>
+  /// This class offers methods for cleaning up offline slaves and task
+  /// </summary>
+  public class EventManager : IEventManager {
+    private IHiveDao dao {
+      get { return ServiceLocator.Instance.HiveDao; }
+    }
+    private IAuthorizationManager auth {
+      get { return ServiceLocator.Instance.AuthorizationManager; }
+    }
+    private ILogger log {
+      get { return LogFactory.GetLogger(this.GetType().Namespace); }
+    }
+
+    public void Cleanup() {
+      log.Log("EventManager.Cleanup()");
+      SetTimeoutSlavesOffline();
+      SetTimeoutTasksWaiting();
+      FinishParentTasks();
+      UpdateStatistics();
+    }
+
+    private void UpdateStatistics() {
+      var slaves = dao.GetSlaves(x => x.SlaveState == SlaveState.Calculating || x.SlaveState == SlaveState.Idle);
+
+      var stats = new DataTransfer.Statistics();
+      stats.TimeStamp = DateTime.Now;
+      var slaveStats = new List<DT.SlaveStatistics>();
+      foreach (var slave in slaves) {
+        slaveStats.Add(new DT.SlaveStatistics() {
+          SlaveId = slave.Id,
+          Cores = slave.Cores.HasValue ? slave.Cores.Value : 0,
+          FreeCores = slave.FreeCores.HasValue ? slave.FreeCores.Value : 0,
+          Memory = slave.Memory.HasValue ? slave.Memory.Value : 0,
+          FreeMemory = slave.FreeMemory.HasValue ? slave.FreeMemory.Value : 0,
+          CpuUtilization = slave.CpuUtilization
+        });
+      }
+      stats.SlaveStatistics = slaveStats;
+      //collecting user statistics slows down the db and results in timeouts. 
+      //we have to find another way to deal with this.  
+      //until then the next line is commented out...
+      //stats.UserStatistics = dao.GetUserStatistics();
+      dao.AddStatistics(stats);
+    }
+
+    /// <summary>
+    /// Searches for slaves which are timed out, puts them and their task offline
+    /// </summary>
+    private void SetTimeoutSlavesOffline() {
+      var slaves = dao.GetSlaves(x => x.SlaveState != SlaveState.Offline);
+      foreach (DT.Slave slave in slaves) {
+        if (!slave.LastHeartbeat.HasValue || (DateTime.Now - slave.LastHeartbeat.Value) > HeuristicLab.Services.Hive.Properties.Settings.Default.SlaveHeartbeatTimeout) {
+          slave.SlaveState = DT.SlaveState.Offline;
+          SetTasksWaiting(slave.Id);
+          dao.UpdateSlave(slave);
+        }
+      }
+    }
+
+    /// <summary>
+    /// Looks for parent tasks which have FinishWhenChildJobsFinished and set their state to finished
+    /// </summary>
+    private void FinishParentTasks() {
+      var parentTasksToFinish = dao.GetParentTasks(dao.GetResources(x => true).Select(x => x.Id), 0, true);
+      foreach (var task in parentTasksToFinish) {
+        dao.UpdateTaskState(task.Id, TaskState.Finished, null, null, string.Empty);
+      }
+    }
+
+    private void SetTasksWaiting(Guid slaveId) {
+      var tasks = dao.GetTasks(x => x.State == TaskState.Calculating).Where(x => x.StateLog.Last().SlaveId == slaveId);
+      foreach (var j in tasks) {
+        DT.Task task = dao.UpdateTaskState(j.Id, TaskState.Waiting, slaveId, null, "Slave timed out.");
+        task.Command = null;
+        dao.UpdateTask(task);
+      }
+    }
+
+    /// <summary>
+    /// Looks for task which have not sent heartbeats for some time and reschedules them for calculation
+    /// </summary>
+    private void SetTimeoutTasksWaiting() {
+      var tasks = dao.GetTasks(x => (x.State == TaskState.Calculating && (DateTime.Now - x.LastHeartbeat) > HeuristicLab.Services.Hive.Properties.Settings.Default.CalculatingJobHeartbeatTimeout)
+                               || (x.State == TaskState.Transferring && (DateTime.Now - x.LastHeartbeat) > HeuristicLab.Services.Hive.Properties.Settings.Default.TransferringJobHeartbeatTimeout));
+      foreach (var j in tasks) {
+        DT.Task task = dao.UpdateTaskState(j.Id, TaskState.Waiting, null, null, "Slave timed out.");
+        task.Command = null;
+        dao.UpdateTask(task);
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/HeartbeatManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/HeartbeatManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/HeartbeatManager.cs	(revision 7085)
@@ -0,0 +1,155 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Services.Hive.DataTransfer;
+using DA = HeuristicLab.Services.Hive.DataAccess;
+
+namespace HeuristicLab.Services.Hive {
+  public class HeartbeatManager {
+    private IHiveDao dao {
+      get { return ServiceLocator.Instance.HiveDao; }
+    }
+    private IAuthorizationManager auth {
+      get { return ServiceLocator.Instance.AuthorizationManager; }
+    }
+
+    /// <summary>
+    /// This method will be called every time a slave sends a heartbeat (-> very often; concurrency is important!)
+    /// </summary>
+    /// <returns>a list of actions the slave should do</returns>
+    public List<MessageContainer> ProcessHeartbeat(Heartbeat heartbeat) {
+      List<MessageContainer> actions = new List<MessageContainer>();
+      Slave slave = dao.GetSlave(heartbeat.SlaveId);
+      if (slave == null) {
+        actions.Add(new MessageContainer(MessageContainer.MessageType.SayHello));
+      } else {
+        Slave s = dao.GetSlave(heartbeat.SlaveId);
+        if (s != null) {
+          if (heartbeat.HbInterval != s.HbInterval) {
+            actions.Add(new MessageContainer(MessageContainer.MessageType.NewHBInterval));
+          }
+        }
+
+        // update slave data
+        slave.FreeCores = heartbeat.FreeCores;
+        slave.FreeMemory = heartbeat.FreeMemory;
+        slave.CpuUtilization = heartbeat.CpuUtilization;
+        slave.IsAllowedToCalculate = SlaveIsAllowedToCalculate(slave.Id);
+        slave.SlaveState = (heartbeat.JobProgress != null && heartbeat.JobProgress.Count > 0) ? SlaveState.Calculating : SlaveState.Idle;
+        slave.LastHeartbeat = DateTime.Now;
+        dao.UpdateSlave(slave);
+
+        // update task data
+        actions.AddRange(UpdateTasks(heartbeat, slave.IsAllowedToCalculate));
+
+        // assign new task
+        if (heartbeat.AssignJob && slave.IsAllowedToCalculate && heartbeat.FreeCores > 0) {
+          var availableJobs = dao.GetWaitingTasks(slave, 1);
+          if (availableJobs.Count() > 0) {
+            var job = availableJobs.First();
+            if (AssignJob(slave, job))
+              actions.Add(new MessageContainer(MessageContainer.MessageType.CalculateTask, job.Id));
+          }
+        }
+      }
+      return actions;
+    }
+
+    // returns true if assignment was successful
+    private bool AssignJob(Slave slave, Task task) {
+      // load task again and check if it is still available (this is an attempt to reduce the race condition which causes multiple heartbeats to get the same task assigned)
+      if (dao.GetTask(task.Id).State != TaskState.Waiting) return false;
+
+      task = dao.UpdateTaskState(task.Id, DataAccess.TaskState.Transferring, slave.Id, null, null);
+
+      // from now on the task has some time to send the next heartbeat (ApplicationConstants.TransferringJobHeartbeatTimeout)
+      task.LastHeartbeat = DateTime.Now;
+      dao.UpdateTask(task);
+      return true;
+    }
+
+    /// <summary>
+    /// Update the progress of each task
+    /// Checks if all the task sent by heartbeat are supposed to be calculated by this slave
+    /// </summary>
+    private IEnumerable<MessageContainer> UpdateTasks(Heartbeat heartbeat, bool IsAllowedToCalculate) {
+      List<MessageContainer> actions = new List<MessageContainer>();
+
+      if (heartbeat.JobProgress == null)
+        return actions;
+
+      if (!IsAllowedToCalculate && heartbeat.JobProgress.Count != 0) {
+        actions.Add(new MessageContainer(MessageContainer.MessageType.PauseAll));
+      } else {
+        // process the jobProgresses
+        foreach (var jobProgress in heartbeat.JobProgress) {
+          Task curJob = dao.GetTask(jobProgress.Key);
+          if (curJob == null) {
+            // task does not exist in db
+            actions.Add(new MessageContainer(MessageContainer.MessageType.AbortTask, jobProgress.Key));
+            DA.LogFactory.GetLogger(this.GetType().Namespace).Log("Job does not exist in DB: " + jobProgress.Key);
+          } else {
+            if (curJob.CurrentStateLog.SlaveId == Guid.Empty || curJob.CurrentStateLog.SlaveId != heartbeat.SlaveId) {
+              // assigned slave does not match heartbeat
+              actions.Add(new MessageContainer(MessageContainer.MessageType.AbortTask, curJob.Id));
+              DA.LogFactory.GetLogger(this.GetType().Namespace).Log("The slave " + heartbeat.SlaveId + " is not supposed to calculate Job: " + curJob);
+            } else if (!TaskIsAllowedToBeCalculatedBySlave(heartbeat.SlaveId, curJob)) {
+              // assigned resources ids of task do not match with slaveId (and parent resourceGroupIds); this might happen when slave is moved to different group
+              actions.Add(new MessageContainer(MessageContainer.MessageType.PauseTask, curJob.Id));
+            } else {
+              // save task execution time
+              curJob.ExecutionTime = jobProgress.Value;
+              curJob.LastHeartbeat = DateTime.Now;
+
+              switch (curJob.Command) {
+                case Command.Stop:
+                  actions.Add(new MessageContainer(MessageContainer.MessageType.StopTask, curJob.Id));
+                  break;
+                case Command.Pause:
+                  actions.Add(new MessageContainer(MessageContainer.MessageType.PauseTask, curJob.Id));
+                  break;
+                case Command.Abort:
+                  actions.Add(new MessageContainer(MessageContainer.MessageType.AbortTask, curJob.Id));
+                  break;
+              }
+              dao.UpdateTask(curJob);
+            }
+          }
+        }
+      }
+      return actions;
+    }
+
+    private bool TaskIsAllowedToBeCalculatedBySlave(Guid slaveId, Task curTask) {
+      var assignedResourceIds = dao.GetAssignedResources(curTask.Id).Select(x => x.Id);
+      var slaveResourceIds = dao.GetParentResources(slaveId).Select(x => x.Id);
+      return assignedResourceIds.Any(x => slaveResourceIds.Contains(x));
+    }
+
+    private bool SlaveIsAllowedToCalculate(Guid slaveId) {
+      // the slave may only calculate if there is no downtime right now. this needs to be checked for every parent resource also
+      return dao.GetParentResources(slaveId).All(r => dao.GetDowntimes(x => x.ResourceId == r.Id && (DateTime.Now >= x.StartDate) && (DateTime.Now <= x.EndDate)).Count() == 0);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/UserManager.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/UserManager.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Manager/UserManager.cs	(revision 7085)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Web.Security;
+
+namespace HeuristicLab.Services.Hive {
+  public class UserManager : IUserManager {
+    public MembershipUser CurrentUser {
+      get { return Membership.GetUser(); }
+    }
+
+    public Guid CurrentUserId {
+      get { return (Guid)CurrentUser.ProviderUserKey; }
+    }
+
+    public MembershipUser GetUserByName(string username) {
+      return Membership.GetUser(username);
+    }
+
+    public MembershipUser GetUserById(Guid userId) {
+      return Membership.GetUser(userId);
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/MessageContainer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/MessageContainer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/MessageContainer.cs	(revision 7085)
@@ -0,0 +1,84 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Services.Hive {
+  /// <summary>
+  /// The MessageContainer is a container class for Messages. Its two parts are:
+  /// the actual message itself and the TaskId, refered by the message
+  /// </summary>
+  [StorableClass]
+  [Serializable]
+  [DataContract]
+  public class MessageContainer : IDeepCloneable {
+
+    public enum MessageType {
+      // *** commands from hive server ***
+      CalculateTask, // slave should calculate a task. the task is already assigned to the slave
+      StopTask,   // slave should stop the task and submit results
+      StopAll,   // stop all and submit results
+      AbortTask,  // slave should shut the task down immediately without submitting results
+      AbortAll,  // slave should abort all task immediately
+      PauseTask,  // pause the task and submit the results   
+      PauseAll,  // pause all task and submit results
+      Restart,   // restart operation after Sleep
+      Sleep,     // disconnect from server, but don't shutdown
+      ShutdownSlave,  // slave should shutdown immediately without submitting results
+      SayHello,  // Slave should say hello, because job is unknown to the server
+      NewHBInterval,
+    };
+
+    [Storable]
+    [DataMember]
+    public MessageType Message { get; set; }
+
+    [Storable]
+    [DataMember]
+    public Guid TaskId { get; set; }
+
+    [StorableConstructor]
+    protected MessageContainer(bool deserializing) { }
+    protected MessageContainer() { }
+    public MessageContainer(MessageType message) {
+      Message = message;
+      TaskId = Guid.Empty;
+    }
+    public MessageContainer(MessageType message, Guid jobId) {
+      Message = message;
+      TaskId = jobId;
+    }
+    protected MessageContainer(MessageContainer original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.Message = original.Message;
+      this.TaskId = original.TaskId;
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new MessageContainer(this, cloner);
+    }
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Plugin.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Plugin.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Plugin.cs.frame	(revision 7085)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Services.Hive.Server {
+  [Plugin("HeuristicLab.Services.Hive", "3.3.5.$WCREV$")]
+  [PluginFile("HeuristicLab.Services.Hive-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]  
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]  
+  [PluginDependency("HeuristicLab.Services.Hive.DataAccess", "3.3")]
+  public class HeuristicLabServicesHivePlugin : PluginBase {
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Properties/AssemblyInfo.cs.frame	(revision 7085)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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("HeuristicLab.Services.Hive")]
+[assembly: AssemblyDescription("Business logic for HeuristicLab.Hive services")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("E24F2D47-692E-46F2-8622-BACA57B3DDE4")]
+
+// 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("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Properties/Settings.Designer.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Properties/Settings.Designer.cs	(revision 7085)
@@ -0,0 +1,53 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.235
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Services.Hive.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    public 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;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:01:00")]
+        public global::System.TimeSpan SlaveHeartbeatTimeout {
+            get {
+                return ((global::System.TimeSpan)(this["SlaveHeartbeatTimeout"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:05:30")]
+        public global::System.TimeSpan CalculatingJobHeartbeatTimeout {
+            get {
+                return ((global::System.TimeSpan)(this["CalculatingJobHeartbeatTimeout"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:05:30")]
+        public global::System.TimeSpan TransferringJobHeartbeatTimeout {
+            get {
+                return ((global::System.TimeSpan)(this["TransferringJobHeartbeatTimeout"]));
+            }
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Properties/Settings.settings
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Properties/Settings.settings	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Properties/Settings.settings	(revision 7085)
@@ -0,0 +1,15 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Services.Hive.Common" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="SlaveHeartbeatTimeout" Type="System.TimeSpan" Scope="Application">
+      <Value Profile="(Default)">00:01:00</Value>
+    </Setting>
+    <Setting Name="CalculatingJobHeartbeatTimeout" Type="System.TimeSpan" Scope="Application">
+      <Value Profile="(Default)">00:05:30</Value>
+    </Setting>
+    <Setting Name="TransferringJobHeartbeatTimeout" Type="System.TimeSpan" Scope="Application">
+      <Value Profile="(Default)">00:05:30</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs	(revision 7085)
@@ -0,0 +1,232 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Net.Security;
+using System.ServiceModel;
+using HeuristicLab.Services.Hive.DataTransfer;
+
+namespace HeuristicLab.Services.Hive.ServiceContracts {
+
+  [ServiceContract(ProtectionLevel = ProtectionLevel.EncryptAndSign)]
+  public interface IHiveService {
+
+    #region Task Methods
+    [OperationContract]
+    Guid AddTask(Task task, TaskData taskData, IEnumerable<Guid> resourceIds);
+
+    [OperationContract]
+    Guid AddChildTask(Guid parentTaskId, Task task, TaskData taskData);
+
+    [OperationContract]
+    Task GetTask(Guid taskId);
+
+    [OperationContract]
+    IEnumerable<Task> GetTasks();
+
+    [OperationContract]
+    IEnumerable<LightweightTask> GetLightweightTasks(IEnumerable<Guid> taskIds);
+
+    [OperationContract]
+    IEnumerable<LightweightTask> GetLightweightChildTasks(Guid? parentTaskId, bool recursive, bool includeParent);
+
+    [OperationContract]
+    IEnumerable<LightweightTask> GetLightweightJobTasks(Guid jobId);
+
+    [OperationContract]
+    TaskData GetTaskData(Guid taskId);
+
+    [OperationContract]
+    void UpdateTask(Task taskDto);
+
+    [OperationContract]
+    void UpdateTaskData(Task taskDto, TaskData taskDataDto);
+
+    [OperationContract]
+    void DeleteTask(Guid taskId);
+
+    [OperationContract]
+    void DeleteChildTasks(Guid parentTaskId);
+
+    [OperationContract]
+    Task UpdateTaskState(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception);
+    #endregion
+
+    #region Task Control Methods
+    [OperationContract]
+    void StopTask(Guid taskId);
+
+    [OperationContract]
+    void PauseTask(Guid taskId);
+
+    [OperationContract]
+    void RestartTask(Guid taskId);
+    #endregion
+
+    #region Job Methods
+    [OperationContract]
+    Job GetJob(Guid id);
+
+    /// <summary>
+    /// Returns all task for the current user
+    /// </summary>
+    [OperationContract]
+    IEnumerable<Job> GetJobs();
+
+    /// <summary>
+    /// Returns all task in the hive (only for admins)
+    /// </summary>
+    /// <returns></returns>
+    [OperationContract]
+    IEnumerable<Job> GetAllJobs();
+
+    [OperationContract]
+    Guid AddJob(Job jobDto);
+
+    [OperationContract]
+    void UpdateJob(Job jobDto);
+
+    [OperationContract]
+    void DeleteJob(Guid JobId);
+    #endregion
+
+    #region JobPermission Methods
+    [OperationContract]
+    void GrantPermission(Guid jobId, Guid grantedUserId, Permission permission);
+
+    [OperationContract]
+    void RevokePermission(Guid hiveExperimentId, Guid grantedUserId);
+
+    [OperationContract]
+    IEnumerable<JobPermission> GetJobPermissions(Guid jobId);
+
+    [OperationContract]
+    bool IsAllowedPrivileged(); // current user may execute privileged task
+    #endregion
+
+    #region Login Methods
+    [OperationContract]
+    void Hello(Slave slave);
+
+    [OperationContract]
+    void GoodBye(Guid slaveId);
+    #endregion
+
+    #region Heartbeat Methods
+    [OperationContract]
+    List<MessageContainer> Heartbeat(Heartbeat heartbeat);
+    #endregion
+
+    #region Plugin Methods
+    [OperationContract]
+    Plugin GetPlugin(Guid pluginId);
+
+    [OperationContract]
+    Plugin GetPluginByHash(byte[] hash);
+
+    [OperationContract]
+    [FaultContract(typeof(PluginAlreadyExistsFault))]
+    Guid AddPlugin(Plugin plugin, List<PluginData> pluginData);
+
+    [OperationContract]
+    IEnumerable<Plugin> GetPlugins();
+
+    [OperationContract]
+    IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds);
+
+    [OperationContract]
+    void DeletePlugin(Guid pluginId);
+    #endregion
+
+    #region Slave Methods
+    [OperationContract]
+    Guid AddSlave(Slave slave);
+
+    [OperationContract]
+    Guid AddSlaveGroup(SlaveGroup slaveGroup);
+
+    [OperationContract]
+    Slave GetSlave(Guid slaveId);
+
+    [OperationContract]
+    SlaveGroup GetSlaveGroup(Guid slaveGroupId);
+
+    [OperationContract]
+    IEnumerable<Slave> GetSlaves();
+
+    [OperationContract]
+    IEnumerable<SlaveGroup> GetSlaveGroups();
+
+    [OperationContract]
+    void UpdateSlave(Slave slave);
+
+    [OperationContract]
+    void UpdateSlaveGroup(SlaveGroup slaveGroup);
+
+    [OperationContract]
+    void DeleteSlave(Guid slaveId);
+
+    [OperationContract]
+    void DeleteSlaveGroup(Guid slaveGroupId);
+
+    [OperationContract]
+    void AddResourceToGroup(Guid slaveGroupId, Guid resourceId);
+
+    [OperationContract]
+    void RemoveResourceFromGroup(Guid slaveGroupId, Guid resourceId);
+
+    [OperationContract]
+    Guid GetResourceId(string resourceName);
+
+    [OperationContract]
+    IEnumerable<Task> GetTasksByResourceId(Guid resourceId);
+
+    [OperationContract]
+    void TriggerEventManager(bool force);
+
+    [OperationContract]
+    int GetNewHeartbeatInterval(Guid slaveId);
+    #endregion
+
+    #region Downtime Methods
+    [OperationContract]
+    Guid AddDowntime(Downtime downtime);
+
+    [OperationContract]
+    void DeleteDowntime(Guid downtimeId);
+
+    [OperationContract]
+    void UpdateDowntime(Downtime downtime);
+
+    [OperationContract]
+    IEnumerable<Downtime> GetDowntimesForResource(Guid resourceId);
+    #endregion
+
+    #region User Methods
+    [OperationContract]
+    string GetUsernameByUserId(Guid userId);
+
+    [OperationContract]
+    Guid GetUserIdByUsername(string username);
+    #endregion
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/ServiceFaults/PluginAlreadyExistsFault.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/ServiceFaults/PluginAlreadyExistsFault.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/ServiceFaults/PluginAlreadyExistsFault.cs	(revision 7085)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive {
+  [DataContract]
+  public class PluginAlreadyExistsFault {
+    
+    private Guid id;
+    [DataMember]
+    public Guid Id {
+      get { return id; }
+      set { id = value; }
+    }
+
+    public PluginAlreadyExistsFault(Guid id) {
+      this.id = id;
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/ServiceLocator.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/ServiceLocator.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/ServiceLocator.cs	(revision 7085)
@@ -0,0 +1,92 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Services.Hive.DataAccess;
+
+namespace HeuristicLab.Services.Hive {
+
+  public class ServiceLocator : IServiceLocator {
+    private static IServiceLocator instance;
+    public static IServiceLocator Instance {
+      get {
+        if (instance == null) instance = new ServiceLocator();
+        return instance;
+      }
+      set { instance = value; }
+    }
+
+    private IHiveDao hiveDao;
+    public IHiveDao HiveDao {
+      get {
+        if (hiveDao == null) hiveDao = new HiveDao();
+        return hiveDao;
+      }
+    }
+
+    private IAuthenticationManager authenticationManager;
+    public IAuthenticationManager AuthenticationManager {
+      get {
+        if (authenticationManager == null) authenticationManager = new AuthenticationManager();
+        return authenticationManager;
+      }
+    }
+
+    private IAuthorizationManager authorizationManager;
+    public IAuthorizationManager AuthorizationManager {
+      get {
+        if (authorizationManager == null) authorizationManager = new AuthorizationManager();
+        return authorizationManager;
+      }
+    }
+
+    private IEventManager eventManager;
+    public IEventManager EventManager {
+      get {
+        if (eventManager == null) eventManager = new EventManager();
+        return eventManager;
+      }
+    }
+
+    private ITransactionManager transactionManager;
+    public ITransactionManager TransactionManager {
+      get {
+        if (transactionManager == null) transactionManager = new TransactionManager();
+        return transactionManager;
+      }
+    }
+
+    private IUserManager userManager;
+    public IUserManager UserManager {
+      get {
+        if (userManager == null) userManager = new UserManager();
+        return userManager;
+      }
+    }
+
+    private HeartbeatManager heartbeatManager;
+    public HeartbeatManager HeartbeatManager {
+      get {
+        if(heartbeatManager == null) heartbeatManager = new HeartbeatManager();
+        return heartbeatManager;
+      }
+    }
+  }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Settings.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Settings.cs	(revision 7085)
+++ /branches/RegressionBenchmarks/HeuristicLab.Services.Hive/3.3/Settings.cs	(revision 7085)
@@ -0,0 +1,28 @@
+﻿namespace HeuristicLab.Services.Hive.Properties {
+    
+    
+    // This class allows you to handle specific events on the settings class:
+    //  The SettingChanging event is raised before a setting's value is changed.
+    //  The PropertyChanged event is raised after a setting's value is changed.
+    //  The SettingsLoaded event is raised after the setting values are loaded.
+    //  The SettingsSaving event is raised before the setting values are saved.
+    public sealed partial class Settings {
+        
+        public Settings() {
+            // // To add event handlers for saving and changing settings, uncomment the lines below:
+            //
+            // this.SettingChanging += this.SettingChangingEventHandler;
+            //
+            // this.SettingsSaving += this.SettingsSavingEventHandler;
+            //
+        }
+        
+        private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
+            // Add code to handle the SettingChangingEvent event here.
+        }
+        
+        private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
+            // Add code to handle the SettingsSaving event here.
+        }
+    }
+}
Index: /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab-3.3/SamplesTest.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab-3.3/SamplesTest.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab-3.3/SamplesTest.cs	(revision 7085)
@@ -280,17 +280,5 @@
       // configure grammar
       var grammar = new TypeCoherentExpressionGrammar();
-      grammar.Symbols.OfType<Sine>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Cosine>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Tangent>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<IfThenElse>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<GreaterThan>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<LessThan>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<And>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Or>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Not>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<TimeLag>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Integral>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Derivative>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<LaggedVariable>().Single().InitialFrequency = 0.0;
+      grammar.ConfigureAsDefaultRegressionGrammar();
       grammar.Symbols.OfType<VariableCondition>().Single().InitialFrequency = 0.0;
       var varSymbol = grammar.Symbols.OfType<Variable>().Where(x => !(x is LaggedVariable)).Single();
@@ -393,14 +381,6 @@
       // configure grammar
       var grammar = new TypeCoherentExpressionGrammar();
-      grammar.Symbols.OfType<Sine>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Cosine>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Tangent>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Power>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Root>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<TimeLag>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Integral>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<Derivative>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<LaggedVariable>().Single().InitialFrequency = 0.0;
-      grammar.Symbols.OfType<VariableCondition>().Single().InitialFrequency = 0.0;
+      grammar.ConfigureAsDefaultClassificationGrammar();
+      grammar.Symbols.OfType<VariableCondition>().Single().Enabled = false;
       var varSymbol = grammar.Symbols.OfType<Variable>().Where(x => !(x is LaggedVariable)).Single();
       varSymbol.WeightMu = 1.0;
Index: /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/FullTreeCreatorTest.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/FullTreeCreatorTest.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/FullTreeCreatorTest.cs	(revision 7085)
@@ -31,5 +31,6 @@
   public class FullTreeCreatorTest {
     private const int POPULATION_SIZE = 10000;
-    private const int MAX_TREE_DEPTH = 10;
+    private const int MAX_TREE_DEPTH = 9 ;
+    private const int MAX_TREE_LENGTH = 256;
     private TestContext testContextInstance;
 
@@ -55,5 +56,5 @@
       stopwatch.Start();
       for (int i = 0; i != POPULATION_SIZE; i++) {
-        randomTrees.Add(FullTreeCreator.Create(random, grammar, MAX_TREE_DEPTH));
+        randomTrees.Add(FullTreeCreator.Create(random, grammar, MAX_TREE_LENGTH, MAX_TREE_DEPTH));
       }
       stopwatch.Stop();
Index: /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/GrowTreeCreatorTest.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/GrowTreeCreatorTest.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/GrowTreeCreatorTest.cs	(revision 7085)
@@ -32,4 +32,5 @@
     private const int POPULATION_SIZE = 10000;
     private const int MAX_TREE_DEPTH = 10;
+    private const int MAX_TREE_LENGTH = 50;
     private TestContext testContextInstance;
 
@@ -55,5 +56,5 @@
       stopwatch.Start();
       for (int i = 0; i != POPULATION_SIZE; i++) {
-        randomTrees.Add(GrowTreeCreator.Create(random, grammar, MAX_TREE_DEPTH));
+        randomTrees.Add(GrowTreeCreator.Create(random, grammar, MAX_TREE_LENGTH, MAX_TREE_DEPTH));
       }
       stopwatch.Stop();
Index: /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/SubtreeCrossoverTest.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/SubtreeCrossoverTest.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/SubtreeCrossoverTest.cs	(revision 7085)
@@ -82,5 +82,5 @@
         );
 
-      Assert.IsTrue(Math.Round(1000.0 / (msPerCrossoverEvent)) > 2500); // must achieve more than 1500 x-overs/s
+      Assert.IsTrue(Math.Round(1000.0 / (msPerCrossoverEvent)) > 2000); // must achieve more than 2000 x-overs/s
     }
   }
Index: /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Persistence-3.3/UseCases.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Persistence-3.3/UseCases.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Persistence-3.3/UseCases.cs	(revision 7085)
@@ -528,5 +528,4 @@
     }
 
-    [TestMethod]
     public void CodingConventions() {
       List<string> lowerCaseMethodNames = new List<string>();
Index: /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis-3.4/StatisticCalculatorsTest.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis-3.4/StatisticCalculatorsTest.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis-3.4/StatisticCalculatorsTest.cs	(revision 7085)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -121,5 +122,4 @@
       for (int c1 = 0; c1 < cols; c1++) {
         double c1Scale = random.NextDouble() * 1E7;
-        double c2Scale = 1.0;
         IEnumerable<double> x = from rows in Enumerable.Range(0, n)
                                 select testData[rows, c1] * c1Scale;
@@ -140,4 +140,245 @@
       }
     }
+
+    [TestMethod]
+    public void CalculateDirectionalSymmetryTest() {
+      // delta: +0.01, +1, -0.01, -2, -0.01, -1, +0.01, +2
+      var original = new double[]
+                       {
+                         0, 
+                         0.01, 
+                         1.01, 
+                         1, 
+                         -1, 
+                         -1.01, 
+                         -2.01, 
+                         -2, 
+                         0
+                       };
+      // delta to original(t-1): +1, +0, -1, -0, -1, +0.01, +0.01, +2
+      var estimated = new double[]
+                        {
+                          -1, 
+                          1, 
+                          0.01,
+                          0.01,
+                          1,
+                          -1,
+                          -1.02,
+                          -2.02,
+                          0
+                        };
+
+      // one-step forecast
+      var startValues = original;
+      var actualContinuations = from x in original.Skip(1)
+                                select Enumerable.Repeat(x, 1);
+      var predictedContinuations = from x in estimated.Skip(1)
+                                   select Enumerable.Repeat(x, 1);
+      double expected = 0.5;  // half of the predicted deltas are correct
+      OnlineCalculatorError errorState;
+      double actual = OnlineDirectionalSymmetryCalculator.Calculate(startValues, actualContinuations, predictedContinuations, out errorState);
+      Assert.AreEqual(expected, actual, 1E-9);
+    }
+
+    [TestMethod]
+    public void CalculateMultiStepDirectionalSymmetryTest() {
+      // delta: +0.01, +1, -0.01, -2, -0.01, -1, +0.01, +2
+      var original = new double[] { 0, 0.01, 1.01, 1, -1, -1.01, -2.01, -2, 0 };
+      {
+        var estimated = new double[][]
+                          {
+                            new double[] {0.01, 1.01, 1, -1, -1.01},
+                            new double[] {1.01, 1, -1, -1.01, -2.01},
+                            new double[] {1, -1, -1.01, -2.01, -2},
+                            new double[] {-1, -1.01, -2.01, -2, 0}
+                          };
+
+        // 5-step forecast
+        var startValues = original.Take(4);
+        var actualContinuations = from i in Enumerable.Range(1, original.Count() - 5)
+                                  select original.Skip(i).Take(5);
+        var predictedContinuations = estimated;
+        double expected = 1; // predictions are 100% correct
+        OnlineCalculatorError errorState;
+        double actual = OnlineDirectionalSymmetryCalculator.Calculate(startValues, actualContinuations,
+                                                                      predictedContinuations, out errorState);
+        Assert.AreEqual(expected, actual, 1E-9);
+      }
+      {
+        // only the direction is relevant
+        var estimated = new double[][]
+                          {
+                            new double[] {0.01, 0.01, 0.01, -0.01, -0.01},  // start=0, original deltas: 0.01, 1.01, 1.00, -1.00, -1.01
+                            new double[] {0.02, 0.02, 0.00, 0.00, 0.00}, // start=0.01, original deltas: 1.00, 0.90, -1.01, -1.02, -2.02,
+                            new double[] { 1.00, 1.00, 1.00, 1.00, 1.00}, // start=1.01, original deltas: -0.01, -2.01, -2.02, -3.02, -3.01
+                            new double[] { 0.90, 0.90, 0.90, 0.90, 0.90}  // start=1, original deltas: -2.00, -0.01, -3.01, -3.00, -1.00
+                          };
+
+        // 5-step forecast
+        var startValues = original.Take(4);
+        var actualContinuations = from i in Enumerable.Range(1, original.Count() - 5)
+                                  select original.Skip(i).Take(5);
+        var predictedContinuations = estimated;
+        double expected = 1; // half of the predicted deltas are correct
+        OnlineCalculatorError errorState;
+        double actual = OnlineDirectionalSymmetryCalculator.Calculate(startValues, actualContinuations,
+                                                                      predictedContinuations, out errorState);
+        Assert.AreEqual(expected, actual, 1E-9);
+      }
+      {
+        // also check incorrectly predicted directions
+        var estimated = new double[][]
+                          {
+                            new double[] {0.01, 0.01, 0.01, +0.01, +0.01},  // start=0, original deltas: 0.01, 1.01, 1.00, -1.00, -1.01
+                            new double[] {0.02, 0.00, 0.02, 0.00, 0.00}, // start=0.01, original deltas: 1.00, 0.90, -1.01, -1.02, -2.02,
+                            new double[] { 1.02, 1.00, 1.02, 1.00, 1.02}, // start=1.01, original deltas: -0.01, -2.01, -2.02, -3.02, -3.01
+                            new double[] { 0.90, 0.90, 0.90, 0.90, 0.90}  // start=1, original deltas: -2.00, -0.01, -3.01, -3.00, -1.00
+                          };
+
+        // 5-step forecast
+        var startValues = original.Take(4);
+        var actualContinuations = from i in Enumerable.Range(1, original.Count() - 5)
+                                  select original.Skip(i).Take(5);
+        var predictedContinuations = estimated;
+        double expected = (20 - 7) / 20.0; // half of the predicted deltas are correct
+        OnlineCalculatorError errorState;
+        double actual = OnlineDirectionalSymmetryCalculator.Calculate(startValues, actualContinuations,
+                                                                      predictedContinuations, out errorState);
+        Assert.AreEqual(expected, actual, 1E-9);
+      }
+    }
+
+
+    [TestMethod]
+    public void CalculateWeightedDirectionalSymmetryTest() {
+      var original = new double[] { 0, 0.01, 1.01, 1, -1, -1.01, -2.01, -2, 0 }; // +0.01, +1, -0.01, -2, -0.01, -1, +0.01, +2
+      var estimated = new double[] { 1, 2, 2, 1, 1, 0, 0.01, 0.02, 2.02 }; // delta to original: +2, +1.99, -0.01, 0, +1, -1.02, +2.01, +4.02
+      // one-step forecast
+      var startValues = original;
+      var actualContinuations = from x in original.Skip(1)
+                                select Enumerable.Repeat(x, 1);
+      var predictedContinuations = from x in estimated.Skip(1)
+                                   select Enumerable.Repeat(x, 1);
+      // absolute errors = 1.99, 0.99, 0, 2, 1.01, 2.02, 2.02, 2.02     
+      // sum of absolute errors for correctly predicted deltas = 2.97
+      // sum of absolute errors for incorrectly predicted deltas = 3.03 
+      double expected = 5.03 / 7.02;
+      OnlineCalculatorError errorState;
+      double actual = OnlineWeightedDirectionalSymmetryCalculator.Calculate(startValues, actualContinuations, predictedContinuations, out errorState);
+      Assert.AreEqual(expected, actual, 1E-9);
+    }
+
+    [TestMethod]
+    public void CalculateTheilsUTest() {
+      var original = new double[] { 0, 0.01, 1.01, 1, -1, -1.01, -2.01, -2, 0 };
+      var estimated = new double[] { 1, 1.01, 0.01, 2, 0, -0.01, -1.01, -3, 1 };
+      // one-step forecast
+      var startValues = original;
+      var actualContinuations = from x in original.Skip(1)
+                                select Enumerable.Repeat(x, 1);
+      var predictedContinuations = from x in estimated.Skip(1)
+                                   select Enumerable.Repeat(x, 1);
+      // Sum of squared errors of model y(t+1) = y(t) = 10.0004
+      // Sum of squared errors of predicted values = 8  
+      double expected = Math.Sqrt(8 / 10.0004);
+      OnlineCalculatorError errorState;
+      double actual = OnlineTheilsUStatisticCalculator.Calculate(startValues, actualContinuations, predictedContinuations, out errorState);
+      Assert.AreEqual(expected, actual, 1E-9);
+    }
+
+    [TestMethod]
+    public void CalculateMultiStepTheilsUTest() {
+      var original = new double[] { 0, 0.01, 1.01, 1, -1, -1.01, -2.01, -2, 0 };
+      {
+        // prefect prediction
+        var estimated = new double[][]
+                          {
+                            new double[] {0.01, 1.01, 1, -1, -1.01},
+                            new double[] {1.01, 1, -1, -1.01, -2.01},
+                            new double[] {1, -1, -1.01, -2.01, -2},
+                            new double[] {-1, -1.01, -2.01, -2, 0}
+                          };
+        // 5-step forecast
+        var startValues = original.Take(4);
+        var actualContinuations = from i in Enumerable.Range(1, original.Count() - 5)
+                                  select original.Skip(i).Take(5);
+        var predictedContinuations = estimated;
+
+        double expected = 0;
+        OnlineCalculatorError errorState;
+        double actual = OnlineTheilsUStatisticCalculator.Calculate(startValues, actualContinuations,
+                                                                   predictedContinuations, out errorState);
+        Assert.AreEqual(expected, actual, 1E-9);
+      }
+      {
+        // naive prediction
+        var estimated = new double[][]
+                          {
+                            new double[] {0, 0, 0, 0, 0},
+                            new double[] {0.01, 0.01, 0.01, 0.01, 0.01},
+                            new double[] {1.01, 1.01, 1.01, 1.01, 1.01},
+                            new double[] {1, 1, 1, 1, 1}
+                          };
+        // 5-step forecast
+        var startValues = original.Take(4);
+        var actualContinuations = from i in Enumerable.Range(1, original.Count() - 5)
+                                  select original.Skip(i).Take(5);
+        var predictedContinuations = estimated;
+
+        double expected = 1;
+        OnlineCalculatorError errorState;
+        double actual = OnlineTheilsUStatisticCalculator.Calculate(startValues, actualContinuations,
+                                                                   predictedContinuations, out errorState);
+        Assert.AreEqual(expected, actual, 1E-9);
+      }
+      {
+        // realistic prediction
+        var estimated = new double[][]
+                          {
+                            new double[] {0.005, 0.5, 0.5, -0.5, -0.5},    // start = 0
+                            new double[] {0.60, 0.5, -0.5, -0.5, -1},   // start = 0.01
+                            new double[] {-0.005, 0, 0, -0.5, -1},     // start = 1.01
+                            new double[] {-0, 0, -0.5, -1, 0.5}      // start = 1
+                          };
+        // 5-step forecast
+        var startValues = original.Take(4);
+        var actualContinuations = from i in Enumerable.Range(1, original.Count() - 5)
+                                  select original.Skip(i).Take(5);
+        var predictedContinuations = estimated;
+
+        double expected = 0.47558387;
+        OnlineCalculatorError errorState;
+        double actual = OnlineTheilsUStatisticCalculator.Calculate(startValues, actualContinuations,
+                                                                   predictedContinuations, out errorState);
+        Assert.AreEqual(expected, actual, 1E-6);
+      }
+    }
+
+    [TestMethod]
+    public void CalculateAccuracyTest() {
+      var original = new double[] { 1, 1, 0, 0 };
+      var estimated = new double[] { 1, 0, 1, 0 };
+      double expected = 0.5;
+      OnlineCalculatorError errorState;
+      double actual = OnlineAccuracyCalculator.Calculate(original, estimated, out errorState);
+      Assert.AreEqual(expected, actual, 1E-9);
+    }
+
+    [TestMethod]
+    public void CalculateMeanAbsolutePercentageErrorTest() {
+      var original = new double[] { 1, 2, 3, 1, 5 };
+      var estimated = new double[] { 2, 1, 3, 1, 0 };
+      double expected = 0.5;
+      OnlineCalculatorError errorState;
+      double actual = OnlineMeanAbsolutePercentageErrorCalculator.Calculate(original, estimated, out errorState);
+      Assert.AreEqual(expected, actual, 1E-9);
+      Assert.AreEqual(OnlineCalculatorError.None, errorState);
+
+      // if the original contains zero values the result is not defined
+      var original2 = new double[] { 1, 2, 0, 0, 0 };
+      OnlineMeanAbsolutePercentageErrorCalculator.Calculate(original2, estimated, out errorState);
+      Assert.AreEqual(OnlineCalculatorError.InvalidValueAdded, errorState);
+    }
   }
 }
Index: /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis-3.4/TableFileParserTest.cs
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis-3.4/TableFileParserTest.cs	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis-3.4/TableFileParserTest.cs	(revision 7085)
@@ -185,4 +185,26 @@
 
     [TestMethod]
+    public void ParseEnglishCSVWithoutCommasWithoutSpace() {
+      string tempFileName = Path.GetTempFileName();
+      WriteToFile(tempFileName,
+@"0,0,0,3
+0,0,0,0
+0,0,0,0
+0,0,0,0
+0,0,0,0
+0,0,0,0");
+      TableFileParser parser = new TableFileParser();
+      try {
+        parser.Parse(tempFileName);
+        Assert.AreEqual(6, parser.Rows);
+        Assert.AreEqual(4, parser.Columns);
+        Assert.AreEqual((double)parser.Values[3][0], 3);
+      }
+      finally {
+        File.Delete(tempFileName);
+      }
+    }
+
+    [TestMethod]
     public void ParseEnglishCSVWithoutCommasWithNames() {
       string tempFileName = Path.GetTempFileName();
@@ -195,4 +217,27 @@
 0, 0, 0, 0
 0, 0, 0, 0");
+      TableFileParser parser = new TableFileParser();
+      try {
+        parser.Parse(tempFileName);
+        Assert.AreEqual(6, parser.Rows);
+        Assert.AreEqual(4, parser.Columns);
+        Assert.AreEqual((double)parser.Values[3][0], 3);
+      }
+      finally {
+        File.Delete(tempFileName);
+      }
+    }
+
+    [TestMethod]
+    public void ParseEnglishCSVWithoutCommasWithoutSpacesWithNames() {
+      string tempFileName = Path.GetTempFileName();
+      WriteToFile(tempFileName,
+@"x01,x02,x03,x04
+0,0,0,3
+0,0,0,0
+0,0,0,0
+0,0,0,0
+0,0,0,0
+0,0,0,0");
       TableFileParser parser = new TableFileParser();
       try {
Index: /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Tests.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 7085)
@@ -104,53 +104,72 @@
     <Reference Include="ALGLIB-3.1.0">
       <HintPath>..\bin\ALGLIB-3.1.0.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="Calendar.DayView">
       <HintPath>..\bin\Calendar.DayView.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="Google.ProtocolBuffers-0.9.1, Version=0.9.0.0, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48, processorArchitecture=AMD64">
       <HintPath>..\bin\Google.ProtocolBuffers-0.9.1.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="HeuristicLab.ALGLIB-3.1.0">
       <HintPath>..\bin\HeuristicLab.ALGLIB-3.1.0.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="HeuristicLab.LibSVM-1.6.3">
       <HintPath>..\bin\HeuristicLab.LibSVM-1.6.3.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="HeuristicLab.log4net-1.2.10.0">
       <HintPath>..\bin\HeuristicLab.log4net-1.2.10.0.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="HeuristicLab.Netron-3.0.2672.12446">
       <HintPath>..\bin\HeuristicLab.Netron-3.0.2672.12446.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="HeuristicLab.ProtobufCS-0.9.1">
       <HintPath>..\bin\HeuristicLab.ProtobufCS-0.9.1.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="HeuristicLab.SharpDevelop-3.1.1.5327">
       <HintPath>..\bin\HeuristicLab.SharpDevelop-3.1.1.5327.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="HeuristicLab.WinFormsUI-2.3.1">
       <HintPath>..\bin\HeuristicLab.WinFormsUI-2.3.1.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="ICSharpCode.NRefactory, Version=3.1.1.5327, Culture=neutral, PublicKeyToken=efe927acf176eea2, processorArchitecture=MSIL">
       <HintPath>..\bin\ICSharpCode.NRefactory.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="ICSharpCode.SharpDevelop.Dom, Version=3.1.1.5327, Culture=neutral, PublicKeyToken=f829da5c02be14ee, processorArchitecture=MSIL">
       <HintPath>..\bin\ICSharpCode.SharpDevelop.Dom.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="ICSharpCode.SharpZipLib, Version=0.85.4.369, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
       <HintPath>..\bin\ICSharpCode.SharpZipLib.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="ICSharpCode.TextEditor, Version=3.1.1.5327, Culture=neutral, PublicKeyToken=4d61825e8dd49f1a, processorArchitecture=MSIL">
       <HintPath>..\bin\ICSharpCode.TextEditor.dll</HintPath>
-    </Reference>
-    <Reference Include="LibSVM-1.6.3, Version=1.6.3.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=AMD64">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="LibSVM-1.6.3, Version=1.6.3.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\bin\LibSVM-1.6.3.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
       <HintPath>..\bin\log4net.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
-    <Reference Include="Netron.Diagramming.Core-3.0.2672.12446, Version=3.0.2672.12446, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=AMD64">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="Netron.Diagramming.Core-3.0.2672.12446, Version=3.0.2672.12446, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\bin\Netron.Diagramming.Core-3.0.2672.12446.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="System" />
@@ -160,6 +179,7 @@
     <Reference Include="System.Drawing" />
     <Reference Include="System.Runtime.Serialization" />
-    <Reference Include="WeifenLuo.WinFormsUI.Docking-2.3.1, Version=2.3.1.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=AMD64">
+    <Reference Include="WeifenLuo.WinFormsUI.Docking-2.3.1, Version=2.3.1.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\bin\WeifenLuo.WinFormsUI.Docking-2.3.1.dll</HintPath>
+      <Private>True</Private>
     </Reference>
   </ItemGroup>
@@ -570,4 +590,12 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Algorithms.Benchmarks.Views\3.3\HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj">
+      <Project>{3C906172-E044-4DF0-B4FD-AA21192D5D3E}</Project>
+      <Name>HeuristicLab.Algorithms.Benchmarks.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Algorithms.Benchmarks\3.3\HeuristicLab.Algorithms.Benchmarks-3.3.csproj">
+      <Project>{068C70A7-8CAF-4AB6-8721-4564D62292BC}</Project>
+      <Name>HeuristicLab.Algorithms.Benchmarks-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Algorithms.DataAnalysis.Views\3.4\HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj">
       <Project>{A2330DB0-413D-4424-B4E6-591118E2B9F8}</Project>
@@ -626,4 +654,20 @@
       <Name>HeuristicLab.Clients.Common-3.3</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Clients.Hive.Administrator\3.3\HeuristicLab.Clients.Hive.Administrator-3.3.csproj">
+      <Project>{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}</Project>
+      <Name>HeuristicLab.Clients.Hive.Administrator-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Clients.Hive.JobManager\3.3\HeuristicLab.Clients.Hive.JobManager-3.3.csproj">
+      <Project>{DBFD7205-61AF-40EF-8776-3052DEF91CF3}</Project>
+      <Name>HeuristicLab.Clients.Hive.JobManager-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Clients.Hive.Views\3.3\HeuristicLab.Clients.Hive.Views-3.3.csproj">
+      <Project>{E1D6C801-892A-406A-B606-F158E36DD3C3}</Project>
+      <Name>HeuristicLab.Clients.Hive.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Clients.Hive\3.3\HeuristicLab.Clients.Hive-3.3.csproj">
+      <Project>{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}</Project>
+      <Name>HeuristicLab.Clients.Hive-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.CodeEditor\3.3\HeuristicLab.CodeEditor-3.3.csproj">
       <Project>{489CFE09-FDF7-4C89-BAB5-BD09CADD61AD}</Project>
@@ -689,4 +733,8 @@
       <Project>{06D4A186-9319-48A0-BADE-A2058D462EEA}</Project>
       <Name>HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive\3.3\HeuristicLab.Hive-3.3.csproj">
+      <Project>{F98A1740-9AC9-4D36-A582-6A2D0D06978D}</Project>
+      <Name>HeuristicLab.Hive-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
Index: /branches/RegressionBenchmarks/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj	(revision 7085)
@@ -126,7 +126,5 @@
   </ItemGroup>
   <ItemGroup>
-    <None Include="app.config">
-      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
-    </None>
+    <None Include="app.config" />
     <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.cs.frame" />
Index: /branches/RegressionBenchmarks/HeuristicLab/3.3/HeuristicLab-3.3.csproj
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab/3.3/HeuristicLab-3.3.csproj	(revision 7084)
+++ /branches/RegressionBenchmarks/HeuristicLab/3.3/HeuristicLab-3.3.csproj	(revision 7085)
@@ -134,9 +134,9 @@
     <None Include="app.config">
       <SubType>Designer</SubType>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
     <None Include="CustomPostBuild.cmd" />
     <None Include="CustomPostBuildTemplate_UpdateLocalInstallation.cmd" />
     <None Include="HeuristicLab.snk" />
-    <None Include="MergeConfigs.cmd" />
     <None Include="Properties\AssemblyInfo.cs.frame" />
     <None Include="Properties\Settings.settings">
@@ -210,5 +210,5 @@
 set Configuration=$(ConfigurationName)
 
-call MergeConfigs.cmd
+call "$(SolutionDir)MergeConfigs.cmd"
 if exist "%25ProjectDir%25CustomPostBuild.cmd" call CustomPostBuild.cmd</PostBuildEvent>
   </PropertyGroup>
Index: anches/RegressionBenchmarks/HeuristicLab/3.3/MergeConfigs.cmd
===================================================================
--- /branches/RegressionBenchmarks/HeuristicLab/3.3/MergeConfigs.cmd	(revision 7084)
+++ 	(revision )
@@ -1,3 +1,0 @@
-FOR /F "tokens=*" %%A IN ('dir /B "%Outdir%*.dll.config"') DO (
-  ConfigMerger "%%A" "HeuristicLab 3.3.exe.config"
-)
Index: /branches/RegressionBenchmarks/MergeConfigs.cmd
===================================================================
--- /branches/RegressionBenchmarks/MergeConfigs.cmd	(revision 7085)
+++ /branches/RegressionBenchmarks/MergeConfigs.cmd	(revision 7085)
@@ -0,0 +1,18 @@
+@echo off
+
+IF "%Outdir%"=="" (
+  SET Outdir=bin\
+  SET INTERACTIVE=1
+)
+
+echo Recreating HeuristicLab 3.3.exe.config...
+copy /Y "%Outdir%app.config" "%Outdir%HeuristicLab 3.3.exe.config"
+
+echo Merging...
+FOR /F "tokens=*" %%A IN ('dir /B "%Outdir%*.dll.config"') DO (
+  ConfigMerger "%Outdir%%%A" "%Outdir%HeuristicLab 3.3.exe.config"
+)
+
+IF "%INTERACTIVE%"=="1" (
+  pause
+)
