Index: /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj	(revision 13721)
+++ /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj	(revision 13722)
@@ -105,4 +105,9 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="ALGLIB-3.7.0, Version=3.7.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\ALGLIB-3.7.0.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
@@ -309,4 +314,7 @@
     <EmbeddedResource Include="HeatMapView.resx">
       <DependentUpon>HeatMapView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ScatterPlotDataRowVisualPropertiesControl.resx">
+      <DependentUpon>ScatterPlotDataRowVisualPropertiesControl.cs</DependentUpon>
     </EmbeddedResource>
   </ItemGroup>
Index: /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/Plugin.cs.frame	(revision 13721)
+++ /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/Plugin.cs.frame	(revision 13722)
@@ -28,4 +28,5 @@
   [Plugin("HeuristicLab.Analysis.Views", "3.3.13.$WCREV$")]
   [PluginFile("HeuristicLab.Analysis.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.ALGLIB", "3.7.0")]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.Designer.cs	(revision 13721)
+++ /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.Designer.cs	(revision 13722)
@@ -56,4 +56,6 @@
       this.label9 = new System.Windows.Forms.Label();
       this.label7 = new System.Windows.Forms.Label();
+      this.label4 = new System.Windows.Forms.Label();
+      this.regressionLineCheckBox = new System.Windows.Forms.CheckBox();
       ((System.ComponentModel.ISupportInitialize)(this.pointSizeNumericUpDown)).BeginInit();
       this.SuspendLayout();
@@ -171,11 +173,33 @@
       this.label7.Text = "&Visible in Legend:";
       // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(3, 136);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(86, 13);
+      this.label4.TabIndex = 2;
+      this.label4.Text = "&Regression Line:";
+      // 
+      // regressionLineCheckBox
+      // 
+      this.regressionLineCheckBox.AutoSize = true;
+      this.regressionLineCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.regressionLineCheckBox.Location = new System.Drawing.Point(99, 136);
+      this.regressionLineCheckBox.Name = "regressionLineCheckBox";
+      this.regressionLineCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.regressionLineCheckBox.TabIndex = 3;
+      this.regressionLineCheckBox.UseVisualStyleBackColor = true;
+      this.regressionLineCheckBox.CheckedChanged += new System.EventHandler(this.regressionLineCheckBox_CheckedChanged);
+      // 
       // ScatterPlotDataRowVisualPropertiesControl
       // 
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
       this.Controls.Add(this.pointSizeNumericUpDown);
+      this.Controls.Add(this.regressionLineCheckBox);
       this.Controls.Add(this.isVisibleInLegendCheckBox);
       this.Controls.Add(this.label9);
       this.Controls.Add(this.label3);
+      this.Controls.Add(this.label4);
       this.Controls.Add(this.pointStyleComboBox);
       this.Controls.Add(this.label7);
@@ -185,5 +209,5 @@
       this.Controls.Add(this.colorButton);
       this.Name = "ScatterPlotDataRowVisualPropertiesControl";
-      this.Size = new System.Drawing.Size(342, 135);
+      this.Size = new System.Drawing.Size(342, 157);
       ((System.ComponentModel.ISupportInitialize)(this.pointSizeNumericUpDown)).EndInit();
       this.ResumeLayout(false);
@@ -205,4 +229,6 @@
     private System.Windows.Forms.Label label9;
     private System.Windows.Forms.Label label3;
+    private System.Windows.Forms.Label label4;
+    private System.Windows.Forms.CheckBox regressionLineCheckBox;
   }
 }
Index: /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.cs	(revision 13721)
+++ /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.cs	(revision 13722)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -20,9 +20,8 @@
 #endregion
 
+using HeuristicLab.MainForm;
 using System;
 using System.Drawing;
 using System.Windows.Forms;
-using HeuristicLab.MainForm;
-using HeuristicLab.MainForm.WindowsForms;
 
 namespace HeuristicLab.Analysis.Views {
@@ -57,4 +56,5 @@
           pointSizeNumericUpDown.Value = 1;
           displayNameTextBox.Text = String.Empty;
+          regressionLineCheckBox.Checked = false;
         } else {
           displayNameTextBox.Text = Content.DisplayName;
@@ -69,4 +69,5 @@
           pointSizeNumericUpDown.Value = Content.PointSize;
           isVisibleInLegendCheckBox.Checked = Content.IsVisibleInLegend;
+          regressionLineCheckBox.Checked = Content.ShowRegressionLine;
         }
       }
@@ -82,4 +83,5 @@
       pointSizeNumericUpDown.Enabled = Content != null;
       displayNameTextBox.Enabled = Content != null;
+      regressionLineCheckBox.Enabled = Content != null;
     }
 
@@ -121,4 +123,10 @@
       }
     }
+
+    private void regressionLineCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        Content.ShowRegressionLine = regressionLineCheckBox.Checked;
+      }
+    }
     #endregion
   }
Index: /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.resx	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.resx	(revision 13722)
@@ -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="colorDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotView.cs	(revision 13721)
+++ /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/ScatterPlotView.cs	(revision 13722)
@@ -20,4 +20,8 @@
 #endregion
 
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
 using System;
 using System.Collections.Generic;
@@ -26,8 +30,4 @@
 using System.Windows.Forms;
 using System.Windows.Forms.DataVisualization.Charting;
-using HeuristicLab.Collections;
-using HeuristicLab.Common;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
 
 namespace HeuristicLab.Analysis.Views {
@@ -141,4 +141,6 @@
         DeregisterScatterPlotDataRowEvents(row);
         Series series = chart.Series[row.Name];
+        if (chart.Series.IsUniqueName(series.Name + ".lr"))
+          chart.Series.Remove(chart.Series[series.Name + ".lr"]);
         chart.Series.Remove(series);
         if (invisibleSeries.Contains(series))
@@ -460,4 +462,26 @@
 
     private void FillSeriesWithRowValues(Series series, ScatterPlotDataRow row) {
+      if (row.VisualProperties.ShowRegressionLine) {
+        var xs = row.Points.Select(p => p.X).ToArray();
+        var xsMin = xs.Min();
+        var xsMax = xs.Max();
+        var ys = row.Points.Select(p => p.Y).ToArray();
+        var corr = alglib.pearsoncorr2(xs, ys);
+        var slope = corr * ys.StandardDeviation() / xs.StandardDeviation();
+        if (!double.IsNaN(slope) && !double.IsInfinity(slope)) {
+          var off = ys.Average() - slope * xs.Average();
+
+          Series lrSeries;
+          if (chart.Series.IsUniqueName(series.Name + ".lr")) {
+            lrSeries = new Series(series.Name + ".lr") {IsVisibleInLegend = false, ChartType = SeriesChartType.FastLine};
+            chart.Series.Add(lrSeries);
+          } else lrSeries = chart.Series[series.Name + ".lr"];
+          lrSeries.Points.Clear();
+          lrSeries.Points.AddXY(xsMin, slope * xsMin + off);
+          lrSeries.Points.AddXY(xsMax, slope * xsMax + off);
+        }
+      } else if (!chart.Series.IsUniqueName(series.Name + ".lr"))
+        chart.Series.Remove(chart.Series[series.Name + ".lr"]);
+
       for (int i = 0; i < row.Points.Count; i++) {
         var value = row.Points[i];
Index: /branches/PerformanceComparison/HeuristicLab.Analysis/3.3/DataVisualization/ScatterPlotDataRowVisualProperties.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis/3.3/DataVisualization/ScatterPlotDataRowVisualProperties.cs	(revision 13721)
+++ /branches/PerformanceComparison/HeuristicLab.Analysis/3.3/DataVisualization/ScatterPlotDataRowVisualProperties.cs	(revision 13722)
@@ -20,9 +20,9 @@
 #endregion
 
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using System;
 using System.ComponentModel;
 using System.Drawing;
-using HeuristicLab.Common;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Analysis {
@@ -101,4 +101,13 @@
       }
     }
+    private bool showRegressionLine;
+    public bool ShowRegressionLine {
+      get { return showRegressionLine; }
+      set {
+        if (showRegressionLine == value) return;
+        showRegressionLine = value;
+        OnPropertyChanged("ShowRegressionLine");
+      }
+    }
 
     #region Persistence Properties
@@ -128,4 +137,9 @@
       set { displayName = value; }
     }
+    [Storable(Name = "ShowRegressionLine")]
+    private bool StorableShowRegressionLine {
+      get { return showRegressionLine; }
+      set { showRegressionLine = value; }
+    }
     #endregion
 
@@ -139,4 +153,5 @@
       this.displayName = original.displayName;
       this.isVisibleInLegend = original.isVisibleInLegend;
+      this.showRegressionLine = original.showRegressionLine;
     }
     public ScatterPlotDataRowVisualProperties() {
@@ -146,4 +161,5 @@
       displayName = String.Empty;
       isVisibleInLegend = true;
+      showRegressionLine = false;
     }
     public ScatterPlotDataRowVisualProperties(string displayName)
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/ExpertSystem.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/ExpertSystem.cs	(revision 13721)
+++ 	(revision )
@@ -1,646 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.Analysis;
-using HeuristicLab.Collections;
-using HeuristicLab.Common;
-using HeuristicLab.Common.Resources;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.MainForm;
-using HeuristicLab.Optimization;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Persistence.Default.Xml;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.IO;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using RunCreationClient = HeuristicLab.Clients.OKB.RunCreation.RunCreationClient;
-using SingleObjectiveOKBProblem = HeuristicLab.Clients.OKB.RunCreation.SingleObjectiveOKBProblem;
-using SingleObjectiveOKBSolution = HeuristicLab.Clients.OKB.RunCreation.SingleObjectiveOKBSolution;
-
-namespace HeuristicLab.OptimizationExpertSystem.Common {
-  [Item("Expert-System", "Currently in experimental phase, an expert system that makes algorithm suggestions based on fitness landscape analysis features and an optimization knowledge base.")]
-  [Creatable(CreatableAttribute.Categories.TestingAndAnalysis, Priority = 119)]
-  public sealed class ExpertSystem : NamedItem, IStorableContent, INotifyPropertyChanged {
-
-    public string Filename { get; set; }
-
-    public static new Image StaticItemImage {
-      get { return VSImageLibrary.Library; }
-    }
-
-    [Storable]
-    private int maximumEvaluations;
-    public int MaximumEvaluations {
-      get { return maximumEvaluations; }
-      set {
-        if (maximumEvaluations == value) return;
-        maximumEvaluations = value;
-        OnPropertyChanged("MaximumEvaluations");
-        UpdateSuggestions();
-      }
-    }
-
-    [Storable]
-    private RunCollection runs;
-    public RunCollection Runs {
-      get { return runs; }
-    }
-
-    [Storable]
-    private RunCollection knowledgeBase;
-    public RunCollection KnowledgeBase {
-      get { return knowledgeBase; }
-      set {
-        if (knowledgeBase == value) return;
-        knowledgeBase = value;
-        OnPropertyChanged("KnowledgeBase");
-      }
-    }
-
-    [Storable]
-    private SingleObjectiveOKBProblem problem;
-    public SingleObjectiveOKBProblem Problem {
-      get { return problem; }
-      set {
-        if (problem == value) return;
-        problem = value;
-        OnPropertyChanged("Problem");
-        UpdateSuggestions();
-      }
-    }
-
-    [Storable]
-    private ItemList<IAlgorithm> suggestedInstances;
-    private ReadOnlyItemList<IAlgorithm> readOnlySuggestedInstances;
-    public ReadOnlyItemList<IAlgorithm> SuggestedInstances {
-      get { return readOnlySuggestedInstances; }
-    }
-
-    [Storable]
-    private RunCollection problemInstances;
-    public RunCollection ProblemInstances {
-      get { return problemInstances; }
-      set {
-        if (problemInstances == value) return;
-        problemInstances = value;
-        OnPropertyChanged("ProblemInstances");
-      }
-    }
-
-    [Storable]
-    private ResultCollection currentResult;
-    public ResultCollection CurrentResult {
-      get { return currentResult; }
-      set {
-        if (currentResult == value) return;
-        currentResult = value;
-        OnPropertyChanged("CurrentResult");
-      }
-    }
-
-    [Storable]
-    private CheckedItemList<IScope> solutionSeedingPool;
-    public CheckedItemList<IScope> SolutionSeedingPool {
-      get { return solutionSeedingPool; }
-      set { solutionSeedingPool = value; }
-    }
-
-    [Storable]
-    private EnumValue<SeedingStrategyTypes> seedingStrategy;
-    public EnumValue<SeedingStrategyTypes> SeedingStrategy {
-      get { return seedingStrategy; }
-      set { seedingStrategy = value; }
-    }
-    
-    [Storable]
-    private BidirectionalLookup<long, IRun> algorithmId2RunMapping;
-    [Storable]
-    private BidirectionalDictionary<long, IAlgorithm> algorithmId2AlgorithmInstanceMapping;
-
-    [Storable]
-    private Run currentInstance;
-
-    private bool Maximization {
-      get {
-        return Problem != null && Problem.ProblemId >= 0 && ((IValueParameter<BoolValue>)Problem.MaximizationParameter).Value.Value;
-      }
-    }
-
-    [StorableConstructor]
-    private ExpertSystem(bool deserializing) : base(deserializing) { }
-    private ExpertSystem(ExpertSystem original, Cloner cloner)
-      : base(original, cloner) {
-      runs = cloner.Clone(original.runs);
-      knowledgeBase = cloner.Clone(original.knowledgeBase);
-      suggestedInstances = cloner.Clone(original.suggestedInstances);
-      readOnlySuggestedInstances = suggestedInstances.AsReadOnly();
-      problemInstances = cloner.Clone(original.problemInstances);
-      problem = cloner.Clone(original.problem);
-      algorithmId2RunMapping = new BidirectionalLookup<long, IRun>();
-      foreach (var kvp in original.algorithmId2RunMapping.FirstEnumerable) {
-        algorithmId2RunMapping.AddRangeFirst(kvp.Key, kvp.Select(cloner.Clone));
-      }
-      algorithmId2AlgorithmInstanceMapping = new BidirectionalDictionary<long, IAlgorithm>();
-      foreach (var kvp in original.algorithmId2AlgorithmInstanceMapping) {
-        algorithmId2AlgorithmInstanceMapping.Add(kvp.Key, cloner.Clone(kvp.Value));
-      }
-      currentResult = cloner.Clone(original.currentResult);
-      solutionSeedingPool = cloner.Clone(original.solutionSeedingPool);
-      seedingStrategy = cloner.Clone(original.seedingStrategy);
-      currentInstance = cloner.Clone(original.currentInstance);
-      RegisterEventHandlers();
-    }
-    public ExpertSystem() {
-      Name = ItemName;
-      Description = ItemDescription;
-      runs = new RunCollection();
-      knowledgeBase = new RunCollection();
-      suggestedInstances = new ItemList<IAlgorithm>();
-      readOnlySuggestedInstances = suggestedInstances.AsReadOnly();
-      problemInstances = new RunCollection();
-      problem = new SingleObjectiveOKBProblem();
-      algorithmId2RunMapping = new BidirectionalLookup<long, IRun>();
-      algorithmId2AlgorithmInstanceMapping = new BidirectionalDictionary<long, IAlgorithm>();
-      solutionSeedingPool = new CheckedItemList<IScope>();
-      seedingStrategy = new EnumValue<SeedingStrategyTypes>(SeedingStrategyTypes.NoSeeding);
-      RegisterEventHandlers();
-    }
-
-    private void ProblemOnProblemChanged(object sender, EventArgs eventArgs) {
-      
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new ExpertSystem(this, cloner);
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      readOnlySuggestedInstances = suggestedInstances.AsReadOnly();
-      RegisterEventHandlers();
-    }
-
-    private void RegisterEventHandlers() {
-      problem.ProblemChanged += ProblemOnProblemChanged;
-      problem.Solutions.ItemsAdded += ProblemSolutionsChanged;
-      problem.Solutions.ItemsReplaced += ProblemSolutionsChanged;
-      problem.Solutions.ItemsRemoved += ProblemSolutionsChanged;
-      problem.Solutions.CollectionReset += ProblemSolutionsChanged;
-      runs.CollectionReset += InformationChanged;
-      runs.ItemsAdded += InformationChanged;
-      runs.ItemsRemoved += InformationChanged;
-      runs.Reset += InformationChanged;
-      runs.UpdateOfRunsInProgressChanged += InformationChanged;
-      knowledgeBase.CollectionReset += InformationChanged;
-      knowledgeBase.ItemsAdded += InformationChanged;
-      knowledgeBase.ItemsRemoved += InformationChanged;
-    }
-
-    private void ProblemSolutionsChanged(object sender, EventArgs e) {
-      foreach (var sol in Problem.Solutions.Select(x => x.Solution).OfType<IScope>()) {
-        if (!SolutionSeedingPool.Contains(sol))
-          SolutionSeedingPool.Add(sol, false);
-      }
-    }
-
-    private void InformationChanged(object sender, EventArgs e) {
-      var runCollection = sender as RunCollection;
-      if (runCollection != null && runCollection.UpdateOfRunsInProgress) return;
-      UpdateSuggestions();
-    }
-
-    private void UpdateInstanceProjection() {
-      currentInstance = null;
-      var filter = new HashSet<string>();
-
-      if (Problem.ProblemId != -1) {
-        currentInstance = new Run { Name = Problem.Name };
-        Problem.Problem.CollectParameterValues(currentInstance.Parameters);
-        foreach (var c in RunCreationClient.Instance.GetCharacteristicValues(Problem.ProblemId)) {
-          var key = "Characteristic." + c.Name;
-          currentInstance.Results.Add(key, RunCreationClient.Instance.ConvertToItem(c));
-          filter.Add(key);
-        }
-      }
-      // TODO: There is a problem with missing values that has to be solved
-      // The common set of characteristics among all problems may be too small to be useful
-      // It has to be decided somehow which problem instances to include in order to obtain the set of features that is expressive and available
-      var allCharacteristics = ProblemInstances.Select(x => new HashSet<string>(x.Results.Where(y => y.Key.StartsWith("Characteristic.", StringComparison.Ordinal)).Select(y => y.Key))).ToList();
-      if (allCharacteristics.Count == 0) return;
-
-      var commonCharacteristics = filter.Count > 0 ? filter : allCharacteristics[0];
-      for (var i = 0; i < allCharacteristics.Count; i++)
-        commonCharacteristics.IntersectWith(allCharacteristics[i]);
-
-      if (commonCharacteristics.Count == 0) return;
-
-      var instances = new Dictionary<string, double[]>();
-      foreach (var i in ProblemInstances)
-        instances[i.Name] = i.Results.Where(x => commonCharacteristics.Contains(x.Key)).OrderBy(x => x.Key).Select(x => (double)((dynamic)x.Value).Value).ToArray();
-      if (currentInstance != null)
-        instances[currentInstance.Name] = currentInstance.Results.Where(x => commonCharacteristics.Contains(x.Key)).OrderBy(x => x.Key).Select(x => (double)((dynamic)x.Value).Value).ToArray();
-
-      var allValues = instances.SelectMany(x => x.Value).ToList();
-      var avg = allValues.Average();
-      var stdev = allValues.StandardDeviation();
-
-      // normalize characteristic values by transforming them to their z-score
-      foreach (var key in instances.Keys.ToList()) {
-        var arr = instances[key];
-        for (var i = 0; i < arr.Length; i++) {
-          arr[i] = (arr[i] - avg) / stdev;
-        }
-      }
-
-      var key2Idx = new BidirectionalDictionary<string, int>();
-      foreach (var kvp in instances.Select((k, i) => new { Index = i, Key = k.Key }))
-        key2Idx.Add(kvp.Key, kvp.Index);
-
-      #region MDS
-      Func<double[], double[], double> euclid = (a, b) => Math.Sqrt(a.Zip(b, (x, y) => (x - y)).Sum(x => x * x));
-      var num = instances.Count;
-      var matrix = new DoubleMatrix(num, num);
-      for (var i = 0; i < num - 1; i++) {
-        for (var j = i + 1; j < num; j++) {
-          matrix[i, j] = matrix[j, i] = euclid(instances[key2Idx.GetBySecond(i)], instances[key2Idx.GetBySecond(j)]);
-        }
-      }
-
-      var coords = MultidimensionalScaling.KruskalShepard(matrix);
-      #endregion
-      #region PCA
-      var ds = new double[instances.Count, commonCharacteristics.Count];
-      foreach (var instance in instances) {
-        var arr = instance.Value;
-        for (var feature = 0; feature < arr.Length; feature++)
-          ds[key2Idx.GetByFirst(instance.Key), feature] = arr[feature];
-      }
-
-      int info;
-      double[] s2;
-      double[,] v;
-      alglib.pcabuildbasis(ds, ds.GetLength(0), ds.GetLength(1), out info, out s2, out v);
-      #endregion
-
-      ProblemInstances.UpdateOfRunsInProgress = true;
-      try {
-        foreach (var instance in ProblemInstances) {
-          double x = 0, y = 0;
-          for (var feature = 0; feature < ds.GetLength(1); feature++) {
-            x += ds[key2Idx.GetByFirst(instance.Name), feature] * v[feature, 0];
-            y += ds[key2Idx.GetByFirst(instance.Name), feature] * v[feature, 1];
-          }
-
-          IItem item;
-          if (instance.Results.TryGetValue("Projection.PCA.X", out item)) {
-            ((DoubleValue)item).Value = x;
-          } else instance.Results.Add("Projection.PCA.X", new DoubleValue(x));
-          if (instance.Results.TryGetValue("Projection.PCA.Y", out item)) {
-            ((DoubleValue)item).Value = y;
-          } else instance.Results.Add("Projection.PCA.Y", new DoubleValue(y));
-
-          if (instance.Results.TryGetValue("Projection.MDS.X", out item)) {
-            ((DoubleValue)item).Value = coords[key2Idx.GetByFirst(instance.Name), 0];
-          } else instance.Results.Add("Projection.MDS.X", new DoubleValue(coords[key2Idx.GetByFirst(instance.Name), 0]));
-          if (instance.Results.TryGetValue("Projection.MDS.Y", out item)) {
-            ((DoubleValue)item).Value = coords[key2Idx.GetByFirst(instance.Name), 1];
-          } else instance.Results.Add("Projection.MDS.Y", new DoubleValue(coords[key2Idx.GetByFirst(instance.Name), 1]));
-        }
-      } finally { ProblemInstances.UpdateOfRunsInProgress = false; }
-
-      if (currentInstance != null) {
-        double x = 0, y = 0;
-        for (var feature = 0; feature < ds.GetLength(1); feature++) {
-          x += ds[key2Idx.GetByFirst(currentInstance.Name), feature] * v[feature, 0];
-          y += ds[key2Idx.GetByFirst(currentInstance.Name), feature] * v[feature, 1];
-        }
-
-        IItem item;
-        if (currentInstance.Results.TryGetValue("Projection.PCA.X", out item)) {
-          ((DoubleValue)item).Value = x;
-        } else currentInstance.Results.Add("Projection.PCA.X", new DoubleValue(x));
-        if (currentInstance.Results.TryGetValue("Projection.PCA.Y", out item)) {
-          ((DoubleValue)item).Value = y;
-        } else currentInstance.Results.Add("Projection.PCA.Y", new DoubleValue(y));
-
-        if (currentInstance.Results.TryGetValue("Projection.MDS.X", out item)) {
-          ((DoubleValue)item).Value = coords[key2Idx.GetByFirst(currentInstance.Name), 0];
-        } else currentInstance.Results.Add("Projection.MDS.X", new DoubleValue(coords[key2Idx.GetByFirst(currentInstance.Name), 0]));
-        if (currentInstance.Results.TryGetValue("Projection.MDS.Y", out item)) {
-          ((DoubleValue)item).Value = coords[key2Idx.GetByFirst(currentInstance.Name), 1];
-        } else currentInstance.Results.Add("Projection.MDS.Y", new DoubleValue(coords[key2Idx.GetByFirst(currentInstance.Name), 1]));
-      }
-    }
-
-    public Tuple<double, double> ProjectCurrentInstance(string projection) {
-      if (currentInstance == null) return null;
-      var xKey = "Projection." + projection + ".X";
-      var yKey = "Projection." + projection + ".Y";
-      if (!currentInstance.Results.ContainsKey(xKey) || !currentInstance.Results.ContainsKey(yKey))
-        return null;
-      var x = ((DoubleValue)currentInstance.Results[xKey]).Value;
-      var y = ((DoubleValue)currentInstance.Results[yKey]).Value;
-      return Tuple.Create(x, y);
-    }
-
-    private static readonly HashSet<string> InterestingValueNames = new HashSet<string>() {
-      "QualityPerEvaluations", "Problem Name", "Problem Type", "Algorithm Name", "Algorithm Type", "Maximization", "BestKnownQuality"
-    };
-
-    public Task StartAlgorithmAsync(int index) {
-      var selectedInstance = suggestedInstances[index];
-      var algorithmClone = (IAlgorithm)selectedInstance.Clone();
-      var problemClone = Problem.CloneProblem() as ISingleObjectiveHeuristicOptimizationProblem;
-      if (problemClone == null) throw new InvalidOperationException("Problem is not of type " + typeof(ISingleObjectiveHeuristicOptimizationProblem).FullName);
-      // TODO: It is assumed the problem instance by default is configured using no preexisting solution creator
-      if (SeedingStrategy.Value != SeedingStrategyTypes.NoSeeding) {
-        if (!SolutionSeedingPool.CheckedItems.Any()) throw new InvalidOperationException("There are no solutions selected for seeding.");
-        // TODO: It would be necessary to specify the solution creator somewhere (property and GUI)
-        var seedingCreator = problemClone.Operators.OfType<IPreexistingSolutionCreator>().FirstOrDefault();
-        if (seedingCreator == null) throw new InvalidOperationException("The problem does not contain a solution creator that allows seeding.");
-        seedingCreator.PreexistingSolutionsParameter.Value.Replace(SolutionSeedingPool.CheckedItems.Select(x => x.Value));
-        seedingCreator.SampleFromPreexistingParameter.Value.Value = SeedingStrategy.Value == SeedingStrategyTypes.SeedBySampling;
-        // TODO: WHY!? WHY??!?
-        ((dynamic)problemClone.SolutionCreatorParameter).Value = (dynamic)seedingCreator;
-      }
-      algorithmClone.Problem = problemClone;
-      algorithmClone.Prepare(true);
-      IParameter stopParam;
-      var monitorStop = true;
-      if (algorithmClone.Parameters.TryGetValue("MaximumEvaluations", out stopParam)) {
-        var maxEvalParam = stopParam as IValueParameter<Data.IntValue>;
-        if (maxEvalParam != null) {
-          maxEvalParam.Value.Value = MaximumEvaluations;
-          monitorStop = false;
-        }
-      }
-
-      // TODO: The following can be simplified when we have async implementation patterns for our algorithms:
-      // TODO: The closures can be removed and replaced with private member methods
-      var waitHandle = new AutoResetEvent(false);
-
-      #region EventHandler closures
-      EventHandler exeStateChanged = (sender, e) => {
-        if (algorithmClone.ExecutionState == ExecutionState.Started) {
-          CurrentResult = algorithmClone.Results;
-        } else if (algorithmClone.ExecutionState == ExecutionState.Stopped) {
-          foreach (var solution in algorithmClone.Results.Where(x => x.Name.ToLower().Contains("solution")).Select(x => x.Value).OfType<IScope>()) {
-            Problem.Solutions.Add(new SingleObjectiveOKBSolution(Problem.ProblemId) {
-              Quality = solution.Variables.ContainsKey(Problem.Problem.Evaluator.QualityParameter.ActualName) ? ((DoubleValue)solution.Variables[Problem.Problem.Evaluator.QualityParameter.ActualName].Value).Value : double.NaN,
-              Solution = (IItem)solution.Clone()
-            });
-          }
-          Runs.Add(algorithmClone.Runs.Last());
-          waitHandle.Set();
-        }
-      };
-
-      EventHandler<EventArgs<Exception>> exceptionOccurred = (sender, e) => {
-        waitHandle.Set();
-      };
-
-      EventHandler timeChanged = (sender, e) => {
-        IResult evalSolResult;
-        if (!algorithmClone.Results.TryGetValue("EvaluatedSolutions", out evalSolResult) || !(evalSolResult.Value is Data.IntValue)) return;
-        var evalSols = ((Data.IntValue)evalSolResult.Value).Value;
-        if (evalSols >= MaximumEvaluations && algorithmClone.ExecutionState == ExecutionState.Started)
-          algorithmClone.Stop();
-      };
-      #endregion
-
-      algorithmClone.ExecutionStateChanged += exeStateChanged;
-      algorithmClone.ExceptionOccurred += exceptionOccurred;
-      if (monitorStop) algorithmClone.ExecutionTimeChanged += timeChanged;
-
-      return Task.Factory.StartNew(() => {
-        algorithmClone.Start();
-        waitHandle.WaitOne();
-        waitHandle.Dispose();
-      });
-    }
-
-    public void StartAlgorithm(int index) {
-      StartAlgorithmAsync(index).Wait();
-    }
-
-    public Task UpdateKnowledgeBaseAsync(IProgress progress = null) {
-      if (progress == null) progress = new Progress(string.Empty);
-      progress.Start("Updating Knowledge Base from OKB");
-      OnDownloadStarted(progress);
-      return Task.Factory.StartNew(() => { DoUpdateKnowledgeBase(progress); }, TaskCreationOptions.LongRunning);
-    }
-
-    public void UpdateKnowledgeBase(IProgress progress = null) {
-      UpdateKnowledgeBaseAsync(progress).Wait();
-    }
-
-    private void DoUpdateKnowledgeBase(IProgress progress) {
-      var queryClient = Clients.OKB.Query.QueryClient.Instance;
-      var adminClient = Clients.OKB.Administration.AdministrationClient.Instance;
-      try {
-        progress.Status = "Downloading run information...";
-        progress.ProgressValue = 0;
-        // FIXME: How to tell if refresh is necessary?
-        queryClient.Refresh();
-        progress.ProgressValue = 0.5;
-        progress.Status = "Downloading algorithm and problem instance information...";
-        // FIXME: How to tell if refresh is necessary?
-        adminClient.Refresh();
-
-        var probInstance = adminClient.Problems.SingleOrDefault(x => x.Id == Problem.ProblemId);
-        if (probInstance == null) throw new InvalidOperationException("The chosen problem instance cannot be found in the OKB.");
-        var probClassId = probInstance.ProblemClassId;
-
-        var problemClassFilter = (Clients.OKB.Query.StringComparisonAvailableValuesFilter)queryClient.Filters.Single(x => x.Label == "Problem Class Name");
-        problemClassFilter.Value = adminClient.ProblemClasses.Single(x => x.Id == probClassId).Name;
-
-        progress.Status = "Downloading problem instances...";
-        progress.ProgressValue = 0;
-        var p = 0;
-        ProblemInstances.UpdateOfRunsInProgress = true;
-        ProblemInstances.Clear();
-        var totalProblems = adminClient.Problems.Count(x => x.ProblemClassId == probClassId);
-        foreach (var problInst in adminClient.Problems.Where(x => x.ProblemClassId == probClassId)) {
-          progress.Status = string.Format("Downloading problem {0} (okb-id: {1})....", problInst.Name, problInst.Id);
-          var data = Clients.OKB.Administration.AdministrationClient.GetProblemData(problInst.Id);
-          if (data != null) {
-            using (var stream = new MemoryStream(data)) {
-              try {
-                var prob = (IProblem)XmlParser.Deserialize<IContent>(stream);
-                var probRun = new Run() { Name = prob.Name };
-                prob.CollectParameterValues(probRun.Parameters);
-                probRun.Parameters["Problem Name"] = new StringValue(prob.Name);
-                probRun.Parameters["Problem Type"] = new StringValue(prob.GetType().Name);
-                progress.Status += Environment.NewLine + "Downloading characteristics...";
-                foreach (var v in RunCreationClient.Instance.GetCharacteristicValues(problInst.Id)) {
-                  probRun.Results.Add("Characteristic." + v.Name, RunCreationClient.Instance.ConvertToItem(v));
-                }
-                ProblemInstances.Add(probRun);
-              } catch { }
-              stream.Close();
-            }
-          }
-          p++;
-          progress.ProgressValue = p / (double)totalProblems;
-        }
-
-        algorithmId2AlgorithmInstanceMapping.Clear();
-        progress.Status = "Downloading algorithm instances...";
-        progress.ProgressValue = 0;
-        p = 0;
-        foreach (var algInst in adminClient.Algorithms) {
-          progress.Status = string.Format("Downloading algorithm {0} (okb-id: {1})...", algInst.Name, algInst.Id);
-          var data = Clients.OKB.Administration.AdministrationClient.GetAlgorithmData(algInst.Id);
-          if (data != null) {
-            using (var stream = new MemoryStream(data)) {
-              try {
-                var alg = (IAlgorithm)XmlParser.Deserialize<IContent>(stream);
-                algorithmId2AlgorithmInstanceMapping.Add(algInst.Id, alg);
-              } catch { }
-              stream.Close();
-            }
-          }
-          p++;
-          progress.ProgressValue = p / (double)adminClient.Algorithms.Count;
-        }
-
-        var interestingValues = queryClient.ValueNames.Where(x => InterestingValueNames.Contains(x.Name)).ToList();
-
-        progress.Status = "Obtaining number of runs...";
-        progress.ProgressValue = 0;
-        p = 0;
-        var count = queryClient.GetNumberOfRuns(problemClassFilter);
-        if (count == 0) return;
-        
-        var runIds = queryClient.GetRunIds(problemClassFilter).ToList();
-        var conversions = new List<Task>();
-        var runList = new List<IRun>();
-        while (p < count) {
-          var nextIds = runIds.Skip(p).Take(500).ToList();
-          progress.Status = string.Format("Downloading runs {0} to {1} of {2}...", p, p + nextIds.Count, count);
-          var okbRuns = queryClient.GetRunsWithValues(nextIds, true, interestingValues);
-          conversions.Add(Task.Factory.StartNew(() => {
-            var hlRuns = okbRuns.AsParallel().Select(x => new { AlgorithmId = x.Algorithm.Id, Run = queryClient.ConvertToOptimizationRun(x) }).ToList();
-            lock (runList) {
-              foreach (var r in hlRuns) {
-                algorithmId2RunMapping.Add(r.AlgorithmId, r.Run);
-                runList.Add(r.Run);
-              }
-            }
-          }));
-          p += nextIds.Count;
-          progress.ProgressValue = p / (double)count;
-        }
-        Task.WaitAll(conversions.ToArray());
-
-        progress.Status = "Finishing...";
-        var algInstRunDict = runList.Where(x => x.Parameters.ContainsKey("Problem Name") && x.Parameters["Problem Name"] is StringValue)
-                                          .GroupBy(x => ((StringValue)x.Parameters["Problem Name"]).Value)
-                                          .ToDictionary(x => x.Key, x => x.GroupBy(y => ((StringValue)y.Parameters["Algorithm Name"]).Value)
-                                                                                  .ToDictionary(y => y.Key, y => y.ToList()));
-
-        foreach (var instance in ProblemInstances) {
-          IItem probNameParam;
-          if (!instance.Parameters.TryGetValue("Problem Name", out probNameParam)) continue;
-
-          var probInstanceName = ((StringValue)probNameParam).Value;
-          var maximization = ((BoolValue)instance.Parameters["Maximization"]).Value;
-          
-          IItem bkParam;
-          if (!instance.Parameters.TryGetValue("BestKnownQuality", out bkParam) || !(bkParam is DoubleValue)) {
-            Dictionary<string, List<IRun>> algRuns;
-            if (!algInstRunDict.TryGetValue(probInstanceName, out algRuns)) continue;
-            var list = algRuns.SelectMany(x => x.Value)
-                              .Where(x => x.Results.ContainsKey("QualityPerEvaluations"))
-                              .Select(x => ((IndexedDataTable<double>)x.Results["QualityPerEvaluations"]).Rows.First().Values.Last().Item2);
-            bkParam = new DoubleValue(maximization ? list.Max() : list.Min());
-            instance.Parameters["BestKnownQuality"] = bkParam;
-          } else bkParam = instance.Parameters["BestKnownQuality"];
-
-          var bkQuality = ((DoubleValue)bkParam).Value;
-
-          if (!algInstRunDict.ContainsKey(probInstanceName)) continue;
-          foreach (var kvp in algInstRunDict[probInstanceName]) {
-            // TODO: Things needs to be configurable here (table name, targets)
-            foreach (var target in new[] { 1, 1.01, 1.05, 1.1, 1.2, 1.5 }) {
-              var result = ExpectedRuntimeHelper.CalculateErt(kvp.Value, "QualityPerEvaluations", bkQuality * target, maximization);
-              var resultName = kvp.Key + "@" + ((target - 1) * 100) + "%";
-              IItem item;
-              if (instance.Results.TryGetValue(resultName, out item)) {
-                ((DoubleValue)item).Value = Math.Log10(result.ExpectedRuntime);
-              } else instance.Results.Add(resultName, new DoubleValue(Math.Log10(result.ExpectedRuntime)));
-            }
-          }
-        }
-        KnowledgeBase = new RunCollection(runList);
-      } finally { progress.Finish(); ProblemInstances.UpdateOfRunsInProgress = false; }
-      UpdateInstanceProjection();
-    }
-
-    private void UpdateSuggestions() {
-      if (Problem == null) return;
-      var instances = new SortedList<double, IAlgorithm>();
-      foreach (var relevantRuns in knowledgeBase.GroupBy(x => algorithmId2RunMapping.GetBySecond(x).Single())) {
-        var algorithm = algorithmId2AlgorithmInstanceMapping.GetByFirst(relevantRuns.Key);
-        var avgQuality = 0.0;
-        var counter = 0;
-        foreach (var problemRuns in relevantRuns.GroupBy(x => ((StringValue)x.Parameters["Problem Name"]).Value)) {
-          var probInstance = ProblemInstances.SingleOrDefault(x => x.Name == problemRuns.Key);
-          if (probInstance == null) continue;
-          var bkQuality = ((DoubleValue)probInstance.Parameters["BestKnownQuality"]).Value;
-          foreach (var run in problemRuns) {
-            var performanceGraph = ((IndexedDataTable<double>)run.Results["QualityPerEvaluations"]);
-            try {
-              avgQuality += performanceGraph.Rows.First().Values.TakeWhile(x => x.Item1 < MaximumEvaluations).Last().Item2 / bkQuality;
-              counter++;
-            } catch {
-              continue;
-            }
-          }
-        }
-        avgQuality /= counter;
-        instances.Add(avgQuality, algorithm);
-      }
-
-      var instanceLadder = instances.Select(x => (IAlgorithm)x.Value.Clone()).ToList();
-      if (Maximization) instanceLadder.Reverse();
-      suggestedInstances.Replace(instanceLadder);
-    }
-
-    public event PropertyChangedEventHandler PropertyChanged;
-    private void OnPropertyChanged(string propertyName) {
-      var handler = PropertyChanged;
-      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
-    }
-
-    public event EventHandler<EventArgs<IProgress>> DownloadStarted;
-    private void OnDownloadStarted(IProgress progress) {
-      var handler = DownloadStarted;
-      if (handler != null) handler(this, new EventArgs<IProgress>(progress));
-    }
-  }
-}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/HeuristicLab.OptimizationExpertSystem.Common-3.3.csproj
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/HeuristicLab.OptimizationExpertSystem.Common-3.3.csproj	(revision 13721)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/HeuristicLab.OptimizationExpertSystem.Common-3.3.csproj	(revision 13722)
@@ -143,5 +143,5 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="ExpertSystem.cs" />
+    <Compile Include="KnowledgeCenter.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="SeedingStrategyTypes.cs" />
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/KnowledgeCenter.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/KnowledgeCenter.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/KnowledgeCenter.cs	(revision 13722)
@@ -0,0 +1,594 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Analysis;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.Xml;
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using RunCreationClient = HeuristicLab.Clients.OKB.RunCreation.RunCreationClient;
+using SingleObjectiveOKBProblem = HeuristicLab.Clients.OKB.RunCreation.SingleObjectiveOKBProblem;
+using SingleObjectiveOKBSolution = HeuristicLab.Clients.OKB.RunCreation.SingleObjectiveOKBSolution;
+
+namespace HeuristicLab.OptimizationExpertSystem.Common {
+  [Item("Knowledge Center", "Currently in experimental phase, an expert system that makes algorithm suggestions based on fitness landscape analysis features and an optimization knowledge base.")]
+  [Creatable(CreatableAttribute.Categories.TestingAndAnalysis, Priority = 119)]
+  public sealed class KnowledgeCenter : IContent {
+
+    public string Filename { get; set; }
+
+    public static new Image StaticItemImage {
+      get { return VSImageLibrary.Library; }
+    }
+
+    private IntValue maximumEvaluations;
+    public IntValue MaximumEvaluations {
+      get { return maximumEvaluations; }
+    }
+
+    private RunCollection instanceRuns;
+    public RunCollection InstanceRuns {
+      get { return instanceRuns; }
+    }
+
+    private RunCollection seededRuns;
+    public RunCollection SeededRuns {
+      get { return seededRuns; }
+    }
+
+    private RunCollection knowledgeBase;
+    public RunCollection KnowledgeBase {
+      get { return knowledgeBase; }
+    }
+
+    private SingleObjectiveOKBProblem problem;
+    public SingleObjectiveOKBProblem Problem {
+      get { return problem; }
+    }
+
+    private ItemList<IAlgorithm> suggestedInstances;
+    private ReadOnlyItemList<IAlgorithm> readOnlySuggestedInstances;
+    public ReadOnlyItemList<IAlgorithm> SuggestedInstances {
+      get { return readOnlySuggestedInstances; }
+    }
+
+    private RunCollection problemInstances;
+    public RunCollection ProblemInstances {
+      get { return problemInstances; }
+    }
+
+    private CheckedItemList<IScope> solutionSeedingPool;
+    public CheckedItemList<IScope> SolutionSeedingPool {
+      get { return solutionSeedingPool; }
+    }
+
+    private EnumValue<SeedingStrategyTypes> seedingStrategy;
+    public EnumValue<SeedingStrategyTypes> SeedingStrategy {
+      get { return seedingStrategy; }
+    }
+    
+    private BidirectionalLookup<long, IRun> algorithmId2RunMapping;
+    private BidirectionalDictionary<long, IAlgorithm> algorithmId2AlgorithmInstanceMapping;
+
+    private Run currentInstance;
+
+    private bool Maximization {
+      get { return Problem != null && Problem.ProblemId >= 0 && ((IValueParameter<BoolValue>)Problem.MaximizationParameter).Value.Value; }
+    }
+
+    public KnowledgeCenter() {
+      maximumEvaluations = new IntValue(0);
+      instanceRuns = new RunCollection();
+      knowledgeBase = new RunCollection();
+      suggestedInstances = new ItemList<IAlgorithm>();
+      readOnlySuggestedInstances = suggestedInstances.AsReadOnly();
+      problemInstances = new RunCollection();
+      problem = new SingleObjectiveOKBProblem();
+      algorithmId2RunMapping = new BidirectionalLookup<long, IRun>();
+      algorithmId2AlgorithmInstanceMapping = new BidirectionalDictionary<long, IAlgorithm>();
+      solutionSeedingPool = new CheckedItemList<IScope>();
+      seedingStrategy = new EnumValue<SeedingStrategyTypes>(SeedingStrategyTypes.NoSeeding);
+      RegisterEventHandlers();
+    }
+
+    private void ProblemOnProblemChanged(object sender, EventArgs eventArgs) {
+      
+    }
+
+    private void RegisterEventHandlers() {
+      maximumEvaluations.ValueChanged += MaximumEvaluationsOnValueChanged;
+      problem.ProblemChanged += ProblemOnProblemChanged;
+      problem.Solutions.ItemsAdded += ProblemSolutionsChanged;
+      problem.Solutions.ItemsReplaced += ProblemSolutionsChanged;
+      problem.Solutions.ItemsRemoved += ProblemSolutionsChanged;
+      problem.Solutions.CollectionReset += ProblemSolutionsChanged;
+      instanceRuns.CollectionReset += InformationChanged;
+      instanceRuns.ItemsAdded += InformationChanged;
+      instanceRuns.ItemsRemoved += InformationChanged;
+      instanceRuns.Reset += InformationChanged;
+      instanceRuns.UpdateOfRunsInProgressChanged += InformationChanged;
+      knowledgeBase.CollectionReset += InformationChanged;
+      knowledgeBase.ItemsAdded += InformationChanged;
+      knowledgeBase.ItemsRemoved += InformationChanged;
+    }
+
+    private void MaximumEvaluationsOnValueChanged(object sender, EventArgs eventArgs) {
+      UpdateSuggestions();
+    }
+
+    private void ProblemSolutionsChanged(object sender, EventArgs e) {
+      foreach (var sol in Problem.Solutions.Select(x => x.Solution).OfType<IScope>()) {
+        if (!SolutionSeedingPool.Contains(sol))
+          SolutionSeedingPool.Add(sol, false);
+      }
+    }
+
+    private void InformationChanged(object sender, EventArgs e) {
+      var runCollection = sender as RunCollection;
+      if (runCollection != null && runCollection.UpdateOfRunsInProgress) return;
+      UpdateSuggestions();
+    }
+
+    private void UpdateInstanceProjection() {
+      currentInstance = null;
+      var filter = new HashSet<string>();
+
+      if (Problem.ProblemId != -1) {
+        currentInstance = new Run { Name = Problem.Name };
+        Problem.Problem.CollectParameterValues(currentInstance.Parameters);
+        foreach (var c in RunCreationClient.Instance.GetCharacteristicValues(Problem.ProblemId)) {
+          var key = "Characteristic." + c.Name;
+          currentInstance.Results.Add(key, RunCreationClient.Instance.ConvertToItem(c));
+          filter.Add(key);
+        }
+      }
+      // TODO: There is a problem with missing values that has to be solved
+      // The common set of characteristics among all problems may be too small to be useful
+      // It has to be decided somehow which problem instances to include in order to obtain the set of features that is expressive and available
+      var allCharacteristics = ProblemInstances.Select(x => new HashSet<string>(x.Results.Where(y => y.Key.StartsWith("Characteristic.", StringComparison.Ordinal)).Select(y => y.Key))).ToList();
+      if (allCharacteristics.Count == 0) return;
+
+      var commonCharacteristics = filter.Count > 0 ? filter : allCharacteristics[0];
+      for (var i = 0; i < allCharacteristics.Count; i++)
+        commonCharacteristics.IntersectWith(allCharacteristics[i]);
+
+      if (commonCharacteristics.Count == 0) return;
+
+      var instances = new Dictionary<string, double[]>();
+      foreach (var i in ProblemInstances)
+        instances[i.Name] = i.Results.Where(x => commonCharacteristics.Contains(x.Key)).OrderBy(x => x.Key).Select(x => (double)((dynamic)x.Value).Value).ToArray();
+      if (currentInstance != null)
+        instances[currentInstance.Name] = currentInstance.Results.Where(x => commonCharacteristics.Contains(x.Key)).OrderBy(x => x.Key).Select(x => (double)((dynamic)x.Value).Value).ToArray();
+
+      var allValues = instances.SelectMany(x => x.Value).ToList();
+      var avg = allValues.Average();
+      var stdev = allValues.StandardDeviation();
+
+      // normalize characteristic values by transforming them to their z-score
+      foreach (var key in instances.Keys.ToList()) {
+        var arr = instances[key];
+        for (var i = 0; i < arr.Length; i++) {
+          arr[i] = (arr[i] - avg) / stdev;
+        }
+      }
+
+      var key2Idx = new BidirectionalDictionary<string, int>();
+      foreach (var kvp in instances.Select((k, i) => new { Index = i, Key = k.Key }))
+        key2Idx.Add(kvp.Key, kvp.Index);
+
+      #region MDS
+      Func<double[], double[], double> euclid = (a, b) => Math.Sqrt(a.Zip(b, (x, y) => (x - y)).Sum(x => x * x));
+      var num = instances.Count;
+      var matrix = new DoubleMatrix(num, num);
+      for (var i = 0; i < num - 1; i++) {
+        for (var j = i + 1; j < num; j++) {
+          matrix[i, j] = matrix[j, i] = euclid(instances[key2Idx.GetBySecond(i)], instances[key2Idx.GetBySecond(j)]);
+        }
+      }
+
+      var coords = MultidimensionalScaling.KruskalShepard(matrix);
+      #endregion
+      #region PCA
+      var ds = new double[instances.Count, commonCharacteristics.Count];
+      foreach (var instance in instances) {
+        var arr = instance.Value;
+        for (var feature = 0; feature < arr.Length; feature++)
+          ds[key2Idx.GetByFirst(instance.Key), feature] = arr[feature];
+      }
+
+      int info;
+      double[] s2;
+      double[,] v;
+      alglib.pcabuildbasis(ds, ds.GetLength(0), ds.GetLength(1), out info, out s2, out v);
+      #endregion
+
+      ProblemInstances.UpdateOfRunsInProgress = true;
+      try {
+        foreach (var instance in ProblemInstances) {
+          double x = 0, y = 0;
+          for (var feature = 0; feature < ds.GetLength(1); feature++) {
+            x += ds[key2Idx.GetByFirst(instance.Name), feature] * v[feature, 0];
+            y += ds[key2Idx.GetByFirst(instance.Name), feature] * v[feature, 1];
+          }
+
+          IItem item;
+          if (instance.Results.TryGetValue("Projection.PCA.X", out item)) {
+            ((DoubleValue)item).Value = x;
+          } else instance.Results.Add("Projection.PCA.X", new DoubleValue(x));
+          if (instance.Results.TryGetValue("Projection.PCA.Y", out item)) {
+            ((DoubleValue)item).Value = y;
+          } else instance.Results.Add("Projection.PCA.Y", new DoubleValue(y));
+
+          if (instance.Results.TryGetValue("Projection.MDS.X", out item)) {
+            ((DoubleValue)item).Value = coords[key2Idx.GetByFirst(instance.Name), 0];
+          } else instance.Results.Add("Projection.MDS.X", new DoubleValue(coords[key2Idx.GetByFirst(instance.Name), 0]));
+          if (instance.Results.TryGetValue("Projection.MDS.Y", out item)) {
+            ((DoubleValue)item).Value = coords[key2Idx.GetByFirst(instance.Name), 1];
+          } else instance.Results.Add("Projection.MDS.Y", new DoubleValue(coords[key2Idx.GetByFirst(instance.Name), 1]));
+        }
+      } finally { ProblemInstances.UpdateOfRunsInProgress = false; }
+
+      if (currentInstance != null) {
+        double x = 0, y = 0;
+        for (var feature = 0; feature < ds.GetLength(1); feature++) {
+          x += ds[key2Idx.GetByFirst(currentInstance.Name), feature] * v[feature, 0];
+          y += ds[key2Idx.GetByFirst(currentInstance.Name), feature] * v[feature, 1];
+        }
+
+        IItem item;
+        if (currentInstance.Results.TryGetValue("Projection.PCA.X", out item)) {
+          ((DoubleValue)item).Value = x;
+        } else currentInstance.Results.Add("Projection.PCA.X", new DoubleValue(x));
+        if (currentInstance.Results.TryGetValue("Projection.PCA.Y", out item)) {
+          ((DoubleValue)item).Value = y;
+        } else currentInstance.Results.Add("Projection.PCA.Y", new DoubleValue(y));
+
+        if (currentInstance.Results.TryGetValue("Projection.MDS.X", out item)) {
+          ((DoubleValue)item).Value = coords[key2Idx.GetByFirst(currentInstance.Name), 0];
+        } else currentInstance.Results.Add("Projection.MDS.X", new DoubleValue(coords[key2Idx.GetByFirst(currentInstance.Name), 0]));
+        if (currentInstance.Results.TryGetValue("Projection.MDS.Y", out item)) {
+          ((DoubleValue)item).Value = coords[key2Idx.GetByFirst(currentInstance.Name), 1];
+        } else currentInstance.Results.Add("Projection.MDS.Y", new DoubleValue(coords[key2Idx.GetByFirst(currentInstance.Name), 1]));
+      }
+    }
+
+    public Tuple<double, double> ProjectCurrentInstance(string projection) {
+      if (currentInstance == null) return null;
+      var xKey = "Projection." + projection + ".X";
+      var yKey = "Projection." + projection + ".Y";
+      if (!currentInstance.Results.ContainsKey(xKey) || !currentInstance.Results.ContainsKey(yKey))
+        return null;
+      var x = ((DoubleValue)currentInstance.Results[xKey]).Value;
+      var y = ((DoubleValue)currentInstance.Results[yKey]).Value;
+      return Tuple.Create(x, y);
+    }
+
+    private static readonly HashSet<string> InterestingValueNames = new HashSet<string>() {
+      "QualityPerEvaluations", "Problem Name", "Problem Type", "Algorithm Name", "Algorithm Type", "Maximization", "BestKnownQuality"
+    };
+
+    public Task<ResultCollection> StartAlgorithmAsync(int index) {
+      return StartAlgorithmAsync(index, CancellationToken.None);
+    }
+
+    public Task<ResultCollection> StartAlgorithmAsync(int index, CancellationToken cancellation) {
+      var selectedInstance = suggestedInstances[index];
+      var algorithmClone = (IAlgorithm)selectedInstance.Clone();
+      var problemClone = Problem.CloneProblem() as ISingleObjectiveHeuristicOptimizationProblem;
+      if (problemClone == null) throw new InvalidOperationException("Problem is not of type " + typeof(ISingleObjectiveHeuristicOptimizationProblem).FullName);
+      // TODO: It is assumed the problem instance by default is configured using no preexisting solution creator
+      var seedingStrategyLocal = SeedingStrategy.Value;
+      if (seedingStrategyLocal != SeedingStrategyTypes.NoSeeding) {
+        if (!SolutionSeedingPool.CheckedItems.Any()) throw new InvalidOperationException("There are no solutions selected for seeding.");
+        // TODO: It would be necessary to specify the solution creator somewhere (property and GUI)
+        var seedingCreator = problemClone.Operators.OfType<IPreexistingSolutionCreator>().FirstOrDefault();
+        if (seedingCreator == null) throw new InvalidOperationException("The problem does not contain a solution creator that allows seeding.");
+        seedingCreator.PreexistingSolutionsParameter.Value.Replace(SolutionSeedingPool.CheckedItems.Select(x => x.Value));
+        seedingCreator.SampleFromPreexistingParameter.Value.Value = seedingStrategyLocal == SeedingStrategyTypes.SeedBySampling;
+        // TODO: WHY!? WHY??!?
+        ((dynamic)problemClone.SolutionCreatorParameter).Value = (dynamic)seedingCreator;
+      }
+      algorithmClone.Problem = problemClone;
+      algorithmClone.Prepare(true);
+      IParameter stopParam;
+      var monitorStop = true;
+      if (algorithmClone.Parameters.TryGetValue("MaximumEvaluations", out stopParam)) {
+        var maxEvalParam = stopParam as IValueParameter<Data.IntValue>;
+        if (maxEvalParam != null) {
+          maxEvalParam.Value.Value = MaximumEvaluations.Value;
+          monitorStop = false;
+        }
+      }
+
+      // TODO: The following can be simplified when we have async implementation patterns for our algorithms:
+      // TODO: The closures can be removed and replaced with private member methods
+      var waitHandle = new AutoResetEvent(false);
+
+      #region EventHandler closures
+      EventHandler exeStateChanged = (sender, e) => {
+        if (algorithmClone.ExecutionState == ExecutionState.Stopped) {
+          foreach (var solution in algorithmClone.Results.Where(x => x.Name.ToLower().Contains("solution")).Select(x => x.Value).OfType<IScope>()) {
+            Problem.Solutions.Add(new SingleObjectiveOKBSolution(Problem.ProblemId) {
+              Quality = solution.Variables.ContainsKey(Problem.Problem.Evaluator.QualityParameter.ActualName) ? ((DoubleValue)solution.Variables[Problem.Problem.Evaluator.QualityParameter.ActualName].Value).Value : double.NaN,
+              Solution = (IItem)solution.Clone()
+            });
+          }
+          if (seedingStrategyLocal == SeedingStrategyTypes.NoSeeding) {
+            InstanceRuns.Add(algorithmClone.Runs.Last());
+          } else SeededRuns.Add(algorithmClone.Runs.Last());
+          waitHandle.Set();
+        }
+      };
+
+      EventHandler<EventArgs<Exception>> exceptionOccurred = (sender, e) => {
+        waitHandle.Set();
+      };
+
+      EventHandler timeChanged = (sender, e) => {
+        IResult evalSolResult;
+        if (!algorithmClone.Results.TryGetValue("EvaluatedSolutions", out evalSolResult) || !(evalSolResult.Value is Data.IntValue)) return;
+        var evalSols = ((Data.IntValue)evalSolResult.Value).Value;
+        if (evalSols >= MaximumEvaluations.Value && algorithmClone.ExecutionState == ExecutionState.Started)
+          algorithmClone.Stop();
+      };
+      #endregion
+
+      algorithmClone.ExecutionStateChanged += exeStateChanged;
+      algorithmClone.ExceptionOccurred += exceptionOccurred;
+      if (monitorStop) algorithmClone.ExecutionTimeChanged += timeChanged;
+
+      return Task.Factory.StartNew(() => {
+        algorithmClone.Start();
+        OnAlgorithmInstanceStarted(algorithmClone);
+        var cancelRequested = false;
+        while (!waitHandle.WaitOne(200)) {
+          if (cancellation.IsCancellationRequested) {
+            cancelRequested = true;
+            break;
+          }
+        }
+        if (cancelRequested) {
+          try { algorithmClone.Stop(); } catch { } // ignore race condition if it is stopped in the meantime
+          waitHandle.WaitOne();
+        }
+        waitHandle.Dispose();
+        return algorithmClone.Results;
+      }, TaskCreationOptions.LongRunning);
+    }
+
+    public ResultCollection StartAlgorithm(int index, CancellationToken cancellation) {
+      var task = StartAlgorithmAsync(index, cancellation);
+      task.Wait(cancellation);
+      return task.Result;
+    }
+
+    public Task UpdateKnowledgeBaseAsync(IProgress progress = null) {
+      if (progress == null) progress = new Progress(string.Empty);
+      progress.Start("Updating Knowledge Base from OKB");
+      OnDownloadStarted(progress);
+      return Task.Factory.StartNew(() => { DoUpdateKnowledgeBase(progress); }, TaskCreationOptions.LongRunning);
+    }
+
+    public void UpdateKnowledgeBase(IProgress progress = null) {
+      UpdateKnowledgeBaseAsync(progress).Wait();
+    }
+
+    private void DoUpdateKnowledgeBase(IProgress progress) {
+      var queryClient = Clients.OKB.Query.QueryClient.Instance;
+      var adminClient = Clients.OKB.Administration.AdministrationClient.Instance;
+      try {
+        progress.Status = "Downloading run information...";
+        progress.ProgressValue = 0;
+        // FIXME: How to tell if refresh is necessary?
+        queryClient.Refresh();
+        progress.ProgressValue = 0.5;
+        progress.Status = "Downloading algorithm and problem instance information...";
+        // FIXME: How to tell if refresh is necessary?
+        adminClient.Refresh();
+
+        var probInstance = adminClient.Problems.SingleOrDefault(x => x.Id == Problem.ProblemId);
+        if (probInstance == null) throw new InvalidOperationException("The chosen problem instance cannot be found in the OKB.");
+        var probClassId = probInstance.ProblemClassId;
+
+        var problemClassFilter = (Clients.OKB.Query.StringComparisonAvailableValuesFilter)queryClient.Filters.Single(x => x.Label == "Problem Class Name");
+        problemClassFilter.Value = adminClient.ProblemClasses.Single(x => x.Id == probClassId).Name;
+
+        progress.Status = "Downloading problem instances...";
+        progress.ProgressValue = 0;
+        var p = 0;
+        ProblemInstances.UpdateOfRunsInProgress = true;
+        ProblemInstances.Clear();
+        var totalProblems = adminClient.Problems.Count(x => x.ProblemClassId == probClassId);
+        foreach (var problInst in adminClient.Problems.Where(x => x.ProblemClassId == probClassId)) {
+          progress.Status = string.Format("Downloading problem {0} (okb-id: {1})....", problInst.Name, problInst.Id);
+          var data = Clients.OKB.Administration.AdministrationClient.GetProblemData(problInst.Id);
+          if (data != null) {
+            using (var stream = new MemoryStream(data)) {
+              try {
+                var prob = (IProblem)XmlParser.Deserialize<IContent>(stream);
+                var probRun = new Run() { Name = prob.Name };
+                prob.CollectParameterValues(probRun.Parameters);
+                probRun.Parameters["Problem Name"] = new StringValue(prob.Name);
+                probRun.Parameters["Problem Type"] = new StringValue(prob.GetType().Name);
+                progress.Status += Environment.NewLine + "Downloading characteristics...";
+                foreach (var v in RunCreationClient.Instance.GetCharacteristicValues(problInst.Id)) {
+                  probRun.Results.Add("Characteristic." + v.Name, RunCreationClient.Instance.ConvertToItem(v));
+                }
+                ProblemInstances.Add(probRun);
+              } catch { }
+              stream.Close();
+            }
+          }
+          p++;
+          progress.ProgressValue = p / (double)totalProblems;
+        }
+
+        algorithmId2AlgorithmInstanceMapping.Clear();
+        progress.Status = "Downloading algorithm instances...";
+        progress.ProgressValue = 0;
+        p = 0;
+        foreach (var algInst in adminClient.Algorithms) {
+          progress.Status = string.Format("Downloading algorithm {0} (okb-id: {1})...", algInst.Name, algInst.Id);
+          var data = Clients.OKB.Administration.AdministrationClient.GetAlgorithmData(algInst.Id);
+          if (data != null) {
+            using (var stream = new MemoryStream(data)) {
+              try {
+                var alg = (IAlgorithm)XmlParser.Deserialize<IContent>(stream);
+                algorithmId2AlgorithmInstanceMapping.Add(algInst.Id, alg);
+              } catch { }
+              stream.Close();
+            }
+          }
+          p++;
+          progress.ProgressValue = p / (double)adminClient.Algorithms.Count;
+        }
+
+        var interestingValues = queryClient.ValueNames.Where(x => InterestingValueNames.Contains(x.Name)).ToList();
+
+        progress.Status = "Obtaining number of runs...";
+        progress.ProgressValue = 0;
+        p = 0;
+        var count = queryClient.GetNumberOfRuns(problemClassFilter);
+        if (count == 0) return;
+        
+        var runIds = queryClient.GetRunIds(problemClassFilter).ToList();
+        var conversions = new List<Task>();
+        var runList = new List<IRun>();
+        while (p < count) {
+          var nextIds = runIds.Skip(p).Take(500).ToList();
+          progress.Status = string.Format("Downloading runs {0} to {1} of {2}...", p, p + nextIds.Count, count);
+          var okbRuns = queryClient.GetRunsWithValues(nextIds, true, interestingValues);
+          conversions.Add(Task.Factory.StartNew(() => {
+            var hlRuns = okbRuns.AsParallel().Select(x => new { AlgorithmId = x.Algorithm.Id, Run = queryClient.ConvertToOptimizationRun(x) }).ToList();
+            lock (runList) {
+              foreach (var r in hlRuns) {
+                algorithmId2RunMapping.Add(r.AlgorithmId, r.Run);
+                runList.Add(r.Run);
+              }
+            }
+          }));
+          p += nextIds.Count;
+          progress.ProgressValue = p / (double)count;
+        }
+        Task.WaitAll(conversions.ToArray());
+
+        progress.Status = "Finishing...";
+        var algInstRunDict = runList.Where(x => x.Parameters.ContainsKey("Problem Name") && x.Parameters["Problem Name"] is StringValue)
+                                          .GroupBy(x => ((StringValue)x.Parameters["Problem Name"]).Value)
+                                          .ToDictionary(x => x.Key, x => x.GroupBy(y => ((StringValue)y.Parameters["Algorithm Name"]).Value)
+                                                                                  .ToDictionary(y => y.Key, y => y.ToList()));
+
+        foreach (var instance in ProblemInstances) {
+          IItem probNameParam;
+          if (!instance.Parameters.TryGetValue("Problem Name", out probNameParam)) continue;
+
+          var probInstanceName = ((StringValue)probNameParam).Value;
+          var maximization = ((BoolValue)instance.Parameters["Maximization"]).Value;
+          
+          IItem bkParam;
+          if (!instance.Parameters.TryGetValue("BestKnownQuality", out bkParam) || !(bkParam is DoubleValue)) {
+            Dictionary<string, List<IRun>> algRuns;
+            if (!algInstRunDict.TryGetValue(probInstanceName, out algRuns)) continue;
+            var list = algRuns.SelectMany(x => x.Value)
+                              .Where(x => x.Results.ContainsKey("QualityPerEvaluations"))
+                              .Select(x => ((IndexedDataTable<double>)x.Results["QualityPerEvaluations"]).Rows.First().Values.Last().Item2);
+            bkParam = new DoubleValue(maximization ? list.Max() : list.Min());
+            instance.Parameters["BestKnownQuality"] = bkParam;
+          } else bkParam = instance.Parameters["BestKnownQuality"];
+
+          var bkQuality = ((DoubleValue)bkParam).Value;
+
+          if (!algInstRunDict.ContainsKey(probInstanceName)) continue;
+          foreach (var kvp in algInstRunDict[probInstanceName]) {
+            // TODO: Things needs to be configurable here (table name, targets)
+            foreach (var target in new[] { 1, 1.01, 1.05, 1.1, 1.2, 1.5 }) {
+              var result = ExpectedRuntimeHelper.CalculateErt(kvp.Value, "QualityPerEvaluations", bkQuality * target, maximization);
+              var resultName = kvp.Key + "@" + ((target - 1) * 100) + "%";
+              IItem item;
+              if (instance.Results.TryGetValue(resultName, out item)) {
+                ((DoubleValue)item).Value = Math.Log10(result.ExpectedRuntime);
+              } else instance.Results.Add(resultName, new DoubleValue(Math.Log10(result.ExpectedRuntime)));
+            }
+          }
+        }
+        try {
+          KnowledgeBase.UpdateOfRunsInProgress = true;
+          KnowledgeBase.Clear();
+          KnowledgeBase.AddRange(runList);
+        } finally { KnowledgeBase.UpdateOfRunsInProgress = false; }
+      } finally { progress.Finish(); ProblemInstances.UpdateOfRunsInProgress = false; }
+      UpdateInstanceProjection();
+    }
+
+    private void UpdateSuggestions() {
+      if (Problem == null) return;
+      var instances = new SortedList<double, IAlgorithm>();
+      foreach (var relevantRuns in knowledgeBase.GroupBy(x => algorithmId2RunMapping.GetBySecond(x).Single())) {
+        var algorithm = algorithmId2AlgorithmInstanceMapping.GetByFirst(relevantRuns.Key);
+        var avgQuality = 0.0;
+        var counter = 0;
+        foreach (var problemRuns in relevantRuns.GroupBy(x => ((StringValue)x.Parameters["Problem Name"]).Value)) {
+          var probInstance = ProblemInstances.SingleOrDefault(x => x.Name == problemRuns.Key);
+          if (probInstance == null) continue;
+          var bkQuality = ((DoubleValue)probInstance.Parameters["BestKnownQuality"]).Value;
+          foreach (var run in problemRuns) {
+            var performanceGraph = ((IndexedDataTable<double>)run.Results["QualityPerEvaluations"]);
+            try {
+              avgQuality += performanceGraph.Rows.First().Values.TakeWhile(x => x.Item1 < MaximumEvaluations.Value).Last().Item2 / bkQuality;
+              counter++;
+            } catch {
+              continue;
+            }
+          }
+        }
+        avgQuality /= counter;
+        instances.Add(avgQuality, algorithm);
+      }
+
+      var instanceLadder = instances.Select(x => (IAlgorithm)x.Value.Clone()).ToList();
+      if (Maximization) instanceLadder.Reverse();
+      suggestedInstances.Replace(instanceLadder);
+    }
+
+    public event EventHandler<EventArgs<IProgress>> DownloadStarted;
+    private void OnDownloadStarted(IProgress progress) {
+      var handler = DownloadStarted;
+      if (handler != null) handler(this, new EventArgs<IProgress>(progress));
+    }
+
+    public event EventHandler<EventArgs<IAlgorithm>> AlgorithmInstanceStarted;
+    private void OnAlgorithmInstanceStarted(IAlgorithm instance) {
+      var handler = AlgorithmInstanceStarted;
+      if (handler != null) handler(this, new EventArgs<IAlgorithm>(instance));
+    }
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Docking/AlgorithmControlForm.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Docking/AlgorithmControlForm.Designer.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Docking/AlgorithmControlForm.Designer.cs	(revision 13722)
@@ -0,0 +1,143 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.OptimizationExpertSystem {
+  partial class AlgorithmControlForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #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() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AlgorithmControlForm));
+      this.viewPanel = new System.Windows.Forms.Panel();
+      this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.closeAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.closeAllButThisToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+      this.cloneToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.stopButton = new System.Windows.Forms.Button();
+      this.contextMenuStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // viewPanel
+      // 
+      this.viewPanel.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.viewPanel.Location = new System.Drawing.Point(12, 41);
+      this.viewPanel.Name = "viewPanel";
+      this.viewPanel.Size = new System.Drawing.Size(608, 393);
+      this.viewPanel.TabIndex = 0;
+      // 
+      // contextMenuStrip
+      // 
+      this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.closeToolStripMenuItem,
+            this.closeAllToolStripMenuItem,
+            this.closeAllButThisToolStripMenuItem,
+            this.toolStripSeparator1,
+            this.cloneToolStripMenuItem});
+      this.contextMenuStrip.Name = "contextMenuStrip";
+      this.contextMenuStrip.Size = new System.Drawing.Size(167, 98);
+      this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening);
+      // 
+      // closeToolStripMenuItem
+      // 
+      this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
+      this.closeToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
+      this.closeToolStripMenuItem.Text = "Close";
+      this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
+      // 
+      // closeAllToolStripMenuItem
+      // 
+      this.closeAllToolStripMenuItem.Name = "closeAllToolStripMenuItem";
+      this.closeAllToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
+      this.closeAllToolStripMenuItem.Text = "Close All";
+      this.closeAllToolStripMenuItem.Click += new System.EventHandler(this.closeAllToolStripMenuItem_Click);
+      // 
+      // closeAllButThisToolStripMenuItem
+      // 
+      this.closeAllButThisToolStripMenuItem.Name = "closeAllButThisToolStripMenuItem";
+      this.closeAllButThisToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
+      this.closeAllButThisToolStripMenuItem.Text = "Close All But This";
+      this.closeAllButThisToolStripMenuItem.Click += new System.EventHandler(this.closeAllButThisToolStripMenuItem_Click);
+      // 
+      // toolStripSeparator1
+      // 
+      this.toolStripSeparator1.Name = "toolStripSeparator1";
+      this.toolStripSeparator1.Size = new System.Drawing.Size(163, 6);
+      // 
+      // cloneToolStripMenuItem
+      // 
+      this.cloneToolStripMenuItem.Name = "cloneToolStripMenuItem";
+      this.cloneToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
+      this.cloneToolStripMenuItem.Text = "Create Copy";
+      this.cloneToolStripMenuItem.Click += new System.EventHandler(this.cloneToolStripMenuItem_Click);
+      // 
+      // stopButton
+      // 
+      this.stopButton.Location = new System.Drawing.Point(12, 12);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(26, 23);
+      this.stopButton.TabIndex = 1;
+      this.stopButton.Text = "Stop";
+      this.stopButton.UseVisualStyleBackColor = true;
+      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
+      // 
+      // AlgorithmControlForm
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.ClientSize = new System.Drawing.Size(632, 446);
+      this.Controls.Add(this.stopButton);
+      this.Controls.Add(this.viewPanel);
+      this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "AlgorithmControlForm";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.TabPageContextMenuStrip = this.contextMenuStrip;
+      this.contextMenuStrip.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel viewPanel;
+    private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
+    private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem closeAllToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem closeAllButThisToolStripMenuItem;
+    private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+    private System.Windows.Forms.ToolStripMenuItem cloneToolStripMenuItem;
+    private System.Windows.Forms.Button stopButton;
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Docking/AlgorithmControlForm.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Docking/AlgorithmControlForm.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Docking/AlgorithmControlForm.cs	(revision 13722)
@@ -0,0 +1,185 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Common.Resources;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Optimization;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace HeuristicLab.OptimizationExpertSystem {
+  /// <summary>
+  /// Displays the used view.
+  /// </summary>
+  internal partial class AlgorithmControlForm : DockContent {
+    private IContentView view;
+    public IContentView View {
+      get { return this.view; }
+    }
+    private IAlgorithm Algorithm { get; set; }
+    private bool ShowOnlyFinalResult { get; set; }
+
+    public AlgorithmControlForm(IAlgorithm algorithm, bool showOnlyFinalResult = false) {
+      if (algorithm == null) throw new ArgumentNullException("algorithm");
+      InitializeComponent();
+      Algorithm = algorithm;
+      ShowOnlyFinalResult = showOnlyFinalResult;
+      this.view = MainFormManager.CreateDefaultView(algorithm.Results.GetType());
+      this.stopButton.Text = string.Empty;
+      this.stopButton.Image = VSImageLibrary.Stop;
+
+      InitializeView();
+      RegisterAlgorithmEvents();
+      SetEnabledStateOfControls();
+    }
+
+    private void InitializeView() {
+      if (view != null) {
+        var userControl = view as UserControl;
+        if (userControl != null) {
+          switch (userControl.Dock) {
+            case DockStyle.Left:
+              this.ShowHint = DockState.DockLeft;
+              break;
+            case DockStyle.Right:
+              this.ShowHint = DockState.DockRight;
+              break;
+            case DockStyle.Top:
+              this.ShowHint = DockState.DockTop;
+              break;
+            case DockStyle.Bottom:
+              this.ShowHint = DockState.DockBottom;
+              break;
+          }
+
+          var control = (Control)view;
+          control.Dock = DockStyle.Fill;
+          this.view.CaptionChanged += View_CaptionChanged;
+          UpdateText();
+          viewPanel.Controls.Add(control);
+        }
+        if (!ShowOnlyFinalResult) view.Content = Algorithm.Results;
+      } else {
+        var errorLabel = new Label();
+        errorLabel.Name = "errorLabel";
+        errorLabel.Text = "No view available";
+        errorLabel.AutoSize = false;
+        errorLabel.Dock = DockStyle.Fill;
+        viewPanel.Controls.Add(errorLabel);
+      }
+    }
+
+    private void RegisterAlgorithmEvents() {
+      Algorithm.ExecutionStateChanged += AlgorithmOnExecutionStateChanged;
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (View != null)
+        View.CaptionChanged -= View_CaptionChanged;
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    private void SetEnabledStateOfControls() {
+      stopButton.Enabled = Algorithm.ExecutionState == ExecutionState.Started;
+    }
+
+    private void UpdateText() {
+      if (InvokeRequired)
+        Invoke(new MethodInvoker(UpdateText));
+      else
+        this.Text = this.View.Caption;
+    }
+
+    #region Algorithm Events
+    private void AlgorithmOnExecutionStateChanged(object sender, EventArgs eventArgs) {
+      if (ShowOnlyFinalResult && (Algorithm.ExecutionState == ExecutionState.Stopped
+        || Algorithm.ExecutionState == ExecutionState.Paused))
+        view.Content = Algorithm.Results;
+      SetEnabledStateOfControls();
+    }
+    #endregion
+
+    #region Button Events
+    private void stopButton_Click(object sender, EventArgs e) {
+      if (Algorithm != null && Algorithm.ExecutionState == ExecutionState.Started)
+        Algorithm.Stop();
+    }
+    #endregion
+
+    #region View Events
+    private void View_CaptionChanged(object sender, EventArgs e) {
+      UpdateText();
+    }
+    #endregion
+
+    #region Context Menu Events
+    private void contextMenuStrip_Opening(object sender, System.ComponentModel.CancelEventArgs e) {
+      var contentView = View as IContentView;
+      var content = contentView != null ? contentView.Content : null;
+
+      cloneToolStripMenuItem.Enabled = contentView != null && !contentView.Locked && content is IDeepCloneable;
+    }
+
+    private void closeToolStripMenuItem_Click(object sender, EventArgs e) {
+      Close();
+    }
+    private void closeAllToolStripMenuItem_Click(object sender, EventArgs e) {
+      foreach (var dockForm in CurrentDockForms) {
+        dockForm.Close();
+      }
+    }
+    private void closeAllButThisToolStripMenuItem_Click(object sender, EventArgs e) {
+      foreach (var dockForm in CurrentDockForms.Except(this.ToEnumerable())) {
+        dockForm.Close();
+      }
+    }
+    private IEnumerable<AlgorithmControlForm> CurrentDockForms {
+      get {
+        var dockForms = Pane.Contents.OfType<AlgorithmControlForm>().Where(c => c.Pane == Pane); // Pane.Contents contains DockForms that are not placed on that pane
+        return dockForms.ToList(); // .ToList() necessary because closing a DockForm removes it from the Content collection
+      }
+    }
+
+    private void cloneToolStripMenuItem_Click(object sender, EventArgs e) {
+      var contentView = View as IContentView;
+      if (contentView == null) return;
+
+      var cloneable = contentView.Content as IDeepCloneable;
+      if (cloneable == null) return;
+
+      var clone = (IContent)cloneable.Clone();
+
+      var viewHost = contentView as ViewHost;
+      var newView = viewHost != null ? viewHost.ViewType : contentView.GetType();
+      MainFormManager.MainForm.ShowContent(clone, newView);
+    }
+    #endregion
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Docking/AlgorithmControlForm.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Docking/AlgorithmControlForm.resx	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Docking/AlgorithmControlForm.resx	(revision 13722)
@@ -0,0 +1,1790 @@
+﻿<?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="contextMenuStrip.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="$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: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.Designer.cs	(revision 13721)
+++ 	(revision )
@@ -1,910 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.OptimizationExpertSystem {
-  partial class ExpertSystemView {
-    /// <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.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.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 series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
-      System.Windows.Forms.DataVisualization.Charting.Series series4 = new System.Windows.Forms.DataVisualization.Charting.Series();
-      this.evaluationsLimitabel = new System.Windows.Forms.Label();
-      this.maxEvaluationsTextBox = new System.Windows.Forms.TextBox();
-      this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.problemTabPage = new System.Windows.Forms.TabPage();
-      this.problemViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.solutionsTabPage = new System.Windows.Forms.TabPage();
-      this.solutionNameLabel = new System.Windows.Forms.Label();
-      this.solutionDiversitySimilarityLabel = new System.Windows.Forms.Label();
-      this.solutionNameComboBox = new System.Windows.Forms.ComboBox();
-      this.similarityComboBox = new System.Windows.Forms.ComboBox();
-      this.solutionsTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.solutionsQualityTabPage = new System.Windows.Forms.TabPage();
-      this.solutionsQualityViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.solutionsLengthScaleTabPage = new System.Windows.Forms.TabPage();
-      this.solutionsLengthScaleViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.solutionsDiversityTabPage = new System.Windows.Forms.TabPage();
-      this.solutionsDiversityViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.solutionsFdcTabPage = new System.Windows.Forms.TabPage();
-      this.fdcBetweenBestCheckBox = new System.Windows.Forms.CheckBox();
-      this.solutionsFdcViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.solutionsNetworkTabPage = new System.Windows.Forms.TabPage();
-      this.solutionsNetworkChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
-      this.solversTabPage = new System.Windows.Forms.TabPage();
-      this.seedingStrategyPanel = new System.Windows.Forms.Panel();
-      this.solverTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.resultsTabPage = new System.Windows.Forms.TabPage();
-      this.solverResultsView = new HeuristicLab.Optimization.Views.ResultCollectionView();
-      this.solutionSeedingTabPage = new System.Windows.Forms.TabPage();
-      this.parametersTabPage = new System.Windows.Forms.TabPage();
-      this.solverParametersView = new HeuristicLab.Core.Views.ParameterCollectionView();
-      this.operatorGraphTabPage = new System.Windows.Forms.TabPage();
-      this.operatorGraphViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.algorithmCloneButton = new System.Windows.Forms.Button();
-      this.algorithmStartButton = new System.Windows.Forms.Button();
-      this.label1 = new System.Windows.Forms.Label();
-      this.algorithmSuggestionLabel = new System.Windows.Forms.Label();
-      this.suggestedInstancesComboBox = new System.Windows.Forms.ComboBox();
-      this.runsTabPage = new System.Windows.Forms.TabPage();
-      this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
-      this.okbTabPage = new System.Windows.Forms.TabPage();
-      this.kbViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.problemInstancesTabPage = new System.Windows.Forms.TabPage();
-      this.projectionLabel = new System.Windows.Forms.Label();
-      this.projectionComboBox = new System.Windows.Forms.ComboBox();
-      this.problemInstancesTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.instancesTabPage = new System.Windows.Forms.TabPage();
-      this.problemInstancesView = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.mapTabPage = new System.Windows.Forms.TabPage();
-      this.instanceMapChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
-      this.refreshMapButton = new System.Windows.Forms.Button();
-      this.progressPanel = new System.Windows.Forms.Panel();
-      this.okbDownloadButton = new System.Windows.Forms.Button();
-      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      this.tabControl.SuspendLayout();
-      this.problemTabPage.SuspendLayout();
-      this.solutionsTabPage.SuspendLayout();
-      this.solutionsTabControl.SuspendLayout();
-      this.solutionsQualityTabPage.SuspendLayout();
-      this.solutionsLengthScaleTabPage.SuspendLayout();
-      this.solutionsDiversityTabPage.SuspendLayout();
-      this.solutionsFdcTabPage.SuspendLayout();
-      this.solutionsNetworkTabPage.SuspendLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).BeginInit();
-      this.solversTabPage.SuspendLayout();
-      this.solverTabControl.SuspendLayout();
-      this.resultsTabPage.SuspendLayout();
-      this.parametersTabPage.SuspendLayout();
-      this.operatorGraphTabPage.SuspendLayout();
-      this.runsTabPage.SuspendLayout();
-      this.okbTabPage.SuspendLayout();
-      this.problemInstancesTabPage.SuspendLayout();
-      this.problemInstancesTabControl.SuspendLayout();
-      this.instancesTabPage.SuspendLayout();
-      this.mapTabPage.SuspendLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // evaluationsLimitabel
-      // 
-      this.evaluationsLimitabel.AutoSize = true;
-      this.evaluationsLimitabel.Location = new System.Drawing.Point(5, 9);
-      this.evaluationsLimitabel.Name = "evaluationsLimitabel";
-      this.evaluationsLimitabel.Size = new System.Drawing.Size(66, 13);
-      this.evaluationsLimitabel.TabIndex = 5;
-      this.evaluationsLimitabel.Text = "Budget (FE):";
-      // 
-      // maxEvaluationsTextBox
-      // 
-      this.maxEvaluationsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.maxEvaluationsTextBox.Location = new System.Drawing.Point(110, 6);
-      this.maxEvaluationsTextBox.Name = "maxEvaluationsTextBox";
-      this.maxEvaluationsTextBox.Size = new System.Drawing.Size(564, 20);
-      this.maxEvaluationsTextBox.TabIndex = 6;
-      this.maxEvaluationsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.MaxEvaluationsTextBoxOnValidating);
-      // 
-      // 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.problemTabPage);
-      this.tabControl.Controls.Add(this.solutionsTabPage);
-      this.tabControl.Controls.Add(this.solversTabPage);
-      this.tabControl.Controls.Add(this.runsTabPage);
-      this.tabControl.Controls.Add(this.okbTabPage);
-      this.tabControl.Controls.Add(this.problemInstancesTabPage);
-      this.tabControl.Location = new System.Drawing.Point(0, 32);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(689, 503);
-      this.tabControl.TabIndex = 17;
-      // 
-      // problemTabPage
-      // 
-      this.problemTabPage.AllowDrop = true;
-      this.problemTabPage.Controls.Add(this.problemViewHost);
-      this.problemTabPage.Location = new System.Drawing.Point(4, 22);
-      this.problemTabPage.Name = "problemTabPage";
-      this.problemTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.problemTabPage.Size = new System.Drawing.Size(681, 477);
-      this.problemTabPage.TabIndex = 1;
-      this.problemTabPage.Text = "Problem";
-      this.problemTabPage.UseVisualStyleBackColor = true;
-      // 
-      // problemViewHost
-      // 
-      this.problemViewHost.Caption = "View";
-      this.problemViewHost.Content = null;
-      this.problemViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.problemViewHost.Enabled = false;
-      this.problemViewHost.Location = new System.Drawing.Point(3, 3);
-      this.problemViewHost.Name = "problemViewHost";
-      this.problemViewHost.ReadOnly = false;
-      this.problemViewHost.Size = new System.Drawing.Size(675, 471);
-      this.problemViewHost.TabIndex = 2;
-      this.problemViewHost.ViewsLabelVisible = false;
-      this.problemViewHost.ViewType = null;
-      // 
-      // solutionsTabPage
-      // 
-      this.solutionsTabPage.Controls.Add(this.solutionNameLabel);
-      this.solutionsTabPage.Controls.Add(this.solutionDiversitySimilarityLabel);
-      this.solutionsTabPage.Controls.Add(this.solutionNameComboBox);
-      this.solutionsTabPage.Controls.Add(this.similarityComboBox);
-      this.solutionsTabPage.Controls.Add(this.solutionsTabControl);
-      this.solutionsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsTabPage.Name = "solutionsTabPage";
-      this.solutionsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsTabPage.Size = new System.Drawing.Size(681, 477);
-      this.solutionsTabPage.TabIndex = 7;
-      this.solutionsTabPage.Text = "Solutions";
-      this.solutionsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solutionNameLabel
-      // 
-      this.solutionNameLabel.AutoSize = true;
-      this.solutionNameLabel.Location = new System.Drawing.Point(235, 9);
-      this.solutionNameLabel.Name = "solutionNameLabel";
-      this.solutionNameLabel.Size = new System.Drawing.Size(48, 13);
-      this.solutionNameLabel.TabIndex = 2;
-      this.solutionNameLabel.Text = "Solution:";
-      // 
-      // solutionDiversitySimilarityLabel
-      // 
-      this.solutionDiversitySimilarityLabel.AutoSize = true;
-      this.solutionDiversitySimilarityLabel.Location = new System.Drawing.Point(5, 9);
-      this.solutionDiversitySimilarityLabel.Name = "solutionDiversitySimilarityLabel";
-      this.solutionDiversitySimilarityLabel.Size = new System.Drawing.Size(50, 13);
-      this.solutionDiversitySimilarityLabel.TabIndex = 2;
-      this.solutionDiversitySimilarityLabel.Text = "Similarity:";
-      // 
-      // solutionNameComboBox
-      // 
-      this.solutionNameComboBox.DisplayMember = "ItemName";
-      this.solutionNameComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.solutionNameComboBox.FormattingEnabled = true;
-      this.solutionNameComboBox.Location = new System.Drawing.Point(291, 6);
-      this.solutionNameComboBox.Name = "solutionNameComboBox";
-      this.solutionNameComboBox.Size = new System.Drawing.Size(150, 21);
-      this.solutionNameComboBox.TabIndex = 1;
-      this.solutionNameComboBox.SelectedIndexChanged += new System.EventHandler(this.SimilarityComboBoxOnSelectedIndexChanged);
-      // 
-      // similarityComboBox
-      // 
-      this.similarityComboBox.DisplayMember = "ItemName";
-      this.similarityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.similarityComboBox.FormattingEnabled = true;
-      this.similarityComboBox.Location = new System.Drawing.Point(61, 6);
-      this.similarityComboBox.Name = "similarityComboBox";
-      this.similarityComboBox.Size = new System.Drawing.Size(150, 21);
-      this.similarityComboBox.TabIndex = 1;
-      this.similarityComboBox.SelectedIndexChanged += new System.EventHandler(this.SimilarityComboBoxOnSelectedIndexChanged);
-      // 
-      // solutionsTabControl
-      // 
-      this.solutionsTabControl.AllowDrop = true;
-      this.solutionsTabControl.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.solutionsTabControl.Controls.Add(this.solutionsQualityTabPage);
-      this.solutionsTabControl.Controls.Add(this.solutionsLengthScaleTabPage);
-      this.solutionsTabControl.Controls.Add(this.solutionsDiversityTabPage);
-      this.solutionsTabControl.Controls.Add(this.solutionsFdcTabPage);
-      this.solutionsTabControl.Controls.Add(this.solutionsNetworkTabPage);
-      this.solutionsTabControl.Location = new System.Drawing.Point(3, 33);
-      this.solutionsTabControl.Name = "solutionsTabControl";
-      this.solutionsTabControl.SelectedIndex = 0;
-      this.solutionsTabControl.Size = new System.Drawing.Size(675, 441);
-      this.solutionsTabControl.TabIndex = 0;
-      // 
-      // solutionsQualityTabPage
-      // 
-      this.solutionsQualityTabPage.Controls.Add(this.solutionsQualityViewHost);
-      this.solutionsQualityTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsQualityTabPage.Name = "solutionsQualityTabPage";
-      this.solutionsQualityTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsQualityTabPage.Size = new System.Drawing.Size(667, 415);
-      this.solutionsQualityTabPage.TabIndex = 1;
-      this.solutionsQualityTabPage.Text = "Quality Analysis";
-      this.solutionsQualityTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solutionsQualityViewHost
-      // 
-      this.solutionsQualityViewHost.Caption = "View";
-      this.solutionsQualityViewHost.Content = null;
-      this.solutionsQualityViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solutionsQualityViewHost.Enabled = false;
-      this.solutionsQualityViewHost.Location = new System.Drawing.Point(3, 3);
-      this.solutionsQualityViewHost.Name = "solutionsQualityViewHost";
-      this.solutionsQualityViewHost.ReadOnly = false;
-      this.solutionsQualityViewHost.Size = new System.Drawing.Size(661, 409);
-      this.solutionsQualityViewHost.TabIndex = 0;
-      this.solutionsQualityViewHost.ViewsLabelVisible = true;
-      this.solutionsQualityViewHost.ViewType = null;
-      // 
-      // solutionsLengthScaleTabPage
-      // 
-      this.solutionsLengthScaleTabPage.Controls.Add(this.solutionsLengthScaleViewHost);
-      this.solutionsLengthScaleTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsLengthScaleTabPage.Name = "solutionsLengthScaleTabPage";
-      this.solutionsLengthScaleTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsLengthScaleTabPage.Size = new System.Drawing.Size(667, 415);
-      this.solutionsLengthScaleTabPage.TabIndex = 3;
-      this.solutionsLengthScaleTabPage.Text = "Length-Scale Analysis";
-      this.solutionsLengthScaleTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solutionsLengthScaleViewHost
-      // 
-      this.solutionsLengthScaleViewHost.Caption = "View";
-      this.solutionsLengthScaleViewHost.Content = null;
-      this.solutionsLengthScaleViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solutionsLengthScaleViewHost.Enabled = false;
-      this.solutionsLengthScaleViewHost.Location = new System.Drawing.Point(3, 3);
-      this.solutionsLengthScaleViewHost.Name = "solutionsLengthScaleViewHost";
-      this.solutionsLengthScaleViewHost.ReadOnly = false;
-      this.solutionsLengthScaleViewHost.Size = new System.Drawing.Size(661, 409);
-      this.solutionsLengthScaleViewHost.TabIndex = 0;
-      this.solutionsLengthScaleViewHost.ViewsLabelVisible = true;
-      this.solutionsLengthScaleViewHost.ViewType = null;
-      // 
-      // solutionsDiversityTabPage
-      // 
-      this.solutionsDiversityTabPage.Controls.Add(this.solutionsDiversityViewHost);
-      this.solutionsDiversityTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsDiversityTabPage.Name = "solutionsDiversityTabPage";
-      this.solutionsDiversityTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsDiversityTabPage.Size = new System.Drawing.Size(667, 415);
-      this.solutionsDiversityTabPage.TabIndex = 2;
-      this.solutionsDiversityTabPage.Text = "Diversity Analysis";
-      this.solutionsDiversityTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solutionsDiversityViewHost
-      // 
-      this.solutionsDiversityViewHost.Caption = "View";
-      this.solutionsDiversityViewHost.Content = null;
-      this.solutionsDiversityViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solutionsDiversityViewHost.Enabled = false;
-      this.solutionsDiversityViewHost.Location = new System.Drawing.Point(3, 3);
-      this.solutionsDiversityViewHost.Name = "solutionsDiversityViewHost";
-      this.solutionsDiversityViewHost.ReadOnly = false;
-      this.solutionsDiversityViewHost.Size = new System.Drawing.Size(661, 409);
-      this.solutionsDiversityViewHost.TabIndex = 1;
-      this.solutionsDiversityViewHost.ViewsLabelVisible = true;
-      this.solutionsDiversityViewHost.ViewType = null;
-      // 
-      // solutionsFdcTabPage
-      // 
-      this.solutionsFdcTabPage.Controls.Add(this.fdcBetweenBestCheckBox);
-      this.solutionsFdcTabPage.Controls.Add(this.solutionsFdcViewHost);
-      this.solutionsFdcTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsFdcTabPage.Name = "solutionsFdcTabPage";
-      this.solutionsFdcTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsFdcTabPage.Size = new System.Drawing.Size(667, 415);
-      this.solutionsFdcTabPage.TabIndex = 5;
-      this.solutionsFdcTabPage.Text = "Fitness-Distance Analysis";
-      this.solutionsFdcTabPage.UseVisualStyleBackColor = true;
-      // 
-      // fdcBetweenBestCheckBox
-      // 
-      this.fdcBetweenBestCheckBox.AutoSize = true;
-      this.fdcBetweenBestCheckBox.Location = new System.Drawing.Point(6, 6);
-      this.fdcBetweenBestCheckBox.Name = "fdcBetweenBestCheckBox";
-      this.fdcBetweenBestCheckBox.Size = new System.Drawing.Size(233, 17);
-      this.fdcBetweenBestCheckBox.TabIndex = 2;
-      this.fdcBetweenBestCheckBox.Text = "Calculate FDC between best solution(s) only";
-      this.fdcBetweenBestCheckBox.UseVisualStyleBackColor = true;
-      this.fdcBetweenBestCheckBox.CheckedChanged += new System.EventHandler(this.FdcBetweenBestCheckBoxOnCheckedChanged);
-      // 
-      // solutionsFdcViewHost
-      // 
-      this.solutionsFdcViewHost.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.solutionsFdcViewHost.Caption = "View";
-      this.solutionsFdcViewHost.Content = null;
-      this.solutionsFdcViewHost.Enabled = false;
-      this.solutionsFdcViewHost.Location = new System.Drawing.Point(3, 29);
-      this.solutionsFdcViewHost.Name = "solutionsFdcViewHost";
-      this.solutionsFdcViewHost.ReadOnly = false;
-      this.solutionsFdcViewHost.Size = new System.Drawing.Size(661, 386);
-      this.solutionsFdcViewHost.TabIndex = 0;
-      this.solutionsFdcViewHost.ViewsLabelVisible = true;
-      this.solutionsFdcViewHost.ViewType = null;
-      // 
-      // solutionsNetworkTabPage
-      // 
-      this.solutionsNetworkTabPage.Controls.Add(this.solutionsNetworkChart);
-      this.solutionsNetworkTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsNetworkTabPage.Name = "solutionsNetworkTabPage";
-      this.solutionsNetworkTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsNetworkTabPage.Size = new System.Drawing.Size(667, 415);
-      this.solutionsNetworkTabPage.TabIndex = 4;
-      this.solutionsNetworkTabPage.Text = "Network Analysis";
-      this.solutionsNetworkTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solutionsNetworkChart
-      // 
-      chartArea1.AxisX.IsStartedFromZero = false;
-      chartArea1.AxisX.LabelStyle.Enabled = false;
-      chartArea1.AxisX.LineWidth = 0;
-      chartArea1.AxisX.MajorGrid.Enabled = false;
-      chartArea1.AxisX.MajorTickMark.Enabled = false;
-      chartArea1.AxisY.IsStartedFromZero = false;
-      chartArea1.AxisY.LabelStyle.Enabled = false;
-      chartArea1.AxisY.LineWidth = 0;
-      chartArea1.AxisY.MajorGrid.Enabled = false;
-      chartArea1.AxisY.MajorTickMark.Enabled = false;
-      chartArea1.Name = "SolutionsNetworkChartArea";
-      this.solutionsNetworkChart.ChartAreas.Add(chartArea1);
-      this.solutionsNetworkChart.Dock = System.Windows.Forms.DockStyle.Fill;
-      legend1.Enabled = false;
-      legend1.Name = "Legend1";
-      this.solutionsNetworkChart.Legends.Add(legend1);
-      this.solutionsNetworkChart.Location = new System.Drawing.Point(3, 3);
-      this.solutionsNetworkChart.Name = "solutionsNetworkChart";
-      series1.ChartArea = "SolutionsNetworkChartArea";
-      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bubble;
-      series1.IsValueShownAsLabel = true;
-      series1.Label = "#LABEL";
-      series1.Legend = "Legend1";
-      series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
-      series1.Name = "SolutionSeries";
-      series1.YValuesPerPoint = 2;
-      series2.ChartArea = "SolutionsNetworkChartArea";
-      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bubble;
-      series2.IsValueShownAsLabel = true;
-      series2.Label = "#LABEL";
-      series2.Legend = "Legend1";
-      series2.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
-      series2.Name = "SeedingSolutionSeries";
-      series2.YValuesPerPoint = 2;
-      this.solutionsNetworkChart.Series.Add(series1);
-      this.solutionsNetworkChart.Series.Add(series2);
-      this.solutionsNetworkChart.Size = new System.Drawing.Size(661, 409);
-      this.solutionsNetworkChart.TabIndex = 0;
-      this.solutionsNetworkChart.Text = "enhancedChart1";
-      this.solutionsNetworkChart.MouseClick += new System.Windows.Forms.MouseEventHandler(this.SolutionsNetworkChartOnMouseClick);
-      // 
-      // solversTabPage
-      // 
-      this.solversTabPage.Controls.Add(this.seedingStrategyPanel);
-      this.solversTabPage.Controls.Add(this.solverTabControl);
-      this.solversTabPage.Controls.Add(this.algorithmCloneButton);
-      this.solversTabPage.Controls.Add(this.algorithmStartButton);
-      this.solversTabPage.Controls.Add(this.label1);
-      this.solversTabPage.Controls.Add(this.evaluationsLimitabel);
-      this.solversTabPage.Controls.Add(this.algorithmSuggestionLabel);
-      this.solversTabPage.Controls.Add(this.maxEvaluationsTextBox);
-      this.solversTabPage.Controls.Add(this.suggestedInstancesComboBox);
-      this.solversTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solversTabPage.Name = "solversTabPage";
-      this.solversTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solversTabPage.Size = new System.Drawing.Size(681, 477);
-      this.solversTabPage.TabIndex = 4;
-      this.solversTabPage.Text = "Solvers";
-      this.solversTabPage.UseVisualStyleBackColor = true;
-      // 
-      // seedingStrategyPanel
-      // 
-      this.seedingStrategyPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.seedingStrategyPanel.Location = new System.Drawing.Point(110, 32);
-      this.seedingStrategyPanel.Name = "seedingStrategyPanel";
-      this.seedingStrategyPanel.Size = new System.Drawing.Size(564, 21);
-      this.seedingStrategyPanel.TabIndex = 5;
-      // 
-      // solverTabControl
-      // 
-      this.solverTabControl.AllowDrop = true;
-      this.solverTabControl.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.solverTabControl.Controls.Add(this.resultsTabPage);
-      this.solverTabControl.Controls.Add(this.solutionSeedingTabPage);
-      this.solverTabControl.Controls.Add(this.parametersTabPage);
-      this.solverTabControl.Controls.Add(this.operatorGraphTabPage);
-      this.solverTabControl.Location = new System.Drawing.Point(2, 87);
-      this.solverTabControl.Name = "solverTabControl";
-      this.solverTabControl.SelectedIndex = 0;
-      this.solverTabControl.Size = new System.Drawing.Size(676, 387);
-      this.solverTabControl.TabIndex = 4;
-      // 
-      // resultsTabPage
-      // 
-      this.resultsTabPage.Controls.Add(this.solverResultsView);
-      this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.resultsTabPage.Name = "resultsTabPage";
-      this.resultsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.resultsTabPage.Size = new System.Drawing.Size(668, 361);
-      this.resultsTabPage.TabIndex = 2;
-      this.resultsTabPage.Text = "Results";
-      this.resultsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solverResultsView
-      // 
-      this.solverResultsView.Caption = "ResultCollection View";
-      this.solverResultsView.Content = null;
-      this.solverResultsView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solverResultsView.Location = new System.Drawing.Point(3, 3);
-      this.solverResultsView.Name = "solverResultsView";
-      this.solverResultsView.ReadOnly = true;
-      this.solverResultsView.ShowDetails = true;
-      this.solverResultsView.Size = new System.Drawing.Size(662, 355);
-      this.solverResultsView.TabIndex = 1;
-      // 
-      // solutionSeedingTabPage
-      // 
-      this.solutionSeedingTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionSeedingTabPage.Name = "solutionSeedingTabPage";
-      this.solutionSeedingTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionSeedingTabPage.Size = new System.Drawing.Size(668, 361);
-      this.solutionSeedingTabPage.TabIndex = 1;
-      this.solutionSeedingTabPage.Text = "Seeding Pool";
-      this.solutionSeedingTabPage.UseVisualStyleBackColor = true;
-      // 
-      // parametersTabPage
-      // 
-      this.parametersTabPage.Controls.Add(this.solverParametersView);
-      this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
-      this.parametersTabPage.Name = "parametersTabPage";
-      this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.parametersTabPage.Size = new System.Drawing.Size(668, 361);
-      this.parametersTabPage.TabIndex = 0;
-      this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solverParametersView
-      // 
-      this.solverParametersView.AllowEditingOfHiddenParameters = true;
-      this.solverParametersView.Caption = "ParameterCollection View";
-      this.solverParametersView.Content = null;
-      this.solverParametersView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solverParametersView.Location = new System.Drawing.Point(3, 3);
-      this.solverParametersView.Name = "solverParametersView";
-      this.solverParametersView.ReadOnly = true;
-      this.solverParametersView.ShowDetails = true;
-      this.solverParametersView.Size = new System.Drawing.Size(662, 355);
-      this.solverParametersView.TabIndex = 0;
-      // 
-      // operatorGraphTabPage
-      // 
-      this.operatorGraphTabPage.Controls.Add(this.operatorGraphViewHost);
-      this.operatorGraphTabPage.Location = new System.Drawing.Point(4, 22);
-      this.operatorGraphTabPage.Name = "operatorGraphTabPage";
-      this.operatorGraphTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.operatorGraphTabPage.Size = new System.Drawing.Size(668, 361);
-      this.operatorGraphTabPage.TabIndex = 3;
-      this.operatorGraphTabPage.Text = "Operator Graph";
-      this.operatorGraphTabPage.UseVisualStyleBackColor = true;
-      // 
-      // operatorGraphViewHost
-      // 
-      this.operatorGraphViewHost.Caption = "View";
-      this.operatorGraphViewHost.Content = null;
-      this.operatorGraphViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorGraphViewHost.Enabled = false;
-      this.operatorGraphViewHost.Location = new System.Drawing.Point(3, 3);
-      this.operatorGraphViewHost.Name = "operatorGraphViewHost";
-      this.operatorGraphViewHost.ReadOnly = true;
-      this.operatorGraphViewHost.Size = new System.Drawing.Size(662, 355);
-      this.operatorGraphViewHost.TabIndex = 0;
-      this.operatorGraphViewHost.ViewsLabelVisible = true;
-      this.operatorGraphViewHost.ViewType = null;
-      // 
-      // algorithmCloneButton
-      // 
-      this.algorithmCloneButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.algorithmCloneButton.Location = new System.Drawing.Point(648, 58);
-      this.algorithmCloneButton.Name = "algorithmCloneButton";
-      this.algorithmCloneButton.Size = new System.Drawing.Size(26, 23);
-      this.algorithmCloneButton.TabIndex = 3;
-      this.algorithmCloneButton.Text = "Clone";
-      this.algorithmCloneButton.UseVisualStyleBackColor = true;
-      this.algorithmCloneButton.Click += new System.EventHandler(this.AlgorithmCloneButtonOnClick);
-      // 
-      // algorithmStartButton
-      // 
-      this.algorithmStartButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.algorithmStartButton.Location = new System.Drawing.Point(616, 58);
-      this.algorithmStartButton.Name = "algorithmStartButton";
-      this.algorithmStartButton.Size = new System.Drawing.Size(26, 23);
-      this.algorithmStartButton.TabIndex = 3;
-      this.algorithmStartButton.Text = "Start";
-      this.algorithmStartButton.UseVisualStyleBackColor = true;
-      this.algorithmStartButton.Click += new System.EventHandler(this.AlgorithmStartButtonOnClick);
-      // 
-      // label1
-      // 
-      this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(5, 36);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(91, 13);
-      this.label1.TabIndex = 1;
-      this.label1.Text = "Seeding Strategy:";
-      // 
-      // algorithmSuggestionLabel
-      // 
-      this.algorithmSuggestionLabel.AutoSize = true;
-      this.algorithmSuggestionLabel.Location = new System.Drawing.Point(5, 62);
-      this.algorithmSuggestionLabel.Name = "algorithmSuggestionLabel";
-      this.algorithmSuggestionLabel.Size = new System.Drawing.Size(99, 13);
-      this.algorithmSuggestionLabel.TabIndex = 1;
-      this.algorithmSuggestionLabel.Text = "Suggested Solvers:";
-      // 
-      // suggestedInstancesComboBox
-      // 
-      this.suggestedInstancesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.suggestedInstancesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.suggestedInstancesComboBox.FormattingEnabled = true;
-      this.suggestedInstancesComboBox.Location = new System.Drawing.Point(110, 59);
-      this.suggestedInstancesComboBox.Name = "suggestedInstancesComboBox";
-      this.suggestedInstancesComboBox.Size = new System.Drawing.Size(500, 21);
-      this.suggestedInstancesComboBox.TabIndex = 0;
-      this.suggestedInstancesComboBox.SelectedIndexChanged += new System.EventHandler(this.SuggestedInstancesComboBoxOnSelectedIndexChanged);
-      // 
-      // runsTabPage
-      // 
-      this.runsTabPage.Controls.Add(this.runsView);
-      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(681, 477);
-      this.runsTabPage.TabIndex = 3;
-      this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // runsView
-      // 
-      this.runsView.Caption = "RunCollection View";
-      this.runsView.Content = null;
-      this.runsView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.runsView.Location = new System.Drawing.Point(3, 3);
-      this.runsView.Name = "runsView";
-      this.runsView.ReadOnly = false;
-      this.runsView.Size = new System.Drawing.Size(675, 471);
-      this.runsView.TabIndex = 1;
-      // 
-      // okbTabPage
-      // 
-      this.okbTabPage.Controls.Add(this.kbViewHost);
-      this.okbTabPage.Location = new System.Drawing.Point(4, 22);
-      this.okbTabPage.Name = "okbTabPage";
-      this.okbTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.okbTabPage.Size = new System.Drawing.Size(681, 477);
-      this.okbTabPage.TabIndex = 5;
-      this.okbTabPage.Text = "Knowledge Base";
-      this.okbTabPage.UseVisualStyleBackColor = true;
-      // 
-      // kbViewHost
-      // 
-      this.kbViewHost.Caption = "View";
-      this.kbViewHost.Content = null;
-      this.kbViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.kbViewHost.Enabled = false;
-      this.kbViewHost.Location = new System.Drawing.Point(3, 3);
-      this.kbViewHost.Name = "kbViewHost";
-      this.kbViewHost.ReadOnly = true;
-      this.kbViewHost.Size = new System.Drawing.Size(675, 471);
-      this.kbViewHost.TabIndex = 3;
-      this.kbViewHost.ViewsLabelVisible = true;
-      this.kbViewHost.ViewType = null;
-      // 
-      // problemInstancesTabPage
-      // 
-      this.problemInstancesTabPage.Controls.Add(this.projectionLabel);
-      this.problemInstancesTabPage.Controls.Add(this.projectionComboBox);
-      this.problemInstancesTabPage.Controls.Add(this.problemInstancesTabControl);
-      this.problemInstancesTabPage.Controls.Add(this.refreshMapButton);
-      this.problemInstancesTabPage.Location = new System.Drawing.Point(4, 22);
-      this.problemInstancesTabPage.Name = "problemInstancesTabPage";
-      this.problemInstancesTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.problemInstancesTabPage.Size = new System.Drawing.Size(681, 477);
-      this.problemInstancesTabPage.TabIndex = 6;
-      this.problemInstancesTabPage.Text = "Problem Instances";
-      this.problemInstancesTabPage.UseVisualStyleBackColor = true;
-      // 
-      // projectionLabel
-      // 
-      this.projectionLabel.AutoSize = true;
-      this.projectionLabel.Location = new System.Drawing.Point(35, 11);
-      this.projectionLabel.Name = "projectionLabel";
-      this.projectionLabel.Size = new System.Drawing.Size(57, 13);
-      this.projectionLabel.TabIndex = 6;
-      this.projectionLabel.Text = "Projection:";
-      // 
-      // projectionComboBox
-      // 
-      this.projectionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.projectionComboBox.FormattingEnabled = true;
-      this.projectionComboBox.Location = new System.Drawing.Point(98, 8);
-      this.projectionComboBox.Name = "projectionComboBox";
-      this.projectionComboBox.Size = new System.Drawing.Size(158, 21);
-      this.projectionComboBox.TabIndex = 5;
-      this.projectionComboBox.SelectedIndexChanged += new System.EventHandler(this.ProjectionComboBoxOnSelectedIndexChanged);
-      // 
-      // problemInstancesTabControl
-      // 
-      this.problemInstancesTabControl.AllowDrop = true;
-      this.problemInstancesTabControl.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.problemInstancesTabControl.Controls.Add(this.instancesTabPage);
-      this.problemInstancesTabControl.Controls.Add(this.mapTabPage);
-      this.problemInstancesTabControl.Location = new System.Drawing.Point(3, 35);
-      this.problemInstancesTabControl.Name = "problemInstancesTabControl";
-      this.problemInstancesTabControl.SelectedIndex = 0;
-      this.problemInstancesTabControl.Size = new System.Drawing.Size(675, 439);
-      this.problemInstancesTabControl.TabIndex = 4;
-      // 
-      // instancesTabPage
-      // 
-      this.instancesTabPage.Controls.Add(this.problemInstancesView);
-      this.instancesTabPage.Location = new System.Drawing.Point(4, 22);
-      this.instancesTabPage.Name = "instancesTabPage";
-      this.instancesTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.instancesTabPage.Size = new System.Drawing.Size(667, 413);
-      this.instancesTabPage.TabIndex = 0;
-      this.instancesTabPage.Text = "Instances";
-      this.instancesTabPage.UseVisualStyleBackColor = true;
-      // 
-      // problemInstancesView
-      // 
-      this.problemInstancesView.Caption = "View";
-      this.problemInstancesView.Content = null;
-      this.problemInstancesView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.problemInstancesView.Enabled = false;
-      this.problemInstancesView.Location = new System.Drawing.Point(3, 3);
-      this.problemInstancesView.Name = "problemInstancesView";
-      this.problemInstancesView.ReadOnly = false;
-      this.problemInstancesView.Size = new System.Drawing.Size(661, 407);
-      this.problemInstancesView.TabIndex = 0;
-      this.problemInstancesView.ViewsLabelVisible = true;
-      this.problemInstancesView.ViewType = null;
-      // 
-      // mapTabPage
-      // 
-      this.mapTabPage.Controls.Add(this.instanceMapChart);
-      this.mapTabPage.Location = new System.Drawing.Point(4, 22);
-      this.mapTabPage.Name = "mapTabPage";
-      this.mapTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.mapTabPage.Size = new System.Drawing.Size(667, 413);
-      this.mapTabPage.TabIndex = 1;
-      this.mapTabPage.Text = "Map";
-      this.mapTabPage.UseVisualStyleBackColor = true;
-      // 
-      // instanceMapChart
-      // 
-      chartArea2.AxisX.MajorGrid.LineColor = System.Drawing.Color.LightGray;
-      chartArea2.AxisX.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
-      chartArea2.AxisY.MajorGrid.LineColor = System.Drawing.Color.LightGray;
-      chartArea2.AxisY.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
-      chartArea2.Name = "Default";
-      this.instanceMapChart.ChartAreas.Add(chartArea2);
-      this.instanceMapChart.Dock = System.Windows.Forms.DockStyle.Fill;
-      legend2.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
-      legend2.Enabled = false;
-      legend2.Name = "Legend";
-      this.instanceMapChart.Legends.Add(legend2);
-      this.instanceMapChart.Location = new System.Drawing.Point(3, 3);
-      this.instanceMapChart.Name = "instanceMapChart";
-      series3.ChartArea = "Default";
-      series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
-      series3.Legend = "Legend";
-      series3.MarkerSize = 10;
-      series3.Name = "InstancesSeries";
-      series4.ChartArea = "Default";
-      series4.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
-      series4.Legend = "Legend";
-      series4.MarkerColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
-      series4.MarkerSize = 15;
-      series4.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
-      series4.Name = "CurrentInstanceSeries";
-      this.instanceMapChart.Series.Add(series3);
-      this.instanceMapChart.Series.Add(series4);
-      this.instanceMapChart.Size = new System.Drawing.Size(661, 407);
-      this.instanceMapChart.TabIndex = 0;
-      // 
-      // refreshMapButton
-      // 
-      this.refreshMapButton.Location = new System.Drawing.Point(3, 6);
-      this.refreshMapButton.Name = "refreshMapButton";
-      this.refreshMapButton.Size = new System.Drawing.Size(26, 23);
-      this.refreshMapButton.TabIndex = 1;
-      this.refreshMapButton.Text = "Refresh";
-      this.refreshMapButton.UseVisualStyleBackColor = true;
-      this.refreshMapButton.Click += new System.EventHandler(this.RefreshMapButtonOnClick);
-      // 
-      // progressPanel
-      // 
-      this.progressPanel.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.progressPanel.Location = new System.Drawing.Point(0, 32);
-      this.progressPanel.Name = "progressPanel";
-      this.progressPanel.Size = new System.Drawing.Size(692, 503);
-      this.progressPanel.TabIndex = 2;
-      this.progressPanel.Visible = false;
-      // 
-      // okbDownloadButton
-      // 
-      this.okbDownloadButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.okbDownloadButton.Location = new System.Drawing.Point(3, 3);
-      this.okbDownloadButton.Name = "okbDownloadButton";
-      this.okbDownloadButton.Size = new System.Drawing.Size(686, 23);
-      this.okbDownloadButton.TabIndex = 1;
-      this.okbDownloadButton.Text = "Download from OKB";
-      this.okbDownloadButton.UseVisualStyleBackColor = true;
-      this.okbDownloadButton.Click += new System.EventHandler(this.OkbDownloadButtonOnClick);
-      // 
-      // openFileDialog
-      // 
-      this.openFileDialog.DefaultExt = "hl";
-      this.openFileDialog.FileName = "Optimizer";
-      this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
-      this.openFileDialog.Title = "Open Optimizer";
-      // 
-      // ExpertSystemView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.okbDownloadButton);
-      this.Controls.Add(this.tabControl);
-      this.Controls.Add(this.progressPanel);
-      this.Name = "ExpertSystemView";
-      this.Size = new System.Drawing.Size(692, 535);
-      this.tabControl.ResumeLayout(false);
-      this.problemTabPage.ResumeLayout(false);
-      this.solutionsTabPage.ResumeLayout(false);
-      this.solutionsTabPage.PerformLayout();
-      this.solutionsTabControl.ResumeLayout(false);
-      this.solutionsQualityTabPage.ResumeLayout(false);
-      this.solutionsLengthScaleTabPage.ResumeLayout(false);
-      this.solutionsDiversityTabPage.ResumeLayout(false);
-      this.solutionsFdcTabPage.ResumeLayout(false);
-      this.solutionsFdcTabPage.PerformLayout();
-      this.solutionsNetworkTabPage.ResumeLayout(false);
-      ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).EndInit();
-      this.solversTabPage.ResumeLayout(false);
-      this.solversTabPage.PerformLayout();
-      this.solverTabControl.ResumeLayout(false);
-      this.resultsTabPage.ResumeLayout(false);
-      this.parametersTabPage.ResumeLayout(false);
-      this.operatorGraphTabPage.ResumeLayout(false);
-      this.runsTabPage.ResumeLayout(false);
-      this.okbTabPage.ResumeLayout(false);
-      this.problemInstancesTabPage.ResumeLayout(false);
-      this.problemInstancesTabPage.PerformLayout();
-      this.problemInstancesTabControl.ResumeLayout(false);
-      this.instancesTabPage.ResumeLayout(false);
-      this.mapTabPage.ResumeLayout(false);
-      ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).EndInit();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label evaluationsLimitabel;
-    private System.Windows.Forms.TextBox maxEvaluationsTextBox;
-    private MainForm.WindowsForms.DragOverTabControl tabControl;
-    private System.Windows.Forms.TabPage runsTabPage;
-    private HeuristicLab.Optimization.Views.RunCollectionView runsView;
-    private System.Windows.Forms.OpenFileDialog openFileDialog;
-    private System.Windows.Forms.TabPage problemTabPage;
-    private MainForm.WindowsForms.ViewHost problemViewHost;
-    private System.Windows.Forms.TabPage solversTabPage;
-    private System.Windows.Forms.Label algorithmSuggestionLabel;
-    private System.Windows.Forms.ComboBox suggestedInstancesComboBox;
-    private System.Windows.Forms.TabPage okbTabPage;
-    private System.Windows.Forms.TabPage problemInstancesTabPage;
-    private System.Windows.Forms.Button refreshMapButton;
-    private System.Windows.Forms.Button okbDownloadButton;
-    private System.Windows.Forms.Panel progressPanel;
-    private MainForm.WindowsForms.ViewHost kbViewHost;
-    private System.Windows.Forms.Button algorithmStartButton;
-    private HeuristicLab.MainForm.WindowsForms.DragOverTabControl problemInstancesTabControl;
-    private System.Windows.Forms.TabPage instancesTabPage;
-    private MainForm.WindowsForms.ViewHost problemInstancesView;
-    private System.Windows.Forms.TabPage mapTabPage;
-    private Visualization.ChartControlsExtensions.EnhancedChart instanceMapChart;
-    private System.Windows.Forms.Label projectionLabel;
-    private System.Windows.Forms.ComboBox projectionComboBox;
-    private System.Windows.Forms.TabPage solutionsTabPage;
-    private HeuristicLab.MainForm.WindowsForms.DragOverTabControl solutionsTabControl;
-    private System.Windows.Forms.TabPage solutionsQualityTabPage;
-    private System.Windows.Forms.TabPage solutionsDiversityTabPage;
-    private MainForm.WindowsForms.ViewHost solutionsQualityViewHost;
-    private MainForm.WindowsForms.ViewHost solutionsDiversityViewHost;
-    private System.Windows.Forms.Label solutionDiversitySimilarityLabel;
-    private System.Windows.Forms.ComboBox similarityComboBox;
-    private System.Windows.Forms.TabPage solutionsLengthScaleTabPage;
-    private System.Windows.Forms.TabPage solutionsNetworkTabPage;
-    private MainForm.WindowsForms.ViewHost solutionsLengthScaleViewHost;
-    private System.Windows.Forms.TabPage solutionsFdcTabPage;
-    private MainForm.WindowsForms.ViewHost solutionsFdcViewHost;
-    private Visualization.ChartControlsExtensions.EnhancedChart solutionsNetworkChart;
-    private System.Windows.Forms.Button algorithmCloneButton;
-    private System.Windows.Forms.Label solutionNameLabel;
-    private System.Windows.Forms.ComboBox solutionNameComboBox;
-    private MainForm.WindowsForms.DragOverTabControl solverTabControl;
-    private System.Windows.Forms.TabPage resultsTabPage;
-    private Optimization.Views.ResultCollectionView solverResultsView;
-    private System.Windows.Forms.TabPage solutionSeedingTabPage;
-    private System.Windows.Forms.TabPage parametersTabPage;
-    private Core.Views.ParameterCollectionView solverParametersView;
-    private System.Windows.Forms.Panel seedingStrategyPanel;
-    private System.Windows.Forms.Label label1;
-    private System.Windows.Forms.TabPage operatorGraphTabPage;
-    private MainForm.WindowsForms.ViewHost operatorGraphViewHost;
-    private System.Windows.Forms.CheckBox fdcBetweenBestCheckBox;
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.cs	(revision 13721)
+++ 	(revision )
@@ -1,573 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.Analysis;
-using HeuristicLab.Analysis.QualityAnalysis;
-using HeuristicLab.Clients.OKB.RunCreation;
-using HeuristicLab.Common;
-using HeuristicLab.Common.Resources;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.Data;
-using HeuristicLab.Data.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Views;
-using HeuristicLab.OptimizationExpertSystem.Common;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Text.RegularExpressions;
-using System.Windows.Forms;
-using System.Windows.Forms.DataVisualization.Charting;
-
-namespace HeuristicLab.OptimizationExpertSystem {
-  [View("Knowledge Center (all-in-one view)")]
-  [Content(typeof(ExpertSystem), IsDefaultView = true)]
-  public partial class ExpertSystemView : ItemView {
-    private EnumValueView<SeedingStrategyTypes> seedingStrategyView;
-    private CheckedItemListView<IScope> seedingSolutionsView;
-    protected virtual bool SuppressEvents { get; set; }
-    private bool okbDownloadInProgress;
-
-    public new ExpertSystem Content {
-      get { return (ExpertSystem)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public ExpertSystemView() {
-      InitializeComponent();
-      // brings progress panel to front (it is not visible by default, but obstructs other elements in designer)
-      this.Controls.SetChildIndex(this.progressPanel, 0);
-      algorithmStartButton.Text = string.Empty;
-      algorithmStartButton.Image = VSImageLibrary.Play;
-      algorithmCloneButton.Text = string.Empty;
-      algorithmCloneButton.Image = VSImageLibrary.Clone;
-      refreshMapButton.Text = string.Empty;
-      refreshMapButton.Image = VSImageLibrary.Refresh;
-      seedingStrategyView = new EnumValueView<SeedingStrategyTypes>() {
-        Dock = DockStyle.Fill
-      };
-      seedingSolutionsView = new CheckedItemListView<IScope>() {
-        Dock = DockStyle.Fill
-      };
-      seedingStrategyPanel.Controls.Add(seedingStrategyView);
-      solutionSeedingTabPage.Controls.Add(seedingSolutionsView);
-    }
-
-    #region Event Registration
-    protected override void DeregisterContentEvents() {
-      Content.PropertyChanged -= ContentOnPropertyChanged;
-      Content.SuggestedInstances.CollectionReset -= SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsAdded -= SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsMoved -= SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsRemoved -= SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsReplaced -= SuggestedInstancesOnChanged;
-      Content.SolutionSeedingPool.CollectionReset -= SeedingPoolOnChanged;
-      Content.SolutionSeedingPool.ItemsAdded -= SeedingPoolOnChanged;
-      Content.SolutionSeedingPool.ItemsRemoved -= SeedingPoolOnChanged;
-      Content.SolutionSeedingPool.ItemsReplaced -= SeedingPoolOnChanged;
-      Content.SolutionSeedingPool.CheckedItemsChanged -= SeedingPoolOnChanged;
-      DeregisterProblemEvents(Content.Problem);
-      base.DeregisterContentEvents();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.PropertyChanged += ContentOnPropertyChanged;
-      Content.SuggestedInstances.CollectionReset += SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsAdded += SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsMoved += SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsRemoved += SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsReplaced += SuggestedInstancesOnChanged;
-      Content.SolutionSeedingPool.CollectionReset += SeedingPoolOnChanged;
-      Content.SolutionSeedingPool.ItemsAdded += SeedingPoolOnChanged;
-      Content.SolutionSeedingPool.ItemsRemoved += SeedingPoolOnChanged;
-      Content.SolutionSeedingPool.ItemsReplaced += SeedingPoolOnChanged;
-      Content.SolutionSeedingPool.CheckedItemsChanged += SeedingPoolOnChanged;
-      RegisterProblemEvents(Content.Problem);
-    }
-
-    private void DeregisterProblemEvents(OKBProblem problem) {
-      if (problem == null) return;
-      problem.Solutions.ItemsAdded -= SolutionsOnChanged;
-      problem.Solutions.ItemsRemoved -= SolutionsOnChanged;
-      problem.Solutions.ItemsReplaced -= SolutionsOnChanged;
-      problem.Solutions.CollectionReset -= SolutionsOnChanged;
-      problem.ProblemChanged -= ContentOnProblemChanged;
-    }
-
-    private void RegisterProblemEvents(OKBProblem problem) {
-      if (problem == null) return;
-      problem.Solutions.ItemsAdded += SolutionsOnChanged;
-      problem.Solutions.ItemsRemoved += SolutionsOnChanged;
-      problem.Solutions.ItemsReplaced += SolutionsOnChanged;
-      problem.Solutions.CollectionReset += SolutionsOnChanged;
-      problem.ProblemChanged += ContentOnProblemChanged;
-    }
-    #endregion
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      SuppressEvents = true;
-      okbDownloadInProgress = false;
-      try {
-        if (Content == null) {
-          maxEvaluationsTextBox.Text = String.Empty;
-          problemViewHost.Content = null;
-          solverParametersView.Content = null;
-          solverResultsView.Content = null;
-          runsView.Content = null;
-          kbViewHost.Content = null;
-          problemInstancesView.Content = null;
-          seedingStrategyView.Content = null;
-          seedingSolutionsView.Content = null;
-        } else {
-          maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString();
-          problemViewHost.Content = Content.Problem;
-          runsView.Content = Content.Runs;
-          kbViewHost.ViewType = typeof(RunCollectionRLDView);
-          kbViewHost.Content = Content.KnowledgeBase;
-          problemInstancesView.Content = Content.ProblemInstances;
-          solverResultsView.Content = Content.CurrentResult;
-          seedingStrategyView.Content = Content.SeedingStrategy;
-          seedingSolutionsView.Content = Content.SolutionSeedingPool;
-        }
-      } finally { SuppressEvents = false; }
-      UpdateSuggestedInstancesCombobox();
-      UpdateSimilarityCalculators();
-      UpdateNamesComboboxes();
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      maxEvaluationsTextBox.Enabled = Content != null && !ReadOnly && !Locked;
-      problemViewHost.Enabled = Content != null && !ReadOnly && !Locked && !okbDownloadInProgress;
-      suggestedInstancesComboBox.Enabled = Content != null && !ReadOnly && !Locked && !okbDownloadInProgress;
-      algorithmStartButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
-      algorithmCloneButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
-      runsView.Enabled = Content != null;
-      kbViewHost.Enabled = Content != null && !okbDownloadInProgress;
-      problemInstancesView.Enabled = Content != null && !okbDownloadInProgress;
-      refreshMapButton.Enabled = Content != null;
-      okbDownloadButton.Enabled = Content != null && Content.Problem != null && Content.Problem.ProblemId >= 0 && !ReadOnly && !Locked && !okbDownloadInProgress;
-    }
-
-    #region Event Handlers
-    #region Content events
-    private void ContentOnProblemChanged(object sender, EventArgs eventArgs) {
-      UpdateSuggestedInstancesCombobox();
-      UpdateSimilarityCalculators();
-      SetEnabledStateOfControls();
-    }
-
-    private void ContentOnPropertyChanged(object sender, PropertyChangedEventArgs e) {
-      if (InvokeRequired) {
-        Invoke((Action<object, PropertyChangedEventArgs>)ContentOnPropertyChanged, sender, e);
-        return;
-      }
-      SuppressEvents = true;
-      try {
-        switch (e.PropertyName) {
-          case "KnowledgeBase": kbViewHost.Content = Content.KnowledgeBase; break;
-          case "MaximumEvaluations": maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString(); break;
-          case "Problem":
-            DeregisterProblemEvents(problemViewHost.Content as OKBProblem);
-            problemViewHost.Content = Content.Problem;
-            RegisterProblemEvents(Content.Problem);
-            UpdateNamesComboboxes();
-            break;
-          case "ProblemInstances": problemInstancesView.Content = Content.ProblemInstances; break;
-          case "CurrentResult": solverResultsView.Content = Content.CurrentResult; break;
-        }
-      } finally { SuppressEvents = false; }
-      SetEnabledStateOfControls();
-    }
-
-    private void SuggestedInstancesOnChanged(object sender, EventArgs e) {
-      UpdateSuggestedInstancesCombobox();
-    }
-
-    private void SeedingPoolOnChanged(object sender, EventArgs e) {
-      UpdateSolutionVisualization();
-    }
-
-    private void SolutionsOnChanged(object sender, EventArgs e) {
-      UpdateNamesComboboxes();
-      UpdateSolutionVisualization();
-    }
-    #endregion
-
-    #region Control events
-    private void MaxEvaluationsTextBoxOnValidating(object sender, CancelEventArgs e) {
-      if (SuppressEvents) return;
-      if (InvokeRequired) {
-        Invoke((Action<object, CancelEventArgs>)MaxEvaluationsTextBoxOnValidating, sender, e);
-        return;
-      }
-      int value;
-      if (!int.TryParse(maxEvaluationsTextBox.Text, out value)) {
-        e.Cancel = !maxEvaluationsTextBox.ReadOnly && maxEvaluationsTextBox.Enabled;
-        //errorProvider.SetError(maxEvaluationsTextBox, "Please enter a valid integer number.");
-      } else {
-        Content.MaximumEvaluations = value;
-        e.Cancel = false;
-        //errorProvider.SetError(maxEvaluationsTextBox, null);
-      }
-    }
-
-    private void RefreshMapButtonOnClick(object sender, EventArgs e) {
-      UpdateProjectionComboBox();
-    }
-
-    private void OkbDownloadButtonOnClick(object sender, EventArgs e) {
-      if (Content.Problem.ProblemId == -1) {
-        MessageBox.Show("Please select a problem instance first.");
-        return;
-      }
-      var progress = new Progress();
-      progress.ProgressStateChanged += OkbDownloadProgressOnStateChanged;
-      Content.UpdateKnowledgeBaseAsync(progress);
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(progressPanel, progress);
-      progressPanel.Visible = true;
-      SetEnabledStateOfControls();
-    }
-
-    private void OkbDownloadProgressOnStateChanged(object sender, EventArgs e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)OkbDownloadProgressOnStateChanged, sender, e); return; }
-      var progress = (IProgress)sender;
-      okbDownloadInProgress = progress.ProgressState == ProgressState.Started;
-      SetEnabledStateOfControls();
-      if (!okbDownloadInProgress) {
-        progressPanel.Visible = false;
-        progress.ProgressStateChanged -= OkbDownloadProgressOnStateChanged;
-      }
-    }
-
-    private void AlgorithmStartButtonOnClick(object sender, EventArgs e) {
-      if (suggestedInstancesComboBox.SelectedIndex >= 0)
-        Content.StartAlgorithmAsync(suggestedInstancesComboBox.SelectedIndex);
-    }
-
-    private void AlgorithmCloneButtonOnClick(object sender, EventArgs e) {
-      if (suggestedInstancesComboBox.SelectedIndex >= 0)
-        MainFormManager.MainForm.ShowContent((IAlgorithm)Content.SuggestedInstances[suggestedInstancesComboBox.SelectedIndex].Clone());
-    }
-
-    private void ProjectionComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)ProjectionComboBoxOnSelectedIndexChanged, sender, e); return; }
-      if (projectionComboBox.SelectedIndex < 0) return;
-      var projection = (string)projectionComboBox.SelectedItem;
-      var instancesSeries = instanceMapChart.Series["InstancesSeries"];
-      var currentInstanceSeries = instanceMapChart.Series["CurrentInstanceSeries"];
-
-      instancesSeries.Points.Clear();
-      currentInstanceSeries.Points.Clear();
-
-      foreach (var run in Content.ProblemInstances) {
-        var xKey = "Projection." + projection + ".X";
-        var yKey = "Projection." + projection + ".Y";
-        if (!run.Results.ContainsKey(xKey) || !run.Results.ContainsKey(yKey)
-          || !(run.Results[xKey] is Data.DoubleValue) || !(run.Results[yKey] is Data.DoubleValue)) continue;
-        var x = ((Data.DoubleValue)run.Results[xKey]).Value;
-        var y = ((Data.DoubleValue)run.Results[yKey]).Value;
-        var dataPoint = new DataPoint(x, y) {
-          Label = run.Name
-        };
-        instancesSeries.Points.Add(dataPoint);
-      }
-
-      var curPoint = Content.ProjectCurrentInstance(projection);
-      if (curPoint != null) {
-        var dp = new DataPoint(curPoint.Item1, curPoint.Item2) {
-          Label = Content.Problem.Problem.Name
-        };
-        currentInstanceSeries.Points.Add(dp);
-      }
-    }
-
-    private void SuggestedInstancesComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SuggestedInstancesComboBoxOnSelectedIndexChanged, sender, e); return; }
-      if (suggestedInstancesComboBox.SelectedIndex >= 0) {
-        var alg = Content.SuggestedInstances[suggestedInstancesComboBox.SelectedIndex];
-        solverParametersView.Content = alg.Parameters;
-        var engineAlg = alg as EngineAlgorithm;
-        if (engineAlg != null) operatorGraphViewHost.Content = engineAlg.OperatorGraph;
-        else operatorGraphViewHost.Content = new Data.StringValue("Algorithm is not modeled as an operator graph.");
-      } else {
-        solverParametersView.Content = null;
-        operatorGraphViewHost.Content = null;
-      }
-      SetEnabledStateOfControls();
-    }
-
-    private void SimilarityComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SimilarityComboBoxOnSelectedIndexChanged, sender, e); return; }
-      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
-      if (calculator != null) {
-        calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
-        calculator.QualityVariableName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
-      }
-      UpdateSolutionDiversityAnalysis(calculator);
-      UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
-      UpdateSolutionLengthScaleAnalysis(calculator);
-      UpdateSolutionNetworkAnalysis(calculator);
-    }
-
-    private void FdcBetweenBestCheckBoxOnCheckedChanged(object sender, EventArgs e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)FdcBetweenBestCheckBoxOnCheckedChanged, sender, e); return; }
-      UpdateSolutionFdcAnalysis((ISolutionSimilarityCalculator)similarityComboBox.SelectedItem, fdcBetweenBestCheckBox.Checked);
-    }
-
-    private void SolutionsNetworkChartOnMouseClick(object sender, MouseEventArgs e) {
-      var result = solutionsNetworkChart.HitTest(e.X, e.Y);
-      if (result.ChartElementType == ChartElementType.DataPoint) {
-        var point = (DataPoint)result.Object;
-        var solutionScope = point.Tag as IScope;
-        if (solutionScope == null || !Content.SolutionSeedingPool.Contains(solutionScope)) return;
-        Content.SolutionSeedingPool.SetItemCheckedState(solutionScope, !Content.SolutionSeedingPool.ItemChecked(solutionScope));
-      }
-    }
-    #endregion
-    #endregion
-
-    #region Control Configuration
-    private void UpdateSuggestedInstancesCombobox() {
-      var prevSelection = (IAlgorithm)suggestedInstancesComboBox.SelectedItem;
-      var prevNewIndex = -1;
-      suggestedInstancesComboBox.Items.Clear();
-      if (Content == null) return;
-
-      for (var i = 0; i < Content.SuggestedInstances.Count; i++) {
-        suggestedInstancesComboBox.Items.Add(Content.SuggestedInstances[i]);
-        if (prevSelection == null || Content.SuggestedInstances[i].Name == prevSelection.Name)
-          prevNewIndex = prevSelection == null ? 0 : i;
-      }
-      if (prevNewIndex >= 0) {
-        suggestedInstancesComboBox.SelectedIndex = prevNewIndex;
-      }
-    }
-
-    private void UpdateSimilarityCalculators() {
-      var selected = (ISolutionSimilarityCalculator)(similarityComboBox.SelectedIndex >= 0 ? similarityComboBox.SelectedItem : null);
-      similarityComboBox.Items.Clear();
-
-      if (Content == null || Content.Problem == null) return;
-
-      foreach (var calc in Content.Problem.Operators.OfType<ISolutionSimilarityCalculator>()) {
-        similarityComboBox.Items.Add(calc);
-        if (selected != null && calc.ItemName == selected.ItemName) similarityComboBox.SelectedItem = calc;
-      }
-      if (selected == null && similarityComboBox.Items.Count > 0)
-        similarityComboBox.SelectedIndex = 0;
-    }
-
-    private void UpdateNamesComboboxes() {
-      var selectedSolutionName = solutionNameComboBox.SelectedIndex >= 0 ? (string)solutionNameComboBox.SelectedItem : string.Empty;
-
-      solutionNameComboBox.Items.Clear();
-      if (Content == null) return;
-      var solutionNames = Content.Problem.Solutions.Select(x => x.Solution).OfType<IScope>().SelectMany(x => x.Variables);
-
-      foreach (var sn in solutionNames.GroupBy(x => x.Name).OrderBy(x => x.Key)) {
-        solutionNameComboBox.Items.Add(sn.Key);
-        // either it was previously selected, or the variable value is defined in the HeuristicLab.Encodings sub-namespace
-        if (sn.Key == selectedSolutionName || (string.IsNullOrEmpty(selectedSolutionName) && sn.All(x => x.Value != null && x.Value.GetType().FullName.StartsWith("HeuristicLab.Encodings."))))
-          solutionNameComboBox.SelectedItem = sn.Key;
-      }
-    }
-    
-    private void UpdateProjectionComboBox() {
-      projectionComboBox.Items.Clear();
-      var projStrings = Content.ProblemInstances
-        .SelectMany(x => x.Results.Where(y => Regex.IsMatch(y.Key, "^Projection[.].*[.][XY]$")))
-        .Select(x => Regex.Match(x.Key, "Projection[.](?<g>.*)[.][XY]").Groups["g"].Value)
-        .Distinct();
-      foreach (var str in projStrings) {
-        projectionComboBox.Items.Add(str);
-      }
-    }
-    #endregion
-
-    #region Visualization
-    #region Solution Visualization
-    public void UpdateSolutionVisualization() {
-      if (InvokeRequired) { Invoke((Action)UpdateSolutionVisualization); return;  }
-      var qualityName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
-      UpdateSolutionQualityAnalysis(qualityName);
-      if (similarityComboBox.SelectedIndex >= 0) {
-        var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
-        UpdateSolutionDiversityAnalysis(calculator);
-        UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
-        UpdateSolutionLengthScaleAnalysis(calculator);
-        UpdateSolutionNetworkAnalysis(calculator);
-      } else {
-        solutionsDiversityViewHost.Content = null;
-        solutionsFdcViewHost.Content = null;
-        solutionsLengthScaleViewHost.Content = null;
-        solutionsNetworkChart.Series.First().Points.Clear();
-      }
-    }
-    private void UpdateSolutionQualityAnalysis(string qualityName) {
-      var dt = solutionsQualityViewHost.Content as DataTable;
-      if (dt == null) {
-        dt = QualityDistributionAnalyzer.PrepareTable(qualityName);
-        dt.VisualProperties.Title = "Quality Distribution";
-        solutionsQualityViewHost.Content = dt;
-      }
-      QualityDistributionAnalyzer.UpdateTable(dt, GetSolutionScopes().Select(x => GetQuality(x, qualityName) ?? double.NaN).Where(x => !double.IsNaN(x)));
-    }
-
-    private void UpdateSolutionDiversityAnalysis(ISolutionSimilarityCalculator calculator) {
-      try {
-        solutionsDiversityViewHost.Content = null;
-        var solutionScopes = GetSolutionScopes();
-        var similarities = new double[solutionScopes.Count, solutionScopes.Count];
-        for (var i = 0; i < solutionScopes.Count; i++) {
-          for (var j = 0; j < solutionScopes.Count; j++)
-            similarities[i, j] = calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
-        }
-        var hm = new HeatMap(similarities, "Solution Similarities", 0.0, 1.0);
-        solutionsDiversityViewHost.Content = hm;
-      } catch { }
-    }
-
-    private void UpdateSolutionFdcAnalysis(ISolutionSimilarityCalculator calculator, bool distanceToBest) {
-      try {
-        solutionsFdcViewHost.Content = null;
-        var solutionScopes = GetSolutionScopes();
-        var points = new List<Point2D<double>>();
-        if (distanceToBest) {
-          var maximization = ((IValueParameter<Data.BoolValue>)Content.Problem.MaximizationParameter).Value.Value;
-          var bestSolutions = (maximization ? solutionScopes.MaxItems(x => GetQuality(x, calculator.QualityVariableName) ?? double.NegativeInfinity)
-                                            : solutionScopes.MinItems(x => GetQuality(x, calculator.QualityVariableName) ?? double.PositiveInfinity)).ToList();
-          foreach (var solScope in solutionScopes.Except(bestSolutions)) {
-            var maxSimilarity = bestSolutions.Max(x => calculator.CalculateSolutionSimilarity(solScope, x));
-            var qDiff = (GetQuality(solScope, calculator.QualityVariableName) ?? double.NaN)
-                      - (GetQuality(bestSolutions[0], calculator.QualityVariableName) ?? double.NaN);
-            points.Add(new Point2D<double>(Math.Abs(qDiff), 1.0 - maxSimilarity));
-          }
-        } else {
-          for (int i = 0; i < solutionScopes.Count; i++) {
-            for (int j = 0; j < solutionScopes.Count; j++) {
-              if (i == j) continue;
-              var qDiff = (GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN)
-                          - (GetQuality(solutionScopes[j], calculator.QualityVariableName) ?? double.NaN);
-              if (double.IsNaN(qDiff)) continue;
-              points.Add(new Point2D<double>(Math.Abs(qDiff), 1.0 - calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j])));
-            }
-          }
-        }
-        var splot = new ScatterPlot("Fitness-Distance", "");
-        splot.VisualProperties.XAxisTitle = "Absolute Fitness Difference";
-        splot.VisualProperties.XAxisMinimumFixedValue = 0.0;
-        splot.VisualProperties.XAxisMinimumAuto = false;
-        splot.VisualProperties.YAxisTitle = "Solution Distance";
-        splot.VisualProperties.YAxisMinimumFixedValue = 0.0;
-        splot.VisualProperties.YAxisMinimumAuto = false;
-        splot.VisualProperties.YAxisMaximumFixedValue = 1.0;
-        splot.VisualProperties.YAxisMaximumAuto = false;
-        var row = new ScatterPlotDataRow("Fdc", "", points);
-        row.VisualProperties.PointSize = 7;
-        splot.Rows.Add(row);
-        solutionsFdcViewHost.Content = splot;
-      } catch { }
-    }
-
-    private void UpdateSolutionLengthScaleAnalysis(ISolutionSimilarityCalculator calculator) {
-      try {
-        solutionsLengthScaleViewHost.Content = null;
-        var dt = solutionsLengthScaleViewHost.Content as DataTable;
-        if (dt == null) {
-          dt = QualityDistributionAnalyzer.PrepareTable("Length Scale");
-          solutionsLengthScaleViewHost.Content = dt;
-        }
-        QualityDistributionAnalyzer.UpdateTable(dt, CalculateLengthScale(calculator));
-      } catch {
-        solutionsLengthScaleViewHost.Content = null;
-      }
-    }
-
-    private IEnumerable<double> CalculateLengthScale(ISolutionSimilarityCalculator calculator) {
-      var solutionScopes = GetSolutionScopes();
-      for (var i = 0; i < solutionScopes.Count; i++) {
-        for (var j = 0; j < solutionScopes.Count; j++) {
-          if (i == j) continue;
-          var sim = calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
-          if (sim.IsAlmost(0)) continue;
-          var qDiff = (GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN)
-                    - (GetQuality(solutionScopes[j], calculator.QualityVariableName) ?? double.NaN);
-          if (!double.IsNaN(qDiff)) yield return Math.Abs(qDiff) / sim;
-        }
-      }
-    }
-
-    private void UpdateSolutionNetworkAnalysis(ISolutionSimilarityCalculator calculator) {
-      var series = solutionsNetworkChart.Series["SolutionSeries"];
-      var seedingSeries = solutionsNetworkChart.Series["SeedingSolutionSeries"];
-      try {
-        series.Points.Clear();
-        seedingSeries.Points.Clear();
-        var solutionScopes = GetSolutionScopes();
-        var dissimilarities = new DoubleMatrix(solutionScopes.Count, solutionScopes.Count);
-        for (var i = 0; i < solutionScopes.Count; i++) {
-          for (var j = 0; j < solutionScopes.Count; j++) {
-            if (i == j) continue;
-            dissimilarities[i, j] = 1.0 - calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
-          }
-        }
-        var coords = MultidimensionalScaling.KruskalShepard(dissimilarities);
-        for (var i = 0; i < coords.Rows; i++) {
-          var quality = GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN;
-          var dataPoint = new DataPoint() {
-            Name = (i + 1).ToString(),
-            XValue = coords[i, 0],
-            YValues = new[] {coords[i, 1], quality},
-            Label = i + ": " + quality,
-            Tag = solutionScopes[i]
-          };
-          if (Content.SolutionSeedingPool.Contains(solutionScopes[i]) && Content.SolutionSeedingPool.ItemChecked(solutionScopes[i]))
-            seedingSeries.Points.Add(dataPoint);
-          else series.Points.Add(dataPoint);
-        }
-      } catch {
-        // problems in calculating the similarity
-        series.Points.Clear();
-        seedingSeries.Points.Clear();
-      }
-    }
-    #endregion
-    #endregion
-
-    private List<IScope> GetSolutionScopes() {
-      return Content.Problem.Solutions.Select(x => x.Solution).OfType<IScope>().ToList();
-    } 
-
-    private double? GetQuality(IScope scope, string qualityName) {
-      IVariable v;
-      if (!scope.Variables.TryGetValue(qualityName, out v)) return null;
-      var dval = v.Value as Data.DoubleValue;
-      if (dval == null) return null;
-      return dval.Value;
-    }
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.resx	(revision 13721)
+++ 	(revision )
@@ -1,123 +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="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>230, 17</value>
-  </metadata>
-</root>
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj	(revision 13721)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj	(revision 13722)
@@ -174,17 +174,27 @@
     <Reference Include="System.Data" />
     <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="ExpertSystemView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ExpertSystemView.Designer.cs">
-      <DependentUpon>ExpertSystemView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Interfaces\IOptimizationExpertSystemUi.cs" />
-    <Compile Include="KnowledgeBaseView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="KnowledgeBaseView.Designer.cs">
+    <Reference Include="WeifenLuo.WinFormsUI.Docking-2.7.0, Version=2.7.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\WeifenLuo.WinFormsUI.Docking-2.7.0.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Docking\AlgorithmControlForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Docking\AlgorithmControlForm.Designer.cs">
+      <DependentUpon>AlgorithmControlForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\KnowledgeCenterAllinOneView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\KnowledgeCenterAllinOneView.Designer.cs">
+      <DependentUpon>KnowledgeCenterAllinOneView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Interfaces\IOptimizationKnowledgeCenterUi.cs" />
+    <Compile Include="Views\KnowledgeBaseView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\KnowledgeBaseView.Designer.cs">
       <DependentUpon>KnowledgeBaseView.cs</DependentUpon>
     </Compile>
@@ -203,34 +213,34 @@
     <Compile Include="Menu\100_Understanding\120_SolutionsMenuItem.cs" />
     <Compile Include="Menu\100_Understanding\110_ProblemInstanceMenuItem.cs" />
-    <Compile Include="OptimizationExpertSystem.cs">
+    <Compile Include="OptimizationKnowledgeCenter.cs">
       <SubType>Form</SubType>
     </Compile>
-    <Compile Include="OptimizationExpertSystem.Designer.cs">
-      <DependentUpon>OptimizationExpertSystem.cs</DependentUpon>
+    <Compile Include="OptimizationKnowledgeCenter.Designer.cs">
+      <DependentUpon>OptimizationKnowledgeCenter.cs</DependentUpon>
     </Compile>
     <Compile Include="Plugin.cs" />
-    <Compile Include="SolverView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="SolverView.Designer.cs">
+    <Compile Include="Views\SolverView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\SolverView.Designer.cs">
       <DependentUpon>SolverView.cs</DependentUpon>
     </Compile>
-    <Compile Include="UnderstandingProblemInstanceView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="UnderstandingProblemInstanceView.Designer.cs">
+    <Compile Include="Views\UnderstandingProblemInstanceView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\UnderstandingProblemInstanceView.Designer.cs">
       <DependentUpon>UnderstandingProblemInstanceView.cs</DependentUpon>
     </Compile>
-    <Compile Include="UnderstandingSolutionsView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="UnderstandingSolutionsView.Designer.cs">
+    <Compile Include="Views\UnderstandingSolutionsView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\UnderstandingSolutionsView.Designer.cs">
       <DependentUpon>UnderstandingSolutionsView.cs</DependentUpon>
     </Compile>
-    <Compile Include="Views\ExpertSystemViewBase.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Views\ExpertSystemViewBase.Designer.cs">
-      <DependentUpon>ExpertSystemViewBase.cs</DependentUpon>
+    <Compile Include="Views\KnowledgeCenterViewBase.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\KnowledgeCenterViewBase.Designer.cs">
+      <DependentUpon>KnowledgeCenterViewBase.cs</DependentUpon>
     </Compile>
     <None Include="Properties\AssemblyInfo.cs.frame" />
@@ -269,26 +279,30 @@
   </ItemGroup>
   <ItemGroup>
-    <EmbeddedResource Include="ExpertSystemView.resx">
-      <DependentUpon>ExpertSystemView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="KnowledgeBaseView.resx">
+    <EmbeddedResource Include="Docking\AlgorithmControlForm.resx">
+      <DependentUpon>AlgorithmControlForm.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\KnowledgeCenterAllinOneView.resx">
+      <DependentUpon>KnowledgeCenterAllinOneView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\KnowledgeBaseView.resx">
       <DependentUpon>KnowledgeBaseView.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="OptimizationExpertSystem.resx">
-      <DependentUpon>OptimizationExpertSystem.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="SolverView.resx">
+    <EmbeddedResource Include="OptimizationKnowledgeCenter.resx">
+      <DependentUpon>OptimizationKnowledgeCenter.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\SolverView.resx">
       <DependentUpon>SolverView.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="UnderstandingProblemInstanceView.resx">
+    <EmbeddedResource Include="Views\UnderstandingProblemInstanceView.resx">
       <DependentUpon>UnderstandingProblemInstanceView.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="UnderstandingSolutionsView.resx">
+    <EmbeddedResource Include="Views\UnderstandingSolutionsView.resx">
       <DependentUpon>UnderstandingSolutionsView.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="Views\ExpertSystemViewBase.resx">
-      <DependentUpon>ExpertSystemViewBase.cs</DependentUpon>
-    </EmbeddedResource>
-  </ItemGroup>
+    <EmbeddedResource Include="Views\KnowledgeCenterViewBase.resx">
+      <DependentUpon>KnowledgeCenterViewBase.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Interfaces/IOptimizationExpertSystemUi.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Interfaces/IOptimizationExpertSystemUi.cs	(revision 13721)
+++ 	(revision )
@@ -1,24 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.OptimizationExpertSystem {
-  public interface IOptimizationExpertSystemUi { }
-}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Interfaces/IOptimizationKnowledgeCenterUi.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Interfaces/IOptimizationKnowledgeCenterUi.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Interfaces/IOptimizationKnowledgeCenterUi.cs	(revision 13722)
@@ -0,0 +1,24 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.OptimizationExpertSystem {
+  public interface IOptimizationKnowledgeCenterUi { }
+}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/KnowledgeBaseView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/KnowledgeBaseView.Designer.cs	(revision 13721)
+++ 	(revision )
@@ -1,75 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.OptimizationExpertSystem {
-  partial class KnowledgeBaseView {
-    /// <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.rldView = new HeuristicLab.Optimization.Views.RunCollectionRLDView();
-      this.SuspendLayout();
-      // 
-      // rldView
-      // 
-      this.rldView.Caption = "Run-length Distribution View";
-      this.rldView.Content = null;
-      this.rldView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.rldView.Location = new System.Drawing.Point(0, 0);
-      this.rldView.Name = "rldView";
-      this.rldView.ReadOnly = false;
-      this.rldView.Size = new System.Drawing.Size(700, 380);
-      this.rldView.TabIndex = 0;
-      // 
-      // KnowledgeBaseView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.rldView);
-      this.Name = "KnowledgeBaseView";
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private Optimization.Views.RunCollectionRLDView rldView;
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/KnowledgeBaseView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/KnowledgeBaseView.cs	(revision 13721)
+++ 	(revision )
@@ -1,39 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.MainForm;
-using HeuristicLab.OptimizationExpertSystem.Common;
-
-namespace HeuristicLab.OptimizationExpertSystem {
-  [View("Knowledge Base View")]
-  [Content(typeof(ExpertSystem), IsDefaultView = false)]
-  public partial class KnowledgeBaseView : ExpertSystemViewBase {
-    public KnowledgeBaseView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) rldView.Content = null;
-      else rldView.Content = Content.KnowledgeBase;
-    }
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/KnowledgeBaseView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/KnowledgeBaseView.resx	(revision 13721)
+++ 	(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/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Menu/900_Tools/990_ShowAllInOneViewMenuItem.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Menu/900_Tools/990_ShowAllInOneViewMenuItem.cs	(revision 13721)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Menu/900_Tools/990_ShowAllInOneViewMenuItem.cs	(revision 13722)
@@ -25,5 +25,5 @@
   internal class ShowAllInOneViewMenuItem : MenuItemBase {
     public override void Execute() {
-      MainForm.ShowContent(MainForm.ExpertSystem, typeof(ExpertSystemView));
+      MainForm.ShowContent(MainForm.ExpertSystem, typeof(KnowledgeCenterAllinOneView));
     }
 
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Menu/MenuItemBase.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Menu/MenuItemBase.cs	(revision 13721)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Menu/MenuItemBase.cs	(revision 13722)
@@ -23,7 +23,7 @@
 
 namespace HeuristicLab.OptimizationExpertSystem.Menu {
-  internal abstract class MenuItemBase : MenuItem, IOptimizationExpertSystemUi {
-    public OptimizationExpertSystem MainForm {
-      get { return (OptimizationExpertSystem)HeuristicLab.MainForm.MainFormManager.MainForm; }
+  internal abstract class MenuItemBase : MenuItem, IOptimizationKnowledgeCenterUi {
+    public OptimizationKnowledgeCenter MainForm {
+      get { return (OptimizationKnowledgeCenter)HeuristicLab.MainForm.MainFormManager.MainForm; }
     }
   }
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationExpertSystem.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationExpertSystem.Designer.cs	(revision 13721)
+++ 	(revision )
@@ -1,44 +1,0 @@
-﻿namespace HeuristicLab.OptimizationExpertSystem {
-  partial class OptimizationExpertSystem {
-    /// <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() {
-      this.SuspendLayout();
-      // 
-      // OptimizationExpertSystem
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.ClientSize = new System.Drawing.Size(624, 412);
-      this.Name = "OptimizationExpertSystem";
-      this.Text = "Optimization Knowledge Center (OKC)";
-      this.Title = "Optimization Knowledge Center (OKC)";
-      this.Load += new System.EventHandler(this.OptimizationExpertSystem_Load);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationExpertSystem.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationExpertSystem.cs	(revision 13721)
+++ 	(revision )
@@ -1,87 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.MainForm;
-using HeuristicLab.MainForm.WindowsForms;
-using HeuristicLab.OptimizationExpertSystem.Common;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.OptimizationExpertSystem {
-  public partial class OptimizationExpertSystem : DockingMainForm {
-    private ToolStripProgressBar progressBar;
-    private ToolStripLabel progressLabel;
-
-    public ExpertSystem ExpertSystem { get; private set; }
-    
-    public OptimizationExpertSystem(Type userInterfaceType) : base(userInterfaceType) {
-      InitializeComponent();
-      ExpertSystem = new ExpertSystem();
-      ExpertSystem.DownloadStarted += ExpertSystemOnDownloadStarted;
-      ShowContentInViewHost = false;
-    }
-
-    private void ExpertSystemOnDownloadStarted(object sender, EventArgs<IProgress> e) {
-      e.Value.ProgressStateChanged += OnProgressStateChanged;
-      e.Value.ProgressValueChanged += OnProgressValueChanged;
-      e.Value.StatusChanged += OnProgressStatusChanged;
-      progressBar.Value = progressBar.Minimum;
-      progressLabel.Text = string.Empty;
-      progressBar.Visible = true;
-      progressLabel.Visible = true;
-    }
-
-    private void OnProgressStateChanged(object sender, EventArgs e) {
-      var progress = (IProgress)sender;
-      if (progress.ProgressState == ProgressState.Canceled
-          || progress.ProgressState == ProgressState.Finished) {
-        progress.ProgressStateChanged -= OnProgressStateChanged;
-        progress.ProgressValueChanged -= OnProgressValueChanged;
-        progress.StatusChanged -= OnProgressStatusChanged;
-        progressBar.Visible = false;
-        progressLabel.Visible = false;
-      }
-    }
-
-    private void OnProgressValueChanged(object sender, EventArgs e) {
-      var progress = (IProgress)sender;
-      progressBar.Value = Math.Max(progressBar.Minimum, Math.Min(progressBar.Maximum, (int)(progress.ProgressValue * 100)));
-    }
-
-    private void OnProgressStatusChanged(object sender, EventArgs e) {
-      var progress = (IProgress)sender;
-      progressLabel.Text = progress.Status.Replace(Environment.NewLine, "   ");
-    }
-
-    protected override void AdditionalCreationOfGuiElements() {
-      base.AdditionalCreationOfGuiElements();
-      progressBar = new ToolStripProgressBar();
-      statusStrip.Items.Add(progressBar);
-      progressLabel = new ToolStripLabel();
-      statusStrip.Items.Add(progressLabel);
-    }
-
-    private void OptimizationExpertSystem_Load(object sender, EventArgs e) {
-      ShowContent(ExpertSystem.Problem);
-    }
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationExpertSystem.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationExpertSystem.resx	(revision 13721)
+++ 	(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/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationKnowledgeCenter.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationKnowledgeCenter.Designer.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationKnowledgeCenter.Designer.cs	(revision 13722)
@@ -0,0 +1,44 @@
+﻿namespace HeuristicLab.OptimizationExpertSystem {
+  partial class OptimizationKnowledgeCenter {
+    /// <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() {
+      this.SuspendLayout();
+      // 
+      // OptimizationExpertSystem
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(624, 412);
+      this.Name = "OptimizationExpertSystem";
+      this.Text = "Optimization Knowledge Center (OKC)";
+      this.Title = "Optimization Knowledge Center (OKC)";
+      this.Load += new System.EventHandler(this.OptimizationExpertSystem_Load);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationKnowledgeCenter.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationKnowledgeCenter.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationKnowledgeCenter.cs	(revision 13722)
@@ -0,0 +1,87 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.OptimizationExpertSystem.Common;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.OptimizationExpertSystem {
+  public partial class OptimizationKnowledgeCenter : DockingMainForm {
+    private ToolStripProgressBar progressBar;
+    private ToolStripLabel progressLabel;
+
+    public KnowledgeCenter ExpertSystem { get; private set; }
+    
+    public OptimizationKnowledgeCenter(Type userInterfaceType) : base(userInterfaceType) {
+      InitializeComponent();
+      ExpertSystem = new KnowledgeCenter();
+      ExpertSystem.DownloadStarted += ExpertSystemOnDownloadStarted;
+      ShowContentInViewHost = false;
+    }
+
+    private void ExpertSystemOnDownloadStarted(object sender, EventArgs<IProgress> e) {
+      e.Value.ProgressStateChanged += OnProgressStateChanged;
+      e.Value.ProgressValueChanged += OnProgressValueChanged;
+      e.Value.StatusChanged += OnProgressStatusChanged;
+      progressBar.Value = progressBar.Minimum;
+      progressLabel.Text = string.Empty;
+      progressBar.Visible = true;
+      progressLabel.Visible = true;
+    }
+
+    private void OnProgressStateChanged(object sender, EventArgs e) {
+      var progress = (IProgress)sender;
+      if (progress.ProgressState == ProgressState.Canceled
+          || progress.ProgressState == ProgressState.Finished) {
+        progress.ProgressStateChanged -= OnProgressStateChanged;
+        progress.ProgressValueChanged -= OnProgressValueChanged;
+        progress.StatusChanged -= OnProgressStatusChanged;
+        progressBar.Visible = false;
+        progressLabel.Visible = false;
+      }
+    }
+
+    private void OnProgressValueChanged(object sender, EventArgs e) {
+      var progress = (IProgress)sender;
+      progressBar.Value = Math.Max(progressBar.Minimum, Math.Min(progressBar.Maximum, (int)(progress.ProgressValue * 100)));
+    }
+
+    private void OnProgressStatusChanged(object sender, EventArgs e) {
+      var progress = (IProgress)sender;
+      progressLabel.Text = progress.Status.Replace(Environment.NewLine, "   ");
+    }
+
+    protected override void AdditionalCreationOfGuiElements() {
+      base.AdditionalCreationOfGuiElements();
+      progressBar = new ToolStripProgressBar();
+      statusStrip.Items.Add(progressBar);
+      progressLabel = new ToolStripLabel();
+      statusStrip.Items.Add(progressLabel);
+    }
+
+    private void OptimizationExpertSystem_Load(object sender, EventArgs e) {
+      ShowContent(ExpertSystem.Problem);
+    }
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationKnowledgeCenter.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationKnowledgeCenter.resx	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/OptimizationKnowledgeCenter.resx	(revision 13722)
@@ -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/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Plugin.cs.frame
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Plugin.cs.frame	(revision 13721)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Plugin.cs.frame	(revision 13722)
@@ -46,5 +46,5 @@
   internal class HeuristicLabOptimizationKnowledgeCenterApplication : ApplicationBase {
     public override void Run(ICommandLineArgument[] args) {
-      HeuristicLab.MainForm.WindowsForms.MainForm mainForm = new OptimizationExpertSystem(typeof(IOptimizationExpertSystemUi));
+      HeuristicLab.MainForm.WindowsForms.MainForm mainForm = new OptimizationKnowledgeCenter(typeof(IOptimizationKnowledgeCenterUi));
       
       ClientInformation.InitializeAsync();
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/SolverView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/SolverView.Designer.cs	(revision 13721)
+++ 	(revision )
@@ -1,319 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.OptimizationExpertSystem {
-  partial class SolverView {
-    /// <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.seedingStrategyPanel = new System.Windows.Forms.Panel();
-      this.solverTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.resultsTabPage = new System.Windows.Forms.TabPage();
-      this.solverResultsView = new HeuristicLab.Optimization.Views.ResultCollectionView();
-      this.solutionSeedingTabPage = new System.Windows.Forms.TabPage();
-      this.parametersTabPage = new System.Windows.Forms.TabPage();
-      this.solverParametersView = new HeuristicLab.Core.Views.ParameterCollectionView();
-      this.operatorGraphTabPage = new System.Windows.Forms.TabPage();
-      this.operatorGraphViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.algorithmStartButton = new System.Windows.Forms.Button();
-      this.label1 = new System.Windows.Forms.Label();
-      this.evaluationsLimitabel = new System.Windows.Forms.Label();
-      this.algorithmSuggestionLabel = new System.Windows.Forms.Label();
-      this.maxEvaluationsTextBox = new System.Windows.Forms.TextBox();
-      this.suggestedInstancesComboBox = new System.Windows.Forms.ComboBox();
-      this.algorithmCloneButton = new System.Windows.Forms.Button();
-      this.runsTabPage = new System.Windows.Forms.TabPage();
-      this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
-      this.solverTabControl.SuspendLayout();
-      this.resultsTabPage.SuspendLayout();
-      this.parametersTabPage.SuspendLayout();
-      this.operatorGraphTabPage.SuspendLayout();
-      this.runsTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // seedingStrategyPanel
-      // 
-      this.seedingStrategyPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.seedingStrategyPanel.Location = new System.Drawing.Point(108, 29);
-      this.seedingStrategyPanel.Name = "seedingStrategyPanel";
-      this.seedingStrategyPanel.Size = new System.Drawing.Size(741, 21);
-      this.seedingStrategyPanel.TabIndex = 12;
-      // 
-      // solverTabControl
-      // 
-      this.solverTabControl.AllowDrop = true;
-      this.solverTabControl.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.solverTabControl.Controls.Add(this.resultsTabPage);
-      this.solverTabControl.Controls.Add(this.runsTabPage);
-      this.solverTabControl.Controls.Add(this.solutionSeedingTabPage);
-      this.solverTabControl.Controls.Add(this.parametersTabPage);
-      this.solverTabControl.Controls.Add(this.operatorGraphTabPage);
-      this.solverTabControl.Location = new System.Drawing.Point(0, 84);
-      this.solverTabControl.Name = "solverTabControl";
-      this.solverTabControl.SelectedIndex = 0;
-      this.solverTabControl.Size = new System.Drawing.Size(849, 480);
-      this.solverTabControl.TabIndex = 11;
-      // 
-      // resultsTabPage
-      // 
-      this.resultsTabPage.Controls.Add(this.solverResultsView);
-      this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.resultsTabPage.Name = "resultsTabPage";
-      this.resultsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.resultsTabPage.Size = new System.Drawing.Size(841, 454);
-      this.resultsTabPage.TabIndex = 2;
-      this.resultsTabPage.Text = "Results";
-      this.resultsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solverResultsView
-      // 
-      this.solverResultsView.Caption = "ResultCollection View";
-      this.solverResultsView.Content = null;
-      this.solverResultsView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solverResultsView.Location = new System.Drawing.Point(3, 3);
-      this.solverResultsView.Name = "solverResultsView";
-      this.solverResultsView.ReadOnly = true;
-      this.solverResultsView.ShowDetails = true;
-      this.solverResultsView.Size = new System.Drawing.Size(835, 448);
-      this.solverResultsView.TabIndex = 1;
-      // 
-      // solutionSeedingTabPage
-      // 
-      this.solutionSeedingTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionSeedingTabPage.Name = "solutionSeedingTabPage";
-      this.solutionSeedingTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionSeedingTabPage.Size = new System.Drawing.Size(841, 454);
-      this.solutionSeedingTabPage.TabIndex = 1;
-      this.solutionSeedingTabPage.Text = "Seeding Pool";
-      this.solutionSeedingTabPage.UseVisualStyleBackColor = true;
-      // 
-      // parametersTabPage
-      // 
-      this.parametersTabPage.Controls.Add(this.solverParametersView);
-      this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
-      this.parametersTabPage.Name = "parametersTabPage";
-      this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.parametersTabPage.Size = new System.Drawing.Size(841, 454);
-      this.parametersTabPage.TabIndex = 0;
-      this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solverParametersView
-      // 
-      this.solverParametersView.AllowEditingOfHiddenParameters = true;
-      this.solverParametersView.Caption = "ParameterCollection View";
-      this.solverParametersView.Content = null;
-      this.solverParametersView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solverParametersView.Location = new System.Drawing.Point(3, 3);
-      this.solverParametersView.Name = "solverParametersView";
-      this.solverParametersView.ReadOnly = true;
-      this.solverParametersView.ShowDetails = true;
-      this.solverParametersView.Size = new System.Drawing.Size(835, 448);
-      this.solverParametersView.TabIndex = 0;
-      // 
-      // operatorGraphTabPage
-      // 
-      this.operatorGraphTabPage.Controls.Add(this.operatorGraphViewHost);
-      this.operatorGraphTabPage.Location = new System.Drawing.Point(4, 22);
-      this.operatorGraphTabPage.Name = "operatorGraphTabPage";
-      this.operatorGraphTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.operatorGraphTabPage.Size = new System.Drawing.Size(841, 454);
-      this.operatorGraphTabPage.TabIndex = 3;
-      this.operatorGraphTabPage.Text = "Operator Graph";
-      this.operatorGraphTabPage.UseVisualStyleBackColor = true;
-      // 
-      // operatorGraphViewHost
-      // 
-      this.operatorGraphViewHost.Caption = "View";
-      this.operatorGraphViewHost.Content = null;
-      this.operatorGraphViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorGraphViewHost.Enabled = false;
-      this.operatorGraphViewHost.Location = new System.Drawing.Point(3, 3);
-      this.operatorGraphViewHost.Name = "operatorGraphViewHost";
-      this.operatorGraphViewHost.ReadOnly = true;
-      this.operatorGraphViewHost.Size = new System.Drawing.Size(835, 448);
-      this.operatorGraphViewHost.TabIndex = 0;
-      this.operatorGraphViewHost.ViewsLabelVisible = true;
-      this.operatorGraphViewHost.ViewType = null;
-      // 
-      // algorithmStartButton
-      // 
-      this.algorithmStartButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.algorithmStartButton.Location = new System.Drawing.Point(791, 55);
-      this.algorithmStartButton.Name = "algorithmStartButton";
-      this.algorithmStartButton.Size = new System.Drawing.Size(26, 23);
-      this.algorithmStartButton.TabIndex = 10;
-      this.algorithmStartButton.Text = "Start";
-      this.algorithmStartButton.UseVisualStyleBackColor = true;
-      this.algorithmStartButton.Click += new System.EventHandler(this.AlgorithmStartButtonOnClick);
-      // 
-      // label1
-      // 
-      this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(3, 33);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(91, 13);
-      this.label1.TabIndex = 8;
-      this.label1.Text = "Seeding Strategy:";
-      // 
-      // evaluationsLimitabel
-      // 
-      this.evaluationsLimitabel.AutoSize = true;
-      this.evaluationsLimitabel.Location = new System.Drawing.Point(3, 6);
-      this.evaluationsLimitabel.Name = "evaluationsLimitabel";
-      this.evaluationsLimitabel.Size = new System.Drawing.Size(66, 13);
-      this.evaluationsLimitabel.TabIndex = 13;
-      this.evaluationsLimitabel.Text = "Budget (FE):";
-      // 
-      // algorithmSuggestionLabel
-      // 
-      this.algorithmSuggestionLabel.AutoSize = true;
-      this.algorithmSuggestionLabel.Location = new System.Drawing.Point(3, 59);
-      this.algorithmSuggestionLabel.Name = "algorithmSuggestionLabel";
-      this.algorithmSuggestionLabel.Size = new System.Drawing.Size(99, 13);
-      this.algorithmSuggestionLabel.TabIndex = 9;
-      this.algorithmSuggestionLabel.Text = "Suggested Solvers:";
-      // 
-      // maxEvaluationsTextBox
-      // 
-      this.maxEvaluationsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.maxEvaluationsTextBox.Location = new System.Drawing.Point(108, 3);
-      this.maxEvaluationsTextBox.Name = "maxEvaluationsTextBox";
-      this.maxEvaluationsTextBox.Size = new System.Drawing.Size(741, 20);
-      this.maxEvaluationsTextBox.TabIndex = 14;
-      this.maxEvaluationsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.MaxEvaluationsTextBoxOnValidating);
-      // 
-      // suggestedInstancesComboBox
-      // 
-      this.suggestedInstancesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.suggestedInstancesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.suggestedInstancesComboBox.FormattingEnabled = true;
-      this.suggestedInstancesComboBox.Location = new System.Drawing.Point(108, 56);
-      this.suggestedInstancesComboBox.Name = "suggestedInstancesComboBox";
-      this.suggestedInstancesComboBox.Size = new System.Drawing.Size(677, 21);
-      this.suggestedInstancesComboBox.TabIndex = 7;
-      this.suggestedInstancesComboBox.SelectedIndexChanged += new System.EventHandler(this.SuggestedInstancesComboBoxOnSelectedIndexChanged);
-      // 
-      // algorithmCloneButton
-      // 
-      this.algorithmCloneButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.algorithmCloneButton.Location = new System.Drawing.Point(823, 56);
-      this.algorithmCloneButton.Name = "algorithmCloneButton";
-      this.algorithmCloneButton.Size = new System.Drawing.Size(26, 23);
-      this.algorithmCloneButton.TabIndex = 15;
-      this.algorithmCloneButton.Text = "Clone";
-      this.algorithmCloneButton.UseVisualStyleBackColor = true;
-      this.algorithmCloneButton.Click += new System.EventHandler(this.AlgorithmCloneButtonOnClick);
-      // 
-      // runsTabPage
-      // 
-      this.runsTabPage.Controls.Add(this.runsView);
-      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(841, 454);
-      this.runsTabPage.TabIndex = 4;
-      this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // runsView
-      // 
-      this.runsView.Caption = "RunCollection View";
-      this.runsView.Content = null;
-      this.runsView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.runsView.Location = new System.Drawing.Point(3, 3);
-      this.runsView.Name = "runsView";
-      this.runsView.ReadOnly = false;
-      this.runsView.Size = new System.Drawing.Size(835, 448);
-      this.runsView.TabIndex = 0;
-      // 
-      // SolverView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.algorithmCloneButton);
-      this.Controls.Add(this.seedingStrategyPanel);
-      this.Controls.Add(this.solverTabControl);
-      this.Controls.Add(this.algorithmStartButton);
-      this.Controls.Add(this.label1);
-      this.Controls.Add(this.evaluationsLimitabel);
-      this.Controls.Add(this.algorithmSuggestionLabel);
-      this.Controls.Add(this.maxEvaluationsTextBox);
-      this.Controls.Add(this.suggestedInstancesComboBox);
-      this.Name = "SolverView";
-      this.Size = new System.Drawing.Size(849, 564);
-      this.solverTabControl.ResumeLayout(false);
-      this.resultsTabPage.ResumeLayout(false);
-      this.parametersTabPage.ResumeLayout(false);
-      this.operatorGraphTabPage.ResumeLayout(false);
-      this.runsTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Panel seedingStrategyPanel;
-    private MainForm.WindowsForms.DragOverTabControl solverTabControl;
-    private System.Windows.Forms.TabPage resultsTabPage;
-    private Optimization.Views.ResultCollectionView solverResultsView;
-    private System.Windows.Forms.TabPage solutionSeedingTabPage;
-    private System.Windows.Forms.TabPage parametersTabPage;
-    private Core.Views.ParameterCollectionView solverParametersView;
-    private System.Windows.Forms.TabPage operatorGraphTabPage;
-    private MainForm.WindowsForms.ViewHost operatorGraphViewHost;
-    private System.Windows.Forms.Button algorithmStartButton;
-    private System.Windows.Forms.Label label1;
-    private System.Windows.Forms.Label evaluationsLimitabel;
-    private System.Windows.Forms.Label algorithmSuggestionLabel;
-    private System.Windows.Forms.TextBox maxEvaluationsTextBox;
-    private System.Windows.Forms.ComboBox suggestedInstancesComboBox;
-    private System.Windows.Forms.Button algorithmCloneButton;
-    private System.Windows.Forms.TabPage runsTabPage;
-    private Optimization.Views.RunCollectionView runsView;
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/SolverView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/SolverView.cs	(revision 13721)
+++ 	(revision )
@@ -1,163 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.Resources;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.Data.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.Optimization;
-using HeuristicLab.OptimizationExpertSystem.Common;
-using System;
-using System.ComponentModel;
-using System.Windows.Forms;
-
-namespace HeuristicLab.OptimizationExpertSystem {
-  [View("Solver View")]
-  [Content(typeof(ExpertSystem), IsDefaultView = false)]
-  public partial class SolverView : ExpertSystemViewBase {
-    private EnumValueView<SeedingStrategyTypes> seedingStrategyView;
-    private CheckedItemListView<IScope> seedingSolutionsView;
-    protected virtual bool SuppressEvents { get; set; }
-
-    public SolverView() {
-      InitializeComponent();
-      algorithmStartButton.Text = string.Empty;
-      algorithmStartButton.Image = VSImageLibrary.Play;
-      algorithmCloneButton.Text = string.Empty;
-      algorithmCloneButton.Image = VSImageLibrary.Clone;
-      seedingStrategyView = new EnumValueView<SeedingStrategyTypes>() {
-        Dock = DockStyle.Fill
-      };
-      seedingSolutionsView = new CheckedItemListView<IScope>() {
-        Dock = DockStyle.Fill
-      };
-      seedingStrategyPanel.Controls.Add(seedingStrategyView);
-      solutionSeedingTabPage.Controls.Add(seedingSolutionsView);
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      SuppressEvents = true;
-      try {
-        if (Content == null) {
-          maxEvaluationsTextBox.Text = string.Empty;
-          solverParametersView.Content = null;
-          solverResultsView.Content = null;
-          runsView.Content = null;
-          seedingStrategyView.Content = null;
-          seedingSolutionsView.Content = null;
-        } else {
-          maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString();
-          runsView.Content = Content.Runs;
-          solverResultsView.Content = Content.CurrentResult;
-          seedingStrategyView.Content = Content.SeedingStrategy;
-          seedingSolutionsView.Content = Content.SolutionSeedingPool;
-        }
-      } finally { SuppressEvents = false; }
-      UpdateSuggestedInstancesCombobox();
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      maxEvaluationsTextBox.Enabled = Content != null && !ReadOnly && !Locked;
-      suggestedInstancesComboBox.Enabled = Content != null && !ReadOnly && !Locked;
-      algorithmStartButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
-      algorithmCloneButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
-      runsView.Enabled = Content != null;
-    }
-
-    protected override void OnPropertyChanged(string propertyName) {
-      base.OnPropertyChanged(propertyName);
-      SuppressEvents = true;
-      try {
-        switch (propertyName) {
-          case "MaximumEvaluations": maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString(); break;
-          case "CurrentResult": solverResultsView.Content = Content.CurrentResult; break;
-        }
-      } finally { SuppressEvents = false; }
-      SetEnabledStateOfControls();
-    }
-
-    protected override void OnSuggestedInstancesChanged() {
-      base.OnSuggestedInstancesChanged();
-      UpdateSuggestedInstancesCombobox();
-    }
-
-    private void UpdateSuggestedInstancesCombobox() {
-      var prevSelection = (IAlgorithm)suggestedInstancesComboBox.SelectedItem;
-      var prevNewIndex = -1;
-      suggestedInstancesComboBox.Items.Clear();
-      if (Content == null) return;
-
-      for (var i = 0; i < Content.SuggestedInstances.Count; i++) {
-        suggestedInstancesComboBox.Items.Add(Content.SuggestedInstances[i]);
-        if (prevSelection == null || Content.SuggestedInstances[i].Name == prevSelection.Name)
-          prevNewIndex = prevSelection == null ? 0 : i;
-      }
-      if (prevNewIndex >= 0) {
-        suggestedInstancesComboBox.SelectedIndex = prevNewIndex;
-      }
-    }
-
-    private void MaxEvaluationsTextBoxOnValidating(object sender, CancelEventArgs e) {
-      if (SuppressEvents) return;
-      if (InvokeRequired) {
-        Invoke((Action<object, CancelEventArgs>)MaxEvaluationsTextBoxOnValidating, sender, e);
-        return;
-      }
-      int value;
-      if (!int.TryParse(maxEvaluationsTextBox.Text, out value)) {
-        e.Cancel = !maxEvaluationsTextBox.ReadOnly && maxEvaluationsTextBox.Enabled;
-        //errorProvider.SetError(maxEvaluationsTextBox, "Please enter a valid integer number.");
-      } else {
-        Content.MaximumEvaluations = value;
-        e.Cancel = false;
-        //errorProvider.SetError(maxEvaluationsTextBox, null);
-      }
-    }
-
-    private void AlgorithmStartButtonOnClick(object sender, EventArgs e) {
-      if (suggestedInstancesComboBox.SelectedIndex >= 0)
-        Content.StartAlgorithmAsync(suggestedInstancesComboBox.SelectedIndex);
-    }
-
-    private void AlgorithmCloneButtonOnClick(object sender, EventArgs e) {
-      if (suggestedInstancesComboBox.SelectedIndex >= 0)
-        MainForm.ShowContent((IAlgorithm)Content.SuggestedInstances[suggestedInstancesComboBox.SelectedIndex].Clone());
-    }
-
-    private void SuggestedInstancesComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SuggestedInstancesComboBoxOnSelectedIndexChanged, sender, e); return; }
-      if (suggestedInstancesComboBox.SelectedIndex >= 0) {
-        var alg = Content.SuggestedInstances[suggestedInstancesComboBox.SelectedIndex];
-        solverParametersView.Content = alg.Parameters;
-        var engineAlg = alg as EngineAlgorithm;
-        if (engineAlg != null) operatorGraphViewHost.Content = engineAlg.OperatorGraph;
-        else operatorGraphViewHost.Content = new Data.StringValue("Algorithm is not modeled as an operator graph.");
-      } else {
-        solverParametersView.Content = null;
-        operatorGraphViewHost.Content = null;
-      }
-      SetEnabledStateOfControls();
-    }
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/SolverView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/SolverView.resx	(revision 13721)
+++ 	(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: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingProblemInstanceView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingProblemInstanceView.Designer.cs	(revision 13721)
+++ 	(revision )
@@ -1,197 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.OptimizationExpertSystem {
-  partial class UnderstandingProblemInstanceView {
-    /// <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.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();
-      this.projectionLabel = new System.Windows.Forms.Label();
-      this.projectionComboBox = new System.Windows.Forms.ComboBox();
-      this.problemInstancesTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.mapTabPage = new System.Windows.Forms.TabPage();
-      this.instanceMapChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
-      this.instancesTabPage = new System.Windows.Forms.TabPage();
-      this.problemInstancesView = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.problemInstancesTabControl.SuspendLayout();
-      this.mapTabPage.SuspendLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).BeginInit();
-      this.instancesTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // projectionLabel
-      // 
-      this.projectionLabel.AutoSize = true;
-      this.projectionLabel.Location = new System.Drawing.Point(6, 9);
-      this.projectionLabel.Name = "projectionLabel";
-      this.projectionLabel.Size = new System.Drawing.Size(57, 13);
-      this.projectionLabel.TabIndex = 10;
-      this.projectionLabel.Text = "Projection:";
-      // 
-      // projectionComboBox
-      // 
-      this.projectionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.projectionComboBox.FormattingEnabled = true;
-      this.projectionComboBox.Location = new System.Drawing.Point(69, 6);
-      this.projectionComboBox.Name = "projectionComboBox";
-      this.projectionComboBox.Size = new System.Drawing.Size(158, 21);
-      this.projectionComboBox.TabIndex = 9;
-      this.projectionComboBox.SelectedIndexChanged += new System.EventHandler(this.ProjectionComboBoxOnSelectedIndexChanged);
-      // 
-      // problemInstancesTabControl
-      // 
-      this.problemInstancesTabControl.AllowDrop = true;
-      this.problemInstancesTabControl.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.problemInstancesTabControl.Controls.Add(this.mapTabPage);
-      this.problemInstancesTabControl.Controls.Add(this.instancesTabPage);
-      this.problemInstancesTabControl.Location = new System.Drawing.Point(0, 0);
-      this.problemInstancesTabControl.Name = "problemInstancesTabControl";
-      this.problemInstancesTabControl.SelectedIndex = 0;
-      this.problemInstancesTabControl.Size = new System.Drawing.Size(1000, 760);
-      this.problemInstancesTabControl.TabIndex = 8;
-      // 
-      // mapTabPage
-      // 
-      this.mapTabPage.Controls.Add(this.projectionLabel);
-      this.mapTabPage.Controls.Add(this.instanceMapChart);
-      this.mapTabPage.Controls.Add(this.projectionComboBox);
-      this.mapTabPage.Location = new System.Drawing.Point(4, 22);
-      this.mapTabPage.Name = "mapTabPage";
-      this.mapTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.mapTabPage.Size = new System.Drawing.Size(992, 734);
-      this.mapTabPage.TabIndex = 1;
-      this.mapTabPage.Text = "Map";
-      this.mapTabPage.UseVisualStyleBackColor = true;
-      // 
-      // instanceMapChart
-      // 
-      this.instanceMapChart.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.AxisX.MajorGrid.LineColor = System.Drawing.Color.LightGray;
-      chartArea1.AxisX.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
-      chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.LightGray;
-      chartArea1.AxisY.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
-      chartArea1.Name = "Default";
-      this.instanceMapChart.ChartAreas.Add(chartArea1);
-      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
-      legend1.Enabled = false;
-      legend1.Name = "Legend";
-      this.instanceMapChart.Legends.Add(legend1);
-      this.instanceMapChart.Location = new System.Drawing.Point(3, 33);
-      this.instanceMapChart.Name = "instanceMapChart";
-      series1.ChartArea = "Default";
-      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
-      series1.Legend = "Legend";
-      series1.MarkerSize = 10;
-      series1.Name = "InstancesSeries";
-      series2.ChartArea = "Default";
-      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
-      series2.Legend = "Legend";
-      series2.MarkerColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
-      series2.MarkerSize = 15;
-      series2.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
-      series2.Name = "CurrentInstanceSeries";
-      this.instanceMapChart.Series.Add(series1);
-      this.instanceMapChart.Series.Add(series2);
-      this.instanceMapChart.Size = new System.Drawing.Size(986, 698);
-      this.instanceMapChart.TabIndex = 0;
-      // 
-      // instancesTabPage
-      // 
-      this.instancesTabPage.Controls.Add(this.problemInstancesView);
-      this.instancesTabPage.Location = new System.Drawing.Point(4, 22);
-      this.instancesTabPage.Name = "instancesTabPage";
-      this.instancesTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.instancesTabPage.Size = new System.Drawing.Size(1044, 757);
-      this.instancesTabPage.TabIndex = 0;
-      this.instancesTabPage.Text = "Instances";
-      this.instancesTabPage.UseVisualStyleBackColor = true;
-      // 
-      // problemInstancesView
-      // 
-      this.problemInstancesView.Caption = "View";
-      this.problemInstancesView.Content = null;
-      this.problemInstancesView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.problemInstancesView.Enabled = false;
-      this.problemInstancesView.Location = new System.Drawing.Point(3, 3);
-      this.problemInstancesView.Name = "problemInstancesView";
-      this.problemInstancesView.ReadOnly = false;
-      this.problemInstancesView.Size = new System.Drawing.Size(1038, 751);
-      this.problemInstancesView.TabIndex = 0;
-      this.problemInstancesView.ViewsLabelVisible = true;
-      this.problemInstancesView.ViewType = null;
-      // 
-      // UnderstandingProblemInstanceView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.problemInstancesTabControl);
-      this.Name = "UnderstandingProblemInstanceView";
-      this.Size = new System.Drawing.Size(1000, 760);
-      this.Controls.SetChildIndex(this.problemInstancesTabControl, 0);
-      this.problemInstancesTabControl.ResumeLayout(false);
-      this.mapTabPage.ResumeLayout(false);
-      this.mapTabPage.PerformLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).EndInit();
-      this.instancesTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label projectionLabel;
-    private System.Windows.Forms.ComboBox projectionComboBox;
-    private MainForm.WindowsForms.DragOverTabControl problemInstancesTabControl;
-    private System.Windows.Forms.TabPage mapTabPage;
-    private Visualization.ChartControlsExtensions.EnhancedChart instanceMapChart;
-    private System.Windows.Forms.TabPage instancesTabPage;
-    private MainForm.WindowsForms.ViewHost problemInstancesView;
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingProblemInstanceView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingProblemInstanceView.cs	(revision 13721)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.MainForm;
-using HeuristicLab.OptimizationExpertSystem.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text.RegularExpressions;
-using System.Windows.Forms.DataVisualization.Charting;
-
-namespace HeuristicLab.OptimizationExpertSystem {
-  [View("Understanding Problem Instance")]
-  [Content(typeof(ExpertSystem), IsDefaultView = false)]
-  public partial class UnderstandingProblemInstanceView : ExpertSystemViewBase {
-    public UnderstandingProblemInstanceView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        problemInstancesView.Content = null;
-        instanceMapChart.Series["InstancesSeries"].Points.Clear();
-        instanceMapChart.Series["CurrentInstanceSeries"].Points.Clear();
-      } else {
-        problemInstancesView.Content = Content.ProblemInstances;
-        UpdateProjectionComboBox();
-      }
-    }
-
-    #region Content Event Handlers
-    protected override void OnProblemChanged() {
-      base.OnProblemChanged();
-      SetEnabledStateOfControls();
-    }
-
-    protected override void OnProblemInstancesChanged() {
-      base.OnProblemInstancesChanged();
-      if (Content.ProblemInstances.UpdateOfRunsInProgress) return;
-      UpdateProjectionComboBox();
-    }
-
-    protected override void OnDownloadEnded() {
-      base.OnDownloadEnded();
-      UpdateProjectionComboBox();
-    }
-    #endregion
-    
-    public IEnumerable<string> GetProjections() {
-      return Content.ProblemInstances
-        .SelectMany(x => x.Results.Where(y => Regex.IsMatch(y.Key, "^Projection[.].*[.][XY]$")))
-        .Select(x => Regex.Match(x.Key, "Projection[.](?<g>.*)[.][XY]").Groups["g"].Value)
-        .Distinct();
-    }
-
-    public void ProjectProblemInstances(Series instancesSeries, Series currentInstanceSeries, string projection) {
-      instancesSeries.Points.Clear();
-      currentInstanceSeries.Points.Clear();
-
-      foreach (var run in Content.ProblemInstances) {
-        var xKey = "Projection." + projection + ".X";
-        var yKey = "Projection." + projection + ".Y";
-        if (!run.Results.ContainsKey(xKey) || !run.Results.ContainsKey(yKey)
-            || !(run.Results[xKey] is Data.DoubleValue) || !(run.Results[yKey] is Data.DoubleValue)) continue;
-        var x = ((Data.DoubleValue)run.Results[xKey]).Value;
-        var y = ((Data.DoubleValue)run.Results[yKey]).Value;
-        var dataPoint = new DataPoint(x, y) {
-          Label = run.Name
-        };
-        instancesSeries.Points.Add(dataPoint);
-      }
-
-      var curPoint = Content.ProjectCurrentInstance(projection);
-      if (curPoint != null) {
-        var dp = new DataPoint(curPoint.Item1, curPoint.Item2) {
-          Label = Content.Problem.Problem.Name
-        };
-        currentInstanceSeries.Points.Add(dp);
-      }
-    }
-
-    private void ProjectionComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)ProjectionComboBoxOnSelectedIndexChanged, sender, e); return; }
-      if (projectionComboBox.SelectedIndex < 0) return;
-      var projection = (string)projectionComboBox.SelectedItem;
-      var instancesSeries = instanceMapChart.Series["InstancesSeries"];
-      var currentInstanceSeries = instanceMapChart.Series["CurrentInstanceSeries"];
-
-      ProjectProblemInstances(instancesSeries, currentInstanceSeries, projection);
-    }
-
-    private void UpdateProjectionComboBox() {
-      projectionComboBox.Items.Clear();
-      foreach (var str in GetProjections()) {
-        projectionComboBox.Items.Add(str);
-      }
-      if (projectionComboBox.Items.Count > 0)
-        projectionComboBox.SelectedIndex = 0;
-    }
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingProblemInstanceView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingProblemInstanceView.resx	(revision 13721)
+++ 	(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: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingSolutionsView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingSolutionsView.Designer.cs	(revision 13721)
+++ 	(revision )
@@ -1,346 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.OptimizationExpertSystem {
-  partial class UnderstandingSolutionsView {
-    /// <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.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();
-      this.solutionNameLabel = new System.Windows.Forms.Label();
-      this.solutionDiversitySimilarityLabel = new System.Windows.Forms.Label();
-      this.solutionNameComboBox = new System.Windows.Forms.ComboBox();
-      this.similarityComboBox = new System.Windows.Forms.ComboBox();
-      this.solutionsTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.solutionsQualityTabPage = new System.Windows.Forms.TabPage();
-      this.solutionsQualityViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.solutionsLengthScaleTabPage = new System.Windows.Forms.TabPage();
-      this.solutionsLengthScaleViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.solutionsDiversityTabPage = new System.Windows.Forms.TabPage();
-      this.solutionsDiversityViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.solutionsFdcTabPage = new System.Windows.Forms.TabPage();
-      this.fdcBetweenBestCheckBox = new System.Windows.Forms.CheckBox();
-      this.solutionsFdcViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.solutionsNetworkTabPage = new System.Windows.Forms.TabPage();
-      this.solutionsNetworkChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
-      this.solutionsTabControl.SuspendLayout();
-      this.solutionsQualityTabPage.SuspendLayout();
-      this.solutionsLengthScaleTabPage.SuspendLayout();
-      this.solutionsDiversityTabPage.SuspendLayout();
-      this.solutionsFdcTabPage.SuspendLayout();
-      this.solutionsNetworkTabPage.SuspendLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // solutionNameLabel
-      // 
-      this.solutionNameLabel.AutoSize = true;
-      this.solutionNameLabel.Location = new System.Drawing.Point(232, 3);
-      this.solutionNameLabel.Name = "solutionNameLabel";
-      this.solutionNameLabel.Size = new System.Drawing.Size(48, 13);
-      this.solutionNameLabel.TabIndex = 6;
-      this.solutionNameLabel.Text = "Solution:";
-      // 
-      // solutionDiversitySimilarityLabel
-      // 
-      this.solutionDiversitySimilarityLabel.AutoSize = true;
-      this.solutionDiversitySimilarityLabel.Location = new System.Drawing.Point(2, 3);
-      this.solutionDiversitySimilarityLabel.Name = "solutionDiversitySimilarityLabel";
-      this.solutionDiversitySimilarityLabel.Size = new System.Drawing.Size(50, 13);
-      this.solutionDiversitySimilarityLabel.TabIndex = 7;
-      this.solutionDiversitySimilarityLabel.Text = "Similarity:";
-      // 
-      // solutionNameComboBox
-      // 
-      this.solutionNameComboBox.DisplayMember = "ItemName";
-      this.solutionNameComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.solutionNameComboBox.FormattingEnabled = true;
-      this.solutionNameComboBox.Location = new System.Drawing.Point(288, 0);
-      this.solutionNameComboBox.Name = "solutionNameComboBox";
-      this.solutionNameComboBox.Size = new System.Drawing.Size(150, 21);
-      this.solutionNameComboBox.TabIndex = 4;
-      this.solutionNameComboBox.SelectedIndexChanged += new System.EventHandler(this.SolutionNameComboBoxOnSelectedIndexChanged);
-      // 
-      // similarityComboBox
-      // 
-      this.similarityComboBox.DisplayMember = "ItemName";
-      this.similarityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.similarityComboBox.FormattingEnabled = true;
-      this.similarityComboBox.Location = new System.Drawing.Point(58, 0);
-      this.similarityComboBox.Name = "similarityComboBox";
-      this.similarityComboBox.Size = new System.Drawing.Size(150, 21);
-      this.similarityComboBox.TabIndex = 5;
-      this.similarityComboBox.SelectedIndexChanged += new System.EventHandler(this.SimilarityComboBoxOnSelectedIndexChanged);
-      // 
-      // solutionsTabControl
-      // 
-      this.solutionsTabControl.AllowDrop = true;
-      this.solutionsTabControl.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.solutionsTabControl.Controls.Add(this.solutionsQualityTabPage);
-      this.solutionsTabControl.Controls.Add(this.solutionsLengthScaleTabPage);
-      this.solutionsTabControl.Controls.Add(this.solutionsDiversityTabPage);
-      this.solutionsTabControl.Controls.Add(this.solutionsFdcTabPage);
-      this.solutionsTabControl.Controls.Add(this.solutionsNetworkTabPage);
-      this.solutionsTabControl.Location = new System.Drawing.Point(0, 27);
-      this.solutionsTabControl.Name = "solutionsTabControl";
-      this.solutionsTabControl.SelectedIndex = 0;
-      this.solutionsTabControl.Size = new System.Drawing.Size(732, 478);
-      this.solutionsTabControl.TabIndex = 3;
-      // 
-      // solutionsQualityTabPage
-      // 
-      this.solutionsQualityTabPage.Controls.Add(this.solutionsQualityViewHost);
-      this.solutionsQualityTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsQualityTabPage.Name = "solutionsQualityTabPage";
-      this.solutionsQualityTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsQualityTabPage.Size = new System.Drawing.Size(724, 452);
-      this.solutionsQualityTabPage.TabIndex = 1;
-      this.solutionsQualityTabPage.Text = "Quality Analysis";
-      this.solutionsQualityTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solutionsQualityViewHost
-      // 
-      this.solutionsQualityViewHost.Caption = "View";
-      this.solutionsQualityViewHost.Content = null;
-      this.solutionsQualityViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solutionsQualityViewHost.Enabled = false;
-      this.solutionsQualityViewHost.Location = new System.Drawing.Point(3, 3);
-      this.solutionsQualityViewHost.Name = "solutionsQualityViewHost";
-      this.solutionsQualityViewHost.ReadOnly = false;
-      this.solutionsQualityViewHost.Size = new System.Drawing.Size(718, 446);
-      this.solutionsQualityViewHost.TabIndex = 0;
-      this.solutionsQualityViewHost.ViewsLabelVisible = true;
-      this.solutionsQualityViewHost.ViewType = null;
-      // 
-      // solutionsLengthScaleTabPage
-      // 
-      this.solutionsLengthScaleTabPage.Controls.Add(this.solutionsLengthScaleViewHost);
-      this.solutionsLengthScaleTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsLengthScaleTabPage.Name = "solutionsLengthScaleTabPage";
-      this.solutionsLengthScaleTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsLengthScaleTabPage.Size = new System.Drawing.Size(724, 452);
-      this.solutionsLengthScaleTabPage.TabIndex = 3;
-      this.solutionsLengthScaleTabPage.Text = "Length-Scale Analysis";
-      this.solutionsLengthScaleTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solutionsLengthScaleViewHost
-      // 
-      this.solutionsLengthScaleViewHost.Caption = "View";
-      this.solutionsLengthScaleViewHost.Content = null;
-      this.solutionsLengthScaleViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solutionsLengthScaleViewHost.Enabled = false;
-      this.solutionsLengthScaleViewHost.Location = new System.Drawing.Point(3, 3);
-      this.solutionsLengthScaleViewHost.Name = "solutionsLengthScaleViewHost";
-      this.solutionsLengthScaleViewHost.ReadOnly = false;
-      this.solutionsLengthScaleViewHost.Size = new System.Drawing.Size(718, 446);
-      this.solutionsLengthScaleViewHost.TabIndex = 0;
-      this.solutionsLengthScaleViewHost.ViewsLabelVisible = true;
-      this.solutionsLengthScaleViewHost.ViewType = null;
-      // 
-      // solutionsDiversityTabPage
-      // 
-      this.solutionsDiversityTabPage.Controls.Add(this.solutionsDiversityViewHost);
-      this.solutionsDiversityTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsDiversityTabPage.Name = "solutionsDiversityTabPage";
-      this.solutionsDiversityTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsDiversityTabPage.Size = new System.Drawing.Size(724, 452);
-      this.solutionsDiversityTabPage.TabIndex = 2;
-      this.solutionsDiversityTabPage.Text = "Diversity Analysis";
-      this.solutionsDiversityTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solutionsDiversityViewHost
-      // 
-      this.solutionsDiversityViewHost.Caption = "View";
-      this.solutionsDiversityViewHost.Content = null;
-      this.solutionsDiversityViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solutionsDiversityViewHost.Enabled = false;
-      this.solutionsDiversityViewHost.Location = new System.Drawing.Point(3, 3);
-      this.solutionsDiversityViewHost.Name = "solutionsDiversityViewHost";
-      this.solutionsDiversityViewHost.ReadOnly = false;
-      this.solutionsDiversityViewHost.Size = new System.Drawing.Size(718, 446);
-      this.solutionsDiversityViewHost.TabIndex = 1;
-      this.solutionsDiversityViewHost.ViewsLabelVisible = true;
-      this.solutionsDiversityViewHost.ViewType = null;
-      // 
-      // solutionsFdcTabPage
-      // 
-      this.solutionsFdcTabPage.Controls.Add(this.fdcBetweenBestCheckBox);
-      this.solutionsFdcTabPage.Controls.Add(this.solutionsFdcViewHost);
-      this.solutionsFdcTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsFdcTabPage.Name = "solutionsFdcTabPage";
-      this.solutionsFdcTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsFdcTabPage.Size = new System.Drawing.Size(724, 452);
-      this.solutionsFdcTabPage.TabIndex = 5;
-      this.solutionsFdcTabPage.Text = "Fitness-Distance Analysis";
-      this.solutionsFdcTabPage.UseVisualStyleBackColor = true;
-      // 
-      // fdcBetweenBestCheckBox
-      // 
-      this.fdcBetweenBestCheckBox.AutoSize = true;
-      this.fdcBetweenBestCheckBox.Location = new System.Drawing.Point(6, 6);
-      this.fdcBetweenBestCheckBox.Name = "fdcBetweenBestCheckBox";
-      this.fdcBetweenBestCheckBox.Size = new System.Drawing.Size(233, 17);
-      this.fdcBetweenBestCheckBox.TabIndex = 2;
-      this.fdcBetweenBestCheckBox.Text = "Calculate FDC between best solution(s) only";
-      this.fdcBetweenBestCheckBox.UseVisualStyleBackColor = true;
-      this.fdcBetweenBestCheckBox.CheckedChanged += new System.EventHandler(this.FdcBetweenBestCheckBoxOnCheckedChanged);
-      // 
-      // solutionsFdcViewHost
-      // 
-      this.solutionsFdcViewHost.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.solutionsFdcViewHost.Caption = "View";
-      this.solutionsFdcViewHost.Content = null;
-      this.solutionsFdcViewHost.Enabled = false;
-      this.solutionsFdcViewHost.Location = new System.Drawing.Point(3, 29);
-      this.solutionsFdcViewHost.Name = "solutionsFdcViewHost";
-      this.solutionsFdcViewHost.ReadOnly = false;
-      this.solutionsFdcViewHost.Size = new System.Drawing.Size(718, 423);
-      this.solutionsFdcViewHost.TabIndex = 0;
-      this.solutionsFdcViewHost.ViewsLabelVisible = true;
-      this.solutionsFdcViewHost.ViewType = null;
-      // 
-      // solutionsNetworkTabPage
-      // 
-      this.solutionsNetworkTabPage.Controls.Add(this.solutionsNetworkChart);
-      this.solutionsNetworkTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsNetworkTabPage.Name = "solutionsNetworkTabPage";
-      this.solutionsNetworkTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsNetworkTabPage.Size = new System.Drawing.Size(724, 452);
-      this.solutionsNetworkTabPage.TabIndex = 4;
-      this.solutionsNetworkTabPage.Text = "Network Analysis";
-      this.solutionsNetworkTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solutionsNetworkChart
-      // 
-      chartArea1.AxisX.IsStartedFromZero = false;
-      chartArea1.AxisX.LabelStyle.Enabled = false;
-      chartArea1.AxisX.LineWidth = 0;
-      chartArea1.AxisX.MajorGrid.Enabled = false;
-      chartArea1.AxisX.MajorTickMark.Enabled = false;
-      chartArea1.AxisY.IsStartedFromZero = false;
-      chartArea1.AxisY.LabelStyle.Enabled = false;
-      chartArea1.AxisY.LineWidth = 0;
-      chartArea1.AxisY.MajorGrid.Enabled = false;
-      chartArea1.AxisY.MajorTickMark.Enabled = false;
-      chartArea1.Name = "SolutionsNetworkChartArea";
-      this.solutionsNetworkChart.ChartAreas.Add(chartArea1);
-      this.solutionsNetworkChart.Dock = System.Windows.Forms.DockStyle.Fill;
-      legend1.Enabled = false;
-      legend1.Name = "Legend1";
-      this.solutionsNetworkChart.Legends.Add(legend1);
-      this.solutionsNetworkChart.Location = new System.Drawing.Point(3, 3);
-      this.solutionsNetworkChart.Name = "solutionsNetworkChart";
-      series1.ChartArea = "SolutionsNetworkChartArea";
-      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bubble;
-      series1.IsValueShownAsLabel = true;
-      series1.Label = "#LABEL";
-      series1.Legend = "Legend1";
-      series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
-      series1.Name = "SolutionSeries";
-      series1.YValuesPerPoint = 2;
-      series2.ChartArea = "SolutionsNetworkChartArea";
-      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bubble;
-      series2.IsValueShownAsLabel = true;
-      series2.Label = "#LABEL";
-      series2.Legend = "Legend1";
-      series2.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
-      series2.Name = "SeedingSolutionSeries";
-      series2.YValuesPerPoint = 2;
-      this.solutionsNetworkChart.Series.Add(series1);
-      this.solutionsNetworkChart.Series.Add(series2);
-      this.solutionsNetworkChart.Size = new System.Drawing.Size(718, 446);
-      this.solutionsNetworkChart.TabIndex = 0;
-      this.solutionsNetworkChart.Text = "enhancedChart1";
-      this.solutionsNetworkChart.MouseClick += new System.Windows.Forms.MouseEventHandler(this.SolutionsNetworkChartOnMouseClick);
-      this.solutionsNetworkChart.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.SolutionsNetworkChartOnMouseDoubleClick);
-      // 
-      // UnderstandingSolutions
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.solutionNameLabel);
-      this.Controls.Add(this.solutionDiversitySimilarityLabel);
-      this.Controls.Add(this.solutionNameComboBox);
-      this.Controls.Add(this.similarityComboBox);
-      this.Controls.Add(this.solutionsTabControl);
-      this.Name = "UnderstandingSolutions";
-      this.Size = new System.Drawing.Size(732, 505);
-      this.solutionsTabControl.ResumeLayout(false);
-      this.solutionsQualityTabPage.ResumeLayout(false);
-      this.solutionsLengthScaleTabPage.ResumeLayout(false);
-      this.solutionsDiversityTabPage.ResumeLayout(false);
-      this.solutionsFdcTabPage.ResumeLayout(false);
-      this.solutionsFdcTabPage.PerformLayout();
-      this.solutionsNetworkTabPage.ResumeLayout(false);
-      ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label solutionNameLabel;
-    private System.Windows.Forms.Label solutionDiversitySimilarityLabel;
-    private System.Windows.Forms.ComboBox solutionNameComboBox;
-    private System.Windows.Forms.ComboBox similarityComboBox;
-    private MainForm.WindowsForms.DragOverTabControl solutionsTabControl;
-    private System.Windows.Forms.TabPage solutionsQualityTabPage;
-    private MainForm.WindowsForms.ViewHost solutionsQualityViewHost;
-    private System.Windows.Forms.TabPage solutionsLengthScaleTabPage;
-    private MainForm.WindowsForms.ViewHost solutionsLengthScaleViewHost;
-    private System.Windows.Forms.TabPage solutionsDiversityTabPage;
-    private MainForm.WindowsForms.ViewHost solutionsDiversityViewHost;
-    private System.Windows.Forms.TabPage solutionsFdcTabPage;
-    private System.Windows.Forms.CheckBox fdcBetweenBestCheckBox;
-    private MainForm.WindowsForms.ViewHost solutionsFdcViewHost;
-    private System.Windows.Forms.TabPage solutionsNetworkTabPage;
-    private Visualization.ChartControlsExtensions.EnhancedChart solutionsNetworkChart;
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingSolutionsView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingSolutionsView.cs	(revision 13721)
+++ 	(revision )
@@ -1,311 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.Analysis;
-using HeuristicLab.Analysis.QualityAnalysis;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.MainForm;
-using HeuristicLab.Optimization;
-using HeuristicLab.OptimizationExpertSystem.Common;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows.Forms;
-using System.Windows.Forms.DataVisualization.Charting;
-
-namespace HeuristicLab.OptimizationExpertSystem {
-  [View("Understanding Solutions")]
-  [Content(typeof(ExpertSystem), IsDefaultView = false)]
-  public partial class UnderstandingSolutionsView : ExpertSystemViewBase {
-    protected virtual bool SuppressEvents { get; set; }
-
-    public UnderstandingSolutionsView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      UpdateSimilarityCalculators();
-      UpdateNamesComboboxes();
-      UpdateSolutionVisualization();
-    }
-
-    protected override void OnProblemChanged() {
-      base.OnProblemInstancesChanged();
-      UpdateSimilarityCalculators();
-      UpdateNamesComboboxes();
-      UpdateSolutionVisualization();
-    }
-
-    protected override void OnProblemSolutionsChanged() {
-      base.OnProblemSolutionsChanged();
-      UpdateNamesComboboxes();
-      UpdateSolutionVisualization();
-    }
-
-    protected override void OnSolutionSeedingPoolChanged() {
-      base.OnSolutionSeedingPoolChanged();
-      UpdateSolutionNetworkAnalysis(similarityComboBox.SelectedItem as ISolutionSimilarityCalculator);
-    }
-
-    private void UpdateSimilarityCalculators() {
-      var selected = (ISolutionSimilarityCalculator)(similarityComboBox.SelectedIndex >= 0 ? similarityComboBox.SelectedItem : null);
-      similarityComboBox.Items.Clear();
-
-      if (Content == null || Content.Problem == null) return;
-
-      foreach (var calc in Content.Problem.Operators.OfType<ISolutionSimilarityCalculator>()) {
-        similarityComboBox.Items.Add(calc);
-        if (selected != null && calc.ItemName == selected.ItemName) similarityComboBox.SelectedItem = calc;
-      }
-      if (selected == null && similarityComboBox.Items.Count > 0)
-        similarityComboBox.SelectedIndex = 0;
-    }
-
-    private void UpdateNamesComboboxes() {
-      var selectedSolutionName = solutionNameComboBox.SelectedIndex >= 0 ? (string)solutionNameComboBox.SelectedItem : string.Empty;
-
-      solutionNameComboBox.Items.Clear();
-      if (Content == null) return;
-      var solutionNames = Content.Problem.Solutions.Select(x => x.Solution).OfType<IScope>().SelectMany(x => x.Variables);
-
-      foreach (var sn in solutionNames.GroupBy(x => x.Name).OrderBy(x => x.Key)) {
-        solutionNameComboBox.Items.Add(sn.Key);
-        // either it was previously selected, or the variable value is defined in the HeuristicLab.Encodings sub-namespace
-        if (sn.Key == selectedSolutionName || (string.IsNullOrEmpty(selectedSolutionName) && sn.All(x => x.Value != null && x.Value.GetType().FullName.StartsWith("HeuristicLab.Encodings."))))
-          solutionNameComboBox.SelectedItem = sn.Key;
-      }
-    }
-    
-    public void UpdateSolutionVisualization() {
-      if (InvokeRequired) { Invoke((Action)UpdateSolutionVisualization); return;  }
-      var qualityName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
-      UpdateSolutionQualityAnalysis(qualityName);
-      if (similarityComboBox.SelectedIndex >= 0) {
-        var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
-        UpdateSolutionDiversityAnalysis(calculator);
-        UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
-        UpdateSolutionLengthScaleAnalysis(calculator);
-        UpdateSolutionNetworkAnalysis(calculator);
-      } else {
-        solutionsDiversityViewHost.Content = null;
-        solutionsFdcViewHost.Content = null;
-        solutionsLengthScaleViewHost.Content = null;
-        solutionsNetworkChart.Series.First().Points.Clear();
-      }
-    }
-
-    private void UpdateSolutionQualityAnalysis(string qualityName) {
-      var dt = solutionsQualityViewHost.Content as DataTable;
-      if (dt == null) {
-        dt = QualityDistributionAnalyzer.PrepareTable(qualityName);
-        dt.VisualProperties.Title = "Quality Distribution";
-        solutionsQualityViewHost.Content = dt;
-      }
-      QualityDistributionAnalyzer.UpdateTable(dt, GetSolutionScopes().Select(x => GetQuality(x, qualityName) ?? double.NaN).Where(x => !double.IsNaN(x)));
-    }
-
-    private void UpdateSolutionDiversityAnalysis(ISolutionSimilarityCalculator calculator) {
-      try {
-        solutionsDiversityViewHost.Content = null;
-        var solutionScopes = GetSolutionScopes();
-        var similarities = new double[solutionScopes.Count, solutionScopes.Count];
-        for (var i = 0; i < solutionScopes.Count; i++) {
-          for (var j = 0; j < solutionScopes.Count; j++)
-            similarities[i, j] = calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
-        }
-        var hm = new HeatMap(similarities, "Solution Similarities", 0.0, 1.0);
-        solutionsDiversityViewHost.Content = hm;
-      } catch { }
-    }
-
-    private void UpdateSolutionFdcAnalysis(ISolutionSimilarityCalculator calculator, bool distanceToBest) {
-      try {
-        solutionsFdcViewHost.Content = null;
-        var solutionScopes = GetSolutionScopes();
-        var points = new List<Point2D<double>>();
-        if (distanceToBest) {
-          var maximization = ((IValueParameter<BoolValue>)Content.Problem.MaximizationParameter).Value.Value;
-          var bestSolutions = (maximization ? solutionScopes.MaxItems(x => GetQuality(x, calculator.QualityVariableName) ?? double.NegativeInfinity)
-                                            : solutionScopes.MinItems(x => GetQuality(x, calculator.QualityVariableName) ?? double.PositiveInfinity)).ToList();
-          foreach (var solScope in solutionScopes.Except(bestSolutions)) {
-            var maxSimilarity = bestSolutions.Max(x => calculator.CalculateSolutionSimilarity(solScope, x));
-            var qDiff = (GetQuality(solScope, calculator.QualityVariableName) ?? double.NaN)
-                      - (GetQuality(bestSolutions[0], calculator.QualityVariableName) ?? double.NaN);
-            points.Add(new Point2D<double>(Math.Abs(qDiff), 1.0 - maxSimilarity));
-          }
-        } else {
-          for (int i = 0; i < solutionScopes.Count; i++) {
-            for (int j = 0; j < solutionScopes.Count; j++) {
-              if (i == j) continue;
-              var qDiff = (GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN)
-                          - (GetQuality(solutionScopes[j], calculator.QualityVariableName) ?? double.NaN);
-              if (double.IsNaN(qDiff)) continue;
-              points.Add(new Point2D<double>(Math.Abs(qDiff), 1.0 - calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j])));
-            }
-          }
-        }
-        var splot = new ScatterPlot("Fitness-Distance", "");
-        splot.VisualProperties.XAxisTitle = "Absolute Fitness Difference";
-        splot.VisualProperties.XAxisMinimumFixedValue = 0.0;
-        splot.VisualProperties.XAxisMinimumAuto = false;
-        splot.VisualProperties.YAxisTitle = "Solution Distance";
-        splot.VisualProperties.YAxisMinimumFixedValue = 0.0;
-        splot.VisualProperties.YAxisMinimumAuto = false;
-        splot.VisualProperties.YAxisMaximumFixedValue = 1.0;
-        splot.VisualProperties.YAxisMaximumAuto = false;
-        var row = new ScatterPlotDataRow("Fdc", "", points);
-        row.VisualProperties.PointSize = 7;
-        splot.Rows.Add(row);
-        solutionsFdcViewHost.Content = splot;
-      } catch { }
-    }
-
-    private void UpdateSolutionLengthScaleAnalysis(ISolutionSimilarityCalculator calculator) {
-      try {
-        solutionsLengthScaleViewHost.Content = null;
-        var dt = solutionsLengthScaleViewHost.Content as DataTable;
-        if (dt == null) {
-          dt = QualityDistributionAnalyzer.PrepareTable("Length Scale");
-          solutionsLengthScaleViewHost.Content = dt;
-        }
-        QualityDistributionAnalyzer.UpdateTable(dt, CalculateLengthScale(calculator));
-      } catch {
-        solutionsLengthScaleViewHost.Content = null;
-      }
-    }
-
-    private IEnumerable<double> CalculateLengthScale(ISolutionSimilarityCalculator calculator) {
-      var solutionScopes = GetSolutionScopes();
-      for (var i = 0; i < solutionScopes.Count; i++) {
-        for (var j = 0; j < solutionScopes.Count; j++) {
-          if (i == j) continue;
-          var sim = calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
-          if (sim.IsAlmost(0)) continue;
-          var qDiff = (GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN)
-                    - (GetQuality(solutionScopes[j], calculator.QualityVariableName) ?? double.NaN);
-          if (!double.IsNaN(qDiff)) yield return Math.Abs(qDiff) / sim;
-        }
-      }
-    }
-
-    private void UpdateSolutionNetworkAnalysis(ISolutionSimilarityCalculator calculator) {
-      var series = solutionsNetworkChart.Series["SolutionSeries"];
-      var seedingSeries = solutionsNetworkChart.Series["SeedingSolutionSeries"];
-      try {
-        series.Points.Clear();
-        seedingSeries.Points.Clear();
-        var solutionScopes = GetSolutionScopes();
-        var dissimilarities = new DoubleMatrix(solutionScopes.Count, solutionScopes.Count);
-        for (var i = 0; i < solutionScopes.Count; i++) {
-          for (var j = 0; j < solutionScopes.Count; j++) {
-            if (i == j) continue;
-            dissimilarities[i, j] = 1.0 - calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
-          }
-        }
-        var coords = MultidimensionalScaling.KruskalShepard(dissimilarities);
-        for (var i = 0; i < coords.Rows; i++) {
-          var quality = GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN;
-          var dataPoint = new DataPoint() {
-            Name = (i + 1).ToString(),
-            XValue = coords[i, 0],
-            YValues = new[] {coords[i, 1], quality},
-            Label = (i + 1) + ": " + quality,
-            Tag = solutionScopes[i]
-          };
-          if (Content.SolutionSeedingPool.Contains(solutionScopes[i]) && Content.SolutionSeedingPool.ItemChecked(solutionScopes[i]))
-            seedingSeries.Points.Add(dataPoint);
-          else series.Points.Add(dataPoint);
-        }
-      } catch {
-        // problems in calculating the similarity
-        series.Points.Clear();
-        seedingSeries.Points.Clear();
-      }
-    }
-
-    private void SimilarityComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SimilarityComboBoxOnSelectedIndexChanged, sender, e); return; }
-      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
-      if (calculator != null) {
-        calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
-        calculator.QualityVariableName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
-      }
-      UpdateSolutionDiversityAnalysis(calculator);
-      UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
-      UpdateSolutionLengthScaleAnalysis(calculator);
-      UpdateSolutionNetworkAnalysis(calculator);
-    }
-
-    private void SolutionNameComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SolutionNameComboBoxOnSelectedIndexChanged, sender, e); return; }
-      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
-      if (calculator != null) {
-        calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
-        calculator.QualityVariableName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
-      }
-      UpdateSolutionDiversityAnalysis(calculator);
-      UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
-      UpdateSolutionLengthScaleAnalysis(calculator);
-      UpdateSolutionNetworkAnalysis(calculator);
-    }
-
-    private void FdcBetweenBestCheckBoxOnCheckedChanged(object sender, EventArgs e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)FdcBetweenBestCheckBoxOnCheckedChanged, sender, e); return; }
-      UpdateSolutionFdcAnalysis((ISolutionSimilarityCalculator)similarityComboBox.SelectedItem, fdcBetweenBestCheckBox.Checked);
-    }
-
-    private void SolutionsNetworkChartOnMouseClick(object sender, MouseEventArgs e) {
-      var result = solutionsNetworkChart.HitTest(e.X, e.Y);
-      if (result.ChartElementType == ChartElementType.DataPoint) {
-        var point = (DataPoint)result.Object;
-        var solutionScope = (IScope)point.Tag;
-        if (!Content.SolutionSeedingPool.Contains(solutionScope)) return;
-        Content.SolutionSeedingPool.SetItemCheckedState(solutionScope, !Content.SolutionSeedingPool.ItemChecked(solutionScope));
-      }
-    }
-
-    private void SolutionsNetworkChartOnMouseDoubleClick(object sender, MouseEventArgs e) {
-      var result = solutionsNetworkChart.HitTest(e.X, e.Y);
-      if (result.ChartElementType == ChartElementType.DataPoint) {
-        var point = (DataPoint)result.Object;
-        var solutionScope = (IScope)point.Tag;
-        MainForm.ShowContent(solutionScope, true);
-      }
-    }
-
-    #region Helpers
-    private List<IScope> GetSolutionScopes() {
-      return Content.Problem.Solutions.Select(x => x.Solution).OfType<IScope>().ToList();
-    } 
-
-    private double? GetQuality(IScope scope, string qualityName) {
-      IVariable v;
-      if (!scope.Variables.TryGetValue(qualityName, out v)) return null;
-      var dval = v.Value as DoubleValue;
-      if (dval == null) return null;
-      return dval.Value;
-    }
-    #endregion
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingSolutionsView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/UnderstandingSolutionsView.resx	(revision 13721)
+++ 	(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: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/ExpertSystemViewBase.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/ExpertSystemViewBase.Designer.cs	(revision 13721)
+++ 	(revision )
@@ -1,62 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.OptimizationExpertSystem {
-  partial class ExpertSystemViewBase {
-    /// <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.SuspendLayout();
-      // 
-      // ExpertSystemViewBase
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Name = "ExpertSystemViewBase";
-      this.Size = new System.Drawing.Size(700, 380);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/ExpertSystemViewBase.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/ExpertSystemViewBase.cs	(revision 13721)
+++ 	(revision )
@@ -1,194 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * 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.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.OptimizationExpertSystem.Common;
-using System;
-using System.ComponentModel;
-
-namespace HeuristicLab.OptimizationExpertSystem {
-  [View("Expert-System View")]
-  public partial class ExpertSystemViewBase : ItemView {
-    public OptimizationExpertSystem MainForm {
-      get { return (OptimizationExpertSystem)HeuristicLab.MainForm.MainFormManager.MainForm; }
-    }
-
-    public new ExpertSystem Content {
-      get { return (ExpertSystem)base.Content; }
-      set { base.Content = value; }
-    }
-
-    protected ExpertSystemViewBase() {
-      InitializeComponent();
-    }
-
-    #region Event Registration
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.PropertyChanged += ContentOnPropertyChanged;
-      Content.DownloadStarted += ContentOnDownloadStarted;
-      RegisterContentProblemEvents();
-      RegisterContentProblemInstancesEvents();
-      RegisterContentSolutionSeedingPoolEvents();
-      RegisterContentSuggestedInstancesEvents();
-    }
-
-    private void RegisterContentProblemEvents() {
-      Content.Problem.ProblemChanged += ContentOnProblemChanged;
-      Content.Problem.Solutions.CollectionReset += ContentOnProblemSolutionsChanged;
-      Content.Problem.Solutions.ItemsAdded += ContentOnProblemSolutionsChanged;
-      Content.Problem.Solutions.ItemsReplaced += ContentOnProblemSolutionsChanged;
-      Content.Problem.Solutions.ItemsRemoved += ContentOnProblemSolutionsChanged;
-    }
-
-    private void RegisterContentProblemInstancesEvents() {
-      Content.ProblemInstances.UpdateOfRunsInProgressChanged += ContentOnProblemInstancesChanged;
-      Content.ProblemInstances.ItemsAdded += ContentOnProblemInstancesChanged;
-      Content.ProblemInstances.ItemsRemoved += ContentOnProblemInstancesChanged;
-      Content.ProblemInstances.CollectionReset += ContentOnProblemInstancesChanged;
-      Content.ProblemInstances.ItemChanged += ContentOnProblemInstancesChanged;
-    }
-
-    private void RegisterContentSolutionSeedingPoolEvents() {
-      Content.SolutionSeedingPool.CheckedItemsChanged += ContentOnSolutionSeedingPoolChanged;
-      Content.SolutionSeedingPool.CollectionReset += ContentOnSolutionSeedingPoolChanged;
-      Content.SolutionSeedingPool.ItemsAdded += ContentOnSolutionSeedingPoolChanged;
-      Content.SolutionSeedingPool.ItemsRemoved += ContentOnSolutionSeedingPoolChanged;
-      Content.SolutionSeedingPool.ItemsReplaced += ContentOnSolutionSeedingPoolChanged;
-    }
-
-    private void RegisterContentSuggestedInstancesEvents() {
-      Content.SuggestedInstances.CollectionReset += ContentOnSuggestedInstancesChanged;
-      Content.SuggestedInstances.ItemsAdded += ContentOnSuggestedInstancesChanged;
-      Content.SuggestedInstances.ItemsMoved += ContentOnSuggestedInstancesChanged;
-      Content.SuggestedInstances.ItemsRemoved += ContentOnSuggestedInstancesChanged;
-      Content.SuggestedInstances.ItemsReplaced += ContentOnSuggestedInstancesChanged;
-    }
-
-    protected override void DeregisterContentEvents() {
-      base.DeregisterContentEvents();
-      Content.PropertyChanged -= ContentOnPropertyChanged;
-      Content.DownloadStarted -= ContentOnDownloadStarted;
-      DeregisterContentProblemEvents();
-      DeregisterContentProblemInstancesEvents();
-      DeregisterContentSolutionSeedingPoolEvents();
-      DeregisterContentSuggestedInstancesEvents();
-    }
-
-    private void DeregisterContentProblemEvents() {
-      Content.Problem.ProblemChanged -= ContentOnProblemChanged;
-      Content.Problem.Solutions.CollectionReset -= ContentOnProblemSolutionsChanged;
-      Content.Problem.Solutions.ItemsAdded -= ContentOnProblemSolutionsChanged;
-      Content.Problem.Solutions.ItemsReplaced -= ContentOnProblemSolutionsChanged;
-      Content.Problem.Solutions.ItemsRemoved -= ContentOnProblemSolutionsChanged;
-    }
-
-    private void DeregisterContentProblemInstancesEvents() {
-      Content.ProblemInstances.UpdateOfRunsInProgressChanged -= ContentOnProblemInstancesChanged;
-      Content.ProblemInstances.ItemsAdded -= ContentOnProblemInstancesChanged;
-      Content.ProblemInstances.ItemsRemoved -= ContentOnProblemInstancesChanged;
-      Content.ProblemInstances.CollectionReset -= ContentOnProblemInstancesChanged;
-      Content.ProblemInstances.ItemChanged -= ContentOnProblemInstancesChanged;
-    }
-
-    private void DeregisterContentSolutionSeedingPoolEvents() {
-      Content.SolutionSeedingPool.CheckedItemsChanged -= ContentOnSolutionSeedingPoolChanged;
-      Content.SolutionSeedingPool.CollectionReset -= ContentOnSolutionSeedingPoolChanged;
-      Content.SolutionSeedingPool.ItemsAdded -= ContentOnSolutionSeedingPoolChanged;
-      Content.SolutionSeedingPool.ItemsRemoved -= ContentOnSolutionSeedingPoolChanged;
-      Content.SolutionSeedingPool.ItemsReplaced -= ContentOnSolutionSeedingPoolChanged;
-    }
-
-    private void DeregisterContentSuggestedInstancesEvents() {
-      Content.SuggestedInstances.CollectionReset -= ContentOnSuggestedInstancesChanged;
-      Content.SuggestedInstances.ItemsAdded -= ContentOnSuggestedInstancesChanged;
-      Content.SuggestedInstances.ItemsMoved -= ContentOnSuggestedInstancesChanged;
-      Content.SuggestedInstances.ItemsRemoved -= ContentOnSuggestedInstancesChanged;
-      Content.SuggestedInstances.ItemsReplaced -= ContentOnSuggestedInstancesChanged;
-    }
-    #endregion
-
-    private void ContentOnPropertyChanged(object sender, PropertyChangedEventArgs e) {
-      if (InvokeRequired) Invoke((Action<string>)OnPropertyChanged, e.PropertyName);
-      else {
-        switch (e.PropertyName) {
-          case "Problem": RegisterContentProblemEvents(); break;
-          case "ProblemInstances": RegisterContentProblemInstancesEvents(); break;
-          case "SolutionSeedingPool": RegisterContentSolutionSeedingPoolEvents(); break;
-          case "SuggestedInstances": RegisterContentSuggestedInstancesEvents(); break;
-        }
-        OnPropertyChanged(e.PropertyName);
-      }
-    }
-
-    protected virtual void OnDownloadStarted(IProgress progress) { }
-    protected virtual void OnDownloadEnded() { }
-    protected virtual void OnPropertyChanged(string propertyName) { }
-    protected virtual void OnProblemChanged() { }
-    protected virtual void OnProblemSolutionsChanged() { }
-    protected virtual void OnProblemInstancesChanged() { }
-    protected virtual void OnSolutionSeedingPoolChanged() { }
-    protected virtual void OnSuggestedInstancesChanged() { }
-
-    #region Content Event Handlers
-    private void ContentOnDownloadStarted(object sender, EventArgs<IProgress> e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs<IProgress>>)ContentOnDownloadStarted, sender, e); return; }
-      MainForm.AddOperationProgressToView(this, e.Value);
-      e.Value.ProgressStateChanged += ProgressOnStateChanged;
-      OnDownloadStarted(e.Value);
-    }
-
-    private void ProgressOnStateChanged(object sender, EventArgs e) {
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)ProgressOnStateChanged, sender, e); return; }
-      var progress = (IProgress)sender;
-      if (progress == null || progress.ProgressState == ProgressState.Started) return;
-      OnDownloadEnded();
-    }
-
-    private void ContentOnProblemChanged(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action)OnProblemChanged);
-      else OnProblemChanged();
-    }
-
-    private void ContentOnProblemSolutionsChanged(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action)OnProblemSolutionsChanged);
-      else OnProblemSolutionsChanged();
-    }
-
-    private void ContentOnProblemInstancesChanged(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action)OnProblemInstancesChanged);
-      else OnProblemInstancesChanged();
-    }
-
-    private void ContentOnSolutionSeedingPoolChanged(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action)OnSolutionSeedingPoolChanged);
-      else OnSolutionSeedingPoolChanged();
-    }
-
-    private void ContentOnSuggestedInstancesChanged(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action)OnSuggestedInstancesChanged);
-      else OnSuggestedInstancesChanged();
-    }
-    #endregion
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/ExpertSystemViewBase.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/ExpertSystemViewBase.resx	(revision 13721)
+++ 	(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/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeBaseView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeBaseView.Designer.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeBaseView.Designer.cs	(revision 13722)
@@ -0,0 +1,75 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.OptimizationExpertSystem {
+  partial class KnowledgeBaseView {
+    /// <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.rldView = new HeuristicLab.Optimization.Views.RunCollectionRLDView();
+      this.SuspendLayout();
+      // 
+      // rldView
+      // 
+      this.rldView.Caption = "Run-length Distribution View";
+      this.rldView.Content = null;
+      this.rldView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.rldView.Location = new System.Drawing.Point(0, 0);
+      this.rldView.Name = "rldView";
+      this.rldView.ReadOnly = false;
+      this.rldView.Size = new System.Drawing.Size(700, 380);
+      this.rldView.TabIndex = 0;
+      // 
+      // KnowledgeBaseView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.rldView);
+      this.Name = "KnowledgeBaseView";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private Optimization.Views.RunCollectionRLDView rldView;
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeBaseView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeBaseView.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeBaseView.cs	(revision 13722)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.MainForm;
+using HeuristicLab.OptimizationExpertSystem.Common;
+
+namespace HeuristicLab.OptimizationExpertSystem {
+  [View("Knowledge Base View")]
+  [Content(typeof(KnowledgeCenter), IsDefaultView = false)]
+  public partial class KnowledgeBaseView : KnowledgeCenterViewBase {
+    public KnowledgeBaseView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) rldView.Content = null;
+      else rldView.Content = Content.KnowledgeBase;
+    }
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeBaseView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeBaseView.resx	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeBaseView.resx	(revision 13722)
@@ -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/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterAllinOneView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterAllinOneView.Designer.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterAllinOneView.Designer.cs	(revision 13722)
@@ -0,0 +1,910 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.OptimizationExpertSystem {
+  partial class KnowledgeCenterAllinOneView {
+    /// <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.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.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 series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series4 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      this.evaluationsLimitabel = new System.Windows.Forms.Label();
+      this.maxEvaluationsTextBox = new System.Windows.Forms.TextBox();
+      this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.problemTabPage = new System.Windows.Forms.TabPage();
+      this.problemViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsTabPage = new System.Windows.Forms.TabPage();
+      this.solutionNameLabel = new System.Windows.Forms.Label();
+      this.solutionDiversitySimilarityLabel = new System.Windows.Forms.Label();
+      this.solutionNameComboBox = new System.Windows.Forms.ComboBox();
+      this.similarityComboBox = new System.Windows.Forms.ComboBox();
+      this.solutionsTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.solutionsQualityTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsQualityViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsLengthScaleTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsLengthScaleViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsDiversityTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsDiversityViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsFdcTabPage = new System.Windows.Forms.TabPage();
+      this.fdcBetweenBestCheckBox = new System.Windows.Forms.CheckBox();
+      this.solutionsFdcViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsNetworkTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsNetworkChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      this.solversTabPage = new System.Windows.Forms.TabPage();
+      this.seedingStrategyPanel = new System.Windows.Forms.Panel();
+      this.solverTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.resultsTabPage = new System.Windows.Forms.TabPage();
+      this.solverResultsView = new HeuristicLab.Optimization.Views.ResultCollectionView();
+      this.solutionSeedingTabPage = new System.Windows.Forms.TabPage();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.solverParametersView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.operatorGraphTabPage = new System.Windows.Forms.TabPage();
+      this.operatorGraphViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.algorithmCloneButton = new System.Windows.Forms.Button();
+      this.algorithmStartButton = new System.Windows.Forms.Button();
+      this.label1 = new System.Windows.Forms.Label();
+      this.algorithmSuggestionLabel = new System.Windows.Forms.Label();
+      this.suggestedInstancesComboBox = new System.Windows.Forms.ComboBox();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.okbTabPage = new System.Windows.Forms.TabPage();
+      this.kbViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.problemInstancesTabPage = new System.Windows.Forms.TabPage();
+      this.projectionLabel = new System.Windows.Forms.Label();
+      this.projectionComboBox = new System.Windows.Forms.ComboBox();
+      this.problemInstancesTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.instancesTabPage = new System.Windows.Forms.TabPage();
+      this.problemInstancesView = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.mapTabPage = new System.Windows.Forms.TabPage();
+      this.instanceMapChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      this.refreshMapButton = new System.Windows.Forms.Button();
+      this.progressPanel = new System.Windows.Forms.Panel();
+      this.okbDownloadButton = new System.Windows.Forms.Button();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.tabControl.SuspendLayout();
+      this.problemTabPage.SuspendLayout();
+      this.solutionsTabPage.SuspendLayout();
+      this.solutionsTabControl.SuspendLayout();
+      this.solutionsQualityTabPage.SuspendLayout();
+      this.solutionsLengthScaleTabPage.SuspendLayout();
+      this.solutionsDiversityTabPage.SuspendLayout();
+      this.solutionsFdcTabPage.SuspendLayout();
+      this.solutionsNetworkTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).BeginInit();
+      this.solversTabPage.SuspendLayout();
+      this.solverTabControl.SuspendLayout();
+      this.resultsTabPage.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.operatorGraphTabPage.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.okbTabPage.SuspendLayout();
+      this.problemInstancesTabPage.SuspendLayout();
+      this.problemInstancesTabControl.SuspendLayout();
+      this.instancesTabPage.SuspendLayout();
+      this.mapTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // evaluationsLimitabel
+      // 
+      this.evaluationsLimitabel.AutoSize = true;
+      this.evaluationsLimitabel.Location = new System.Drawing.Point(5, 9);
+      this.evaluationsLimitabel.Name = "evaluationsLimitabel";
+      this.evaluationsLimitabel.Size = new System.Drawing.Size(66, 13);
+      this.evaluationsLimitabel.TabIndex = 5;
+      this.evaluationsLimitabel.Text = "Budget (FE):";
+      // 
+      // maxEvaluationsTextBox
+      // 
+      this.maxEvaluationsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.maxEvaluationsTextBox.Location = new System.Drawing.Point(110, 6);
+      this.maxEvaluationsTextBox.Name = "maxEvaluationsTextBox";
+      this.maxEvaluationsTextBox.Size = new System.Drawing.Size(564, 20);
+      this.maxEvaluationsTextBox.TabIndex = 6;
+      this.maxEvaluationsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.MaxEvaluationsTextBoxOnValidating);
+      // 
+      // 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.problemTabPage);
+      this.tabControl.Controls.Add(this.solutionsTabPage);
+      this.tabControl.Controls.Add(this.solversTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Controls.Add(this.okbTabPage);
+      this.tabControl.Controls.Add(this.problemInstancesTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 32);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(689, 503);
+      this.tabControl.TabIndex = 17;
+      // 
+      // problemTabPage
+      // 
+      this.problemTabPage.AllowDrop = true;
+      this.problemTabPage.Controls.Add(this.problemViewHost);
+      this.problemTabPage.Location = new System.Drawing.Point(4, 22);
+      this.problemTabPage.Name = "problemTabPage";
+      this.problemTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.problemTabPage.Size = new System.Drawing.Size(681, 477);
+      this.problemTabPage.TabIndex = 1;
+      this.problemTabPage.Text = "Problem";
+      this.problemTabPage.UseVisualStyleBackColor = true;
+      // 
+      // problemViewHost
+      // 
+      this.problemViewHost.Caption = "View";
+      this.problemViewHost.Content = null;
+      this.problemViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.problemViewHost.Enabled = false;
+      this.problemViewHost.Location = new System.Drawing.Point(3, 3);
+      this.problemViewHost.Name = "problemViewHost";
+      this.problemViewHost.ReadOnly = false;
+      this.problemViewHost.Size = new System.Drawing.Size(675, 471);
+      this.problemViewHost.TabIndex = 2;
+      this.problemViewHost.ViewsLabelVisible = false;
+      this.problemViewHost.ViewType = null;
+      // 
+      // solutionsTabPage
+      // 
+      this.solutionsTabPage.Controls.Add(this.solutionNameLabel);
+      this.solutionsTabPage.Controls.Add(this.solutionDiversitySimilarityLabel);
+      this.solutionsTabPage.Controls.Add(this.solutionNameComboBox);
+      this.solutionsTabPage.Controls.Add(this.similarityComboBox);
+      this.solutionsTabPage.Controls.Add(this.solutionsTabControl);
+      this.solutionsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsTabPage.Name = "solutionsTabPage";
+      this.solutionsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsTabPage.Size = new System.Drawing.Size(681, 477);
+      this.solutionsTabPage.TabIndex = 7;
+      this.solutionsTabPage.Text = "Solutions";
+      this.solutionsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionNameLabel
+      // 
+      this.solutionNameLabel.AutoSize = true;
+      this.solutionNameLabel.Location = new System.Drawing.Point(235, 9);
+      this.solutionNameLabel.Name = "solutionNameLabel";
+      this.solutionNameLabel.Size = new System.Drawing.Size(48, 13);
+      this.solutionNameLabel.TabIndex = 2;
+      this.solutionNameLabel.Text = "Solution:";
+      // 
+      // solutionDiversitySimilarityLabel
+      // 
+      this.solutionDiversitySimilarityLabel.AutoSize = true;
+      this.solutionDiversitySimilarityLabel.Location = new System.Drawing.Point(5, 9);
+      this.solutionDiversitySimilarityLabel.Name = "solutionDiversitySimilarityLabel";
+      this.solutionDiversitySimilarityLabel.Size = new System.Drawing.Size(50, 13);
+      this.solutionDiversitySimilarityLabel.TabIndex = 2;
+      this.solutionDiversitySimilarityLabel.Text = "Similarity:";
+      // 
+      // solutionNameComboBox
+      // 
+      this.solutionNameComboBox.DisplayMember = "ItemName";
+      this.solutionNameComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.solutionNameComboBox.FormattingEnabled = true;
+      this.solutionNameComboBox.Location = new System.Drawing.Point(291, 6);
+      this.solutionNameComboBox.Name = "solutionNameComboBox";
+      this.solutionNameComboBox.Size = new System.Drawing.Size(150, 21);
+      this.solutionNameComboBox.TabIndex = 1;
+      this.solutionNameComboBox.SelectedIndexChanged += new System.EventHandler(this.SimilarityComboBoxOnSelectedIndexChanged);
+      // 
+      // similarityComboBox
+      // 
+      this.similarityComboBox.DisplayMember = "ItemName";
+      this.similarityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.similarityComboBox.FormattingEnabled = true;
+      this.similarityComboBox.Location = new System.Drawing.Point(61, 6);
+      this.similarityComboBox.Name = "similarityComboBox";
+      this.similarityComboBox.Size = new System.Drawing.Size(150, 21);
+      this.similarityComboBox.TabIndex = 1;
+      this.similarityComboBox.SelectedIndexChanged += new System.EventHandler(this.SimilarityComboBoxOnSelectedIndexChanged);
+      // 
+      // solutionsTabControl
+      // 
+      this.solutionsTabControl.AllowDrop = true;
+      this.solutionsTabControl.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.solutionsTabControl.Controls.Add(this.solutionsQualityTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsLengthScaleTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsDiversityTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsFdcTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsNetworkTabPage);
+      this.solutionsTabControl.Location = new System.Drawing.Point(3, 33);
+      this.solutionsTabControl.Name = "solutionsTabControl";
+      this.solutionsTabControl.SelectedIndex = 0;
+      this.solutionsTabControl.Size = new System.Drawing.Size(675, 441);
+      this.solutionsTabControl.TabIndex = 0;
+      // 
+      // solutionsQualityTabPage
+      // 
+      this.solutionsQualityTabPage.Controls.Add(this.solutionsQualityViewHost);
+      this.solutionsQualityTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsQualityTabPage.Name = "solutionsQualityTabPage";
+      this.solutionsQualityTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsQualityTabPage.Size = new System.Drawing.Size(667, 415);
+      this.solutionsQualityTabPage.TabIndex = 1;
+      this.solutionsQualityTabPage.Text = "Quality Analysis";
+      this.solutionsQualityTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsQualityViewHost
+      // 
+      this.solutionsQualityViewHost.Caption = "View";
+      this.solutionsQualityViewHost.Content = null;
+      this.solutionsQualityViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solutionsQualityViewHost.Enabled = false;
+      this.solutionsQualityViewHost.Location = new System.Drawing.Point(3, 3);
+      this.solutionsQualityViewHost.Name = "solutionsQualityViewHost";
+      this.solutionsQualityViewHost.ReadOnly = false;
+      this.solutionsQualityViewHost.Size = new System.Drawing.Size(661, 409);
+      this.solutionsQualityViewHost.TabIndex = 0;
+      this.solutionsQualityViewHost.ViewsLabelVisible = true;
+      this.solutionsQualityViewHost.ViewType = null;
+      // 
+      // solutionsLengthScaleTabPage
+      // 
+      this.solutionsLengthScaleTabPage.Controls.Add(this.solutionsLengthScaleViewHost);
+      this.solutionsLengthScaleTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsLengthScaleTabPage.Name = "solutionsLengthScaleTabPage";
+      this.solutionsLengthScaleTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsLengthScaleTabPage.Size = new System.Drawing.Size(667, 415);
+      this.solutionsLengthScaleTabPage.TabIndex = 3;
+      this.solutionsLengthScaleTabPage.Text = "Length-Scale Analysis";
+      this.solutionsLengthScaleTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsLengthScaleViewHost
+      // 
+      this.solutionsLengthScaleViewHost.Caption = "View";
+      this.solutionsLengthScaleViewHost.Content = null;
+      this.solutionsLengthScaleViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solutionsLengthScaleViewHost.Enabled = false;
+      this.solutionsLengthScaleViewHost.Location = new System.Drawing.Point(3, 3);
+      this.solutionsLengthScaleViewHost.Name = "solutionsLengthScaleViewHost";
+      this.solutionsLengthScaleViewHost.ReadOnly = false;
+      this.solutionsLengthScaleViewHost.Size = new System.Drawing.Size(661, 409);
+      this.solutionsLengthScaleViewHost.TabIndex = 0;
+      this.solutionsLengthScaleViewHost.ViewsLabelVisible = true;
+      this.solutionsLengthScaleViewHost.ViewType = null;
+      // 
+      // solutionsDiversityTabPage
+      // 
+      this.solutionsDiversityTabPage.Controls.Add(this.solutionsDiversityViewHost);
+      this.solutionsDiversityTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsDiversityTabPage.Name = "solutionsDiversityTabPage";
+      this.solutionsDiversityTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsDiversityTabPage.Size = new System.Drawing.Size(667, 415);
+      this.solutionsDiversityTabPage.TabIndex = 2;
+      this.solutionsDiversityTabPage.Text = "Diversity Analysis";
+      this.solutionsDiversityTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsDiversityViewHost
+      // 
+      this.solutionsDiversityViewHost.Caption = "View";
+      this.solutionsDiversityViewHost.Content = null;
+      this.solutionsDiversityViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solutionsDiversityViewHost.Enabled = false;
+      this.solutionsDiversityViewHost.Location = new System.Drawing.Point(3, 3);
+      this.solutionsDiversityViewHost.Name = "solutionsDiversityViewHost";
+      this.solutionsDiversityViewHost.ReadOnly = false;
+      this.solutionsDiversityViewHost.Size = new System.Drawing.Size(661, 409);
+      this.solutionsDiversityViewHost.TabIndex = 1;
+      this.solutionsDiversityViewHost.ViewsLabelVisible = true;
+      this.solutionsDiversityViewHost.ViewType = null;
+      // 
+      // solutionsFdcTabPage
+      // 
+      this.solutionsFdcTabPage.Controls.Add(this.fdcBetweenBestCheckBox);
+      this.solutionsFdcTabPage.Controls.Add(this.solutionsFdcViewHost);
+      this.solutionsFdcTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsFdcTabPage.Name = "solutionsFdcTabPage";
+      this.solutionsFdcTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsFdcTabPage.Size = new System.Drawing.Size(667, 415);
+      this.solutionsFdcTabPage.TabIndex = 5;
+      this.solutionsFdcTabPage.Text = "Fitness-Distance Analysis";
+      this.solutionsFdcTabPage.UseVisualStyleBackColor = true;
+      // 
+      // fdcBetweenBestCheckBox
+      // 
+      this.fdcBetweenBestCheckBox.AutoSize = true;
+      this.fdcBetweenBestCheckBox.Location = new System.Drawing.Point(6, 6);
+      this.fdcBetweenBestCheckBox.Name = "fdcBetweenBestCheckBox";
+      this.fdcBetweenBestCheckBox.Size = new System.Drawing.Size(233, 17);
+      this.fdcBetweenBestCheckBox.TabIndex = 2;
+      this.fdcBetweenBestCheckBox.Text = "Calculate FDC between best solution(s) only";
+      this.fdcBetweenBestCheckBox.UseVisualStyleBackColor = true;
+      this.fdcBetweenBestCheckBox.CheckedChanged += new System.EventHandler(this.FdcBetweenBestCheckBoxOnCheckedChanged);
+      // 
+      // solutionsFdcViewHost
+      // 
+      this.solutionsFdcViewHost.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.solutionsFdcViewHost.Caption = "View";
+      this.solutionsFdcViewHost.Content = null;
+      this.solutionsFdcViewHost.Enabled = false;
+      this.solutionsFdcViewHost.Location = new System.Drawing.Point(3, 29);
+      this.solutionsFdcViewHost.Name = "solutionsFdcViewHost";
+      this.solutionsFdcViewHost.ReadOnly = false;
+      this.solutionsFdcViewHost.Size = new System.Drawing.Size(661, 386);
+      this.solutionsFdcViewHost.TabIndex = 0;
+      this.solutionsFdcViewHost.ViewsLabelVisible = true;
+      this.solutionsFdcViewHost.ViewType = null;
+      // 
+      // solutionsNetworkTabPage
+      // 
+      this.solutionsNetworkTabPage.Controls.Add(this.solutionsNetworkChart);
+      this.solutionsNetworkTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsNetworkTabPage.Name = "solutionsNetworkTabPage";
+      this.solutionsNetworkTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsNetworkTabPage.Size = new System.Drawing.Size(667, 415);
+      this.solutionsNetworkTabPage.TabIndex = 4;
+      this.solutionsNetworkTabPage.Text = "Network Analysis";
+      this.solutionsNetworkTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsNetworkChart
+      // 
+      chartArea1.AxisX.IsStartedFromZero = false;
+      chartArea1.AxisX.LabelStyle.Enabled = false;
+      chartArea1.AxisX.LineWidth = 0;
+      chartArea1.AxisX.MajorGrid.Enabled = false;
+      chartArea1.AxisX.MajorTickMark.Enabled = false;
+      chartArea1.AxisY.IsStartedFromZero = false;
+      chartArea1.AxisY.LabelStyle.Enabled = false;
+      chartArea1.AxisY.LineWidth = 0;
+      chartArea1.AxisY.MajorGrid.Enabled = false;
+      chartArea1.AxisY.MajorTickMark.Enabled = false;
+      chartArea1.Name = "SolutionsNetworkChartArea";
+      this.solutionsNetworkChart.ChartAreas.Add(chartArea1);
+      this.solutionsNetworkChart.Dock = System.Windows.Forms.DockStyle.Fill;
+      legend1.Enabled = false;
+      legend1.Name = "Legend1";
+      this.solutionsNetworkChart.Legends.Add(legend1);
+      this.solutionsNetworkChart.Location = new System.Drawing.Point(3, 3);
+      this.solutionsNetworkChart.Name = "solutionsNetworkChart";
+      series1.ChartArea = "SolutionsNetworkChartArea";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bubble;
+      series1.IsValueShownAsLabel = true;
+      series1.Label = "#LABEL";
+      series1.Legend = "Legend1";
+      series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
+      series1.Name = "SolutionSeries";
+      series1.YValuesPerPoint = 2;
+      series2.ChartArea = "SolutionsNetworkChartArea";
+      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bubble;
+      series2.IsValueShownAsLabel = true;
+      series2.Label = "#LABEL";
+      series2.Legend = "Legend1";
+      series2.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
+      series2.Name = "SeedingSolutionSeries";
+      series2.YValuesPerPoint = 2;
+      this.solutionsNetworkChart.Series.Add(series1);
+      this.solutionsNetworkChart.Series.Add(series2);
+      this.solutionsNetworkChart.Size = new System.Drawing.Size(661, 409);
+      this.solutionsNetworkChart.TabIndex = 0;
+      this.solutionsNetworkChart.Text = "enhancedChart1";
+      this.solutionsNetworkChart.MouseClick += new System.Windows.Forms.MouseEventHandler(this.SolutionsNetworkChartOnMouseClick);
+      // 
+      // solversTabPage
+      // 
+      this.solversTabPage.Controls.Add(this.seedingStrategyPanel);
+      this.solversTabPage.Controls.Add(this.solverTabControl);
+      this.solversTabPage.Controls.Add(this.algorithmCloneButton);
+      this.solversTabPage.Controls.Add(this.algorithmStartButton);
+      this.solversTabPage.Controls.Add(this.label1);
+      this.solversTabPage.Controls.Add(this.evaluationsLimitabel);
+      this.solversTabPage.Controls.Add(this.algorithmSuggestionLabel);
+      this.solversTabPage.Controls.Add(this.maxEvaluationsTextBox);
+      this.solversTabPage.Controls.Add(this.suggestedInstancesComboBox);
+      this.solversTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solversTabPage.Name = "solversTabPage";
+      this.solversTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solversTabPage.Size = new System.Drawing.Size(681, 477);
+      this.solversTabPage.TabIndex = 4;
+      this.solversTabPage.Text = "Solvers";
+      this.solversTabPage.UseVisualStyleBackColor = true;
+      // 
+      // seedingStrategyPanel
+      // 
+      this.seedingStrategyPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.seedingStrategyPanel.Location = new System.Drawing.Point(110, 32);
+      this.seedingStrategyPanel.Name = "seedingStrategyPanel";
+      this.seedingStrategyPanel.Size = new System.Drawing.Size(564, 21);
+      this.seedingStrategyPanel.TabIndex = 5;
+      // 
+      // solverTabControl
+      // 
+      this.solverTabControl.AllowDrop = true;
+      this.solverTabControl.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.solverTabControl.Controls.Add(this.resultsTabPage);
+      this.solverTabControl.Controls.Add(this.solutionSeedingTabPage);
+      this.solverTabControl.Controls.Add(this.parametersTabPage);
+      this.solverTabControl.Controls.Add(this.operatorGraphTabPage);
+      this.solverTabControl.Location = new System.Drawing.Point(2, 87);
+      this.solverTabControl.Name = "solverTabControl";
+      this.solverTabControl.SelectedIndex = 0;
+      this.solverTabControl.Size = new System.Drawing.Size(676, 387);
+      this.solverTabControl.TabIndex = 4;
+      // 
+      // resultsTabPage
+      // 
+      this.resultsTabPage.Controls.Add(this.solverResultsView);
+      this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.resultsTabPage.Name = "resultsTabPage";
+      this.resultsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.resultsTabPage.Size = new System.Drawing.Size(668, 361);
+      this.resultsTabPage.TabIndex = 2;
+      this.resultsTabPage.Text = "Results";
+      this.resultsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solverResultsView
+      // 
+      this.solverResultsView.Caption = "ResultCollection View";
+      this.solverResultsView.Content = null;
+      this.solverResultsView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solverResultsView.Location = new System.Drawing.Point(3, 3);
+      this.solverResultsView.Name = "solverResultsView";
+      this.solverResultsView.ReadOnly = true;
+      this.solverResultsView.ShowDetails = true;
+      this.solverResultsView.Size = new System.Drawing.Size(662, 355);
+      this.solverResultsView.TabIndex = 1;
+      // 
+      // solutionSeedingTabPage
+      // 
+      this.solutionSeedingTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionSeedingTabPage.Name = "solutionSeedingTabPage";
+      this.solutionSeedingTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionSeedingTabPage.Size = new System.Drawing.Size(668, 361);
+      this.solutionSeedingTabPage.TabIndex = 1;
+      this.solutionSeedingTabPage.Text = "Seeding Pool";
+      this.solutionSeedingTabPage.UseVisualStyleBackColor = true;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.solverParametersView);
+      this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.parametersTabPage.Name = "parametersTabPage";
+      this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.parametersTabPage.Size = new System.Drawing.Size(668, 361);
+      this.parametersTabPage.TabIndex = 0;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solverParametersView
+      // 
+      this.solverParametersView.AllowEditingOfHiddenParameters = true;
+      this.solverParametersView.Caption = "ParameterCollection View";
+      this.solverParametersView.Content = null;
+      this.solverParametersView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solverParametersView.Location = new System.Drawing.Point(3, 3);
+      this.solverParametersView.Name = "solverParametersView";
+      this.solverParametersView.ReadOnly = true;
+      this.solverParametersView.ShowDetails = true;
+      this.solverParametersView.Size = new System.Drawing.Size(662, 355);
+      this.solverParametersView.TabIndex = 0;
+      // 
+      // operatorGraphTabPage
+      // 
+      this.operatorGraphTabPage.Controls.Add(this.operatorGraphViewHost);
+      this.operatorGraphTabPage.Location = new System.Drawing.Point(4, 22);
+      this.operatorGraphTabPage.Name = "operatorGraphTabPage";
+      this.operatorGraphTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.operatorGraphTabPage.Size = new System.Drawing.Size(668, 361);
+      this.operatorGraphTabPage.TabIndex = 3;
+      this.operatorGraphTabPage.Text = "Operator Graph";
+      this.operatorGraphTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorGraphViewHost
+      // 
+      this.operatorGraphViewHost.Caption = "View";
+      this.operatorGraphViewHost.Content = null;
+      this.operatorGraphViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorGraphViewHost.Enabled = false;
+      this.operatorGraphViewHost.Location = new System.Drawing.Point(3, 3);
+      this.operatorGraphViewHost.Name = "operatorGraphViewHost";
+      this.operatorGraphViewHost.ReadOnly = true;
+      this.operatorGraphViewHost.Size = new System.Drawing.Size(662, 355);
+      this.operatorGraphViewHost.TabIndex = 0;
+      this.operatorGraphViewHost.ViewsLabelVisible = true;
+      this.operatorGraphViewHost.ViewType = null;
+      // 
+      // algorithmCloneButton
+      // 
+      this.algorithmCloneButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.algorithmCloneButton.Location = new System.Drawing.Point(648, 58);
+      this.algorithmCloneButton.Name = "algorithmCloneButton";
+      this.algorithmCloneButton.Size = new System.Drawing.Size(26, 23);
+      this.algorithmCloneButton.TabIndex = 3;
+      this.algorithmCloneButton.Text = "Clone";
+      this.algorithmCloneButton.UseVisualStyleBackColor = true;
+      this.algorithmCloneButton.Click += new System.EventHandler(this.AlgorithmCloneButtonOnClick);
+      // 
+      // algorithmStartButton
+      // 
+      this.algorithmStartButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.algorithmStartButton.Location = new System.Drawing.Point(616, 58);
+      this.algorithmStartButton.Name = "algorithmStartButton";
+      this.algorithmStartButton.Size = new System.Drawing.Size(26, 23);
+      this.algorithmStartButton.TabIndex = 3;
+      this.algorithmStartButton.Text = "Start";
+      this.algorithmStartButton.UseVisualStyleBackColor = true;
+      this.algorithmStartButton.Click += new System.EventHandler(this.AlgorithmStartButtonOnClick);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(5, 36);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(91, 13);
+      this.label1.TabIndex = 1;
+      this.label1.Text = "Seeding Strategy:";
+      // 
+      // algorithmSuggestionLabel
+      // 
+      this.algorithmSuggestionLabel.AutoSize = true;
+      this.algorithmSuggestionLabel.Location = new System.Drawing.Point(5, 62);
+      this.algorithmSuggestionLabel.Name = "algorithmSuggestionLabel";
+      this.algorithmSuggestionLabel.Size = new System.Drawing.Size(99, 13);
+      this.algorithmSuggestionLabel.TabIndex = 1;
+      this.algorithmSuggestionLabel.Text = "Suggested Solvers:";
+      // 
+      // suggestedInstancesComboBox
+      // 
+      this.suggestedInstancesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.suggestedInstancesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.suggestedInstancesComboBox.FormattingEnabled = true;
+      this.suggestedInstancesComboBox.Location = new System.Drawing.Point(110, 59);
+      this.suggestedInstancesComboBox.Name = "suggestedInstancesComboBox";
+      this.suggestedInstancesComboBox.Size = new System.Drawing.Size(500, 21);
+      this.suggestedInstancesComboBox.TabIndex = 0;
+      this.suggestedInstancesComboBox.SelectedIndexChanged += new System.EventHandler(this.SuggestedInstancesComboBoxOnSelectedIndexChanged);
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runsView);
+      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(681, 477);
+      this.runsTabPage.TabIndex = 3;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runsView
+      // 
+      this.runsView.Caption = "RunCollection View";
+      this.runsView.Content = null;
+      this.runsView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.runsView.Location = new System.Drawing.Point(3, 3);
+      this.runsView.Name = "runsView";
+      this.runsView.ReadOnly = false;
+      this.runsView.Size = new System.Drawing.Size(675, 471);
+      this.runsView.TabIndex = 1;
+      // 
+      // okbTabPage
+      // 
+      this.okbTabPage.Controls.Add(this.kbViewHost);
+      this.okbTabPage.Location = new System.Drawing.Point(4, 22);
+      this.okbTabPage.Name = "okbTabPage";
+      this.okbTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.okbTabPage.Size = new System.Drawing.Size(681, 477);
+      this.okbTabPage.TabIndex = 5;
+      this.okbTabPage.Text = "Knowledge Base";
+      this.okbTabPage.UseVisualStyleBackColor = true;
+      // 
+      // kbViewHost
+      // 
+      this.kbViewHost.Caption = "View";
+      this.kbViewHost.Content = null;
+      this.kbViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.kbViewHost.Enabled = false;
+      this.kbViewHost.Location = new System.Drawing.Point(3, 3);
+      this.kbViewHost.Name = "kbViewHost";
+      this.kbViewHost.ReadOnly = true;
+      this.kbViewHost.Size = new System.Drawing.Size(675, 471);
+      this.kbViewHost.TabIndex = 3;
+      this.kbViewHost.ViewsLabelVisible = true;
+      this.kbViewHost.ViewType = null;
+      // 
+      // problemInstancesTabPage
+      // 
+      this.problemInstancesTabPage.Controls.Add(this.projectionLabel);
+      this.problemInstancesTabPage.Controls.Add(this.projectionComboBox);
+      this.problemInstancesTabPage.Controls.Add(this.problemInstancesTabControl);
+      this.problemInstancesTabPage.Controls.Add(this.refreshMapButton);
+      this.problemInstancesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.problemInstancesTabPage.Name = "problemInstancesTabPage";
+      this.problemInstancesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.problemInstancesTabPage.Size = new System.Drawing.Size(681, 477);
+      this.problemInstancesTabPage.TabIndex = 6;
+      this.problemInstancesTabPage.Text = "Problem Instances";
+      this.problemInstancesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // projectionLabel
+      // 
+      this.projectionLabel.AutoSize = true;
+      this.projectionLabel.Location = new System.Drawing.Point(35, 11);
+      this.projectionLabel.Name = "projectionLabel";
+      this.projectionLabel.Size = new System.Drawing.Size(57, 13);
+      this.projectionLabel.TabIndex = 6;
+      this.projectionLabel.Text = "Projection:";
+      // 
+      // projectionComboBox
+      // 
+      this.projectionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.projectionComboBox.FormattingEnabled = true;
+      this.projectionComboBox.Location = new System.Drawing.Point(98, 8);
+      this.projectionComboBox.Name = "projectionComboBox";
+      this.projectionComboBox.Size = new System.Drawing.Size(158, 21);
+      this.projectionComboBox.TabIndex = 5;
+      this.projectionComboBox.SelectedIndexChanged += new System.EventHandler(this.ProjectionComboBoxOnSelectedIndexChanged);
+      // 
+      // problemInstancesTabControl
+      // 
+      this.problemInstancesTabControl.AllowDrop = true;
+      this.problemInstancesTabControl.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.problemInstancesTabControl.Controls.Add(this.instancesTabPage);
+      this.problemInstancesTabControl.Controls.Add(this.mapTabPage);
+      this.problemInstancesTabControl.Location = new System.Drawing.Point(3, 35);
+      this.problemInstancesTabControl.Name = "problemInstancesTabControl";
+      this.problemInstancesTabControl.SelectedIndex = 0;
+      this.problemInstancesTabControl.Size = new System.Drawing.Size(675, 439);
+      this.problemInstancesTabControl.TabIndex = 4;
+      // 
+      // instancesTabPage
+      // 
+      this.instancesTabPage.Controls.Add(this.problemInstancesView);
+      this.instancesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.instancesTabPage.Name = "instancesTabPage";
+      this.instancesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.instancesTabPage.Size = new System.Drawing.Size(667, 413);
+      this.instancesTabPage.TabIndex = 0;
+      this.instancesTabPage.Text = "Instances";
+      this.instancesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // problemInstancesView
+      // 
+      this.problemInstancesView.Caption = "View";
+      this.problemInstancesView.Content = null;
+      this.problemInstancesView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.problemInstancesView.Enabled = false;
+      this.problemInstancesView.Location = new System.Drawing.Point(3, 3);
+      this.problemInstancesView.Name = "problemInstancesView";
+      this.problemInstancesView.ReadOnly = false;
+      this.problemInstancesView.Size = new System.Drawing.Size(661, 407);
+      this.problemInstancesView.TabIndex = 0;
+      this.problemInstancesView.ViewsLabelVisible = true;
+      this.problemInstancesView.ViewType = null;
+      // 
+      // mapTabPage
+      // 
+      this.mapTabPage.Controls.Add(this.instanceMapChart);
+      this.mapTabPage.Location = new System.Drawing.Point(4, 22);
+      this.mapTabPage.Name = "mapTabPage";
+      this.mapTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.mapTabPage.Size = new System.Drawing.Size(667, 413);
+      this.mapTabPage.TabIndex = 1;
+      this.mapTabPage.Text = "Map";
+      this.mapTabPage.UseVisualStyleBackColor = true;
+      // 
+      // instanceMapChart
+      // 
+      chartArea2.AxisX.MajorGrid.LineColor = System.Drawing.Color.LightGray;
+      chartArea2.AxisX.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+      chartArea2.AxisY.MajorGrid.LineColor = System.Drawing.Color.LightGray;
+      chartArea2.AxisY.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+      chartArea2.Name = "Default";
+      this.instanceMapChart.ChartAreas.Add(chartArea2);
+      this.instanceMapChart.Dock = System.Windows.Forms.DockStyle.Fill;
+      legend2.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
+      legend2.Enabled = false;
+      legend2.Name = "Legend";
+      this.instanceMapChart.Legends.Add(legend2);
+      this.instanceMapChart.Location = new System.Drawing.Point(3, 3);
+      this.instanceMapChart.Name = "instanceMapChart";
+      series3.ChartArea = "Default";
+      series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
+      series3.Legend = "Legend";
+      series3.MarkerSize = 10;
+      series3.Name = "InstancesSeries";
+      series4.ChartArea = "Default";
+      series4.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
+      series4.Legend = "Legend";
+      series4.MarkerColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+      series4.MarkerSize = 15;
+      series4.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
+      series4.Name = "CurrentInstanceSeries";
+      this.instanceMapChart.Series.Add(series3);
+      this.instanceMapChart.Series.Add(series4);
+      this.instanceMapChart.Size = new System.Drawing.Size(661, 407);
+      this.instanceMapChart.TabIndex = 0;
+      // 
+      // refreshMapButton
+      // 
+      this.refreshMapButton.Location = new System.Drawing.Point(3, 6);
+      this.refreshMapButton.Name = "refreshMapButton";
+      this.refreshMapButton.Size = new System.Drawing.Size(26, 23);
+      this.refreshMapButton.TabIndex = 1;
+      this.refreshMapButton.Text = "Refresh";
+      this.refreshMapButton.UseVisualStyleBackColor = true;
+      this.refreshMapButton.Click += new System.EventHandler(this.RefreshMapButtonOnClick);
+      // 
+      // progressPanel
+      // 
+      this.progressPanel.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.progressPanel.Location = new System.Drawing.Point(0, 32);
+      this.progressPanel.Name = "progressPanel";
+      this.progressPanel.Size = new System.Drawing.Size(692, 503);
+      this.progressPanel.TabIndex = 2;
+      this.progressPanel.Visible = false;
+      // 
+      // okbDownloadButton
+      // 
+      this.okbDownloadButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.okbDownloadButton.Location = new System.Drawing.Point(3, 3);
+      this.okbDownloadButton.Name = "okbDownloadButton";
+      this.okbDownloadButton.Size = new System.Drawing.Size(686, 23);
+      this.okbDownloadButton.TabIndex = 1;
+      this.okbDownloadButton.Text = "Download from OKB";
+      this.okbDownloadButton.UseVisualStyleBackColor = true;
+      this.okbDownloadButton.Click += new System.EventHandler(this.OkbDownloadButtonOnClick);
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "hl";
+      this.openFileDialog.FileName = "Optimizer";
+      this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
+      this.openFileDialog.Title = "Open Optimizer";
+      // 
+      // ExpertSystemView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.okbDownloadButton);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.progressPanel);
+      this.Name = "ExpertSystemView";
+      this.Size = new System.Drawing.Size(692, 535);
+      this.tabControl.ResumeLayout(false);
+      this.problemTabPage.ResumeLayout(false);
+      this.solutionsTabPage.ResumeLayout(false);
+      this.solutionsTabPage.PerformLayout();
+      this.solutionsTabControl.ResumeLayout(false);
+      this.solutionsQualityTabPage.ResumeLayout(false);
+      this.solutionsLengthScaleTabPage.ResumeLayout(false);
+      this.solutionsDiversityTabPage.ResumeLayout(false);
+      this.solutionsFdcTabPage.ResumeLayout(false);
+      this.solutionsFdcTabPage.PerformLayout();
+      this.solutionsNetworkTabPage.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).EndInit();
+      this.solversTabPage.ResumeLayout(false);
+      this.solversTabPage.PerformLayout();
+      this.solverTabControl.ResumeLayout(false);
+      this.resultsTabPage.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.operatorGraphTabPage.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
+      this.okbTabPage.ResumeLayout(false);
+      this.problemInstancesTabPage.ResumeLayout(false);
+      this.problemInstancesTabPage.PerformLayout();
+      this.problemInstancesTabControl.ResumeLayout(false);
+      this.instancesTabPage.ResumeLayout(false);
+      this.mapTabPage.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label evaluationsLimitabel;
+    private System.Windows.Forms.TextBox maxEvaluationsTextBox;
+    private MainForm.WindowsForms.DragOverTabControl tabControl;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private HeuristicLab.Optimization.Views.RunCollectionView runsView;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.TabPage problemTabPage;
+    private MainForm.WindowsForms.ViewHost problemViewHost;
+    private System.Windows.Forms.TabPage solversTabPage;
+    private System.Windows.Forms.Label algorithmSuggestionLabel;
+    private System.Windows.Forms.ComboBox suggestedInstancesComboBox;
+    private System.Windows.Forms.TabPage okbTabPage;
+    private System.Windows.Forms.TabPage problemInstancesTabPage;
+    private System.Windows.Forms.Button refreshMapButton;
+    private System.Windows.Forms.Button okbDownloadButton;
+    private System.Windows.Forms.Panel progressPanel;
+    private MainForm.WindowsForms.ViewHost kbViewHost;
+    private System.Windows.Forms.Button algorithmStartButton;
+    private HeuristicLab.MainForm.WindowsForms.DragOverTabControl problemInstancesTabControl;
+    private System.Windows.Forms.TabPage instancesTabPage;
+    private MainForm.WindowsForms.ViewHost problemInstancesView;
+    private System.Windows.Forms.TabPage mapTabPage;
+    private Visualization.ChartControlsExtensions.EnhancedChart instanceMapChart;
+    private System.Windows.Forms.Label projectionLabel;
+    private System.Windows.Forms.ComboBox projectionComboBox;
+    private System.Windows.Forms.TabPage solutionsTabPage;
+    private HeuristicLab.MainForm.WindowsForms.DragOverTabControl solutionsTabControl;
+    private System.Windows.Forms.TabPage solutionsQualityTabPage;
+    private System.Windows.Forms.TabPage solutionsDiversityTabPage;
+    private MainForm.WindowsForms.ViewHost solutionsQualityViewHost;
+    private MainForm.WindowsForms.ViewHost solutionsDiversityViewHost;
+    private System.Windows.Forms.Label solutionDiversitySimilarityLabel;
+    private System.Windows.Forms.ComboBox similarityComboBox;
+    private System.Windows.Forms.TabPage solutionsLengthScaleTabPage;
+    private System.Windows.Forms.TabPage solutionsNetworkTabPage;
+    private MainForm.WindowsForms.ViewHost solutionsLengthScaleViewHost;
+    private System.Windows.Forms.TabPage solutionsFdcTabPage;
+    private MainForm.WindowsForms.ViewHost solutionsFdcViewHost;
+    private Visualization.ChartControlsExtensions.EnhancedChart solutionsNetworkChart;
+    private System.Windows.Forms.Button algorithmCloneButton;
+    private System.Windows.Forms.Label solutionNameLabel;
+    private System.Windows.Forms.ComboBox solutionNameComboBox;
+    private MainForm.WindowsForms.DragOverTabControl solverTabControl;
+    private System.Windows.Forms.TabPage resultsTabPage;
+    private Optimization.Views.ResultCollectionView solverResultsView;
+    private System.Windows.Forms.TabPage solutionSeedingTabPage;
+    private System.Windows.Forms.TabPage parametersTabPage;
+    private Core.Views.ParameterCollectionView solverParametersView;
+    private System.Windows.Forms.Panel seedingStrategyPanel;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.TabPage operatorGraphTabPage;
+    private MainForm.WindowsForms.ViewHost operatorGraphViewHost;
+    private System.Windows.Forms.CheckBox fdcBetweenBestCheckBox;
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterAllinOneView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterAllinOneView.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterAllinOneView.cs	(revision 13722)
@@ -0,0 +1,550 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Analysis;
+using HeuristicLab.Analysis.QualityAnalysis;
+using HeuristicLab.Clients.OKB.RunCreation;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Data;
+using HeuristicLab.Data.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Optimization;
+using HeuristicLab.Optimization.Views;
+using HeuristicLab.OptimizationExpertSystem.Common;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+
+namespace HeuristicLab.OptimizationExpertSystem {
+  [View("Knowledge Center (all-in-one view)")]
+  [Content(typeof(KnowledgeCenter), IsDefaultView = true)]
+  public partial class KnowledgeCenterAllinOneView : AsynchronousContentView {
+    private EnumValueView<SeedingStrategyTypes> seedingStrategyView;
+    private CheckedItemListView<IScope> seedingSolutionsView;
+    protected virtual bool SuppressEvents { get; set; }
+    private bool okbDownloadInProgress;
+
+    public new KnowledgeCenter Content {
+      get { return (KnowledgeCenter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public KnowledgeCenterAllinOneView() {
+      InitializeComponent();
+      // brings progress panel to front (it is not visible by default, but obstructs other elements in designer)
+      this.Controls.SetChildIndex(this.progressPanel, 0);
+      algorithmStartButton.Text = string.Empty;
+      algorithmStartButton.Image = VSImageLibrary.Play;
+      algorithmCloneButton.Text = string.Empty;
+      algorithmCloneButton.Image = VSImageLibrary.Clone;
+      refreshMapButton.Text = string.Empty;
+      refreshMapButton.Image = VSImageLibrary.Refresh;
+      seedingStrategyView = new EnumValueView<SeedingStrategyTypes>() {
+        Dock = DockStyle.Fill
+      };
+      seedingSolutionsView = new CheckedItemListView<IScope>() {
+        Dock = DockStyle.Fill
+      };
+      seedingStrategyPanel.Controls.Add(seedingStrategyView);
+      solutionSeedingTabPage.Controls.Add(seedingSolutionsView);
+    }
+
+    #region Event Registration
+    protected override void DeregisterContentEvents() {
+      Content.SuggestedInstances.CollectionReset -= SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsAdded -= SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsMoved -= SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsRemoved -= SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsReplaced -= SuggestedInstancesOnChanged;
+      Content.SolutionSeedingPool.CollectionReset -= SeedingPoolOnChanged;
+      Content.SolutionSeedingPool.ItemsAdded -= SeedingPoolOnChanged;
+      Content.SolutionSeedingPool.ItemsRemoved -= SeedingPoolOnChanged;
+      Content.SolutionSeedingPool.ItemsReplaced -= SeedingPoolOnChanged;
+      Content.SolutionSeedingPool.CheckedItemsChanged -= SeedingPoolOnChanged;
+      DeregisterProblemEvents(Content.Problem);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.SuggestedInstances.CollectionReset += SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsAdded += SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsMoved += SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsRemoved += SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsReplaced += SuggestedInstancesOnChanged;
+      Content.SolutionSeedingPool.CollectionReset += SeedingPoolOnChanged;
+      Content.SolutionSeedingPool.ItemsAdded += SeedingPoolOnChanged;
+      Content.SolutionSeedingPool.ItemsRemoved += SeedingPoolOnChanged;
+      Content.SolutionSeedingPool.ItemsReplaced += SeedingPoolOnChanged;
+      Content.SolutionSeedingPool.CheckedItemsChanged += SeedingPoolOnChanged;
+      RegisterProblemEvents(Content.Problem);
+    }
+
+    private void DeregisterProblemEvents(OKBProblem problem) {
+      if (problem == null) return;
+      problem.Solutions.ItemsAdded -= SolutionsOnChanged;
+      problem.Solutions.ItemsRemoved -= SolutionsOnChanged;
+      problem.Solutions.ItemsReplaced -= SolutionsOnChanged;
+      problem.Solutions.CollectionReset -= SolutionsOnChanged;
+      problem.ProblemChanged -= ContentOnProblemChanged;
+    }
+
+    private void RegisterProblemEvents(OKBProblem problem) {
+      if (problem == null) return;
+      problem.Solutions.ItemsAdded += SolutionsOnChanged;
+      problem.Solutions.ItemsRemoved += SolutionsOnChanged;
+      problem.Solutions.ItemsReplaced += SolutionsOnChanged;
+      problem.Solutions.CollectionReset += SolutionsOnChanged;
+      problem.ProblemChanged += ContentOnProblemChanged;
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      SuppressEvents = true;
+      okbDownloadInProgress = false;
+      try {
+        if (Content == null) {
+          maxEvaluationsTextBox.Text = String.Empty;
+          problemViewHost.Content = null;
+          solverParametersView.Content = null;
+          solverResultsView.Content = null;
+          runsView.Content = null;
+          kbViewHost.Content = null;
+          problemInstancesView.Content = null;
+          seedingStrategyView.Content = null;
+          seedingSolutionsView.Content = null;
+        } else {
+          maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString();
+          problemViewHost.Content = Content.Problem;
+          runsView.Content = Content.InstanceRuns;
+          kbViewHost.ViewType = typeof(RunCollectionRLDView);
+          kbViewHost.Content = Content.KnowledgeBase;
+          problemInstancesView.Content = Content.ProblemInstances;
+          solverResultsView.Content = null;
+          seedingStrategyView.Content = Content.SeedingStrategy;
+          seedingSolutionsView.Content = Content.SolutionSeedingPool;
+        }
+      } finally { SuppressEvents = false; }
+      UpdateSuggestedInstancesCombobox();
+      UpdateSimilarityCalculators();
+      UpdateNamesComboboxes();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      maxEvaluationsTextBox.Enabled = Content != null && !ReadOnly && !Locked;
+      problemViewHost.Enabled = Content != null && !ReadOnly && !Locked && !okbDownloadInProgress;
+      suggestedInstancesComboBox.Enabled = Content != null && !ReadOnly && !Locked && !okbDownloadInProgress;
+      algorithmStartButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
+      algorithmCloneButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
+      runsView.Enabled = Content != null;
+      kbViewHost.Enabled = Content != null && !okbDownloadInProgress;
+      problemInstancesView.Enabled = Content != null && !okbDownloadInProgress;
+      refreshMapButton.Enabled = Content != null;
+      okbDownloadButton.Enabled = Content != null && Content.Problem != null && Content.Problem.ProblemId >= 0 && !ReadOnly && !Locked && !okbDownloadInProgress;
+    }
+
+    #region Event Handlers
+    #region Content events
+    private void ContentOnProblemChanged(object sender, EventArgs eventArgs) {
+      UpdateSuggestedInstancesCombobox();
+      UpdateSimilarityCalculators();
+      SetEnabledStateOfControls();
+    }
+
+    private void SuggestedInstancesOnChanged(object sender, EventArgs e) {
+      UpdateSuggestedInstancesCombobox();
+    }
+
+    private void SeedingPoolOnChanged(object sender, EventArgs e) {
+      UpdateSolutionVisualization();
+    }
+
+    private void SolutionsOnChanged(object sender, EventArgs e) {
+      UpdateNamesComboboxes();
+      UpdateSolutionVisualization();
+    }
+    #endregion
+
+    #region Control events
+    private void MaxEvaluationsTextBoxOnValidating(object sender, CancelEventArgs e) {
+      if (SuppressEvents) return;
+      if (InvokeRequired) {
+        Invoke((Action<object, CancelEventArgs>)MaxEvaluationsTextBoxOnValidating, sender, e);
+        return;
+      }
+      int value;
+      if (!int.TryParse(maxEvaluationsTextBox.Text, out value)) {
+        e.Cancel = !maxEvaluationsTextBox.ReadOnly && maxEvaluationsTextBox.Enabled;
+        //errorProvider.SetError(maxEvaluationsTextBox, "Please enter a valid integer number.");
+      } else {
+        Content.MaximumEvaluations.Value = value;
+        e.Cancel = false;
+        //errorProvider.SetError(maxEvaluationsTextBox, null);
+      }
+    }
+
+    private void RefreshMapButtonOnClick(object sender, EventArgs e) {
+      UpdateProjectionComboBox();
+    }
+
+    private void OkbDownloadButtonOnClick(object sender, EventArgs e) {
+      if (Content.Problem.ProblemId == -1) {
+        MessageBox.Show("Please select a problem instance first.");
+        return;
+      }
+      var progress = new Progress();
+      progress.ProgressStateChanged += OkbDownloadProgressOnStateChanged;
+      Content.UpdateKnowledgeBaseAsync(progress);
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(progressPanel, progress);
+      progressPanel.Visible = true;
+      SetEnabledStateOfControls();
+    }
+
+    private void OkbDownloadProgressOnStateChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)OkbDownloadProgressOnStateChanged, sender, e); return; }
+      var progress = (IProgress)sender;
+      okbDownloadInProgress = progress.ProgressState == ProgressState.Started;
+      SetEnabledStateOfControls();
+      if (!okbDownloadInProgress) {
+        progressPanel.Visible = false;
+        progress.ProgressStateChanged -= OkbDownloadProgressOnStateChanged;
+      }
+    }
+
+    private async void AlgorithmStartButtonOnClick(object sender, EventArgs e) {
+      if (suggestedInstancesComboBox.SelectedIndex >= 0) {
+        solverResultsView.Content = await Content.StartAlgorithmAsync(suggestedInstancesComboBox.SelectedIndex);
+      }
+    }
+
+    private void AlgorithmCloneButtonOnClick(object sender, EventArgs e) {
+      if (suggestedInstancesComboBox.SelectedIndex >= 0)
+        MainFormManager.MainForm.ShowContent((IAlgorithm)Content.SuggestedInstances[suggestedInstancesComboBox.SelectedIndex].Clone());
+    }
+
+    private void ProjectionComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)ProjectionComboBoxOnSelectedIndexChanged, sender, e); return; }
+      if (projectionComboBox.SelectedIndex < 0) return;
+      var projection = (string)projectionComboBox.SelectedItem;
+      var instancesSeries = instanceMapChart.Series["InstancesSeries"];
+      var currentInstanceSeries = instanceMapChart.Series["CurrentInstanceSeries"];
+
+      instancesSeries.Points.Clear();
+      currentInstanceSeries.Points.Clear();
+
+      foreach (var run in Content.ProblemInstances) {
+        var xKey = "Projection." + projection + ".X";
+        var yKey = "Projection." + projection + ".Y";
+        if (!run.Results.ContainsKey(xKey) || !run.Results.ContainsKey(yKey)
+          || !(run.Results[xKey] is Data.DoubleValue) || !(run.Results[yKey] is Data.DoubleValue)) continue;
+        var x = ((Data.DoubleValue)run.Results[xKey]).Value;
+        var y = ((Data.DoubleValue)run.Results[yKey]).Value;
+        var dataPoint = new DataPoint(x, y) {
+          Label = run.Name
+        };
+        instancesSeries.Points.Add(dataPoint);
+      }
+
+      var curPoint = Content.ProjectCurrentInstance(projection);
+      if (curPoint != null) {
+        var dp = new DataPoint(curPoint.Item1, curPoint.Item2) {
+          Label = Content.Problem.Problem.Name
+        };
+        currentInstanceSeries.Points.Add(dp);
+      }
+    }
+
+    private void SuggestedInstancesComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SuggestedInstancesComboBoxOnSelectedIndexChanged, sender, e); return; }
+      if (suggestedInstancesComboBox.SelectedIndex >= 0) {
+        var alg = Content.SuggestedInstances[suggestedInstancesComboBox.SelectedIndex];
+        solverParametersView.Content = alg.Parameters;
+        var engineAlg = alg as EngineAlgorithm;
+        if (engineAlg != null) operatorGraphViewHost.Content = engineAlg.OperatorGraph;
+        else operatorGraphViewHost.Content = new Data.StringValue("Algorithm is not modeled as an operator graph.");
+      } else {
+        solverParametersView.Content = null;
+        operatorGraphViewHost.Content = null;
+      }
+      SetEnabledStateOfControls();
+    }
+
+    private void SimilarityComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SimilarityComboBoxOnSelectedIndexChanged, sender, e); return; }
+      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+      if (calculator != null) {
+        calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
+        calculator.QualityVariableName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
+      }
+      UpdateSolutionDiversityAnalysis(calculator);
+      UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
+      UpdateSolutionLengthScaleAnalysis(calculator);
+      UpdateSolutionNetworkAnalysis(calculator);
+    }
+
+    private void FdcBetweenBestCheckBoxOnCheckedChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)FdcBetweenBestCheckBoxOnCheckedChanged, sender, e); return; }
+      UpdateSolutionFdcAnalysis((ISolutionSimilarityCalculator)similarityComboBox.SelectedItem, fdcBetweenBestCheckBox.Checked);
+    }
+
+    private void SolutionsNetworkChartOnMouseClick(object sender, MouseEventArgs e) {
+      var result = solutionsNetworkChart.HitTest(e.X, e.Y);
+      if (result.ChartElementType == ChartElementType.DataPoint) {
+        var point = (DataPoint)result.Object;
+        var solutionScope = point.Tag as IScope;
+        if (solutionScope == null || !Content.SolutionSeedingPool.Contains(solutionScope)) return;
+        Content.SolutionSeedingPool.SetItemCheckedState(solutionScope, !Content.SolutionSeedingPool.ItemChecked(solutionScope));
+      }
+    }
+    #endregion
+    #endregion
+
+    #region Control Configuration
+    private void UpdateSuggestedInstancesCombobox() {
+      var prevSelection = (IAlgorithm)suggestedInstancesComboBox.SelectedItem;
+      var prevNewIndex = -1;
+      suggestedInstancesComboBox.Items.Clear();
+      if (Content == null) return;
+
+      for (var i = 0; i < Content.SuggestedInstances.Count; i++) {
+        suggestedInstancesComboBox.Items.Add(Content.SuggestedInstances[i]);
+        if (prevSelection == null || Content.SuggestedInstances[i].Name == prevSelection.Name)
+          prevNewIndex = prevSelection == null ? 0 : i;
+      }
+      if (prevNewIndex >= 0) {
+        suggestedInstancesComboBox.SelectedIndex = prevNewIndex;
+      }
+    }
+
+    private void UpdateSimilarityCalculators() {
+      var selected = (ISolutionSimilarityCalculator)(similarityComboBox.SelectedIndex >= 0 ? similarityComboBox.SelectedItem : null);
+      similarityComboBox.Items.Clear();
+
+      if (Content == null || Content.Problem == null) return;
+
+      foreach (var calc in Content.Problem.Operators.OfType<ISolutionSimilarityCalculator>()) {
+        similarityComboBox.Items.Add(calc);
+        if (selected != null && calc.ItemName == selected.ItemName) similarityComboBox.SelectedItem = calc;
+      }
+      if (selected == null && similarityComboBox.Items.Count > 0)
+        similarityComboBox.SelectedIndex = 0;
+    }
+
+    private void UpdateNamesComboboxes() {
+      var selectedSolutionName = solutionNameComboBox.SelectedIndex >= 0 ? (string)solutionNameComboBox.SelectedItem : string.Empty;
+
+      solutionNameComboBox.Items.Clear();
+      if (Content == null) return;
+      var solutionNames = Content.Problem.Solutions.Select(x => x.Solution).OfType<IScope>().SelectMany(x => x.Variables);
+
+      foreach (var sn in solutionNames.GroupBy(x => x.Name).OrderBy(x => x.Key)) {
+        solutionNameComboBox.Items.Add(sn.Key);
+        // either it was previously selected, or the variable value is defined in the HeuristicLab.Encodings sub-namespace
+        if (sn.Key == selectedSolutionName || (string.IsNullOrEmpty(selectedSolutionName) && sn.All(x => x.Value != null && x.Value.GetType().FullName.StartsWith("HeuristicLab.Encodings."))))
+          solutionNameComboBox.SelectedItem = sn.Key;
+      }
+    }
+    
+    private void UpdateProjectionComboBox() {
+      projectionComboBox.Items.Clear();
+      var projStrings = Content.ProblemInstances
+        .SelectMany(x => x.Results.Where(y => Regex.IsMatch(y.Key, "^Projection[.].*[.][XY]$")))
+        .Select(x => Regex.Match(x.Key, "Projection[.](?<g>.*)[.][XY]").Groups["g"].Value)
+        .Distinct();
+      foreach (var str in projStrings) {
+        projectionComboBox.Items.Add(str);
+      }
+    }
+    #endregion
+
+    #region Visualization
+    #region Solution Visualization
+    public void UpdateSolutionVisualization() {
+      if (InvokeRequired) { Invoke((Action)UpdateSolutionVisualization); return;  }
+      var qualityName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
+      UpdateSolutionQualityAnalysis(qualityName);
+      if (similarityComboBox.SelectedIndex >= 0) {
+        var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+        UpdateSolutionDiversityAnalysis(calculator);
+        UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
+        UpdateSolutionLengthScaleAnalysis(calculator);
+        UpdateSolutionNetworkAnalysis(calculator);
+      } else {
+        solutionsDiversityViewHost.Content = null;
+        solutionsFdcViewHost.Content = null;
+        solutionsLengthScaleViewHost.Content = null;
+        solutionsNetworkChart.Series.First().Points.Clear();
+      }
+    }
+    private void UpdateSolutionQualityAnalysis(string qualityName) {
+      var dt = solutionsQualityViewHost.Content as DataTable;
+      if (dt == null) {
+        dt = QualityDistributionAnalyzer.PrepareTable(qualityName);
+        dt.VisualProperties.Title = "Quality Distribution";
+        solutionsQualityViewHost.Content = dt;
+      }
+      QualityDistributionAnalyzer.UpdateTable(dt, GetSolutionScopes().Select(x => GetQuality(x, qualityName) ?? double.NaN).Where(x => !double.IsNaN(x)));
+    }
+
+    private void UpdateSolutionDiversityAnalysis(ISolutionSimilarityCalculator calculator) {
+      try {
+        solutionsDiversityViewHost.Content = null;
+        var solutionScopes = GetSolutionScopes();
+        var similarities = new double[solutionScopes.Count, solutionScopes.Count];
+        for (var i = 0; i < solutionScopes.Count; i++) {
+          for (var j = 0; j < solutionScopes.Count; j++)
+            similarities[i, j] = calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
+        }
+        var hm = new HeatMap(similarities, "Solution Similarities", 0.0, 1.0);
+        solutionsDiversityViewHost.Content = hm;
+      } catch { }
+    }
+
+    private void UpdateSolutionFdcAnalysis(ISolutionSimilarityCalculator calculator, bool distanceToBest) {
+      try {
+        solutionsFdcViewHost.Content = null;
+        var solutionScopes = GetSolutionScopes();
+        var points = new List<Point2D<double>>();
+        if (distanceToBest) {
+          var maximization = ((IValueParameter<Data.BoolValue>)Content.Problem.MaximizationParameter).Value.Value;
+          var bestSolutions = (maximization ? solutionScopes.MaxItems(x => GetQuality(x, calculator.QualityVariableName) ?? double.NegativeInfinity)
+                                            : solutionScopes.MinItems(x => GetQuality(x, calculator.QualityVariableName) ?? double.PositiveInfinity)).ToList();
+          foreach (var solScope in solutionScopes.Except(bestSolutions)) {
+            var maxSimilarity = bestSolutions.Max(x => calculator.CalculateSolutionSimilarity(solScope, x));
+            var qDiff = (GetQuality(solScope, calculator.QualityVariableName) ?? double.NaN)
+                      - (GetQuality(bestSolutions[0], calculator.QualityVariableName) ?? double.NaN);
+            points.Add(new Point2D<double>(Math.Abs(qDiff), 1.0 - maxSimilarity));
+          }
+        } else {
+          for (int i = 0; i < solutionScopes.Count; i++) {
+            for (int j = 0; j < solutionScopes.Count; j++) {
+              if (i == j) continue;
+              var qDiff = (GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN)
+                          - (GetQuality(solutionScopes[j], calculator.QualityVariableName) ?? double.NaN);
+              if (double.IsNaN(qDiff)) continue;
+              points.Add(new Point2D<double>(Math.Abs(qDiff), 1.0 - calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j])));
+            }
+          }
+        }
+        var splot = new ScatterPlot("Fitness-Distance", "");
+        splot.VisualProperties.XAxisTitle = "Absolute Fitness Difference";
+        splot.VisualProperties.XAxisMinimumFixedValue = 0.0;
+        splot.VisualProperties.XAxisMinimumAuto = false;
+        splot.VisualProperties.YAxisTitle = "Solution Distance";
+        splot.VisualProperties.YAxisMinimumFixedValue = 0.0;
+        splot.VisualProperties.YAxisMinimumAuto = false;
+        splot.VisualProperties.YAxisMaximumFixedValue = 1.0;
+        splot.VisualProperties.YAxisMaximumAuto = false;
+        var row = new ScatterPlotDataRow("Fdc", "", points);
+        row.VisualProperties.PointSize = 7;
+        splot.Rows.Add(row);
+        solutionsFdcViewHost.Content = splot;
+      } catch { }
+    }
+
+    private void UpdateSolutionLengthScaleAnalysis(ISolutionSimilarityCalculator calculator) {
+      try {
+        solutionsLengthScaleViewHost.Content = null;
+        var dt = solutionsLengthScaleViewHost.Content as DataTable;
+        if (dt == null) {
+          dt = QualityDistributionAnalyzer.PrepareTable("Length Scale");
+          solutionsLengthScaleViewHost.Content = dt;
+        }
+        QualityDistributionAnalyzer.UpdateTable(dt, CalculateLengthScale(calculator));
+      } catch {
+        solutionsLengthScaleViewHost.Content = null;
+      }
+    }
+
+    private IEnumerable<double> CalculateLengthScale(ISolutionSimilarityCalculator calculator) {
+      var solutionScopes = GetSolutionScopes();
+      for (var i = 0; i < solutionScopes.Count; i++) {
+        for (var j = 0; j < solutionScopes.Count; j++) {
+          if (i == j) continue;
+          var sim = calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
+          if (sim.IsAlmost(0)) continue;
+          var qDiff = (GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN)
+                    - (GetQuality(solutionScopes[j], calculator.QualityVariableName) ?? double.NaN);
+          if (!double.IsNaN(qDiff)) yield return Math.Abs(qDiff) / sim;
+        }
+      }
+    }
+
+    private void UpdateSolutionNetworkAnalysis(ISolutionSimilarityCalculator calculator) {
+      var series = solutionsNetworkChart.Series["SolutionSeries"];
+      var seedingSeries = solutionsNetworkChart.Series["SeedingSolutionSeries"];
+      try {
+        series.Points.Clear();
+        seedingSeries.Points.Clear();
+        var solutionScopes = GetSolutionScopes();
+        var dissimilarities = new DoubleMatrix(solutionScopes.Count, solutionScopes.Count);
+        for (var i = 0; i < solutionScopes.Count; i++) {
+          for (var j = 0; j < solutionScopes.Count; j++) {
+            if (i == j) continue;
+            dissimilarities[i, j] = 1.0 - calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
+          }
+        }
+        var coords = MultidimensionalScaling.KruskalShepard(dissimilarities);
+        for (var i = 0; i < coords.Rows; i++) {
+          var quality = GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN;
+          var dataPoint = new DataPoint() {
+            Name = (i + 1).ToString(),
+            XValue = coords[i, 0],
+            YValues = new[] {coords[i, 1], quality},
+            Label = i + ": " + quality,
+            Tag = solutionScopes[i]
+          };
+          if (Content.SolutionSeedingPool.Contains(solutionScopes[i]) && Content.SolutionSeedingPool.ItemChecked(solutionScopes[i]))
+            seedingSeries.Points.Add(dataPoint);
+          else series.Points.Add(dataPoint);
+        }
+      } catch {
+        // problems in calculating the similarity
+        series.Points.Clear();
+        seedingSeries.Points.Clear();
+      }
+    }
+    #endregion
+    #endregion
+
+    private List<IScope> GetSolutionScopes() {
+      return Content.Problem.Solutions.Select(x => x.Solution).OfType<IScope>().ToList();
+    } 
+
+    private double? GetQuality(IScope scope, string qualityName) {
+      IVariable v;
+      if (!scope.Variables.TryGetValue(qualityName, out v)) return null;
+      var dval = v.Value as Data.DoubleValue;
+      if (dval == null) return null;
+      return dval.Value;
+    }
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterAllinOneView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterAllinOneView.resx	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterAllinOneView.resx	(revision 13722)
@@ -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="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>230, 17</value>
+  </metadata>
+</root>
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterViewBase.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterViewBase.Designer.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterViewBase.Designer.cs	(revision 13722)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.OptimizationExpertSystem {
+  partial class KnowledgeCenterViewBase {
+    /// <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.SuspendLayout();
+      // 
+      // ExpertSystemViewBase
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "ExpertSystemViewBase";
+      this.Size = new System.Drawing.Size(700, 380);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterViewBase.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterViewBase.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterViewBase.cs	(revision 13722)
@@ -0,0 +1,188 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Optimization;
+using HeuristicLab.OptimizationExpertSystem.Common;
+using System;
+
+namespace HeuristicLab.OptimizationExpertSystem {
+  [View("Expert-System View")]
+  public partial class KnowledgeCenterViewBase : AsynchronousContentView {
+    public OptimizationKnowledgeCenter MainForm {
+      get { return (OptimizationKnowledgeCenter)HeuristicLab.MainForm.MainFormManager.MainForm; }
+    }
+
+    public new KnowledgeCenter Content {
+      get { return (KnowledgeCenter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected KnowledgeCenterViewBase() {
+      InitializeComponent();
+    }
+
+    #region Event Registration
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.DownloadStarted += ContentOnDownloadStarted;
+      Content.AlgorithmInstanceStarted += ContentOnAlgorithmInstanceStarted;
+      RegisterContentProblemEvents();
+      RegisterContentProblemInstancesEvents();
+      RegisterContentSolutionSeedingPoolEvents();
+      RegisterContentSuggestedInstancesEvents();
+    }
+
+    private void RegisterContentProblemEvents() {
+      Content.Problem.ProblemChanged += ContentOnProblemChanged;
+      Content.Problem.Solutions.CollectionReset += ContentOnProblemSolutionsChanged;
+      Content.Problem.Solutions.ItemsAdded += ContentOnProblemSolutionsChanged;
+      Content.Problem.Solutions.ItemsReplaced += ContentOnProblemSolutionsChanged;
+      Content.Problem.Solutions.ItemsRemoved += ContentOnProblemSolutionsChanged;
+    }
+
+    private void RegisterContentProblemInstancesEvents() {
+      Content.ProblemInstances.UpdateOfRunsInProgressChanged += ContentOnProblemInstancesChanged;
+      Content.ProblemInstances.ItemsAdded += ContentOnProblemInstancesChanged;
+      Content.ProblemInstances.ItemsRemoved += ContentOnProblemInstancesChanged;
+      Content.ProblemInstances.CollectionReset += ContentOnProblemInstancesChanged;
+      Content.ProblemInstances.ItemChanged += ContentOnProblemInstancesChanged;
+    }
+
+    private void RegisterContentSolutionSeedingPoolEvents() {
+      Content.SolutionSeedingPool.CheckedItemsChanged += ContentOnSolutionSeedingPoolChanged;
+      Content.SolutionSeedingPool.CollectionReset += ContentOnSolutionSeedingPoolChanged;
+      Content.SolutionSeedingPool.ItemsAdded += ContentOnSolutionSeedingPoolChanged;
+      Content.SolutionSeedingPool.ItemsRemoved += ContentOnSolutionSeedingPoolChanged;
+      Content.SolutionSeedingPool.ItemsReplaced += ContentOnSolutionSeedingPoolChanged;
+    }
+
+    private void RegisterContentSuggestedInstancesEvents() {
+      Content.SuggestedInstances.CollectionReset += ContentOnSuggestedInstancesChanged;
+      Content.SuggestedInstances.ItemsAdded += ContentOnSuggestedInstancesChanged;
+      Content.SuggestedInstances.ItemsMoved += ContentOnSuggestedInstancesChanged;
+      Content.SuggestedInstances.ItemsRemoved += ContentOnSuggestedInstancesChanged;
+      Content.SuggestedInstances.ItemsReplaced += ContentOnSuggestedInstancesChanged;
+    }
+
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+      Content.DownloadStarted -= ContentOnDownloadStarted;
+      Content.AlgorithmInstanceStarted -= ContentOnAlgorithmInstanceStarted;
+      DeregisterContentProblemEvents();
+      DeregisterContentProblemInstancesEvents();
+      DeregisterContentSolutionSeedingPoolEvents();
+      DeregisterContentSuggestedInstancesEvents();
+    }
+
+    private void DeregisterContentProblemEvents() {
+      Content.Problem.ProblemChanged -= ContentOnProblemChanged;
+      Content.Problem.Solutions.CollectionReset -= ContentOnProblemSolutionsChanged;
+      Content.Problem.Solutions.ItemsAdded -= ContentOnProblemSolutionsChanged;
+      Content.Problem.Solutions.ItemsReplaced -= ContentOnProblemSolutionsChanged;
+      Content.Problem.Solutions.ItemsRemoved -= ContentOnProblemSolutionsChanged;
+    }
+
+    private void DeregisterContentProblemInstancesEvents() {
+      Content.ProblemInstances.UpdateOfRunsInProgressChanged -= ContentOnProblemInstancesChanged;
+      Content.ProblemInstances.ItemsAdded -= ContentOnProblemInstancesChanged;
+      Content.ProblemInstances.ItemsRemoved -= ContentOnProblemInstancesChanged;
+      Content.ProblemInstances.CollectionReset -= ContentOnProblemInstancesChanged;
+      Content.ProblemInstances.ItemChanged -= ContentOnProblemInstancesChanged;
+    }
+
+    private void DeregisterContentSolutionSeedingPoolEvents() {
+      Content.SolutionSeedingPool.CheckedItemsChanged -= ContentOnSolutionSeedingPoolChanged;
+      Content.SolutionSeedingPool.CollectionReset -= ContentOnSolutionSeedingPoolChanged;
+      Content.SolutionSeedingPool.ItemsAdded -= ContentOnSolutionSeedingPoolChanged;
+      Content.SolutionSeedingPool.ItemsRemoved -= ContentOnSolutionSeedingPoolChanged;
+      Content.SolutionSeedingPool.ItemsReplaced -= ContentOnSolutionSeedingPoolChanged;
+    }
+
+    private void DeregisterContentSuggestedInstancesEvents() {
+      Content.SuggestedInstances.CollectionReset -= ContentOnSuggestedInstancesChanged;
+      Content.SuggestedInstances.ItemsAdded -= ContentOnSuggestedInstancesChanged;
+      Content.SuggestedInstances.ItemsMoved -= ContentOnSuggestedInstancesChanged;
+      Content.SuggestedInstances.ItemsRemoved -= ContentOnSuggestedInstancesChanged;
+      Content.SuggestedInstances.ItemsReplaced -= ContentOnSuggestedInstancesChanged;
+    }
+    #endregion
+
+    protected virtual void OnDownloadStarted(IProgress progress) { }
+    protected virtual void OnDownloadEnded() { }
+    protected virtual void OnAlgorithmInstanceStarted(IAlgorithm algorithm) { }
+    protected virtual void OnPropertyChanged(string propertyName) { }
+    protected virtual void OnProblemChanged() { }
+    protected virtual void OnProblemSolutionsChanged() { }
+    protected virtual void OnProblemInstancesChanged() { }
+    protected virtual void OnSolutionSeedingPoolChanged() { }
+    protected virtual void OnSuggestedInstancesChanged() { }
+    protected virtual void OnKnowledgeBaseChanged() { }
+
+    #region Content Event Handlers
+    private void ContentOnDownloadStarted(object sender, EventArgs<IProgress> e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs<IProgress>>)ContentOnDownloadStarted, sender, e); return; }
+      MainForm.AddOperationProgressToView(this, e.Value);
+      e.Value.ProgressStateChanged += ProgressOnStateChanged;
+      OnDownloadStarted(e.Value);
+    }
+
+    private void ContentOnAlgorithmInstanceStarted(object sender, EventArgs<IAlgorithm> e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs<IAlgorithm>>)ContentOnAlgorithmInstanceStarted, sender, e); return; }
+      OnAlgorithmInstanceStarted(e.Value);
+    }
+
+    private void ProgressOnStateChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)ProgressOnStateChanged, sender, e); return; }
+      var progress = (IProgress)sender;
+      if (progress == null || progress.ProgressState == ProgressState.Started) return;
+      OnDownloadEnded();
+    }
+
+    private void ContentOnProblemChanged(object sender, EventArgs e) {
+      if (InvokeRequired) Invoke((Action)OnProblemChanged);
+      else OnProblemChanged();
+    }
+
+    private void ContentOnProblemSolutionsChanged(object sender, EventArgs e) {
+      if (InvokeRequired) Invoke((Action)OnProblemSolutionsChanged);
+      else OnProblemSolutionsChanged();
+    }
+
+    private void ContentOnProblemInstancesChanged(object sender, EventArgs e) {
+      if (InvokeRequired) Invoke((Action)OnProblemInstancesChanged);
+      else OnProblemInstancesChanged();
+    }
+
+    private void ContentOnSolutionSeedingPoolChanged(object sender, EventArgs e) {
+      if (InvokeRequired) Invoke((Action)OnSolutionSeedingPoolChanged);
+      else OnSolutionSeedingPoolChanged();
+    }
+
+    private void ContentOnSuggestedInstancesChanged(object sender, EventArgs e) {
+      if (InvokeRequired) Invoke((Action)OnSuggestedInstancesChanged);
+      else OnSuggestedInstancesChanged();
+    }
+    #endregion
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterViewBase.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterViewBase.resx	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/KnowledgeCenterViewBase.resx	(revision 13722)
@@ -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/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/SolverView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/SolverView.Designer.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/SolverView.Designer.cs	(revision 13722)
@@ -0,0 +1,425 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.OptimizationExpertSystem {
+  partial class SolverView {
+    /// <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() {
+      WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin();
+      WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin1 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin();
+      WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient1 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin();
+      WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient2 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient3 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient4 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient5 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient3 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient6 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient7 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      this.seedingStrategyPanel = new System.Windows.Forms.Panel();
+      this.solverTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.resultsTabPage = new System.Windows.Forms.TabPage();
+      this.showOnlyFinalResultCheckBox = new System.Windows.Forms.CheckBox();
+      this.resultsDockPanel = new WeifenLuo.WinFormsUI.Docking.DockPanel();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.solutionSeedingTabPage = new System.Windows.Forms.TabPage();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.solverParametersView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.operatorGraphTabPage = new System.Windows.Forms.TabPage();
+      this.operatorGraphViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.algorithmStartButton = new System.Windows.Forms.Button();
+      this.label1 = new System.Windows.Forms.Label();
+      this.evaluationsLimitabel = new System.Windows.Forms.Label();
+      this.algorithmSuggestionLabel = new System.Windows.Forms.Label();
+      this.suggestedInstancesComboBox = new System.Windows.Forms.ComboBox();
+      this.algorithmCloneButton = new System.Windows.Forms.Button();
+      this.maxEvaluationsView = new HeuristicLab.Data.Views.StringConvertibleValueView();
+      this.seededRunsTabPage = new System.Windows.Forms.TabPage();
+      this.seededRunsView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.solverTabControl.SuspendLayout();
+      this.resultsTabPage.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.operatorGraphTabPage.SuspendLayout();
+      this.seededRunsTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // seedingStrategyPanel
+      // 
+      this.seedingStrategyPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.seedingStrategyPanel.Location = new System.Drawing.Point(108, 29);
+      this.seedingStrategyPanel.Name = "seedingStrategyPanel";
+      this.seedingStrategyPanel.Size = new System.Drawing.Size(741, 21);
+      this.seedingStrategyPanel.TabIndex = 12;
+      // 
+      // solverTabControl
+      // 
+      this.solverTabControl.AllowDrop = true;
+      this.solverTabControl.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.solverTabControl.Controls.Add(this.resultsTabPage);
+      this.solverTabControl.Controls.Add(this.runsTabPage);
+      this.solverTabControl.Controls.Add(this.seededRunsTabPage);
+      this.solverTabControl.Controls.Add(this.solutionSeedingTabPage);
+      this.solverTabControl.Controls.Add(this.parametersTabPage);
+      this.solverTabControl.Controls.Add(this.operatorGraphTabPage);
+      this.solverTabControl.Location = new System.Drawing.Point(0, 84);
+      this.solverTabControl.Name = "solverTabControl";
+      this.solverTabControl.SelectedIndex = 0;
+      this.solverTabControl.Size = new System.Drawing.Size(849, 480);
+      this.solverTabControl.TabIndex = 11;
+      // 
+      // resultsTabPage
+      // 
+      this.resultsTabPage.Controls.Add(this.showOnlyFinalResultCheckBox);
+      this.resultsTabPage.Controls.Add(this.resultsDockPanel);
+      this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.resultsTabPage.Name = "resultsTabPage";
+      this.resultsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.resultsTabPage.Size = new System.Drawing.Size(841, 454);
+      this.resultsTabPage.TabIndex = 2;
+      this.resultsTabPage.Text = "Results";
+      this.resultsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // showOnlyFinalResultCheckBox
+      // 
+      this.showOnlyFinalResultCheckBox.AutoSize = true;
+      this.showOnlyFinalResultCheckBox.Location = new System.Drawing.Point(6, 6);
+      this.showOnlyFinalResultCheckBox.Name = "showOnlyFinalResultCheckBox";
+      this.showOnlyFinalResultCheckBox.Size = new System.Drawing.Size(158, 17);
+      this.showOnlyFinalResultCheckBox.TabIndex = 1;
+      this.showOnlyFinalResultCheckBox.Text = "show only final result (faster)";
+      this.showOnlyFinalResultCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // resultsDockPanel
+      // 
+      this.resultsDockPanel.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.resultsDockPanel.DocumentStyle = WeifenLuo.WinFormsUI.Docking.DocumentStyle.DockingWindow;
+      this.resultsDockPanel.Location = new System.Drawing.Point(3, 29);
+      this.resultsDockPanel.Name = "resultsDockPanel";
+      this.resultsDockPanel.Size = new System.Drawing.Size(835, 422);
+      dockPanelGradient1.EndColor = System.Drawing.SystemColors.ControlLight;
+      dockPanelGradient1.StartColor = System.Drawing.SystemColors.ControlLight;
+      autoHideStripSkin1.DockStripGradient = dockPanelGradient1;
+      tabGradient1.EndColor = System.Drawing.SystemColors.Control;
+      tabGradient1.StartColor = System.Drawing.SystemColors.Control;
+      tabGradient1.TextColor = System.Drawing.SystemColors.ControlDarkDark;
+      autoHideStripSkin1.TabGradient = tabGradient1;
+      autoHideStripSkin1.TextFont = new System.Drawing.Font("Segoe UI", 9F);
+      dockPanelSkin1.AutoHideStripSkin = autoHideStripSkin1;
+      tabGradient2.EndColor = System.Drawing.SystemColors.ControlLightLight;
+      tabGradient2.StartColor = System.Drawing.SystemColors.ControlLightLight;
+      tabGradient2.TextColor = System.Drawing.SystemColors.ControlText;
+      dockPaneStripGradient1.ActiveTabGradient = tabGradient2;
+      dockPanelGradient2.EndColor = System.Drawing.SystemColors.Control;
+      dockPanelGradient2.StartColor = System.Drawing.SystemColors.Control;
+      dockPaneStripGradient1.DockStripGradient = dockPanelGradient2;
+      tabGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
+      tabGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
+      tabGradient3.TextColor = System.Drawing.SystemColors.ControlText;
+      dockPaneStripGradient1.InactiveTabGradient = tabGradient3;
+      dockPaneStripSkin1.DocumentGradient = dockPaneStripGradient1;
+      dockPaneStripSkin1.TextFont = new System.Drawing.Font("Segoe UI", 9F);
+      tabGradient4.EndColor = System.Drawing.SystemColors.ActiveCaption;
+      tabGradient4.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
+      tabGradient4.StartColor = System.Drawing.SystemColors.GradientActiveCaption;
+      tabGradient4.TextColor = System.Drawing.SystemColors.ActiveCaptionText;
+      dockPaneStripToolWindowGradient1.ActiveCaptionGradient = tabGradient4;
+      tabGradient5.EndColor = System.Drawing.SystemColors.Control;
+      tabGradient5.StartColor = System.Drawing.SystemColors.Control;
+      tabGradient5.TextColor = System.Drawing.SystemColors.ControlText;
+      dockPaneStripToolWindowGradient1.ActiveTabGradient = tabGradient5;
+      dockPanelGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
+      dockPanelGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
+      dockPaneStripToolWindowGradient1.DockStripGradient = dockPanelGradient3;
+      tabGradient6.EndColor = System.Drawing.SystemColors.InactiveCaption;
+      tabGradient6.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
+      tabGradient6.StartColor = System.Drawing.SystemColors.GradientInactiveCaption;
+      tabGradient6.TextColor = System.Drawing.SystemColors.InactiveCaptionText;
+      dockPaneStripToolWindowGradient1.InactiveCaptionGradient = tabGradient6;
+      tabGradient7.EndColor = System.Drawing.Color.Transparent;
+      tabGradient7.StartColor = System.Drawing.Color.Transparent;
+      tabGradient7.TextColor = System.Drawing.SystemColors.ControlDarkDark;
+      dockPaneStripToolWindowGradient1.InactiveTabGradient = tabGradient7;
+      dockPaneStripSkin1.ToolWindowGradient = dockPaneStripToolWindowGradient1;
+      dockPanelSkin1.DockPaneStripSkin = dockPaneStripSkin1;
+      this.resultsDockPanel.Skin = dockPanelSkin1;
+      this.resultsDockPanel.TabIndex = 0;
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runsView);
+      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(841, 454);
+      this.runsTabPage.TabIndex = 4;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runsView
+      // 
+      this.runsView.Caption = "RunCollection View";
+      this.runsView.Content = null;
+      this.runsView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.runsView.Location = new System.Drawing.Point(3, 3);
+      this.runsView.Name = "runsView";
+      this.runsView.ReadOnly = false;
+      this.runsView.Size = new System.Drawing.Size(835, 448);
+      this.runsView.TabIndex = 0;
+      // 
+      // solutionSeedingTabPage
+      // 
+      this.solutionSeedingTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionSeedingTabPage.Name = "solutionSeedingTabPage";
+      this.solutionSeedingTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionSeedingTabPage.Size = new System.Drawing.Size(841, 454);
+      this.solutionSeedingTabPage.TabIndex = 1;
+      this.solutionSeedingTabPage.Text = "Seeding Pool";
+      this.solutionSeedingTabPage.UseVisualStyleBackColor = true;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.solverParametersView);
+      this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.parametersTabPage.Name = "parametersTabPage";
+      this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.parametersTabPage.Size = new System.Drawing.Size(841, 454);
+      this.parametersTabPage.TabIndex = 0;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solverParametersView
+      // 
+      this.solverParametersView.AllowEditingOfHiddenParameters = true;
+      this.solverParametersView.Caption = "ParameterCollection View";
+      this.solverParametersView.Content = null;
+      this.solverParametersView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solverParametersView.Location = new System.Drawing.Point(3, 3);
+      this.solverParametersView.Name = "solverParametersView";
+      this.solverParametersView.ReadOnly = true;
+      this.solverParametersView.ShowDetails = true;
+      this.solverParametersView.Size = new System.Drawing.Size(835, 448);
+      this.solverParametersView.TabIndex = 0;
+      // 
+      // operatorGraphTabPage
+      // 
+      this.operatorGraphTabPage.Controls.Add(this.operatorGraphViewHost);
+      this.operatorGraphTabPage.Location = new System.Drawing.Point(4, 22);
+      this.operatorGraphTabPage.Name = "operatorGraphTabPage";
+      this.operatorGraphTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.operatorGraphTabPage.Size = new System.Drawing.Size(841, 454);
+      this.operatorGraphTabPage.TabIndex = 3;
+      this.operatorGraphTabPage.Text = "Operator Graph";
+      this.operatorGraphTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorGraphViewHost
+      // 
+      this.operatorGraphViewHost.Caption = "View";
+      this.operatorGraphViewHost.Content = null;
+      this.operatorGraphViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorGraphViewHost.Enabled = false;
+      this.operatorGraphViewHost.Location = new System.Drawing.Point(3, 3);
+      this.operatorGraphViewHost.Name = "operatorGraphViewHost";
+      this.operatorGraphViewHost.ReadOnly = true;
+      this.operatorGraphViewHost.Size = new System.Drawing.Size(835, 448);
+      this.operatorGraphViewHost.TabIndex = 0;
+      this.operatorGraphViewHost.ViewsLabelVisible = true;
+      this.operatorGraphViewHost.ViewType = null;
+      // 
+      // algorithmStartButton
+      // 
+      this.algorithmStartButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.algorithmStartButton.Location = new System.Drawing.Point(791, 55);
+      this.algorithmStartButton.Name = "algorithmStartButton";
+      this.algorithmStartButton.Size = new System.Drawing.Size(26, 23);
+      this.algorithmStartButton.TabIndex = 10;
+      this.algorithmStartButton.Text = "Start";
+      this.algorithmStartButton.UseVisualStyleBackColor = true;
+      this.algorithmStartButton.Click += new System.EventHandler(this.AlgorithmStartButtonOnClick);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(3, 33);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(91, 13);
+      this.label1.TabIndex = 8;
+      this.label1.Text = "Seeding Strategy:";
+      // 
+      // evaluationsLimitabel
+      // 
+      this.evaluationsLimitabel.AutoSize = true;
+      this.evaluationsLimitabel.Location = new System.Drawing.Point(3, 6);
+      this.evaluationsLimitabel.Name = "evaluationsLimitabel";
+      this.evaluationsLimitabel.Size = new System.Drawing.Size(66, 13);
+      this.evaluationsLimitabel.TabIndex = 13;
+      this.evaluationsLimitabel.Text = "Budget (FE):";
+      // 
+      // algorithmSuggestionLabel
+      // 
+      this.algorithmSuggestionLabel.AutoSize = true;
+      this.algorithmSuggestionLabel.Location = new System.Drawing.Point(3, 59);
+      this.algorithmSuggestionLabel.Name = "algorithmSuggestionLabel";
+      this.algorithmSuggestionLabel.Size = new System.Drawing.Size(99, 13);
+      this.algorithmSuggestionLabel.TabIndex = 9;
+      this.algorithmSuggestionLabel.Text = "Suggested Solvers:";
+      // 
+      // suggestedInstancesComboBox
+      // 
+      this.suggestedInstancesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.suggestedInstancesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.suggestedInstancesComboBox.FormattingEnabled = true;
+      this.suggestedInstancesComboBox.Location = new System.Drawing.Point(108, 56);
+      this.suggestedInstancesComboBox.Name = "suggestedInstancesComboBox";
+      this.suggestedInstancesComboBox.Size = new System.Drawing.Size(677, 21);
+      this.suggestedInstancesComboBox.TabIndex = 7;
+      this.suggestedInstancesComboBox.SelectedIndexChanged += new System.EventHandler(this.SuggestedInstancesComboBoxOnSelectedIndexChanged);
+      // 
+      // algorithmCloneButton
+      // 
+      this.algorithmCloneButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.algorithmCloneButton.Location = new System.Drawing.Point(823, 56);
+      this.algorithmCloneButton.Name = "algorithmCloneButton";
+      this.algorithmCloneButton.Size = new System.Drawing.Size(26, 23);
+      this.algorithmCloneButton.TabIndex = 15;
+      this.algorithmCloneButton.Text = "Clone";
+      this.algorithmCloneButton.UseVisualStyleBackColor = true;
+      this.algorithmCloneButton.Click += new System.EventHandler(this.AlgorithmCloneButtonOnClick);
+      // 
+      // maxEvaluationsView
+      // 
+      this.maxEvaluationsView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.maxEvaluationsView.Caption = "StringConvertibleValue View";
+      this.maxEvaluationsView.Content = null;
+      this.maxEvaluationsView.LabelVisible = false;
+      this.maxEvaluationsView.Location = new System.Drawing.Point(91, 3);
+      this.maxEvaluationsView.Name = "maxEvaluationsView";
+      this.maxEvaluationsView.ReadOnly = false;
+      this.maxEvaluationsView.Size = new System.Drawing.Size(758, 21);
+      this.maxEvaluationsView.TabIndex = 16;
+      // 
+      // seededRunsTabPage
+      // 
+      this.seededRunsTabPage.Controls.Add(this.seededRunsView);
+      this.seededRunsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.seededRunsTabPage.Name = "seededRunsTabPage";
+      this.seededRunsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.seededRunsTabPage.Size = new System.Drawing.Size(841, 454);
+      this.seededRunsTabPage.TabIndex = 5;
+      this.seededRunsTabPage.Text = "Seeded Runs";
+      this.seededRunsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // seededRunsView
+      // 
+      this.seededRunsView.Caption = "RunCollection View";
+      this.seededRunsView.Content = null;
+      this.seededRunsView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.seededRunsView.Location = new System.Drawing.Point(3, 3);
+      this.seededRunsView.Name = "seededRunsView";
+      this.seededRunsView.ReadOnly = false;
+      this.seededRunsView.Size = new System.Drawing.Size(835, 448);
+      this.seededRunsView.TabIndex = 1;
+      // 
+      // SolverView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.maxEvaluationsView);
+      this.Controls.Add(this.algorithmCloneButton);
+      this.Controls.Add(this.seedingStrategyPanel);
+      this.Controls.Add(this.solverTabControl);
+      this.Controls.Add(this.algorithmStartButton);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.evaluationsLimitabel);
+      this.Controls.Add(this.algorithmSuggestionLabel);
+      this.Controls.Add(this.suggestedInstancesComboBox);
+      this.Name = "SolverView";
+      this.Size = new System.Drawing.Size(849, 564);
+      this.solverTabControl.ResumeLayout(false);
+      this.resultsTabPage.ResumeLayout(false);
+      this.resultsTabPage.PerformLayout();
+      this.runsTabPage.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.operatorGraphTabPage.ResumeLayout(false);
+      this.seededRunsTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel seedingStrategyPanel;
+    private MainForm.WindowsForms.DragOverTabControl solverTabControl;
+    private System.Windows.Forms.TabPage resultsTabPage;
+    private System.Windows.Forms.TabPage solutionSeedingTabPage;
+    private System.Windows.Forms.TabPage parametersTabPage;
+    private Core.Views.ParameterCollectionView solverParametersView;
+    private System.Windows.Forms.TabPage operatorGraphTabPage;
+    private MainForm.WindowsForms.ViewHost operatorGraphViewHost;
+    private System.Windows.Forms.Button algorithmStartButton;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.Label evaluationsLimitabel;
+    private System.Windows.Forms.Label algorithmSuggestionLabel;
+    private System.Windows.Forms.ComboBox suggestedInstancesComboBox;
+    private System.Windows.Forms.Button algorithmCloneButton;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private Optimization.Views.RunCollectionView runsView;
+    private Data.Views.StringConvertibleValueView maxEvaluationsView;
+    private WeifenLuo.WinFormsUI.Docking.DockPanel resultsDockPanel;
+    private System.Windows.Forms.CheckBox showOnlyFinalResultCheckBox;
+    private System.Windows.Forms.TabPage seededRunsTabPage;
+    private Optimization.Views.RunCollectionView seededRunsView;
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/SolverView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/SolverView.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/SolverView.cs	(revision 13722)
@@ -0,0 +1,138 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Resources;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Data.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+using HeuristicLab.OptimizationExpertSystem.Common;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.OptimizationExpertSystem {
+  [View("Solver View")]
+  [Content(typeof(KnowledgeCenter), IsDefaultView = false)]
+  public partial class SolverView : KnowledgeCenterViewBase {
+    private EnumValueView<SeedingStrategyTypes> seedingStrategyView;
+    private CheckedItemListView<IScope> seedingSolutionsView;
+    protected virtual bool SuppressEvents { get; set; }
+
+    public SolverView() {
+      InitializeComponent();
+      algorithmStartButton.Text = string.Empty;
+      algorithmStartButton.Image = VSImageLibrary.Play;
+      algorithmCloneButton.Text = string.Empty;
+      algorithmCloneButton.Image = VSImageLibrary.Clone;
+      seedingStrategyView = new EnumValueView<SeedingStrategyTypes>() {
+        Dock = DockStyle.Fill
+      };
+      seedingSolutionsView = new CheckedItemListView<IScope>() {
+        Dock = DockStyle.Fill
+      };
+      seedingStrategyPanel.Controls.Add(seedingStrategyView);
+      solutionSeedingTabPage.Controls.Add(seedingSolutionsView);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      SuppressEvents = true;
+      try {
+        if (Content == null) {
+          maxEvaluationsView.Content = null;
+          solverParametersView.Content = null;
+          runsView.Content = null;
+          seededRunsView.Content = null;
+          seedingStrategyView.Content = null;
+          seedingSolutionsView.Content = null;
+        } else {
+          maxEvaluationsView.Content = Content.MaximumEvaluations;
+          runsView.Content = Content.InstanceRuns;
+          seededRunsView.Content = Content.SeededRuns;
+          seedingStrategyView.Content = Content.SeedingStrategy;
+          seedingSolutionsView.Content = Content.SolutionSeedingPool;
+        }
+      } finally { SuppressEvents = false; }
+      UpdateSuggestedInstancesCombobox();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      suggestedInstancesComboBox.Enabled = Content != null && !ReadOnly && !Locked;
+      algorithmStartButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
+      algorithmCloneButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
+      runsView.Enabled = Content != null;
+    }
+
+    protected override void OnAlgorithmInstanceStarted(IAlgorithm algorithm) {
+      base.OnAlgorithmInstanceStarted(algorithm);
+      var form = new AlgorithmControlForm(algorithm, showOnlyFinalResultCheckBox.Checked);
+      form.Show(resultsDockPanel);
+    }
+
+    protected override void OnSuggestedInstancesChanged() {
+      base.OnSuggestedInstancesChanged();
+      UpdateSuggestedInstancesCombobox();
+    }
+
+    private void UpdateSuggestedInstancesCombobox() {
+      var prevSelection = (IAlgorithm)suggestedInstancesComboBox.SelectedItem;
+      var prevNewIndex = -1;
+      suggestedInstancesComboBox.Items.Clear();
+      if (Content == null) return;
+
+      for (var i = 0; i < Content.SuggestedInstances.Count; i++) {
+        suggestedInstancesComboBox.Items.Add(Content.SuggestedInstances[i]);
+        if (prevSelection == null || Content.SuggestedInstances[i].Name == prevSelection.Name)
+          prevNewIndex = prevSelection == null ? 0 : i;
+      }
+      if (prevNewIndex >= 0) {
+        suggestedInstancesComboBox.SelectedIndex = prevNewIndex;
+      }
+    }
+
+    private void AlgorithmStartButtonOnClick(object sender, EventArgs e) {
+      if (suggestedInstancesComboBox.SelectedIndex >= 0)
+        Content.StartAlgorithmAsync(suggestedInstancesComboBox.SelectedIndex);
+    }
+
+    private void AlgorithmCloneButtonOnClick(object sender, EventArgs e) {
+      if (suggestedInstancesComboBox.SelectedIndex >= 0)
+        MainForm.ShowContent((IAlgorithm)Content.SuggestedInstances[suggestedInstancesComboBox.SelectedIndex].Clone());
+    }
+
+    private void SuggestedInstancesComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SuggestedInstancesComboBoxOnSelectedIndexChanged, sender, e); return; }
+      if (suggestedInstancesComboBox.SelectedIndex >= 0) {
+        var alg = Content.SuggestedInstances[suggestedInstancesComboBox.SelectedIndex];
+        solverParametersView.Content = alg.Parameters;
+        var engineAlg = alg as EngineAlgorithm;
+        if (engineAlg != null) operatorGraphViewHost.Content = engineAlg.OperatorGraph;
+        else operatorGraphViewHost.Content = new Data.StringValue("Algorithm is not modeled as an operator graph.");
+      } else {
+        solverParametersView.Content = null;
+        operatorGraphViewHost.Content = null;
+      }
+      SetEnabledStateOfControls();
+    }
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/SolverView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/SolverView.resx	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/SolverView.resx	(revision 13722)
@@ -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/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingProblemInstanceView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingProblemInstanceView.Designer.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingProblemInstanceView.Designer.cs	(revision 13722)
@@ -0,0 +1,197 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.OptimizationExpertSystem {
+  partial class UnderstandingProblemInstanceView {
+    /// <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.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();
+      this.projectionLabel = new System.Windows.Forms.Label();
+      this.projectionComboBox = new System.Windows.Forms.ComboBox();
+      this.problemInstancesTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.mapTabPage = new System.Windows.Forms.TabPage();
+      this.instanceMapChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      this.instancesTabPage = new System.Windows.Forms.TabPage();
+      this.problemInstancesView = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.problemInstancesTabControl.SuspendLayout();
+      this.mapTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).BeginInit();
+      this.instancesTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // projectionLabel
+      // 
+      this.projectionLabel.AutoSize = true;
+      this.projectionLabel.Location = new System.Drawing.Point(6, 9);
+      this.projectionLabel.Name = "projectionLabel";
+      this.projectionLabel.Size = new System.Drawing.Size(57, 13);
+      this.projectionLabel.TabIndex = 10;
+      this.projectionLabel.Text = "Projection:";
+      // 
+      // projectionComboBox
+      // 
+      this.projectionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.projectionComboBox.FormattingEnabled = true;
+      this.projectionComboBox.Location = new System.Drawing.Point(69, 6);
+      this.projectionComboBox.Name = "projectionComboBox";
+      this.projectionComboBox.Size = new System.Drawing.Size(158, 21);
+      this.projectionComboBox.TabIndex = 9;
+      this.projectionComboBox.SelectedIndexChanged += new System.EventHandler(this.ProjectionComboBoxOnSelectedIndexChanged);
+      // 
+      // problemInstancesTabControl
+      // 
+      this.problemInstancesTabControl.AllowDrop = true;
+      this.problemInstancesTabControl.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.problemInstancesTabControl.Controls.Add(this.mapTabPage);
+      this.problemInstancesTabControl.Controls.Add(this.instancesTabPage);
+      this.problemInstancesTabControl.Location = new System.Drawing.Point(0, 0);
+      this.problemInstancesTabControl.Name = "problemInstancesTabControl";
+      this.problemInstancesTabControl.SelectedIndex = 0;
+      this.problemInstancesTabControl.Size = new System.Drawing.Size(1000, 760);
+      this.problemInstancesTabControl.TabIndex = 8;
+      // 
+      // mapTabPage
+      // 
+      this.mapTabPage.Controls.Add(this.projectionLabel);
+      this.mapTabPage.Controls.Add(this.instanceMapChart);
+      this.mapTabPage.Controls.Add(this.projectionComboBox);
+      this.mapTabPage.Location = new System.Drawing.Point(4, 22);
+      this.mapTabPage.Name = "mapTabPage";
+      this.mapTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.mapTabPage.Size = new System.Drawing.Size(992, 734);
+      this.mapTabPage.TabIndex = 1;
+      this.mapTabPage.Text = "Map";
+      this.mapTabPage.UseVisualStyleBackColor = true;
+      // 
+      // instanceMapChart
+      // 
+      this.instanceMapChart.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.AxisX.MajorGrid.LineColor = System.Drawing.Color.LightGray;
+      chartArea1.AxisX.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+      chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.LightGray;
+      chartArea1.AxisY.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+      chartArea1.Name = "Default";
+      this.instanceMapChart.ChartAreas.Add(chartArea1);
+      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
+      legend1.Enabled = false;
+      legend1.Name = "Legend";
+      this.instanceMapChart.Legends.Add(legend1);
+      this.instanceMapChart.Location = new System.Drawing.Point(3, 33);
+      this.instanceMapChart.Name = "instanceMapChart";
+      series1.ChartArea = "Default";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
+      series1.Legend = "Legend";
+      series1.MarkerSize = 10;
+      series1.Name = "InstancesSeries";
+      series2.ChartArea = "Default";
+      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
+      series2.Legend = "Legend";
+      series2.MarkerColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+      series2.MarkerSize = 15;
+      series2.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
+      series2.Name = "CurrentInstanceSeries";
+      this.instanceMapChart.Series.Add(series1);
+      this.instanceMapChart.Series.Add(series2);
+      this.instanceMapChart.Size = new System.Drawing.Size(986, 698);
+      this.instanceMapChart.TabIndex = 0;
+      // 
+      // instancesTabPage
+      // 
+      this.instancesTabPage.Controls.Add(this.problemInstancesView);
+      this.instancesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.instancesTabPage.Name = "instancesTabPage";
+      this.instancesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.instancesTabPage.Size = new System.Drawing.Size(1044, 757);
+      this.instancesTabPage.TabIndex = 0;
+      this.instancesTabPage.Text = "Instances";
+      this.instancesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // problemInstancesView
+      // 
+      this.problemInstancesView.Caption = "View";
+      this.problemInstancesView.Content = null;
+      this.problemInstancesView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.problemInstancesView.Enabled = false;
+      this.problemInstancesView.Location = new System.Drawing.Point(3, 3);
+      this.problemInstancesView.Name = "problemInstancesView";
+      this.problemInstancesView.ReadOnly = false;
+      this.problemInstancesView.Size = new System.Drawing.Size(1038, 751);
+      this.problemInstancesView.TabIndex = 0;
+      this.problemInstancesView.ViewsLabelVisible = true;
+      this.problemInstancesView.ViewType = null;
+      // 
+      // UnderstandingProblemInstanceView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.problemInstancesTabControl);
+      this.Name = "UnderstandingProblemInstanceView";
+      this.Size = new System.Drawing.Size(1000, 760);
+      this.Controls.SetChildIndex(this.problemInstancesTabControl, 0);
+      this.problemInstancesTabControl.ResumeLayout(false);
+      this.mapTabPage.ResumeLayout(false);
+      this.mapTabPage.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).EndInit();
+      this.instancesTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label projectionLabel;
+    private System.Windows.Forms.ComboBox projectionComboBox;
+    private MainForm.WindowsForms.DragOverTabControl problemInstancesTabControl;
+    private System.Windows.Forms.TabPage mapTabPage;
+    private Visualization.ChartControlsExtensions.EnhancedChart instanceMapChart;
+    private System.Windows.Forms.TabPage instancesTabPage;
+    private MainForm.WindowsForms.ViewHost problemInstancesView;
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingProblemInstanceView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingProblemInstanceView.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingProblemInstanceView.cs	(revision 13722)
@@ -0,0 +1,120 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.MainForm;
+using HeuristicLab.OptimizationExpertSystem.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Windows.Forms.DataVisualization.Charting;
+
+namespace HeuristicLab.OptimizationExpertSystem {
+  [View("Understanding Problem Instance")]
+  [Content(typeof(KnowledgeCenter), IsDefaultView = false)]
+  public partial class UnderstandingProblemInstanceView : KnowledgeCenterViewBase {
+    public UnderstandingProblemInstanceView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        problemInstancesView.Content = null;
+        instanceMapChart.Series["InstancesSeries"].Points.Clear();
+        instanceMapChart.Series["CurrentInstanceSeries"].Points.Clear();
+      } else {
+        problemInstancesView.Content = Content.ProblemInstances;
+        UpdateProjectionComboBox();
+      }
+    }
+
+    #region Content Event Handlers
+    protected override void OnProblemChanged() {
+      base.OnProblemChanged();
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnProblemInstancesChanged() {
+      base.OnProblemInstancesChanged();
+      if (Content.ProblemInstances.UpdateOfRunsInProgress) return;
+      UpdateProjectionComboBox();
+    }
+
+    protected override void OnDownloadEnded() {
+      base.OnDownloadEnded();
+      UpdateProjectionComboBox();
+    }
+    #endregion
+    
+    public IEnumerable<string> GetProjections() {
+      return Content.ProblemInstances
+        .SelectMany(x => x.Results.Where(y => Regex.IsMatch(y.Key, "^Projection[.].*[.][XY]$")))
+        .Select(x => Regex.Match(x.Key, "Projection[.](?<g>.*)[.][XY]").Groups["g"].Value)
+        .Distinct();
+    }
+
+    public void ProjectProblemInstances(Series instancesSeries, Series currentInstanceSeries, string projection) {
+      instancesSeries.Points.Clear();
+      currentInstanceSeries.Points.Clear();
+
+      foreach (var run in Content.ProblemInstances) {
+        var xKey = "Projection." + projection + ".X";
+        var yKey = "Projection." + projection + ".Y";
+        if (!run.Results.ContainsKey(xKey) || !run.Results.ContainsKey(yKey)
+            || !(run.Results[xKey] is Data.DoubleValue) || !(run.Results[yKey] is Data.DoubleValue)) continue;
+        var x = ((Data.DoubleValue)run.Results[xKey]).Value;
+        var y = ((Data.DoubleValue)run.Results[yKey]).Value;
+        var dataPoint = new DataPoint(x, y) {
+          Label = run.Name
+        };
+        instancesSeries.Points.Add(dataPoint);
+      }
+
+      var curPoint = Content.ProjectCurrentInstance(projection);
+      if (curPoint != null) {
+        var dp = new DataPoint(curPoint.Item1, curPoint.Item2) {
+          Label = Content.Problem.Problem.Name
+        };
+        currentInstanceSeries.Points.Add(dp);
+      }
+    }
+
+    private void ProjectionComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)ProjectionComboBoxOnSelectedIndexChanged, sender, e); return; }
+      if (projectionComboBox.SelectedIndex < 0) return;
+      var projection = (string)projectionComboBox.SelectedItem;
+      var instancesSeries = instanceMapChart.Series["InstancesSeries"];
+      var currentInstanceSeries = instanceMapChart.Series["CurrentInstanceSeries"];
+
+      ProjectProblemInstances(instancesSeries, currentInstanceSeries, projection);
+    }
+
+    private void UpdateProjectionComboBox() {
+      projectionComboBox.Items.Clear();
+      foreach (var str in GetProjections()) {
+        projectionComboBox.Items.Add(str);
+      }
+      if (projectionComboBox.Items.Count > 0)
+        projectionComboBox.SelectedIndex = 0;
+    }
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingProblemInstanceView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingProblemInstanceView.resx	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingProblemInstanceView.resx	(revision 13722)
@@ -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/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.Designer.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.Designer.cs	(revision 13722)
@@ -0,0 +1,394 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.OptimizationExpertSystem {
+  partial class UnderstandingSolutionsView {
+    /// <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.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();
+      this.solutionNameLabel = new System.Windows.Forms.Label();
+      this.solutionDiversitySimilarityLabel = new System.Windows.Forms.Label();
+      this.solutionNameComboBox = new System.Windows.Forms.ComboBox();
+      this.similarityComboBox = new System.Windows.Forms.ComboBox();
+      this.solutionsTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.solutionsQualityTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsQualityViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsLengthScaleTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsLengthScaleViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsDiversityTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsDiversityViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsFdcTabPage = new System.Windows.Forms.TabPage();
+      this.fdcBetweenBestCheckBox = new System.Windows.Forms.CheckBox();
+      this.solutionsFdcViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsNetworkTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsNetworkChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      this.pearsonsRSquaredLabel = new System.Windows.Forms.Label();
+      this.fdcPearsonLabel = new System.Windows.Forms.Label();
+      this.spearmansRankLabel = new System.Windows.Forms.Label();
+      this.fdcSpearmanLabel = new System.Windows.Forms.Label();
+      this.solutionsTabControl.SuspendLayout();
+      this.solutionsQualityTabPage.SuspendLayout();
+      this.solutionsLengthScaleTabPage.SuspendLayout();
+      this.solutionsDiversityTabPage.SuspendLayout();
+      this.solutionsFdcTabPage.SuspendLayout();
+      this.solutionsNetworkTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // solutionNameLabel
+      // 
+      this.solutionNameLabel.AutoSize = true;
+      this.solutionNameLabel.Location = new System.Drawing.Point(232, 3);
+      this.solutionNameLabel.Name = "solutionNameLabel";
+      this.solutionNameLabel.Size = new System.Drawing.Size(48, 13);
+      this.solutionNameLabel.TabIndex = 6;
+      this.solutionNameLabel.Text = "Solution:";
+      // 
+      // solutionDiversitySimilarityLabel
+      // 
+      this.solutionDiversitySimilarityLabel.AutoSize = true;
+      this.solutionDiversitySimilarityLabel.Location = new System.Drawing.Point(2, 3);
+      this.solutionDiversitySimilarityLabel.Name = "solutionDiversitySimilarityLabel";
+      this.solutionDiversitySimilarityLabel.Size = new System.Drawing.Size(50, 13);
+      this.solutionDiversitySimilarityLabel.TabIndex = 7;
+      this.solutionDiversitySimilarityLabel.Text = "Similarity:";
+      // 
+      // solutionNameComboBox
+      // 
+      this.solutionNameComboBox.DisplayMember = "ItemName";
+      this.solutionNameComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.solutionNameComboBox.FormattingEnabled = true;
+      this.solutionNameComboBox.Location = new System.Drawing.Point(288, 0);
+      this.solutionNameComboBox.Name = "solutionNameComboBox";
+      this.solutionNameComboBox.Size = new System.Drawing.Size(150, 21);
+      this.solutionNameComboBox.TabIndex = 4;
+      this.solutionNameComboBox.SelectedIndexChanged += new System.EventHandler(this.SolutionNameComboBoxOnSelectedIndexChanged);
+      // 
+      // similarityComboBox
+      // 
+      this.similarityComboBox.DisplayMember = "ItemName";
+      this.similarityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.similarityComboBox.FormattingEnabled = true;
+      this.similarityComboBox.Location = new System.Drawing.Point(58, 0);
+      this.similarityComboBox.Name = "similarityComboBox";
+      this.similarityComboBox.Size = new System.Drawing.Size(150, 21);
+      this.similarityComboBox.TabIndex = 5;
+      this.similarityComboBox.SelectedIndexChanged += new System.EventHandler(this.SimilarityComboBoxOnSelectedIndexChanged);
+      // 
+      // solutionsTabControl
+      // 
+      this.solutionsTabControl.AllowDrop = true;
+      this.solutionsTabControl.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.solutionsTabControl.Controls.Add(this.solutionsQualityTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsLengthScaleTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsDiversityTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsFdcTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsNetworkTabPage);
+      this.solutionsTabControl.Location = new System.Drawing.Point(0, 27);
+      this.solutionsTabControl.Name = "solutionsTabControl";
+      this.solutionsTabControl.SelectedIndex = 0;
+      this.solutionsTabControl.Size = new System.Drawing.Size(732, 478);
+      this.solutionsTabControl.TabIndex = 3;
+      // 
+      // solutionsQualityTabPage
+      // 
+      this.solutionsQualityTabPage.Controls.Add(this.solutionsQualityViewHost);
+      this.solutionsQualityTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsQualityTabPage.Name = "solutionsQualityTabPage";
+      this.solutionsQualityTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsQualityTabPage.Size = new System.Drawing.Size(724, 452);
+      this.solutionsQualityTabPage.TabIndex = 1;
+      this.solutionsQualityTabPage.Text = "Quality Analysis";
+      this.solutionsQualityTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsQualityViewHost
+      // 
+      this.solutionsQualityViewHost.Caption = "View";
+      this.solutionsQualityViewHost.Content = null;
+      this.solutionsQualityViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solutionsQualityViewHost.Enabled = false;
+      this.solutionsQualityViewHost.Location = new System.Drawing.Point(3, 3);
+      this.solutionsQualityViewHost.Name = "solutionsQualityViewHost";
+      this.solutionsQualityViewHost.ReadOnly = false;
+      this.solutionsQualityViewHost.Size = new System.Drawing.Size(718, 446);
+      this.solutionsQualityViewHost.TabIndex = 0;
+      this.solutionsQualityViewHost.ViewsLabelVisible = true;
+      this.solutionsQualityViewHost.ViewType = null;
+      // 
+      // solutionsLengthScaleTabPage
+      // 
+      this.solutionsLengthScaleTabPage.Controls.Add(this.solutionsLengthScaleViewHost);
+      this.solutionsLengthScaleTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsLengthScaleTabPage.Name = "solutionsLengthScaleTabPage";
+      this.solutionsLengthScaleTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsLengthScaleTabPage.Size = new System.Drawing.Size(724, 452);
+      this.solutionsLengthScaleTabPage.TabIndex = 3;
+      this.solutionsLengthScaleTabPage.Text = "Length-Scale Analysis";
+      this.solutionsLengthScaleTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsLengthScaleViewHost
+      // 
+      this.solutionsLengthScaleViewHost.Caption = "View";
+      this.solutionsLengthScaleViewHost.Content = null;
+      this.solutionsLengthScaleViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solutionsLengthScaleViewHost.Enabled = false;
+      this.solutionsLengthScaleViewHost.Location = new System.Drawing.Point(3, 3);
+      this.solutionsLengthScaleViewHost.Name = "solutionsLengthScaleViewHost";
+      this.solutionsLengthScaleViewHost.ReadOnly = false;
+      this.solutionsLengthScaleViewHost.Size = new System.Drawing.Size(718, 446);
+      this.solutionsLengthScaleViewHost.TabIndex = 0;
+      this.solutionsLengthScaleViewHost.ViewsLabelVisible = true;
+      this.solutionsLengthScaleViewHost.ViewType = null;
+      // 
+      // solutionsDiversityTabPage
+      // 
+      this.solutionsDiversityTabPage.Controls.Add(this.solutionsDiversityViewHost);
+      this.solutionsDiversityTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsDiversityTabPage.Name = "solutionsDiversityTabPage";
+      this.solutionsDiversityTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsDiversityTabPage.Size = new System.Drawing.Size(724, 452);
+      this.solutionsDiversityTabPage.TabIndex = 2;
+      this.solutionsDiversityTabPage.Text = "Diversity Analysis";
+      this.solutionsDiversityTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsDiversityViewHost
+      // 
+      this.solutionsDiversityViewHost.Caption = "View";
+      this.solutionsDiversityViewHost.Content = null;
+      this.solutionsDiversityViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solutionsDiversityViewHost.Enabled = false;
+      this.solutionsDiversityViewHost.Location = new System.Drawing.Point(3, 3);
+      this.solutionsDiversityViewHost.Name = "solutionsDiversityViewHost";
+      this.solutionsDiversityViewHost.ReadOnly = false;
+      this.solutionsDiversityViewHost.Size = new System.Drawing.Size(718, 446);
+      this.solutionsDiversityViewHost.TabIndex = 1;
+      this.solutionsDiversityViewHost.ViewsLabelVisible = true;
+      this.solutionsDiversityViewHost.ViewType = null;
+      // 
+      // solutionsFdcTabPage
+      // 
+      this.solutionsFdcTabPage.Controls.Add(this.fdcSpearmanLabel);
+      this.solutionsFdcTabPage.Controls.Add(this.fdcPearsonLabel);
+      this.solutionsFdcTabPage.Controls.Add(this.spearmansRankLabel);
+      this.solutionsFdcTabPage.Controls.Add(this.pearsonsRSquaredLabel);
+      this.solutionsFdcTabPage.Controls.Add(this.fdcBetweenBestCheckBox);
+      this.solutionsFdcTabPage.Controls.Add(this.solutionsFdcViewHost);
+      this.solutionsFdcTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsFdcTabPage.Name = "solutionsFdcTabPage";
+      this.solutionsFdcTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsFdcTabPage.Size = new System.Drawing.Size(724, 452);
+      this.solutionsFdcTabPage.TabIndex = 5;
+      this.solutionsFdcTabPage.Text = "Fitness-Distance Analysis";
+      this.solutionsFdcTabPage.UseVisualStyleBackColor = true;
+      // 
+      // fdcBetweenBestCheckBox
+      // 
+      this.fdcBetweenBestCheckBox.AutoSize = true;
+      this.fdcBetweenBestCheckBox.Location = new System.Drawing.Point(6, 6);
+      this.fdcBetweenBestCheckBox.Name = "fdcBetweenBestCheckBox";
+      this.fdcBetweenBestCheckBox.Size = new System.Drawing.Size(233, 17);
+      this.fdcBetweenBestCheckBox.TabIndex = 2;
+      this.fdcBetweenBestCheckBox.Text = "Calculate FDC between best solution(s) only";
+      this.fdcBetweenBestCheckBox.UseVisualStyleBackColor = true;
+      this.fdcBetweenBestCheckBox.CheckedChanged += new System.EventHandler(this.FdcBetweenBestCheckBoxOnCheckedChanged);
+      // 
+      // solutionsFdcViewHost
+      // 
+      this.solutionsFdcViewHost.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.solutionsFdcViewHost.Caption = "View";
+      this.solutionsFdcViewHost.Content = null;
+      this.solutionsFdcViewHost.Enabled = false;
+      this.solutionsFdcViewHost.Location = new System.Drawing.Point(3, 29);
+      this.solutionsFdcViewHost.Name = "solutionsFdcViewHost";
+      this.solutionsFdcViewHost.ReadOnly = false;
+      this.solutionsFdcViewHost.Size = new System.Drawing.Size(718, 423);
+      this.solutionsFdcViewHost.TabIndex = 0;
+      this.solutionsFdcViewHost.ViewsLabelVisible = true;
+      this.solutionsFdcViewHost.ViewType = null;
+      // 
+      // solutionsNetworkTabPage
+      // 
+      this.solutionsNetworkTabPage.Controls.Add(this.solutionsNetworkChart);
+      this.solutionsNetworkTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsNetworkTabPage.Name = "solutionsNetworkTabPage";
+      this.solutionsNetworkTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsNetworkTabPage.Size = new System.Drawing.Size(724, 452);
+      this.solutionsNetworkTabPage.TabIndex = 4;
+      this.solutionsNetworkTabPage.Text = "Network Analysis";
+      this.solutionsNetworkTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsNetworkChart
+      // 
+      chartArea1.AxisX.IsStartedFromZero = false;
+      chartArea1.AxisX.LabelStyle.Enabled = false;
+      chartArea1.AxisX.LineWidth = 0;
+      chartArea1.AxisX.MajorGrid.Enabled = false;
+      chartArea1.AxisX.MajorTickMark.Enabled = false;
+      chartArea1.AxisY.IsStartedFromZero = false;
+      chartArea1.AxisY.LabelStyle.Enabled = false;
+      chartArea1.AxisY.LineWidth = 0;
+      chartArea1.AxisY.MajorGrid.Enabled = false;
+      chartArea1.AxisY.MajorTickMark.Enabled = false;
+      chartArea1.Name = "SolutionsNetworkChartArea";
+      this.solutionsNetworkChart.ChartAreas.Add(chartArea1);
+      this.solutionsNetworkChart.Dock = System.Windows.Forms.DockStyle.Fill;
+      legend1.Enabled = false;
+      legend1.Name = "Legend1";
+      this.solutionsNetworkChart.Legends.Add(legend1);
+      this.solutionsNetworkChart.Location = new System.Drawing.Point(3, 3);
+      this.solutionsNetworkChart.Name = "solutionsNetworkChart";
+      series1.ChartArea = "SolutionsNetworkChartArea";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bubble;
+      series1.IsValueShownAsLabel = true;
+      series1.Label = "#LABEL";
+      series1.Legend = "Legend1";
+      series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
+      series1.Name = "SolutionSeries";
+      series1.YValuesPerPoint = 2;
+      series2.ChartArea = "SolutionsNetworkChartArea";
+      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bubble;
+      series2.IsValueShownAsLabel = true;
+      series2.Label = "#LABEL";
+      series2.Legend = "Legend1";
+      series2.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
+      series2.Name = "SeedingSolutionSeries";
+      series2.YValuesPerPoint = 2;
+      this.solutionsNetworkChart.Series.Add(series1);
+      this.solutionsNetworkChart.Series.Add(series2);
+      this.solutionsNetworkChart.Size = new System.Drawing.Size(718, 446);
+      this.solutionsNetworkChart.TabIndex = 0;
+      this.solutionsNetworkChart.Text = "enhancedChart1";
+      this.solutionsNetworkChart.MouseClick += new System.Windows.Forms.MouseEventHandler(this.SolutionsNetworkChartOnMouseClick);
+      this.solutionsNetworkChart.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.SolutionsNetworkChartOnMouseDoubleClick);
+      // 
+      // pearsonsRSquaredLabel
+      // 
+      this.pearsonsRSquaredLabel.AutoSize = true;
+      this.pearsonsRSquaredLabel.Location = new System.Drawing.Point(436, 7);
+      this.pearsonsRSquaredLabel.Name = "pearsonsRSquaredLabel";
+      this.pearsonsRSquaredLabel.Size = new System.Drawing.Size(65, 13);
+      this.pearsonsRSquaredLabel.TabIndex = 3;
+      this.pearsonsRSquaredLabel.Text = "Pearson\'s r²:";
+      // 
+      // fdcPearsonLabel
+      // 
+      this.fdcPearsonLabel.AutoSize = true;
+      this.fdcPearsonLabel.Location = new System.Drawing.Point(512, 7);
+      this.fdcPearsonLabel.Name = "fdcPearsonLabel";
+      this.fdcPearsonLabel.Size = new System.Drawing.Size(10, 13);
+      this.fdcPearsonLabel.TabIndex = 4;
+      this.fdcPearsonLabel.Text = "-";
+      // 
+      // spearmansRankLabel
+      // 
+      this.spearmansRankLabel.AutoSize = true;
+      this.spearmansRankLabel.Location = new System.Drawing.Point(281, 7);
+      this.spearmansRankLabel.Name = "spearmansRankLabel";
+      this.spearmansRankLabel.Size = new System.Drawing.Size(74, 13);
+      this.spearmansRankLabel.TabIndex = 3;
+      this.spearmansRankLabel.Text = "Spearman\'s ρ:";
+      // 
+      // fdcSpearmanLabel
+      // 
+      this.fdcSpearmanLabel.AutoSize = true;
+      this.fdcSpearmanLabel.Location = new System.Drawing.Point(357, 7);
+      this.fdcSpearmanLabel.Name = "fdcSpearmanLabel";
+      this.fdcSpearmanLabel.Size = new System.Drawing.Size(10, 13);
+      this.fdcSpearmanLabel.TabIndex = 4;
+      this.fdcSpearmanLabel.Text = "-";
+      // 
+      // UnderstandingSolutionsView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.solutionNameLabel);
+      this.Controls.Add(this.solutionDiversitySimilarityLabel);
+      this.Controls.Add(this.solutionNameComboBox);
+      this.Controls.Add(this.similarityComboBox);
+      this.Controls.Add(this.solutionsTabControl);
+      this.Name = "UnderstandingSolutionsView";
+      this.Size = new System.Drawing.Size(732, 505);
+      this.solutionsTabControl.ResumeLayout(false);
+      this.solutionsQualityTabPage.ResumeLayout(false);
+      this.solutionsLengthScaleTabPage.ResumeLayout(false);
+      this.solutionsDiversityTabPage.ResumeLayout(false);
+      this.solutionsFdcTabPage.ResumeLayout(false);
+      this.solutionsFdcTabPage.PerformLayout();
+      this.solutionsNetworkTabPage.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label solutionNameLabel;
+    private System.Windows.Forms.Label solutionDiversitySimilarityLabel;
+    private System.Windows.Forms.ComboBox solutionNameComboBox;
+    private System.Windows.Forms.ComboBox similarityComboBox;
+    private MainForm.WindowsForms.DragOverTabControl solutionsTabControl;
+    private System.Windows.Forms.TabPage solutionsQualityTabPage;
+    private MainForm.WindowsForms.ViewHost solutionsQualityViewHost;
+    private System.Windows.Forms.TabPage solutionsLengthScaleTabPage;
+    private MainForm.WindowsForms.ViewHost solutionsLengthScaleViewHost;
+    private System.Windows.Forms.TabPage solutionsDiversityTabPage;
+    private MainForm.WindowsForms.ViewHost solutionsDiversityViewHost;
+    private System.Windows.Forms.TabPage solutionsFdcTabPage;
+    private System.Windows.Forms.CheckBox fdcBetweenBestCheckBox;
+    private MainForm.WindowsForms.ViewHost solutionsFdcViewHost;
+    private System.Windows.Forms.TabPage solutionsNetworkTabPage;
+    private Visualization.ChartControlsExtensions.EnhancedChart solutionsNetworkChart;
+    private System.Windows.Forms.Label fdcPearsonLabel;
+    private System.Windows.Forms.Label pearsonsRSquaredLabel;
+    private System.Windows.Forms.Label fdcSpearmanLabel;
+    private System.Windows.Forms.Label spearmansRankLabel;
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.cs	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.cs	(revision 13722)
@@ -0,0 +1,322 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Analysis;
+using HeuristicLab.Analysis.QualityAnalysis;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+using HeuristicLab.OptimizationExpertSystem.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+
+namespace HeuristicLab.OptimizationExpertSystem {
+  [View("Understanding Solutions")]
+  [Content(typeof(KnowledgeCenter), IsDefaultView = false)]
+  public partial class UnderstandingSolutionsView : KnowledgeCenterViewBase {
+    protected virtual bool SuppressEvents { get; set; }
+
+    public UnderstandingSolutionsView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      UpdateSimilarityCalculators();
+      UpdateNamesComboboxes();
+      UpdateSolutionVisualization();
+    }
+
+    protected override void OnProblemChanged() {
+      base.OnProblemInstancesChanged();
+      UpdateSimilarityCalculators();
+      UpdateNamesComboboxes();
+      UpdateSolutionVisualization();
+    }
+
+    protected override void OnProblemSolutionsChanged() {
+      base.OnProblemSolutionsChanged();
+      UpdateNamesComboboxes();
+      UpdateSolutionVisualization();
+    }
+
+    protected override void OnSolutionSeedingPoolChanged() {
+      base.OnSolutionSeedingPoolChanged();
+      UpdateSolutionNetworkAnalysis(similarityComboBox.SelectedItem as ISolutionSimilarityCalculator);
+    }
+
+    private void UpdateSimilarityCalculators() {
+      var selected = (ISolutionSimilarityCalculator)(similarityComboBox.SelectedIndex >= 0 ? similarityComboBox.SelectedItem : null);
+      similarityComboBox.Items.Clear();
+
+      if (Content == null || Content.Problem == null) return;
+
+      foreach (var calc in Content.Problem.Operators.OfType<ISolutionSimilarityCalculator>()) {
+        similarityComboBox.Items.Add(calc);
+        if (selected != null && calc.ItemName == selected.ItemName) similarityComboBox.SelectedItem = calc;
+      }
+      if (selected == null && similarityComboBox.Items.Count > 0)
+        similarityComboBox.SelectedIndex = 0;
+    }
+
+    private void UpdateNamesComboboxes() {
+      var selectedSolutionName = solutionNameComboBox.SelectedIndex >= 0 ? (string)solutionNameComboBox.SelectedItem : string.Empty;
+
+      solutionNameComboBox.Items.Clear();
+      if (Content == null) return;
+      var solutionNames = Content.Problem.Solutions.Select(x => x.Solution).OfType<IScope>().SelectMany(x => x.Variables);
+
+      foreach (var sn in solutionNames.GroupBy(x => x.Name).OrderBy(x => x.Key)) {
+        solutionNameComboBox.Items.Add(sn.Key);
+        // either it was previously selected, or the variable value is defined in the HeuristicLab.Encodings sub-namespace
+        if (sn.Key == selectedSolutionName || (string.IsNullOrEmpty(selectedSolutionName) && sn.All(x => x.Value != null && x.Value.GetType().FullName.StartsWith("HeuristicLab.Encodings."))))
+          solutionNameComboBox.SelectedItem = sn.Key;
+      }
+    }
+    
+    public void UpdateSolutionVisualization() {
+      if (InvokeRequired) { Invoke((Action)UpdateSolutionVisualization); return;  }
+      var qualityName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
+      UpdateSolutionQualityAnalysis(qualityName);
+      if (similarityComboBox.SelectedIndex >= 0) {
+        var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+        UpdateSolutionDiversityAnalysis(calculator);
+        UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
+        UpdateSolutionLengthScaleAnalysis(calculator);
+        UpdateSolutionNetworkAnalysis(calculator);
+      } else {
+        solutionsDiversityViewHost.Content = null;
+        solutionsFdcViewHost.Content = null;
+        solutionsLengthScaleViewHost.Content = null;
+        solutionsNetworkChart.Series.First().Points.Clear();
+      }
+    }
+
+    private void UpdateSolutionQualityAnalysis(string qualityName) {
+      var dt = solutionsQualityViewHost.Content as DataTable;
+      if (dt == null) {
+        dt = QualityDistributionAnalyzer.PrepareTable(qualityName);
+        dt.VisualProperties.Title = "Quality Distribution";
+        solutionsQualityViewHost.Content = dt;
+      }
+      QualityDistributionAnalyzer.UpdateTable(dt, GetSolutionScopes().Select(x => GetQuality(x, qualityName) ?? double.NaN).Where(x => !double.IsNaN(x)));
+    }
+
+    private void UpdateSolutionDiversityAnalysis(ISolutionSimilarityCalculator calculator) {
+      try {
+        solutionsDiversityViewHost.Content = null;
+        var solutionScopes = GetSolutionScopes();
+        var similarities = new double[solutionScopes.Count, solutionScopes.Count];
+        for (var i = 0; i < solutionScopes.Count; i++) {
+          for (var j = 0; j < solutionScopes.Count; j++)
+            similarities[i, j] = calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
+        }
+        var hm = new HeatMap(similarities, "Solution Similarities", 0.0, 1.0);
+        solutionsDiversityViewHost.Content = hm;
+      } catch { }
+    }
+
+    private void UpdateSolutionFdcAnalysis(ISolutionSimilarityCalculator calculator, bool distanceToBest) {
+      try {
+        solutionsFdcViewHost.Content = null;
+        fdcSpearmanLabel.Text = "-";
+        fdcPearsonLabel.Text = "-";
+        var solutionScopes = GetSolutionScopes();
+        var points = new List<Point2D<double>>();
+        if (distanceToBest) {
+          var maximization = ((IValueParameter<BoolValue>)Content.Problem.MaximizationParameter).Value.Value;
+          var bestSolutions = (maximization ? solutionScopes.MaxItems(x => GetQuality(x, calculator.QualityVariableName) ?? double.NegativeInfinity)
+                                            : solutionScopes.MinItems(x => GetQuality(x, calculator.QualityVariableName) ?? double.PositiveInfinity)).ToList();
+          foreach (var solScope in solutionScopes.Except(bestSolutions)) {
+            var maxSimilarity = bestSolutions.Max(x => calculator.CalculateSolutionSimilarity(solScope, x));
+            var qDiff = (GetQuality(solScope, calculator.QualityVariableName) ?? double.NaN)
+                      - (GetQuality(bestSolutions[0], calculator.QualityVariableName) ?? double.NaN);
+            points.Add(new Point2D<double>(Math.Abs(qDiff), 1.0 - maxSimilarity));
+          }
+        } else {
+          for (int i = 0; i < solutionScopes.Count; i++) {
+            for (int j = 0; j < solutionScopes.Count; j++) {
+              if (i == j) continue;
+              var qDiff = (GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN)
+                          - (GetQuality(solutionScopes[j], calculator.QualityVariableName) ?? double.NaN);
+              if (double.IsNaN(qDiff)) continue;
+              points.Add(new Point2D<double>(Math.Abs(qDiff), 1.0 - calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j])));
+            }
+          }
+        }
+        var xs = points.Select(p => p.X).ToArray();
+        var ys = points.Select(p => p.Y).ToArray();
+        var scorr = alglib.spearmancorr2(xs, ys);
+        var pcorr = alglib.pearsoncorr2(xs, ys);
+        pcorr = pcorr * pcorr;
+        fdcSpearmanLabel.Text = scorr.ToString("F2");
+        fdcPearsonLabel.Text = pcorr.ToString("F2");
+
+        var splot = new ScatterPlot("Fitness-Distance", "");
+        splot.VisualProperties.XAxisTitle = "Absolute Fitness Difference";
+        splot.VisualProperties.XAxisMinimumAuto = false;
+        splot.VisualProperties.XAxisMinimumFixedValue = 0.0;
+        splot.VisualProperties.YAxisTitle = "Solution Distance";
+        splot.VisualProperties.YAxisMinimumAuto = false;
+        splot.VisualProperties.YAxisMinimumFixedValue = 0.0;
+        splot.VisualProperties.YAxisMaximumAuto = false;
+        splot.VisualProperties.YAxisMaximumFixedValue = 1.0;
+        var row = new ScatterPlotDataRow("Fdc", "", points);
+        row.VisualProperties.PointSize = 10;
+        row.VisualProperties.ShowRegressionLine = true;
+        splot.Rows.Add(row);
+        solutionsFdcViewHost.Content = splot;
+      } catch { }
+    }
+
+    private void UpdateSolutionLengthScaleAnalysis(ISolutionSimilarityCalculator calculator) {
+      try {
+        solutionsLengthScaleViewHost.Content = null;
+        var dt = solutionsLengthScaleViewHost.Content as DataTable;
+        if (dt == null) {
+          dt = QualityDistributionAnalyzer.PrepareTable("Length Scale");
+          solutionsLengthScaleViewHost.Content = dt;
+        }
+        QualityDistributionAnalyzer.UpdateTable(dt, CalculateLengthScale(calculator));
+      } catch {
+        solutionsLengthScaleViewHost.Content = null;
+      }
+    }
+
+    private IEnumerable<double> CalculateLengthScale(ISolutionSimilarityCalculator calculator) {
+      var solutionScopes = GetSolutionScopes();
+      for (var i = 0; i < solutionScopes.Count; i++) {
+        for (var j = 0; j < solutionScopes.Count; j++) {
+          if (i == j) continue;
+          var sim = calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
+          if (sim.IsAlmost(0)) continue;
+          var qDiff = (GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN)
+                    - (GetQuality(solutionScopes[j], calculator.QualityVariableName) ?? double.NaN);
+          if (!double.IsNaN(qDiff)) yield return Math.Abs(qDiff) / sim;
+        }
+      }
+    }
+
+    private void UpdateSolutionNetworkAnalysis(ISolutionSimilarityCalculator calculator) {
+      var series = solutionsNetworkChart.Series["SolutionSeries"];
+      var seedingSeries = solutionsNetworkChart.Series["SeedingSolutionSeries"];
+      try {
+        series.Points.Clear();
+        seedingSeries.Points.Clear();
+        var solutionScopes = GetSolutionScopes();
+        var dissimilarities = new DoubleMatrix(solutionScopes.Count, solutionScopes.Count);
+        for (var i = 0; i < solutionScopes.Count; i++) {
+          for (var j = 0; j < solutionScopes.Count; j++) {
+            if (i == j) continue;
+            dissimilarities[i, j] = 1.0 - calculator.CalculateSolutionSimilarity(solutionScopes[i], solutionScopes[j]);
+          }
+        }
+        var coords = MultidimensionalScaling.KruskalShepard(dissimilarities);
+        for (var i = 0; i < coords.Rows; i++) {
+          var quality = GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN;
+          var dataPoint = new DataPoint() {
+            Name = (i + 1).ToString(),
+            XValue = coords[i, 0],
+            YValues = new[] {coords[i, 1], quality},
+            Label = (i + 1) + ": " + quality,
+            Tag = solutionScopes[i]
+          };
+          if (Content.SolutionSeedingPool.Contains(solutionScopes[i]) && Content.SolutionSeedingPool.ItemChecked(solutionScopes[i]))
+            seedingSeries.Points.Add(dataPoint);
+          else series.Points.Add(dataPoint);
+        }
+      } catch {
+        // problems in calculating the similarity
+        series.Points.Clear();
+        seedingSeries.Points.Clear();
+      }
+    }
+
+    private void SimilarityComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SimilarityComboBoxOnSelectedIndexChanged, sender, e); return; }
+      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+      if (calculator != null) {
+        calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
+        calculator.QualityVariableName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
+      }
+      UpdateSolutionDiversityAnalysis(calculator);
+      UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
+      UpdateSolutionLengthScaleAnalysis(calculator);
+      UpdateSolutionNetworkAnalysis(calculator);
+    }
+
+    private void SolutionNameComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SolutionNameComboBoxOnSelectedIndexChanged, sender, e); return; }
+      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+      if (calculator != null) {
+        calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
+        calculator.QualityVariableName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
+      }
+      UpdateSolutionDiversityAnalysis(calculator);
+      UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
+      UpdateSolutionLengthScaleAnalysis(calculator);
+      UpdateSolutionNetworkAnalysis(calculator);
+    }
+
+    private void FdcBetweenBestCheckBoxOnCheckedChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)FdcBetweenBestCheckBoxOnCheckedChanged, sender, e); return; }
+      UpdateSolutionFdcAnalysis((ISolutionSimilarityCalculator)similarityComboBox.SelectedItem, fdcBetweenBestCheckBox.Checked);
+    }
+
+    private void SolutionsNetworkChartOnMouseClick(object sender, MouseEventArgs e) {
+      var result = solutionsNetworkChart.HitTest(e.X, e.Y);
+      if (result.ChartElementType == ChartElementType.DataPoint) {
+        var point = (DataPoint)result.Object;
+        var solutionScope = (IScope)point.Tag;
+        if (!Content.SolutionSeedingPool.Contains(solutionScope)) return;
+        Content.SolutionSeedingPool.SetItemCheckedState(solutionScope, !Content.SolutionSeedingPool.ItemChecked(solutionScope));
+      }
+    }
+
+    private void SolutionsNetworkChartOnMouseDoubleClick(object sender, MouseEventArgs e) {
+      var result = solutionsNetworkChart.HitTest(e.X, e.Y);
+      if (result.ChartElementType == ChartElementType.DataPoint) {
+        var point = (DataPoint)result.Object;
+        var solutionScope = (IScope)point.Tag;
+        MainForm.ShowContent(solutionScope, true);
+      }
+    }
+
+    #region Helpers
+    private List<IScope> GetSolutionScopes() {
+      return Content.Problem.Solutions.Select(x => x.Solution).OfType<IScope>().ToList();
+    } 
+
+    private double? GetQuality(IScope scope, string qualityName) {
+      IVariable v;
+      if (!scope.Variables.TryGetValue(qualityName, out v)) return null;
+      var dval = v.Value as DoubleValue;
+      if (dval == null) return null;
+      return dval.Value;
+    }
+    #endregion
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.resx	(revision 13722)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.resx	(revision 13722)
@@ -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>
