Index: /bidspace/pom.xml
===================================================================
--- /bidspace/pom.xml	(revision 47)
+++ /bidspace/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>bidspace</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /boa/pom.xml
===================================================================
--- /boa/pom.xml	(revision 47)
+++ /boa/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>boa</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /collectparties.sh
===================================================================
--- /collectparties.sh	(revision 47)
+++ /collectparties.sh	(revision 48)
@@ -7,5 +7,5 @@
 rm -rf collectedparties
 mkdir collectedparties
-VERSION=2.1.2
+VERSION=2.1.3
 
 cp "exampleparties/anac2019/agentgg/target/agentgg-${VERSION}-jar-with-dependencies.jar" collectedparties
Index: /events/pom.xml
===================================================================
--- /events/pom.xml	(revision 47)
+++ /events/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>events</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /exampleparties/anac2019/agentgg/pom.xml
===================================================================
--- /exampleparties/anac2019/agentgg/pom.xml	(revision 47)
+++ /exampleparties/anac2019/agentgg/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties.anac2019</groupId>
 	<artifactId>agentgg</artifactId>
-	<version>2.1.2</version>  <!-- equals the geniusweb version -->
+	<version>2.1.3</version>  <!-- equals the geniusweb version -->
 	<packaging>jar</packaging>
 
Index: /exampleparties/anac2019/winkyagent/pom.xml
===================================================================
--- /exampleparties/anac2019/winkyagent/pom.xml	(revision 47)
+++ /exampleparties/anac2019/winkyagent/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties.anac2019</groupId>
 	<artifactId>winkyagent</artifactId>
-	<version>2.1.2</version>  <!-- equals the geniusweb version -->
+	<version>2.1.3</version>  <!-- equals the geniusweb version -->
 	<packaging>jar</packaging>
 
Index: /exampleparties/boulware/pom.xml
===================================================================
--- /exampleparties/boulware/pom.xml	(revision 47)
+++ /exampleparties/boulware/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>boulware</artifactId>
-	<version>2.1.2</version>  <!-- equals the geniusweb version -->
+	<version>2.1.3</version>  <!-- equals the geniusweb version -->
 	<packaging>jar</packaging>
 
Index: /exampleparties/comparebids/pom.xml
===================================================================
--- /exampleparties/comparebids/pom.xml	(revision 47)
+++ /exampleparties/comparebids/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>comparebids</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /exampleparties/conceder/pom.xml
===================================================================
--- /exampleparties/conceder/pom.xml	(revision 47)
+++ /exampleparties/conceder/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>conceder</artifactId>
-	<version>2.1.2</version>  <!-- equals the geniusweb version -->
+	<version>2.1.3</version>  <!-- equals the geniusweb version -->
 	<packaging>jar</packaging>
 
Index: /exampleparties/hardliner/pom.xml
===================================================================
--- /exampleparties/hardliner/pom.xml	(revision 47)
+++ /exampleparties/hardliner/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>hardliner</artifactId>
-	<version>2.1.2</version>  <!-- equals the geniusweb version -->
+	<version>2.1.3</version>  <!-- equals the geniusweb version -->
 	<packaging>jar</packaging>
 
Index: /exampleparties/humangui/pom.xml
===================================================================
--- /exampleparties/humangui/pom.xml	(revision 47)
+++ /exampleparties/humangui/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>humangui</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /exampleparties/linear/pom.xml
===================================================================
--- /exampleparties/linear/pom.xml	(revision 47)
+++ /exampleparties/linear/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>linear</artifactId>
-	<version>2.1.2</version>  <!-- equals the geniusweb version -->
+	<version>2.1.3</version>  <!-- equals the geniusweb version -->
 	<packaging>jar</packaging>
 
Index: /exampleparties/randomparty/pom.xml
===================================================================
--- /exampleparties/randomparty/pom.xml	(revision 47)
+++ /exampleparties/randomparty/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>randomparty</artifactId>
-	<version>2.1.2</version>  <!-- equals the geniusweb version -->
+	<version>2.1.3</version>  <!-- equals the geniusweb version -->
 	<packaging>jar</packaging>
 
Index: /exampleparties/randompartypy/pom.xml
===================================================================
--- /exampleparties/randompartypy/pom.xml	(revision 47)
+++ /exampleparties/randompartypy/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>randompyparty</artifactId>
-	<version>2.1.2</version>  <!-- equals the geniusweb version -->
+	<version>2.1.3</version>  <!-- equals the geniusweb version -->
 	<packaging>jar</packaging>
 
Index: /exampleparties/simpleboa/pom.xml
===================================================================
--- /exampleparties/simpleboa/pom.xml	(revision 47)
+++ /exampleparties/simpleboa/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>simpleboaparty</artifactId>
-	<version>2.1.2</version>  <!-- equals the geniusweb version -->
+	<version>2.1.3</version>  <!-- equals the geniusweb version -->
 	<packaging>jar</packaging>
 
Index: /exampleparties/simpleshaop/pom.xml
===================================================================
--- /exampleparties/simpleshaop/pom.xml	(revision 47)
+++ /exampleparties/simpleshaop/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>simpleshaop</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /exampleparties/timedependentparty/pom.xml
===================================================================
--- /exampleparties/timedependentparty/pom.xml	(revision 47)
+++ /exampleparties/timedependentparty/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>timedependentparty</artifactId>
-	<version>2.1.2</version>  <!-- equals the geniusweb version -->
+	<version>2.1.3</version>  <!-- equals the geniusweb version -->
 	<packaging>jar</packaging>
 
Index: /ip/pom.xml
===================================================================
--- /ip/pom.xml	(revision 47)
+++ /ip/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>ip</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /issuevalue/pom.xml
===================================================================
--- /issuevalue/pom.xml	(revision 47)
+++ /issuevalue/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>issuevalue</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /logconverter/pom.xml
===================================================================
--- /logconverter/pom.xml	(revision 48)
+++ /logconverter/pom.xml	(revision 48)
@@ -0,0 +1,213 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>geniusweb</groupId>
+	<artifactId>logconverter</artifactId>
+	<version>2.1.3</version>
+	<packaging>jar</packaging>
+
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<maven.compiler.target>1.8</maven.compiler.target>
+		<maven.compiler.source>1.8</maven.compiler.source>
+		<basedir>.</basedir>
+		<passwd>${env.ARTIFACTORY_PASS}</passwd>
+		<jackson-2-version>2.12.3</jackson-2-version>
+		<geniusweb.version>${project.version}</geniusweb.version>
+	</properties>
+
+	<distributionManagement>
+		<repository>
+			<id>artifactory.ewi.tudelft.nl</id>
+			<url>https://artifactory.ewi.tudelft.nl/artifactory/libs-release</url>
+		</repository>
+	</distributionManagement>
+
+
+	<dependencies>
+		<dependency>
+			<groupId>geniusweb</groupId>
+			<artifactId>protocol</artifactId>
+			<version>${geniusweb.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>geniusweb</groupId>
+			<artifactId>profile</artifactId>
+			<version>${geniusweb.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>geniusweb</groupId>
+			<artifactId>profileconnection</artifactId>
+			<version>${geniusweb.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.glassfish.tyrus.bundles</groupId>
+			<artifactId>tyrus-standalone-client</artifactId>
+			<version>1.18</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-cli</groupId>
+			<artifactId>commons-cli</artifactId>
+			<version>1.5.0</version>
+		</dependency>
+
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>tudelft.utilities</groupId>
+			<artifactId>junit</artifactId>
+			<version>1.0.5</version>
+			<scope>test</scope>
+		</dependency>
+
+
+	</dependencies>
+
+
+	<repositories>
+		<repository>
+			<id>artifactory.ewi.tudelft.nl</id>
+			<url>https://artifactory.ewi.tudelft.nl/artifactory/libs-release</url>
+			<snapshots>
+				<enabled>false</enabled>
+			</snapshots>
+		</repository>
+	</repositories>
+
+	<pluginRepositories>
+		<pluginRepository>
+			<id>central</id>
+			<url>https://repo1.maven.org/maven2</url>
+		</pluginRepository>
+		<pluginRepository>
+			<id>artifactory.ewi.tudelft.nl</id>
+			<url>https://artifactory.ewi.tudelft.nl/artifactory/libs-release</url>
+		</pluginRepository>
+	</pluginRepositories>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.8.0</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-source-plugin</artifactId>
+				<version>3.1.0</version>
+				<executions>
+					<execution>
+						<id>attach-sources</id>
+						<goals>
+							<goal>jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+			<!-- The javadoc is disabled because this basically is a clone of 3rd 
+				party code that has no proper documentation. <plugin> <groupId>org.apache.maven.plugins</groupId> 
+				<artifactId>maven-javadoc-plugin</artifactId> <version>3.2.0</version> <executions> 
+				<execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> 
+				</executions> </plugin> -->
+			<plugin>
+				<groupId>org.jfrog.buildinfo</groupId>
+				<artifactId>artifactory-maven-plugin</artifactId>
+				<version>3.2.3</version>
+				<executions>
+					<execution>
+						<id>build-info</id>
+						<goals>
+							<goal>publish</goal>
+						</goals>
+						<configuration>
+							<publisher>
+								<contextUrl>http://artifactory.ewi.tudelft.nl/artifactory</contextUrl>
+								<repoKey>libs-release</repoKey>
+								<username>wouter</username>
+								<password>${passwd}</password>
+							</publisher>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-assembly-plugin</artifactId>
+				<version>2.4.1</version>
+				<configuration>
+					<!-- get all project dependencies -->
+					<descriptorRefs>
+						<descriptorRef>jar-with-dependencies</descriptorRef>
+					</descriptorRefs>
+					<archive>
+						<manifest>
+							<mainClass>geniusweb.logconverter.Convert</mainClass>
+							<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+							<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+						</manifest>
+					</archive>
+				</configuration>
+				<executions>
+					<execution>
+						<id>make-assembly</id>
+						<!-- bind to the packaging phase -->
+						<phase>package</phase>
+						<goals>
+							<goal>single</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+
+		</plugins>
+
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.eclipse.m2e</groupId>
+					<artifactId>lifecycle-mapping</artifactId>
+					<version>1.0.0</version>
+					<configuration>
+						<lifecycleMappingMetadata>
+							<pluginExecutions>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>org.jfrog.buildinfo</groupId>
+										<artifactId>artifactory-maven-plugin</artifactId>
+										<versionRange>[1.0.0,)</versionRange>
+										<goals>
+											<goal>publish</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore />
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+
+
+	</build>
+</project>
Index: /logconverter/src/main/java/geniusweb/logconverter/Convert.java
===================================================================
--- /logconverter/src/main/java/geniusweb/logconverter/Convert.java	(revision 48)
+++ /logconverter/src/main/java/geniusweb/logconverter/Convert.java	(revision 48)
@@ -0,0 +1,262 @@
+package geniusweb.logconverter;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+
+import org.apache.commons.cli.BasicParser;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import geniusweb.actions.PartyId;
+import geniusweb.protocol.NegoState;
+import geniusweb.protocol.session.SessionResult;
+import tudelft.utilities.logging.Reporter;
+
+/**
+ * Utility class with command line options and main program. Converts a
+ * NegoState into a file (CSV, JSON) with utilities for each session. Contacts
+ * the actual profileservers/profile files to do so.
+ */
+public class Convert {
+	private static final String JSON = ".json";
+	private final static ObjectMapper jackson = new ObjectMapper();
+	private final Reporter reporter;
+	private final File source;
+	private final File output;
+	private final Format format;
+
+	/**
+	 * How {@link SessionResultWithUtils} is written to the output
+	 */
+	enum Format {
+		CSV, // for each party write sessionnr, partyname, profilename, final
+				// util
+		JSON // jackson serializes it
+	};
+
+	/**
+	 * @param sourcedir a directory or file to convert. If directory, converts
+	 *                  all json files in the dir.
+	 * @param level     the debug {@link Level}. Debug messages at or above this
+	 *                  level go to stderr.
+	 * @param outputf   the output file or directory to write results to. null=
+	 *                  write to stdout. If output=file then input must be also
+	 *                  a single file.
+	 * @throws IOException
+	 * @throws JsonMappingException
+	 * @throws JsonParseException
+	 */
+	public Convert(File source, Level level, File outputf, Format format,
+			Reporter reporter)
+			throws JsonParseException, JsonMappingException, IOException {
+		this.source = source;
+		this.format = format;
+		this.output = outputf;
+		this.reporter = reporter;
+		if (outputf != null) {
+			if (outputf.exists()) {
+				if (!outputf.isDirectory())
+					throw new IOException("Output " + outputf
+							+ " exists but is not a directory");
+				if (!outputf.canWrite())
+					throw new IOException("" + outputf + " is write protected");
+			}
+			if (source.isDirectory() && !outputf.isDirectory())
+				throw new IOException(
+						"Source is a directory, output must also be a directory but got  "
+								+ output);
+		}
+		if (source.isDirectory()) {
+			File filesList[] = source.listFiles();
+			for (File file : filesList) {
+				if (file.getName().endsWith(JSON)) {
+					output(file, convertFile(file));
+				}
+			}
+		} else {
+			output(source, convertFile(source));
+		}
+
+	}
+
+	/**
+	 * Writes converted file to the {@link #output}, or stdout if null. The
+	 * destination file will match the source file. Destination file must not
+	 * exist.
+	 * 
+	 * If {@link #output} is a dir , the name of the source file is used for the
+	 * destination file. The extension is replaced with {@link #format}.
+	 * 
+	 * @param src the source {@link File}. May be used to generate output
+	 *            filename.
+	 * @param res the result to write to the output.
+	 */
+	private void output(File src, List<SessionResultWithUtils> res) {
+		String text = "";
+		switch (format) {
+		case CSV:
+			text = "session,party,profile,utility\n";
+			long sessionnr = 0;
+			for (SessionResultWithUtils r : res) {
+				for (PartyId party : r.getParticipants().keySet()) {
+					text = text + "" + sessionnr + ","
+							+ r.getParticipants().get(party).getParty()
+									.getPartyRef().getURI()
+							+ ","
+							+ r.getParticipants().get(party).getProfile()
+									.getURI()
+							+ "," + r.getUtilities().get(party) + "\n";
+				}
+				sessionnr++;
+			}
+			break;
+		case JSON:
+			try {
+				text = jackson.writeValueAsString(res);
+			} catch (JsonProcessingException e) {
+				reporter.log(Level.SEVERE,
+						fullMessage("Failed to convert result to json:", e));
+			}
+		}
+
+		if (output == null) {
+			System.out.println(text);
+		} else {
+			File outfile;
+			if (output.exists()) {
+				// must be dir
+				String destfilename = src.getName();
+				if (destfilename.endsWith(JSON)) {
+					destfilename = destfilename.substring(0,
+							destfilename.length() - 4) + format;
+				}
+				outfile = new File(output.getAbsolutePath(), destfilename);
+
+			} else {
+				// we assume output is just the file to write to.
+				outfile = output;
+			}
+			try {
+				if (outfile.exists())
+					throw new IOException(
+							"destination file already exists:" + outfile);
+				BufferedWriter writer = new BufferedWriter(
+						new FileWriter(outfile));
+				writer.write(text);
+				writer.close();
+			} catch (IOException e) {
+				reporter.log(Level.SEVERE, fullMessage(
+						"Failed to write result to file " + outfile, e));
+			}
+		}
+
+	}
+
+	/** @return all messages from stacktraces */
+	private String fullMessage(String msg, Throwable e) {
+		while (e != null) {
+			msg = msg + ":" + e.getMessage();
+			e = e.getCause();
+		}
+		return msg;
+	}
+
+	private List<SessionResultWithUtils> convertFile(File file)
+			throws JsonParseException, JsonMappingException, IOException {
+		NegoState state = jackson.readValue(file, NegoState.class);
+		List<SessionResultWithUtils> results = new LinkedList<>();
+		for (SessionResult res : state.getResults()) {
+			results.add(SessionResultWithUtils.create(res, reporter));
+		}
+		return results;
+	}
+
+	/**
+	 * 
+	 * @param args first arg must be folder containing .json files containing
+	 *             NegoState objects. All objects are parsed, getResults() is
+	 *             called, and all results are converted to
+	 *             SessionResultWithUtils.
+	 */
+	public static void main(String[] args) {
+
+		CommandLineParser parser = new BasicParser();
+		// use to read Command Line Arguments
+		HelpFormatter formatter = new HelpFormatter(); // // Use to Format
+		CommandLine cmd = null;
+		Options options = getOpts();
+
+		try {
+			cmd = parser.parse(options, args); // it will parse according to the
+												// options and parse option
+												// value
+			String source = cmd.getOptionValue("source");
+			String output = cmd.getOptionValue("output");
+			Level level = Level.parse(cmd.getOptionValue("level", "WARNING"));
+			Format format = Format
+					.valueOf(cmd.getOptionValue("format", "JSON"));
+			new Convert(new File(source), level,
+					output == null ? null : new File(output), format,
+					new StdOutReporter(level));
+		} catch (ParseException e) {
+			System.out.println(e.getMessage());
+			formatter.printHelp("Convert", options);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	private static Options getOpts() {
+		Options options = new Options(); // Options Arguments which are
+		// Acceptable By Program.
+		Option source = new Option("s", "source", true,
+				"source file path. If dir, all json files in the dir are converted");
+		source.setRequired(true);
+		options.addOption(source);
+		Option destination = new Option("o", "output", true,
+				"Destination file/dir (must exist and be writable; must be dir if source is dir)");
+		options.addOption(destination);
+		Option debuglevel = new Option("l", "debuglevel", true,
+				"Debug level (WARNING, SEVERE, INFO, FINE, FINEST) ");
+		options.addOption(debuglevel);
+		Option format = new Option("f", "format", true,
+				"output format " + Arrays.toString(Format.values()));
+		options.addOption(format);
+
+		return options;
+	}
+}
+
+class StdOutReporter implements Reporter {
+	private final Level level;
+
+	public StdOutReporter(Level level) {
+		this.level = level;
+	}
+
+	@Override
+	public void log(Level level, String msg) {
+		if (level.intValue() >= this.level.intValue())
+			System.err.println(level + ":" + msg);
+	}
+
+	@Override
+	public void log(Level arg0, String msg, Throwable arg2) {
+		log(arg0, msg);
+	}
+}
Index: /logconverter/src/main/java/geniusweb/logconverter/SessionResultWithUtils.java
===================================================================
--- /logconverter/src/main/java/geniusweb/logconverter/SessionResultWithUtils.java	(revision 48)
+++ /logconverter/src/main/java/geniusweb/logconverter/SessionResultWithUtils.java	(revision 48)
@@ -0,0 +1,166 @@
+package geniusweb.logconverter;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.logging.Level;
+
+import javax.websocket.DeploymentException;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import geniusweb.actions.PartyId;
+import geniusweb.inform.Agreements;
+import geniusweb.issuevalue.Bid;
+import geniusweb.profile.PartialOrdering;
+import geniusweb.profile.utilityspace.UtilitySpace;
+import geniusweb.profileconnection.ProfileConnectionFactory;
+import geniusweb.profileconnection.ProfileInterface;
+import geniusweb.protocol.session.SessionResult;
+import geniusweb.references.PartyWithProfile;
+import geniusweb.references.ProfileRef;
+import tudelft.utilities.logging.Reporter;
+
+/**
+ * Contains SessionResult including the utilities.
+ */
+public class SessionResultWithUtils extends SessionResult {
+
+	private final Map<PartyId, BigDecimal> utilities;
+	private final static transient Map<ProfileRef, UtilitySpace> profilecache = new HashMap<>();;
+
+	/**
+	 * 
+	 * @param res   a {@link SessionResult}
+	 * @param utils a map of the netto utility (including penalty) by each
+	 *              party. 0 if not known or invalid.
+	 */
+	public SessionResultWithUtils(
+			@JsonProperty("participants") Map<PartyId, PartyWithProfile> participants,
+			@JsonProperty("agreements") Agreements agreements,
+			@JsonProperty("penalties") Map<PartyId, Double> penalties,
+			@JsonProperty("error") Throwable error,
+			@JsonProperty("utilities") Map<PartyId, BigDecimal> utils) {
+		super(participants, agreements, penalties, error);
+		this.utilities = new HashMap<>(utils);
+		List<PartyId> missed = new ArrayList<PartyId>(participants.keySet());
+		missed.removeAll(utils.keySet());
+		if (!missed.isEmpty())
+			throw new IllegalArgumentException(
+					"participants " + missed + " must also get a utility");
+
+	}
+
+	/**
+	 * adds utility values to a standard SessionResult.
+	 * 
+	 * @param res the standard {@link SessionResult}
+	 * @return a {@link SessionResultWithUtils}. The utilities for of the
+	 *         agreement are computed using the profile available in the given
+	 *         {@link SessionResult}. The penalty will be subtracted from this.
+	 *         Notice that the final value thus can be negative.
+	 *         <p>
+	 *         If there is no agreement, the utility of the reservation bid will
+	 *         be used. If there is no reservation bid, utility is 0.
+	 *         <p>
+	 *         If a profile is not a {@link UtilitySpace}, eg the profile is a
+	 *         {@link PartialOrdering} or is unavailable (eg security
+	 *         restrictions or server down), the utility will be set to 0.
+	 *         <p>
+	 *         Any penalty will be subtracted "as is", so if the penalty is 0.2
+	 */
+	public static SessionResultWithUtils create(SessionResult res,
+			Reporter reporter) {
+		Map<PartyId, UtilitySpace> profiles = new HashMap<>();
+		Map<PartyId, BigDecimal> utils = new HashMap<>();
+		Map<PartyId, Bid> agreements = res.getAgreements().getMap();
+
+		for (PartyId party : res.getParticipants().keySet()) {
+			BigDecimal util = BigDecimal.ZERO;
+			UtilitySpace prof = getProfile(
+					res.getParticipants().get(party).getProfile(), reporter);
+			if (prof != null) {
+				Bid bid = agreements.get(party);
+				if (bid == null) {
+					if (prof.getReservationBid() != null)
+						util = prof.getUtility(prof.getReservationBid());
+				} else {
+					// check we have profile to avoid repeated errors
+					util = prof.getUtility(bid);
+					Double penalty = res.getPenalties().get(party);
+					if (penalty != null) {
+						util = util
+								.subtract(new BigDecimal(penalty.toString()));
+					}
+				}
+			}
+			utils.put(party, util);
+		}
+		return new SessionResultWithUtils(res.getParticipants(),
+				res.getAgreements(), res.getPenalties(), res.getError(), utils);
+	}
+
+	/**
+	 * @param profileref
+	 * @param reporter
+	 * @return profile {@link UtilitySpace}, or null if profile can't be
+	 *         fetched. Profiles are cached to avoid repeated fetching.
+	 */
+	private static UtilitySpace getProfile(ProfileRef profileref,
+			Reporter reporter) {
+		UtilitySpace us = null;
+		if (!profilecache.containsKey(profileref)) {
+			try {
+				ProfileInterface interf = ProfileConnectionFactory
+						.create(profileref.getURI(), reporter);
+				us = (UtilitySpace) interf.getProfile();
+			} catch (IOException | DeploymentException e) {
+				e.printStackTrace();
+				reporter.log(Level.WARNING,
+						"Failed to get profile:" + e.getMessage(), e);
+			}
+			profilecache.put(profileref, us);
+		}
+		return profilecache.get(profileref);
+	}
+
+	/**
+	 * 
+	 * @return the netto utility achieved by each party.
+	 */
+	public Map<PartyId, BigDecimal> getUtilities() {
+		return utilities;
+	}
+
+	@Override
+	public String toString() {
+		// not so important as toString is mainly for debugging.
+		return "SessionResultWithUtils[" + super.toString() + "," + utilities
+				+ "]";
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = super.hashCode();
+		result = prime * result + Objects.hash(utilities);
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (!super.equals(obj))
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		SessionResultWithUtils other = (SessionResultWithUtils) obj;
+		return Objects.equals(utilities, other.utilities);
+	}
+
+}
Index: /logconverter/src/test/java/geniusweb/logconverter/ConvertTest.java
===================================================================
--- /logconverter/src/test/java/geniusweb/logconverter/ConvertTest.java	(revision 48)
+++ /logconverter/src/test/java/geniusweb/logconverter/ConvertTest.java	(revision 48)
@@ -0,0 +1,55 @@
+package geniusweb.logconverter;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.List;
+import java.util.logging.Level;
+
+import org.junit.Test;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+
+public class ConvertTest {
+	TestReporter reporter = new TestReporter();
+
+	@Test
+	public void e2esmoketest() {
+		Convert.main(new String[] { "-s",
+				"src/test/resources/APP1646925947841local.json", "-f", "CSV" });
+	}
+
+	@Test
+	public void e2eTest()
+			throws JsonParseException, JsonMappingException, IOException {
+		new Convert(new File("src/test/resources/APP1646925947841local.json"),
+				Level.WARNING, null, Convert.Format.CSV, reporter);
+		assertEquals(null, reporter.getError());
+	}
+
+	@Test
+	public void e2eToFile() throws IOException {
+		File outfile = File.createTempFile("temp", "csv");
+		outfile.delete();
+		new Convert(new File("src/test/resources/APP1646925947841local.json"),
+				Level.WARNING, outfile, Convert.Format.CSV, reporter);
+		assertEquals(null, reporter.getError());
+		List<String> lines = Files.readAllLines(outfile.toPath());
+		assertEquals(37, lines.size());
+		lines.remove(0); // remove header line.
+		int row = 0;
+		for (String line : lines) {
+			String[] cols = line.split(",");
+			Integer session = Integer.valueOf(cols[0]);
+			assertEquals((Integer) (row / 2), session);
+			assertTrue(Double.valueOf(cols[3]) > 0); // all utils valid
+			row++;
+		}
+		outfile.delete();
+	}
+
+}
Index: /logconverter/src/test/java/geniusweb/logconverter/SessionResultWithUtilsTest.java
===================================================================
--- /logconverter/src/test/java/geniusweb/logconverter/SessionResultWithUtilsTest.java	(revision 48)
+++ /logconverter/src/test/java/geniusweb/logconverter/SessionResultWithUtilsTest.java	(revision 48)
@@ -0,0 +1,176 @@
+package geniusweb.logconverter;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import geniusweb.actions.PartyId;
+import geniusweb.inform.Agreements;
+import geniusweb.issuevalue.Bid;
+import geniusweb.issuevalue.DiscreteValue;
+import geniusweb.issuevalue.Value;
+import geniusweb.protocol.session.SessionResult;
+import geniusweb.references.Parameters;
+import geniusweb.references.PartyRef;
+import geniusweb.references.PartyWithParameters;
+import geniusweb.references.PartyWithProfile;
+import geniusweb.references.ProfileRef;
+import tudelft.utilities.junit.GeneralTests;
+
+public class SessionResultWithUtilsTest
+		extends GeneralTests<SessionResultWithUtils> {
+
+	private final ObjectMapper jackson = new ObjectMapper();
+	private final RuntimeException error = new RuntimeException("test");
+
+	private final String ISSUE1 = "salary";
+	private final String ISSUE2 = "fte";
+	private String jsonstring = "{\"participants\":{\"party2\":{\"party\":{\"partyref\":\"party2\",\"parameters\":{}},\"profile\":\"file:src/test/resources/profile2.json\"},\"party1\":{\"party\":{\"partyref\":\"party1\",\"parameters\":{}},\"profile\":\"file:src/test/resources/profile1.json\"}},\"agreements\":{\"party2\":{\"issuevalues\":{\"salary\":\"3500\",\"fte\":\"0.8\"}},\"party1\":{\"issuevalues\":{\"salary\":\"3500\",\"fte\":\"0.8\"}}},\"penalties\":{\"party2\":0.002,\"party1\":0.001},\"error\":null,\"utilities\":{\"party2\":0.7,\"party1\":0.8,\"party3\":0.4}}";
+	private Map<PartyId, Double> penalties = new HashMap<>();
+
+	private PartyId PARTY1 = new PartyId("party1");
+	private PartyId PARTY2 = new PartyId("party2");
+	private PartyId PARTY3 = new PartyId("party3");
+
+	private SessionResult result1, result1a, result2, result3;
+	private SessionResultWithUtils reswithutil1, reswithutil1a, reswithutil2;
+
+	@Before
+	public void before() throws URISyntaxException, JsonProcessingException {
+		penalties.put(PARTY1, 0.001d);
+		penalties.put(PARTY2, 0.002d);
+
+		String errorstring = "\"error\":{\"java.lang.RuntimeException\":"
+				+ jackson.writeValueAsString(error) + "}";
+		// System.out.println(errorstring);
+
+		PartyWithParameters party1 = new PartyWithParameters(
+				new PartyRef("party1"), new Parameters());
+		PartyWithParameters party2 = new PartyWithParameters(
+				new PartyRef("party2"), new Parameters());
+
+		PartyWithProfile partyprofile1 = new PartyWithProfile(party1,
+				new ProfileRef("file:src/test/resources/profile1.json"));
+		PartyWithProfile partyprofile2 = new PartyWithProfile(party2,
+				new ProfileRef("file:src/test/resources/profile2.json"));
+
+		Map<String, Value> issuevalues1 = new HashMap<>();
+		issuevalues1.put(ISSUE1, new DiscreteValue("3500"));
+		issuevalues1.put(ISSUE2, new DiscreteValue("0.8"));
+		Bid bid1 = new Bid(issuevalues1);
+		Agreements agreement1 = new Agreements().with(new Agreements(bid1,
+				new HashSet<>(Arrays.asList(PARTY1, PARTY2))));
+
+		// different order but that shouldn't matter
+		Map<String, Value> issuevalues2 = new HashMap<>();
+		issuevalues2.put(ISSUE1, new DiscreteValue("3500"));
+		issuevalues2.put(ISSUE2, new DiscreteValue("0.8"));
+		Bid bid2 = new Bid(issuevalues2);
+		Agreements agreement2 = new Agreements().with(new Agreements(bid2,
+				new HashSet<>(Arrays.asList(PARTY1, PARTY3))));
+
+		Map<PartyId, PartyWithProfile> partiesmap = new HashMap<>();
+		partiesmap.put(PARTY1, partyprofile1);
+		partiesmap.put(PARTY2, partyprofile2);
+
+		Map<PartyId, PartyWithProfile> partiesmap2 = new HashMap<>();
+		partiesmap2.put(PARTY1, partyprofile2);
+		partiesmap2.put(PARTY3, partyprofile1);
+
+		result1 = new SessionResult(partiesmap, agreement1, penalties, null);
+		result2 = new SessionResult(partiesmap, agreement2, penalties, null);
+		result3 = new SessionResult(partiesmap, new Agreements(), penalties,
+				null);
+
+		HashMap<PartyId, BigDecimal> utils1 = new HashMap<>();
+		utils1.put(PARTY1, new BigDecimal("0.8"));
+		utils1.put(PARTY2, new BigDecimal("0.7"));
+		utils1.put(PARTY3, new BigDecimal("0.4"));
+		HashMap<PartyId, BigDecimal> utils2 = new HashMap<>();
+		utils2.put(PARTY1, new BigDecimal("0.8"));
+		utils2.put(PARTY2, new BigDecimal("0.9"));
+		utils2.put(PARTY3, new BigDecimal("0.4"));
+
+		reswithutil1 = new SessionResultWithUtils(partiesmap, agreement1,
+				penalties, null, utils1);
+		reswithutil1a = new SessionResultWithUtils(partiesmap, agreement1,
+				penalties, null, utils1);
+		reswithutil2 = new SessionResultWithUtils(partiesmap, agreement1,
+				penalties, null, utils2);
+
+	}
+
+	@Override
+	public List<List<SessionResultWithUtils>> getGeneralTestData() {
+		return Arrays.asList(Arrays.asList(reswithutil1, reswithutil1a),
+				Arrays.asList(reswithutil2));
+	}
+
+	@Override
+	public List<String> getGeneralTestStrings() {
+		return Arrays.asList(
+				"SessionResultWithUtils.*party2=0.7, party1=0.8, party3=0.4.*",
+				"SessionResultWithUtils.*party2=0.9, party1=0.8, party3=0.4.*");
+	}
+
+	@Test
+	public void serializeTest() throws JsonProcessingException {
+		System.out.println(jackson.writeValueAsString(reswithutil1));
+		assertEquals(jsonstring, jackson.writeValueAsString(reswithutil1));
+	}
+
+	@Test
+	public void deserializeTest() throws IOException {
+		SessionResultWithUtils act = jackson.readValue(jsonstring,
+				SessionResultWithUtils.class);
+		assertEquals(reswithutil1, act);
+	}
+
+	@Test
+	public void createTest() {
+		TestReporter reporter = new TestReporter();
+		SessionResultWithUtils res = SessionResultWithUtils.create(result1,
+				reporter);
+		System.out.println(res);
+		assertEquals(null, reporter.getError());
+		assertEquals(new BigDecimal("0.5590"), // 0.56 - 0.001
+				res.getUtilities().get(PARTY1));
+		assertEquals(new BigDecimal("0.448"), // 0.45 - 0.002
+				res.getUtilities().get(PARTY2));
+
+	}
+
+	@Test
+	public void createNoAgreementTest() {
+		TestReporter reporter = new TestReporter();
+		SessionResultWithUtils res = SessionResultWithUtils.create(result3,
+				reporter);
+		System.out.println(res);
+		assertEquals(null, reporter.getError());
+		assertEquals(new BigDecimal("0.5600"), // "salary": "3500","fte": "0.8"
+				res.getUtilities().get(PARTY1));
+		assertEquals(new BigDecimal("0.50"), // "salary": "3000", "fte": "0.8"
+				res.getUtilities().get(PARTY2));
+
+	}
+
+	@Test
+	public void blaTest() {
+		// and if there is no resbid, is util=0?
+
+	}
+
+}
Index: /logconverter/src/test/java/geniusweb/logconverter/TestReporter.java
===================================================================
--- /logconverter/src/test/java/geniusweb/logconverter/TestReporter.java	(revision 48)
+++ /logconverter/src/test/java/geniusweb/logconverter/TestReporter.java	(revision 48)
@@ -0,0 +1,36 @@
+package geniusweb.logconverter;
+
+import java.util.logging.Level;
+
+import tudelft.utilities.logging.Reporter;
+
+/**
+ * Stores any reported errors and warnings so that we can test nothing bad
+ * happened
+ */
+public class TestReporter implements Reporter {
+	private String error = null;
+
+	@Override
+	public void log(Level level, String msg) {
+		log(level, msg, null);
+	}
+
+	@Override
+	public void log(Level level, String msg, Throwable thrown) {
+		System.out.println("" + level + ":" + msg);
+		if ((level == Level.SEVERE || level == Level.WARNING)
+				&& error == null) {
+			error = msg;
+		}
+	}
+
+	/**
+	 * 
+	 * @return error, or null if no error occured
+	 */
+	public String getError() {
+		return error;
+	}
+
+}
Index: /logconverter/src/test/resources/APP-utils.json
===================================================================
--- /logconverter/src/test/resources/APP-utils.json	(revision 48)
+++ /logconverter/src/test/resources/APP-utils.json	(revision 48)
@@ -0,0 +1,884 @@
+[
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_1": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			},
+			"boulware_2_1_2_127_0_1_1_2": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"linear_2_1_2_127_0_1_1_1": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			},
+			"boulware_2_1_2_127_0_1_1_2": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_1": 0.68566,
+			"boulware_2_1_2_127_0_1_1_2": 0.96060
+		}
+	},
+	{
+		"participants": {
+			"boulware_2_1_2_127_0_1_1_3": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			},
+			"linear_2_1_2_127_0_1_1_4": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_3": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Specialized Materials",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_4": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Specialized Materials",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_3": 0.81486,
+			"linear_2_1_2_127_0_1_1_4": 0.66159
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_6": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			},
+			"conceder_2_1_2_127_0_1_1_5": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"linear_2_1_2_127_0_1_1_6": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Catering",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_5": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Catering",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_6": 0.88838,
+			"conceder_2_1_2_127_0_1_1_5": 0.68886
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_8": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			},
+			"linear_2_1_2_127_0_1_1_7": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"conceder_2_1_2_127_0_1_1_8": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_7": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"conceder_2_1_2_127_0_1_1_8": 0.59594,
+			"linear_2_1_2_127_0_1_1_7": 0.7928
+		}
+	},
+	{
+		"participants": {
+			"boulware_2_1_2_127_0_1_1_9": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			},
+			"conceder_2_1_2_127_0_1_1_10": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_9": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_10": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_9": 0.9081,
+			"conceder_2_1_2_127_0_1_1_10": 0.48711
+		}
+	},
+	{
+		"participants": {
+			"boulware_2_1_2_127_0_1_1_12": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			},
+			"conceder_2_1_2_127_0_1_1_11": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_12": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_11": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_12": 0.96060,
+			"conceder_2_1_2_127_0_1_1_11": 0.68566
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_13": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"boulware_2_1_2_127_0_1_1_14": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"linear_2_1_2_127_0_1_1_13": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Finger-Food",
+					"Location": "Party Room"
+				}
+			},
+			"boulware_2_1_2_127_0_1_1_14": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Finger-Food",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_13": 0.72430,
+			"boulware_2_1_2_127_0_1_1_14": 0.94255
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_16": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			},
+			"boulware_2_1_2_127_0_1_1_15": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_15": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_16": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_16": 0.60273,
+			"boulware_2_1_2_127_0_1_1_15": 0.97522
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_17": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"linear_2_1_2_127_0_1_1_18": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"conceder_2_1_2_127_0_1_1_17": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_18": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"conceder_2_1_2_127_0_1_1_17": 0.80132,
+			"linear_2_1_2_127_0_1_1_18": 0.88599
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_20": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			},
+			"linear_2_1_2_127_0_1_1_19": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			}
+		},
+		"agreements": {
+			"conceder_2_1_2_127_0_1_1_20": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Hired Help",
+					"Food": "Finger-Food",
+					"Location": "Party Tent"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_19": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Hired Help",
+					"Food": "Finger-Food",
+					"Location": "Party Tent"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"conceder_2_1_2_127_0_1_1_20": 0.61064,
+			"linear_2_1_2_127_0_1_1_19": 0.88049
+		}
+	},
+	{
+		"participants": {
+			"boulware_2_1_2_127_0_1_1_21": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"conceder_2_1_2_127_0_1_1_22": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_21": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_22": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_21": 0.99306,
+			"conceder_2_1_2_127_0_1_1_22": 0.62562
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_23": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"boulware_2_1_2_127_0_1_1_24": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_24": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_23": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_24": 0.96060,
+			"conceder_2_1_2_127_0_1_1_23": 0.68470
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_25": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"boulware_2_1_2_127_0_1_1_26": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_26": {
+				"issuevalues": {
+					"Invitations": "Photo",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Specialized Materials",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_25": {
+				"issuevalues": {
+					"Invitations": "Photo",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Specialized Materials",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_26": 0.8843,
+			"linear_2_1_2_127_0_1_1_25": 0.68283
+		}
+	},
+	{
+		"participants": {
+			"boulware_2_1_2_127_0_1_1_27": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"linear_2_1_2_127_0_1_1_28": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_27": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "MP3",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_28": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "MP3",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_27": 0.94900,
+			"linear_2_1_2_127_0_1_1_28": 0.55344
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_30": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			},
+			"conceder_2_1_2_127_0_1_1_29": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			}
+		},
+		"agreements": {
+			"linear_2_1_2_127_0_1_1_30": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Hired Help",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_29": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Hired Help",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_30": 0.8361,
+			"conceder_2_1_2_127_0_1_1_29": 0.63645
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_31": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"conceder_2_1_2_127_0_1_1_32": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"linear_2_1_2_127_0_1_1_31": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Catering",
+					"Cleanup": "Hired Help",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_32": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Catering",
+					"Cleanup": "Hired Help",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_31": 0.76769,
+			"conceder_2_1_2_127_0_1_1_32": 0.56592
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_34": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			},
+			"boulware_2_1_2_127_0_1_1_33": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_33": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_34": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"conceder_2_1_2_127_0_1_1_34": 0.50594,
+			"boulware_2_1_2_127_0_1_1_33": 0.97522
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_35": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"boulware_2_1_2_127_0_1_1_36": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_36": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_35": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"conceder_2_1_2_127_0_1_1_35": 0.61016,
+			"boulware_2_1_2_127_0_1_1_36": 0.9081
+		}
+	}
+]
Index: /logconverter/src/test/resources/APP1646925947841.json
===================================================================
--- /logconverter/src/test/resources/APP1646925947841.json	(revision 48)
+++ /logconverter/src/test/resources/APP1646925947841.json	(revision 48)
@@ -0,0 +1,882 @@
+{
+	"AllPermutationsState": {
+		"toursettings": {
+			"AllPermutationsSettings": {
+				"teams": [
+					{
+						"Team": [
+							{
+								"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+								"parameters": {
+								}
+							}
+						]
+					},
+					{
+						"Team": [
+							{
+								"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+								"parameters": {
+								}
+							}
+						]
+					},
+					{
+						"Team": [
+							{
+								"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+								"parameters": {
+								}
+							}
+						]
+					}
+				],
+				"profileslists": [
+					{
+						"ProfileList": [
+							"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+						]
+					},
+					{
+						"ProfileList": [
+							"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+						]
+					},
+					{
+						"ProfileList": [
+							"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+						]
+					}
+				],
+				"reuseTeams": false,
+				"teamsPerSession": 2,
+				"sessionsettings": {
+					"SAOPSettings": {
+						"participants": [
+						],
+						"deadline": {
+							"DeadlineRounds": {
+								"rounds": 10,
+								"durationms": 10000
+							}
+						}
+					}
+				},
+				"numberTournaments": 1
+			}
+		},
+
+		"results": [
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_1": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					},
+					"boulware_2_1_2_127_0_1_1_2": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_1": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					},
+					"boulware_2_1_2_127_0_1_1_2": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_3": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					},
+					"linear_2_1_2_127_0_1_1_4": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_3": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_4": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_6": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					},
+					"conceder_2_1_2_127_0_1_1_5": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_6": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Catering",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_5": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Catering",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_8": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					},
+					"linear_2_1_2_127_0_1_1_7": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"conceder_2_1_2_127_0_1_1_8": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_7": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_9": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					},
+					"conceder_2_1_2_127_0_1_1_10": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_9": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_10": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_12": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					},
+					"conceder_2_1_2_127_0_1_1_11": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_12": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_11": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_13": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"boulware_2_1_2_127_0_1_1_14": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_13": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Finger-Food",
+							"Location": "Party Room"
+						}
+					},
+					"boulware_2_1_2_127_0_1_1_14": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Finger-Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_16": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					},
+					"boulware_2_1_2_127_0_1_1_15": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_15": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_16": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_17": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"linear_2_1_2_127_0_1_1_18": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"conceder_2_1_2_127_0_1_1_17": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_18": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_20": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					},
+					"linear_2_1_2_127_0_1_1_19": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					}
+				},
+				"agreements": {
+					"conceder_2_1_2_127_0_1_1_20": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Hired Help",
+							"Food": "Finger-Food",
+							"Location": "Party Tent"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_19": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Hired Help",
+							"Food": "Finger-Food",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_21": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"conceder_2_1_2_127_0_1_1_22": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_21": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_22": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_23": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"boulware_2_1_2_127_0_1_1_24": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_24": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_23": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_25": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"boulware_2_1_2_127_0_1_1_26": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_26": {
+						"issuevalues": {
+							"Invitations": "Photo",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_25": {
+						"issuevalues": {
+							"Invitations": "Photo",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_27": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"linear_2_1_2_127_0_1_1_28": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_27": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "MP3",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_28": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "MP3",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_30": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					},
+					"conceder_2_1_2_127_0_1_1_29": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_30": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_29": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_31": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"conceder_2_1_2_127_0_1_1_32": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_31": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Catering",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_32": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Catering",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_34": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					},
+					"boulware_2_1_2_127_0_1_1_33": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_33": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_34": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_35": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"boulware_2_1_2_127_0_1_1_36": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_36": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_35": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			}
+		]
+	}
+}
Index: /logconverter/src/test/resources/APP1646925947841local.json
===================================================================
--- /logconverter/src/test/resources/APP1646925947841local.json	(revision 48)
+++ /logconverter/src/test/resources/APP1646925947841local.json	(revision 48)
@@ -0,0 +1,882 @@
+{
+	"AllPermutationsState": {
+		"toursettings": {
+			"AllPermutationsSettings": {
+				"teams": [
+					{
+						"Team": [
+							{
+								"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+								"parameters": {
+								}
+							}
+						]
+					},
+					{
+						"Team": [
+							{
+								"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+								"parameters": {
+								}
+							}
+						]
+					},
+					{
+						"Team": [
+							{
+								"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+								"parameters": {
+								}
+							}
+						]
+					}
+				],
+				"profileslists": [
+					{
+						"ProfileList": [
+							"file:src/test/resources/party/party3.json"
+						]
+					},
+					{
+						"ProfileList": [
+							"file:src/test/resources/party/party1.json"
+						]
+					},
+					{
+						"ProfileList": [
+							"file:src/test/resources/party/party2.json"
+						]
+					}
+				],
+				"reuseTeams": false,
+				"teamsPerSession": 2,
+				"sessionsettings": {
+					"SAOPSettings": {
+						"participants": [
+						],
+						"deadline": {
+							"DeadlineRounds": {
+								"rounds": 10,
+								"durationms": 10000
+							}
+						}
+					}
+				},
+				"numberTournaments": 1
+			}
+		},
+
+		"results": [
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_1": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					},
+					"boulware_2_1_2_127_0_1_1_2": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_1": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					},
+					"boulware_2_1_2_127_0_1_1_2": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_3": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					},
+					"linear_2_1_2_127_0_1_1_4": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_3": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_4": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_6": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					},
+					"conceder_2_1_2_127_0_1_1_5": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_6": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Catering",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_5": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Catering",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_8": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					},
+					"linear_2_1_2_127_0_1_1_7": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					}
+				},
+				"agreements": {
+					"conceder_2_1_2_127_0_1_1_8": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_7": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_9": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					},
+					"conceder_2_1_2_127_0_1_1_10": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_9": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_10": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_12": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					},
+					"conceder_2_1_2_127_0_1_1_11": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_12": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_11": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_13": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					},
+					"boulware_2_1_2_127_0_1_1_14": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_13": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Finger-Food",
+							"Location": "Party Room"
+						}
+					},
+					"boulware_2_1_2_127_0_1_1_14": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Finger-Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_16": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					},
+					"boulware_2_1_2_127_0_1_1_15": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_15": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_16": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_17": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					},
+					"linear_2_1_2_127_0_1_1_18": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					}
+				},
+				"agreements": {
+					"conceder_2_1_2_127_0_1_1_17": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_18": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_20": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					},
+					"linear_2_1_2_127_0_1_1_19": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					}
+				},
+				"agreements": {
+					"conceder_2_1_2_127_0_1_1_20": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Hired Help",
+							"Food": "Finger-Food",
+							"Location": "Party Tent"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_19": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Hired Help",
+							"Food": "Finger-Food",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_21": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					},
+					"conceder_2_1_2_127_0_1_1_22": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_21": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_22": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_23": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					},
+					"boulware_2_1_2_127_0_1_1_24": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party2.json"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_24": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_23": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_25": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					},
+					"boulware_2_1_2_127_0_1_1_26": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_26": {
+						"issuevalues": {
+							"Invitations": "Photo",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_25": {
+						"issuevalues": {
+							"Invitations": "Photo",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_27": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					},
+					"linear_2_1_2_127_0_1_1_28": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_27": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "MP3",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_28": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "MP3",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_30": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					},
+					"conceder_2_1_2_127_0_1_1_29": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_30": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_29": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_31": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					},
+					"conceder_2_1_2_127_0_1_1_32": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_31": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Catering",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_32": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Catering",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_34": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					},
+					"boulware_2_1_2_127_0_1_1_33": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_33": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_34": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_35": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party3.json"
+					},
+					"boulware_2_1_2_127_0_1_1_36": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "file:src/test/resources/party/party1.json"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_36": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_35": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			}
+		]
+	}
+}
Index: /logconverter/src/test/resources/APP1647942572089.json
===================================================================
--- /logconverter/src/test/resources/APP1647942572089.json	(revision 48)
+++ /logconverter/src/test/resources/APP1647942572089.json	(revision 48)
@@ -0,0 +1,1 @@
+{"AllPermutationsState":{"toursettings":{"AllPermutationsSettings":{"teams":[{"Team":[{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}}]},{"Team":[{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}}]},{"Team":[{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}}]},{"Team":[{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}}]}],"profileslists":[{"ProfileList":["ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"]},{"ProfileList":["ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"]},{"ProfileList":["ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"]}],"reuseTeams":false,"teamsPerSession":2,"sessionsettings":{"SAOPSettings":{"participants":[],"deadline":{"DeadlineRounds":{"rounds":30,"durationms":10000}}}},"numberTournaments":1}},"results":[{"participants":{"randomparty_2_1_3_127_0_1_1_3":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"boulware_2_1_3_127_0_1_1_4":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{"boulware_2_1_3_127_0_1_1_4":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Handmade Food","Location":"Party Room"}},"randomparty_2_1_3_127_0_1_1_3":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Handmade Food","Location":"Party Room"}}},"penalties":{},"error":null},{"participants":{"randomparty_2_1_3_127_0_1_1_6":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"},"boulware_2_1_3_127_0_1_1_5":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"}},"agreements":{"boulware_2_1_3_127_0_1_1_5":{"issuevalues":{"Invitations":"Plain","Music":"DJ","Drinks":"Beer Only","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Room"}},"randomparty_2_1_3_127_0_1_1_6":{"issuevalues":{"Invitations":"Plain","Music":"DJ","Drinks":"Beer Only","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Room"}}},"penalties":{},"error":null},{"participants":{"agentgg_2_1_3_127_0_1_1_7":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"randomparty_2_1_3_127_0_1_1_8":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_7","message":"agentgg_2_1_3_127_0_1_1_7:geniusweb.runserver.WebSocketProtToPartyConn@5df350a4Protocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_7:geniusweb.runserver.WebSocketProtToPartyConn@5df350a4Protocol error"}}},{"participants":{"conceder_2_1_3_127_0_1_1_9":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"randomparty_2_1_3_127_0_1_1_10":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{"conceder_2_1_3_127_0_1_1_9":{"issuevalues":{"Invitations":"Custom, Printed","Music":"DJ","Drinks":"Beer Only","Cleanup":"Water and Soap","Food":"Finger-Food","Location":"Your Dorm"}},"randomparty_2_1_3_127_0_1_1_10":{"issuevalues":{"Invitations":"Custom, Printed","Music":"DJ","Drinks":"Beer Only","Cleanup":"Water and Soap","Food":"Finger-Food","Location":"Your Dorm"}}},"penalties":{},"error":null},{"participants":{"randomparty_2_1_3_127_0_1_1_11":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"agentgg_2_1_3_127_0_1_1_12":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_12","message":"agentgg_2_1_3_127_0_1_1_12:geniusweb.runserver.WebSocketProtToPartyConn@14d259a6Protocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_12:geniusweb.runserver.WebSocketProtToPartyConn@14d259a6Protocol error"}}},{"participants":{"boulware_2_1_3_127_0_1_1_13":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"agentgg_2_1_3_127_0_1_1_14":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_14","message":"agentgg_2_1_3_127_0_1_1_14:geniusweb.runserver.WebSocketProtToPartyConn@39948613Protocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_14:geniusweb.runserver.WebSocketProtToPartyConn@39948613Protocol error"}}},{"participants":{"agentgg_2_1_3_127_0_1_1_15":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"boulware_2_1_3_127_0_1_1_16":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_15","message":"agentgg_2_1_3_127_0_1_1_15:geniusweb.runserver.WebSocketProtToPartyConn@53f2b491Protocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_15:geniusweb.runserver.WebSocketProtToPartyConn@53f2b491Protocol error"}}},{"participants":{"conceder_2_1_3_127_0_1_1_17":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"boulware_2_1_3_127_0_1_1_18":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{"conceder_2_1_3_127_0_1_1_17":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Handmade Food","Location":"Party Room"}},"boulware_2_1_3_127_0_1_1_18":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Handmade Food","Location":"Party Room"}}},"penalties":{},"error":null},{"participants":{"randomparty_2_1_3_127_0_1_1_19":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"conceder_2_1_3_127_0_1_1_20":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{"randomparty_2_1_3_127_0_1_1_19":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Catering","Location":"Party Room"}},"conceder_2_1_3_127_0_1_1_20":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Catering","Location":"Party Room"}}},"penalties":{},"error":null},{"participants":{"conceder_2_1_3_127_0_1_1_22":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"},"boulware_2_1_3_127_0_1_1_21":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"}},"agreements":{"conceder_2_1_3_127_0_1_1_22":{"issuevalues":{"Invitations":"Custom, Printed","Music":"DJ","Drinks":"Beer Only","Cleanup":"Specialized Materials","Food":"Chips and Nuts","Location":"Party Room"}},"boulware_2_1_3_127_0_1_1_21":{"issuevalues":{"Invitations":"Custom, Printed","Music":"DJ","Drinks":"Beer Only","Cleanup":"Specialized Materials","Food":"Chips and Nuts","Location":"Party Room"}}},"penalties":{},"error":null},{"participants":{"agentgg_2_1_3_127_0_1_1_23":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"conceder_2_1_3_127_0_1_1_24":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_23","message":"agentgg_2_1_3_127_0_1_1_23:geniusweb.runserver.WebSocketProtToPartyConn@32155f3Protocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_23:geniusweb.runserver.WebSocketProtToPartyConn@32155f3Protocol error"}}},{"participants":{"agentgg_2_1_3_127_0_1_1_26":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"},"conceder_2_1_3_127_0_1_1_25":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_26","message":"agentgg_2_1_3_127_0_1_1_26:geniusweb.runserver.WebSocketProtToPartyConn@5b28af77Protocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_26:geniusweb.runserver.WebSocketProtToPartyConn@5b28af77Protocol error"}}},{"participants":{"randomparty_2_1_3_127_0_1_1_27":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"boulware_2_1_3_127_0_1_1_28":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{"randomparty_2_1_3_127_0_1_1_27":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Handmade Food","Location":"Party Room"}},"boulware_2_1_3_127_0_1_1_28":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Handmade Food","Location":"Party Room"}}},"penalties":{},"error":null},{"participants":{"randomparty_2_1_3_127_0_1_1_30":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"},"boulware_2_1_3_127_0_1_1_29":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"}},"agreements":{"boulware_2_1_3_127_0_1_1_29":{"issuevalues":{"Invitations":"Plain","Music":"Band","Drinks":"Non-Alcoholic","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Tent"}},"randomparty_2_1_3_127_0_1_1_30":{"issuevalues":{"Invitations":"Plain","Music":"Band","Drinks":"Non-Alcoholic","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Tent"}}},"penalties":{},"error":null},{"participants":{"agentgg_2_1_3_127_0_1_1_31":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"randomparty_2_1_3_127_0_1_1_32":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_31","message":"agentgg_2_1_3_127_0_1_1_31:geniusweb.runserver.WebSocketProtToPartyConn@7e84368bProtocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_31:geniusweb.runserver.WebSocketProtToPartyConn@7e84368bProtocol error"}}},{"participants":{"conceder_2_1_3_127_0_1_1_33":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"randomparty_2_1_3_127_0_1_1_34":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{"randomparty_2_1_3_127_0_1_1_34":{"issuevalues":{"Invitations":"Plain","Music":"Band","Drinks":"Non-Alcoholic","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Tent"}},"conceder_2_1_3_127_0_1_1_33":{"issuevalues":{"Invitations":"Plain","Music":"Band","Drinks":"Non-Alcoholic","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Tent"}}},"penalties":{},"error":null},{"participants":{"randomparty_2_1_3_127_0_1_1_35":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"agentgg_2_1_3_127_0_1_1_36":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_36","message":"agentgg_2_1_3_127_0_1_1_36:geniusweb.runserver.WebSocketProtToPartyConn@3a600e82Protocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_36:geniusweb.runserver.WebSocketProtToPartyConn@3a600e82Protocol error"}}},{"participants":{"boulware_2_1_3_127_0_1_1_37":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"agentgg_2_1_3_127_0_1_1_38":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_38","message":"agentgg_2_1_3_127_0_1_1_38:geniusweb.runserver.WebSocketProtToPartyConn@10d9e943Protocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_38:geniusweb.runserver.WebSocketProtToPartyConn@10d9e943Protocol error"}}},{"participants":{"boulware_2_1_3_127_0_1_1_40":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"},"agentgg_2_1_3_127_0_1_1_39":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_39","message":"agentgg_2_1_3_127_0_1_1_39:geniusweb.runserver.WebSocketProtToPartyConn@1a3f0708Protocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_39:geniusweb.runserver.WebSocketProtToPartyConn@1a3f0708Protocol error"}}},{"participants":{"conceder_2_1_3_127_0_1_1_41":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"boulware_2_1_3_127_0_1_1_42":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{"conceder_2_1_3_127_0_1_1_41":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Handmade Food","Location":"Party Room"}},"boulware_2_1_3_127_0_1_1_42":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Handmade Food","Location":"Party Room"}}},"penalties":{},"error":null},{"participants":{"conceder_2_1_3_127_0_1_1_44":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"},"randomparty_2_1_3_127_0_1_1_43":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"}},"agreements":{"randomparty_2_1_3_127_0_1_1_43":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Catering","Location":"Party Room"}},"conceder_2_1_3_127_0_1_1_44":{"issuevalues":{"Invitations":"Custom, Printed","Music":"MP3","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Catering","Location":"Party Room"}}},"penalties":{},"error":null},{"participants":{"boulware_2_1_3_127_0_1_1_45":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"conceder_2_1_3_127_0_1_1_46":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{"boulware_2_1_3_127_0_1_1_45":{"issuevalues":{"Invitations":"Plain","Music":"Band","Drinks":"Non-Alcoholic","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Tent"}},"conceder_2_1_3_127_0_1_1_46":{"issuevalues":{"Invitations":"Plain","Music":"Band","Drinks":"Non-Alcoholic","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Tent"}}},"penalties":{},"error":null},{"participants":{"conceder_2_1_3_127_0_1_1_48":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"},"agentgg_2_1_3_127_0_1_1_47":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_47","message":"agentgg_2_1_3_127_0_1_1_47:geniusweb.runserver.WebSocketProtToPartyConn@124e537bProtocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_47:geniusweb.runserver.WebSocketProtToPartyConn@124e537bProtocol error"}}},{"participants":{"conceder_2_1_3_127_0_1_1_49":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"agentgg_2_1_3_127_0_1_1_50":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_50","message":"agentgg_2_1_3_127_0_1_1_50:geniusweb.runserver.WebSocketProtToPartyConn@4ac491beProtocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_50:geniusweb.runserver.WebSocketProtToPartyConn@4ac491beProtocol error"}}},{"participants":{"randomparty_2_1_3_127_0_1_1_51":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"boulware_2_1_3_127_0_1_1_52":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"}},"agreements":{"randomparty_2_1_3_127_0_1_1_51":{"issuevalues":{"Invitations":"Custom, Handmade","Music":"DJ","Drinks":"Beer Only","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Room"}},"boulware_2_1_3_127_0_1_1_52":{"issuevalues":{"Invitations":"Custom, Handmade","Music":"DJ","Drinks":"Beer Only","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Room"}}},"penalties":{},"error":null},{"participants":{"boulware_2_1_3_127_0_1_1_53":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"randomparty_2_1_3_127_0_1_1_54":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"}},"agreements":{"randomparty_2_1_3_127_0_1_1_54":{"issuevalues":{"Invitations":"Plain","Music":"DJ","Drinks":"Handmade Cocktails","Cleanup":"Special Equiment","Food":"Chips and Nuts","Location":"Party Tent"}},"boulware_2_1_3_127_0_1_1_53":{"issuevalues":{"Invitations":"Plain","Music":"DJ","Drinks":"Handmade Cocktails","Cleanup":"Special Equiment","Food":"Chips and Nuts","Location":"Party Tent"}}},"penalties":{},"error":null},{"participants":{"agentgg_2_1_3_127_0_1_1_55":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"randomparty_2_1_3_127_0_1_1_56":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_55","message":"agentgg_2_1_3_127_0_1_1_55:geniusweb.runserver.WebSocketProtToPartyConn@69fdd7d6Protocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_55:geniusweb.runserver.WebSocketProtToPartyConn@69fdd7d6Protocol error"}}},{"participants":{"conceder_2_1_3_127_0_1_1_57":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"randomparty_2_1_3_127_0_1_1_58":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"}},"agreements":{"randomparty_2_1_3_127_0_1_1_58":{"issuevalues":{"Invitations":"Plain","Music":"Band","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Ballroom"}},"conceder_2_1_3_127_0_1_1_57":{"issuevalues":{"Invitations":"Plain","Music":"Band","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Ballroom"}}},"penalties":{},"error":null},{"participants":{"randomparty_2_1_3_127_0_1_1_59":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"agentgg_2_1_3_127_0_1_1_60":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_60","message":"agentgg_2_1_3_127_0_1_1_60:geniusweb.runserver.WebSocketProtToPartyConn@79742f1fProtocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_60:geniusweb.runserver.WebSocketProtToPartyConn@79742f1fProtocol error"}}},{"participants":{"agentgg_2_1_3_127_0_1_1_62":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"boulware_2_1_3_127_0_1_1_61":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_62","message":"agentgg_2_1_3_127_0_1_1_62:geniusweb.runserver.WebSocketProtToPartyConn@27a061efProtocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_62:geniusweb.runserver.WebSocketProtToPartyConn@27a061efProtocol error"}}},{"participants":{"agentgg_2_1_3_127_0_1_1_63":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"boulware_2_1_3_127_0_1_1_64":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_63","message":"agentgg_2_1_3_127_0_1_1_63:geniusweb.runserver.WebSocketProtToPartyConn@538a4c3bProtocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_63:geniusweb.runserver.WebSocketProtToPartyConn@538a4c3bProtocol error"}}},{"participants":{"boulware_2_1_3_127_0_1_1_66":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"conceder_2_1_3_127_0_1_1_65":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"}},"agreements":{"boulware_2_1_3_127_0_1_1_66":{"issuevalues":{"Invitations":"Custom, Handmade","Music":"DJ","Drinks":"Beer Only","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Room"}},"conceder_2_1_3_127_0_1_1_65":{"issuevalues":{"Invitations":"Custom, Handmade","Music":"DJ","Drinks":"Beer Only","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Party Room"}}},"penalties":{},"error":null},{"participants":{"randomparty_2_1_3_127_0_1_1_67":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/randomparty-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"},"conceder_2_1_3_127_0_1_1_68":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"}},"agreements":{"randomparty_2_1_3_127_0_1_1_67":{"issuevalues":{"Invitations":"Photo","Music":"DJ","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Finger-Food","Location":"Party Room"}},"conceder_2_1_3_127_0_1_1_68":{"issuevalues":{"Invitations":"Photo","Music":"DJ","Drinks":"Handmade Cocktails","Cleanup":"Water and Soap","Food":"Finger-Food","Location":"Party Room"}}},"penalties":{},"error":null},{"participants":{"conceder_2_1_3_127_0_1_1_70":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"boulware_2_1_3_127_0_1_1_69":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/boulware-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"}},"agreements":{"boulware_2_1_3_127_0_1_1_69":{"issuevalues":{"Invitations":"Plain","Music":"Band","Drinks":"Non-Alcoholic","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Ballroom"}},"conceder_2_1_3_127_0_1_1_70":{"issuevalues":{"Invitations":"Plain","Music":"Band","Drinks":"Non-Alcoholic","Cleanup":"Water and Soap","Food":"Chips and Nuts","Location":"Ballroom"}}},"penalties":{},"error":null},{"participants":{"conceder_2_1_3_127_0_1_1_72":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"agentgg_2_1_3_127_0_1_1_71":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_71","message":"agentgg_2_1_3_127_0_1_1_71:geniusweb.runserver.WebSocketProtToPartyConn@1dedf62cProtocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_71:geniusweb.runserver.WebSocketProtToPartyConn@1dedf62cProtocol error"}}},{"participants":{"agentgg_2_1_3_127_0_1_1_74":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"},"conceder_2_1_3_127_0_1_1_73":{"party":{"partyref":"http://127.0.1.1:8080/partiesserver/run/conceder-2.1.3","parameters":{}},"profile":"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"}},"agreements":{},"penalties":{},"error":{"geniusweb.protocol.ProtocolException":{"cause":{"cause":null,"stackTrace":[],"message":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…","suppressed":[],"localizedMessage":"Session PartyRef[http://127.0.1.1:8080/partiesserver/run/agentgg-2.1.3] closed abnormally (see party server for more details) party threw exception:  : RuntimeException:Failed to handle info : UnsupportedOperationException:Only DefaultPartialOrde…"},"stackTrace":[],"party":"agentgg_2_1_3_127_0_1_1_74","message":"agentgg_2_1_3_127_0_1_1_74:geniusweb.runserver.WebSocketProtToPartyConn@13bf0bdfProtocol error","suppressed":[],"localizedMessage":"agentgg_2_1_3_127_0_1_1_74:geniusweb.runserver.WebSocketProtToPartyConn@13bf0bdfProtocol error"}}}]}}
Index: /logconverter/src/test/resources/party/party.json
===================================================================
--- /logconverter/src/test/resources/party/party.json	(revision 48)
+++ /logconverter/src/test/resources/party/party.json	(revision 48)
@@ -0,0 +1,52 @@
+{
+	"name": "party",
+	"issuesValues": {
+		"Food": {
+			"values": [
+				"Chips and Nuts",
+				"Finger-Food",
+				"Handmade Food",
+				"Catering"
+			]
+		},
+		"Drinks": {
+			"values": [
+				"Non-Alcoholic",
+				"Beer Only",
+				"Handmade Cocktails",
+				"Catering"
+			]
+		},
+		"Location": {
+			"values": [
+				"Party Tent",
+				"Your Dorm",
+				"Party Room",
+				"Ballroom"
+			]
+		},
+		"Invitations": {
+			"values": [
+				"Plain",
+				"Photo",
+				"Custom, Handmade",
+				"Custom, Printed"
+			]
+		},
+		"Music": {
+			"values": [
+				"MP3",
+				"DJ",
+				"Band"
+			]
+		},
+		"Cleanup": {
+			"values": [
+				"Water and Soap",
+				"Specialized Materials",
+				"Special Equiment",
+				"Hired Help"
+			]
+		}
+	}
+}
Index: /logconverter/src/test/resources/party/party1.json
===================================================================
--- /logconverter/src/test/resources/party/party1.json	(revision 48)
+++ /logconverter/src/test/resources/party/party1.json	(revision 48)
@@ -0,0 +1,126 @@
+{
+	"LinearAdditiveUtilitySpace": {
+		"name": "party1",
+		"issueUtilities": {
+			"Food": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Chips and Nuts": 0.75,
+						"Finger-Food": 0.52,
+						"Handmade Food": 0.51,
+						"Catering": 0.25
+					}
+				}
+			},
+			"Drinks": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Non-Alcoholic": 0.263,
+						"Beer Only": 0.98,
+						"Handmade Cocktails": 0.672,
+						"Catering": 0.334
+					}
+				}
+			},
+			"Location": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Party Tent": 0.52,
+						"Your Dorm": 0.23,
+						"Party Room": 0.99,
+						"Ballroom": 0.77
+					}
+				}
+			},
+			"Invitations": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Plain": 0.24,
+						"Photo": 0.74,
+						"Custom, Handmade": 1,
+						"Custom, Printed": 0.48
+					}
+				}
+			},
+			"Music": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"MP3": 0.65,
+						"DJ": 0.99,
+						"Band": 0.35
+					}
+				}
+			},
+			"Cleanup": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Water and Soap": 0.65,
+						"Specialized Materials": 0.96,
+						"Special Equiment": 0.32,
+						"Hired Help": 0.31
+					}
+				}
+			}
+		},
+		"issueWeights": {
+			"Food": 0.19,
+			"Drinks": 0.28,
+			"Location": 0.19,
+			"Invitations": 0.05,
+			"Music": 0.19,
+			"Cleanup": 0.10
+		},
+		"domain": {
+			"name": "party",
+			"issuesValues": {
+				"Food": {
+					"values": [
+						"Chips and Nuts",
+						"Finger-Food",
+						"Handmade Food",
+						"Catering"
+					]
+				},
+				"Drinks": {
+					"values": [
+						"Non-Alcoholic",
+						"Beer Only",
+						"Handmade Cocktails",
+						"Catering"
+					]
+				},
+				"Location": {
+					"values": [
+						"Party Tent",
+						"Your Dorm",
+						"Party Room",
+						"Ballroom"
+					]
+				},
+				"Invitations": {
+					"values": [
+						"Plain",
+						"Photo",
+						"Custom, Handmade",
+						"Custom, Printed"
+					]
+				},
+				"Music": {
+					"values": [
+						"MP3",
+						"DJ",
+						"Band"
+					]
+				},
+				"Cleanup": {
+					"values": [
+						"Water and Soap",
+						"Specialized Materials",
+						"Special Equiment",
+						"Hired Help"
+					]
+				}
+			}
+		}
+	}
+}
Index: /logconverter/src/test/resources/party/party2.json
===================================================================
--- /logconverter/src/test/resources/party/party2.json	(revision 48)
+++ /logconverter/src/test/resources/party/party2.json	(revision 48)
@@ -0,0 +1,126 @@
+{
+	"LinearAdditiveUtilitySpace": {
+		"name": "party2",
+		"issueUtilities": {
+			"Food": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Chips and Nuts": 0.24,
+						"Finger-Food": 0.52,
+						"Handmade Food": 0.71,
+						"Catering": 0.97
+					}
+				}
+			},
+			"Drinks": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Non-Alcoholic": 0.33,
+						"Beer Only": 0.22,
+						"Handmade Cocktails": 1,
+						"Catering": 0.11
+					}
+				}
+			},
+			"Location": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Party Tent": 0.3,
+						"Your Dorm": 0.23,
+						"Party Room": 0.99,
+						"Ballroom": 0.09
+					}
+				}
+			},
+			"Invitations": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Plain": 0.84,
+						"Photo": 0.24,
+						"Custom, Handmade": 0.12,
+						"Custom, Printed": 0.98
+					}
+				}
+			},
+			"Music": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"MP3": 0.94,
+						"DJ": 0.32,
+						"Band": 0.64
+					}
+				}
+			},
+			"Cleanup": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Water and Soap": 1,
+						"Specialized Materials": 0.36,
+						"Special Equiment": 0.12,
+						"Hired Help": 0.21
+					}
+				}
+			}
+		},
+		"issueWeights": {
+			"Food": 0.095,
+			"Drinks": 0.228,
+			"Location": 0.109,
+			"Invitations": 0.214,
+			"Music": 0.108,
+			"Cleanup": 0.246
+		},
+		"domain": {
+			"name": "party",
+			"issuesValues": {
+				"Food": {
+					"values": [
+						"Chips and Nuts",
+						"Finger-Food",
+						"Handmade Food",
+						"Catering"
+					]
+				},
+				"Drinks": {
+					"values": [
+						"Non-Alcoholic",
+						"Beer Only",
+						"Handmade Cocktails",
+						"Catering"
+					]
+				},
+				"Location": {
+					"values": [
+						"Party Tent",
+						"Your Dorm",
+						"Party Room",
+						"Ballroom"
+					]
+				},
+				"Invitations": {
+					"values": [
+						"Plain",
+						"Photo",
+						"Custom, Handmade",
+						"Custom, Printed"
+					]
+				},
+				"Music": {
+					"values": [
+						"MP3",
+						"DJ",
+						"Band"
+					]
+				},
+				"Cleanup": {
+					"values": [
+						"Water and Soap",
+						"Specialized Materials",
+						"Special Equiment",
+						"Hired Help"
+					]
+				}
+			}
+		}
+	}
+}
Index: /logconverter/src/test/resources/party/party3.json
===================================================================
--- /logconverter/src/test/resources/party/party3.json	(revision 48)
+++ /logconverter/src/test/resources/party/party3.json	(revision 48)
@@ -0,0 +1,126 @@
+{
+	"LinearAdditiveUtilitySpace": {
+		"name": "party3",
+		"issueUtilities": {
+			"Food": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Chips and Nuts": 1,
+						"Finger-Food": 0.75,
+						"Handmade Food": 0.6,
+						"Catering": 0.5
+					}
+				}
+			},
+			"Drinks": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Non-Alcoholic": 0.99,
+						"Beer Only": 0.02,
+						"Handmade Cocktails": 0.75,
+						"Catering": 0.03
+					}
+				}
+			},
+			"Location": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Party Tent": 0.98,
+						"Your Dorm": 0.8,
+						"Party Room": 0.4,
+						"Ballroom": 0.9
+					}
+				}
+			},
+			"Invitations": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Plain": 0.99,
+						"Photo": 0.67,
+						"Custom, Handmade": 0.52,
+						"Custom, Printed": 0.8
+					}
+				}
+			},
+			"Music": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"MP3": 0.9,
+						"DJ": 0.75,
+						"Band": 1
+					}
+				}
+			},
+			"Cleanup": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Water and Soap": 1,
+						"Specialized Materials": 0.51,
+						"Special Equiment": 0.67,
+						"Hired Help": 0.99
+					}
+				}
+			}
+		},
+		"issueWeights": {
+			"Food": 0.264,
+			"Drinks": 0.190,
+			"Location": 0.223,
+			"Invitations": 0.058,
+			"Music": 0.168,
+			"Cleanup": 0.097
+		},
+		"domain": {
+			"name": "party",
+			"issuesValues": {
+				"Food": {
+					"values": [
+						"Chips and Nuts",
+						"Finger-Food",
+						"Handmade Food",
+						"Catering"
+					]
+				},
+				"Drinks": {
+					"values": [
+						"Non-Alcoholic",
+						"Beer Only",
+						"Handmade Cocktails",
+						"Catering"
+					]
+				},
+				"Location": {
+					"values": [
+						"Party Tent",
+						"Your Dorm",
+						"Party Room",
+						"Ballroom"
+					]
+				},
+				"Invitations": {
+					"values": [
+						"Plain",
+						"Photo",
+						"Custom, Handmade",
+						"Custom, Printed"
+					]
+				},
+				"Music": {
+					"values": [
+						"MP3",
+						"DJ",
+						"Band"
+					]
+				},
+				"Cleanup": {
+					"values": [
+						"Water and Soap",
+						"Specialized Materials",
+						"Special Equiment",
+						"Hired Help"
+					]
+				}
+			}
+		}
+	}
+}
Index: /logconverter/src/test/resources/party/party4.json
===================================================================
--- /logconverter/src/test/resources/party/party4.json	(revision 48)
+++ /logconverter/src/test/resources/party/party4.json	(revision 48)
@@ -0,0 +1,126 @@
+{
+	"LinearAdditiveUtilitySpace": {
+		"name": "party4",
+		"issueUtilities": {
+			"Food": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Chips and Nuts": 0.98,
+						"Finger-Food": 0.75,
+						"Handmade Food": 0.5,
+						"Catering": 0.24
+					}
+				}
+			},
+			"Drinks": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Non-Alcoholic": 0.99,
+						"Beer Only": 0.72,
+						"Handmade Cocktails": 0.55,
+						"Catering": 0.23
+					}
+				}
+			},
+			"Location": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Party Tent": 0.58,
+						"Your Dorm": 0.75,
+						"Party Room": 1,
+						"Ballroom": 0.22
+					}
+				}
+			},
+			"Invitations": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Plain": 0.99,
+						"Photo": 0.47,
+						"Custom, Handmade": 0.72,
+						"Custom, Printed": 0.28
+					}
+				}
+			},
+			"Music": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"MP3": 0.65,
+						"DJ": 0.95,
+						"Band": 0.33
+					}
+				}
+			},
+			"Cleanup": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"Water and Soap": 0.27,
+						"Specialized Materials": 0.51,
+						"Special Equiment": 0.97,
+						"Hired Help": 0.79
+					}
+				}
+			}
+		},
+		"issueWeights": {
+			"Food": 0.190,
+			"Drinks": 0.238,
+			"Location": 0.095,
+			"Invitations": 0.047,
+			"Music": 0.285,
+			"Cleanup": 0.145
+		},
+		"domain": {
+			"name": "party",
+			"issuesValues": {
+				"Food": {
+					"values": [
+						"Chips and Nuts",
+						"Finger-Food",
+						"Handmade Food",
+						"Catering"
+					]
+				},
+				"Drinks": {
+					"values": [
+						"Non-Alcoholic",
+						"Beer Only",
+						"Handmade Cocktails",
+						"Catering"
+					]
+				},
+				"Location": {
+					"values": [
+						"Party Tent",
+						"Your Dorm",
+						"Party Room",
+						"Ballroom"
+					]
+				},
+				"Invitations": {
+					"values": [
+						"Plain",
+						"Photo",
+						"Custom, Handmade",
+						"Custom, Printed"
+					]
+				},
+				"Music": {
+					"values": [
+						"MP3",
+						"DJ",
+						"Band"
+					]
+				},
+				"Cleanup": {
+					"values": [
+						"Water and Soap",
+						"Specialized Materials",
+						"Special Equiment",
+						"Hired Help"
+					]
+				}
+			}
+		}
+	}
+}
Index: /logconverter/src/test/resources/profile1.json
===================================================================
--- /logconverter/src/test/resources/profile1.json	(revision 48)
+++ /logconverter/src/test/resources/profile1.json	(revision 48)
@@ -0,0 +1,59 @@
+{
+	"LinearAdditiveUtilitySpace": {
+		"issueUtilities": {
+			"salary": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"2000": 0,
+						"2500": 0.25,
+						"3000": 0.3,
+						"3500": 0.75,
+						"4000": 1.0
+					}
+				}
+			},
+			"fte": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"0.6": 0.25,
+						"0.8": 0.5,
+						"1.0": 0.75
+					}
+				}
+			}
+		},
+		"issueWeights": {
+			"salary": 0.24,
+			"fte": 0.76
+
+		},
+		"domain": {
+			"name": "jobs",
+			"issuesValues": {
+				"salary": {
+					"values": [
+						"2000",
+						"2500",
+						"3000",
+						"3500",
+						"4000"
+					]
+				},
+				"fte": {
+					"values": [
+						"0.6",
+						"0.8",
+						"1.0"
+					]
+				}
+			}
+		},
+		"name": "profile1",
+		"reservationBid": {
+			"issuevalues": {
+				"salary": "3500",
+				"fte": "0.8"
+			}
+		}
+	}
+}
Index: /logconverter/src/test/resources/profile2.json
===================================================================
--- /logconverter/src/test/resources/profile2.json	(revision 48)
+++ /logconverter/src/test/resources/profile2.json	(revision 48)
@@ -0,0 +1,60 @@
+{
+	"LinearAdditiveUtilitySpace": {
+		"issueUtilities": {
+			"salary": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"2000": 1.0,
+						"2500": 0.75,
+						"3000": 0.5,
+						"3500": 0.25,
+						"4000": 0
+					}
+				}
+			},
+			"fte": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"0.6": 0.363636363636363636,
+						"0.8": 0.5,
+						"1.0": 0.636363636363636363
+					}
+				}
+			}
+		},
+		"issueWeights": {
+			"salary": 0.2,
+			"fte": 0.8
+
+		},
+		"domain": {
+			"name": "jobs",
+			"issuesValues": {
+				"salary": {
+					"values": [
+						"2000",
+						"2500",
+						"3000",
+						"3500",
+						"4000"
+					]
+				},
+				"fte": {
+					"values": [
+						"0.6",
+						"0.8",
+						"1.0"
+					]
+				}
+			}
+		},
+		"name": "profile2",
+		"reservationBid": {
+			"issuevalues": {
+				"salary": "3000",
+				"fte": "0.8"
+
+			}
+		}
+	}
+}
Index: /logconverter/src/test/resources/test.json
===================================================================
--- /logconverter/src/test/resources/test.json	(revision 48)
+++ /logconverter/src/test/resources/test.json	(revision 48)
@@ -0,0 +1,884 @@
+[
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_1": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			},
+			"boulware_2_1_2_127_0_1_1_2": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"linear_2_1_2_127_0_1_1_1": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			},
+			"boulware_2_1_2_127_0_1_1_2": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_1": 0.68566,
+			"boulware_2_1_2_127_0_1_1_2": 0.96060
+		}
+	},
+	{
+		"participants": {
+			"boulware_2_1_2_127_0_1_1_3": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			},
+			"linear_2_1_2_127_0_1_1_4": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_3": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Specialized Materials",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_4": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Specialized Materials",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_3": 0.81486,
+			"linear_2_1_2_127_0_1_1_4": 0.66159
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_6": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			},
+			"conceder_2_1_2_127_0_1_1_5": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"linear_2_1_2_127_0_1_1_6": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Catering",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_5": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Catering",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_6": 0.88838,
+			"conceder_2_1_2_127_0_1_1_5": 0.68886
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_8": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			},
+			"linear_2_1_2_127_0_1_1_7": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"conceder_2_1_2_127_0_1_1_8": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_7": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"conceder_2_1_2_127_0_1_1_8": 0.59594,
+			"linear_2_1_2_127_0_1_1_7": 0.7928
+		}
+	},
+	{
+		"participants": {
+			"boulware_2_1_2_127_0_1_1_9": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			},
+			"conceder_2_1_2_127_0_1_1_10": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_9": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_10": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_9": 0.9081,
+			"conceder_2_1_2_127_0_1_1_10": 0.48711
+		}
+	},
+	{
+		"participants": {
+			"boulware_2_1_2_127_0_1_1_12": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			},
+			"conceder_2_1_2_127_0_1_1_11": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_12": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_11": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_12": 0.96060,
+			"conceder_2_1_2_127_0_1_1_11": 0.68566
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_13": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"boulware_2_1_2_127_0_1_1_14": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"linear_2_1_2_127_0_1_1_13": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Finger-Food",
+					"Location": "Party Room"
+				}
+			},
+			"boulware_2_1_2_127_0_1_1_14": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Finger-Food",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_13": 0.72430,
+			"boulware_2_1_2_127_0_1_1_14": 0.94255
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_16": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			},
+			"boulware_2_1_2_127_0_1_1_15": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_15": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_16": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_16": 0.60273,
+			"boulware_2_1_2_127_0_1_1_15": 0.97522
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_17": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"linear_2_1_2_127_0_1_1_18": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"conceder_2_1_2_127_0_1_1_17": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_18": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"conceder_2_1_2_127_0_1_1_17": 0.80132,
+			"linear_2_1_2_127_0_1_1_18": 0.88599
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_20": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			},
+			"linear_2_1_2_127_0_1_1_19": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			}
+		},
+		"agreements": {
+			"conceder_2_1_2_127_0_1_1_20": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Hired Help",
+					"Food": "Finger-Food",
+					"Location": "Party Tent"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_19": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Hired Help",
+					"Food": "Finger-Food",
+					"Location": "Party Tent"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"conceder_2_1_2_127_0_1_1_20": 0.61064,
+			"linear_2_1_2_127_0_1_1_19": 0.88049
+		}
+	},
+	{
+		"participants": {
+			"boulware_2_1_2_127_0_1_1_21": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"conceder_2_1_2_127_0_1_1_22": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_21": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_22": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_21": 0.99306,
+			"conceder_2_1_2_127_0_1_1_22": 0.62562
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_23": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"boulware_2_1_2_127_0_1_1_24": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_24": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_23": {
+				"issuevalues": {
+					"Invitations": "Custom, Printed",
+					"Music": "MP3",
+					"Drinks": "Handmade Cocktails",
+					"Cleanup": "Water and Soap",
+					"Food": "Handmade Food",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_24": 0.96060,
+			"conceder_2_1_2_127_0_1_1_23": 0.68470
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_25": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"boulware_2_1_2_127_0_1_1_26": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_26": {
+				"issuevalues": {
+					"Invitations": "Photo",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Specialized Materials",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_25": {
+				"issuevalues": {
+					"Invitations": "Photo",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Specialized Materials",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_26": 0.8843,
+			"linear_2_1_2_127_0_1_1_25": 0.68283
+		}
+	},
+	{
+		"participants": {
+			"boulware_2_1_2_127_0_1_1_27": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"linear_2_1_2_127_0_1_1_28": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_27": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "MP3",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			},
+			"linear_2_1_2_127_0_1_1_28": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "MP3",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"boulware_2_1_2_127_0_1_1_27": 0.94900,
+			"linear_2_1_2_127_0_1_1_28": 0.55344
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_30": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			},
+			"conceder_2_1_2_127_0_1_1_29": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			}
+		},
+		"agreements": {
+			"linear_2_1_2_127_0_1_1_30": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Hired Help",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_29": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Hired Help",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_30": 0.8361,
+			"conceder_2_1_2_127_0_1_1_29": 0.63645
+		}
+	},
+	{
+		"participants": {
+			"linear_2_1_2_127_0_1_1_31": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"conceder_2_1_2_127_0_1_1_32": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"linear_2_1_2_127_0_1_1_31": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Catering",
+					"Cleanup": "Hired Help",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_32": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "DJ",
+					"Drinks": "Catering",
+					"Cleanup": "Hired Help",
+					"Food": "Chips and Nuts",
+					"Location": "Party Tent"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"linear_2_1_2_127_0_1_1_31": 0.76769,
+			"conceder_2_1_2_127_0_1_1_32": 0.56592
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_34": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			},
+			"boulware_2_1_2_127_0_1_1_33": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_33": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_34": {
+				"issuevalues": {
+					"Invitations": "Plain",
+					"Music": "Band",
+					"Drinks": "Non-Alcoholic",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Ballroom"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"conceder_2_1_2_127_0_1_1_34": 0.50594,
+			"boulware_2_1_2_127_0_1_1_33": 0.97522
+		}
+	},
+	{
+		"participants": {
+			"conceder_2_1_2_127_0_1_1_35": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+			},
+			"boulware_2_1_2_127_0_1_1_36": {
+				"party": {
+					"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+					"parameters": {
+					}
+				},
+				"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+			}
+		},
+		"agreements": {
+			"boulware_2_1_2_127_0_1_1_36": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			},
+			"conceder_2_1_2_127_0_1_1_35": {
+				"issuevalues": {
+					"Invitations": "Custom, Handmade",
+					"Music": "DJ",
+					"Drinks": "Beer Only",
+					"Cleanup": "Water and Soap",
+					"Food": "Chips and Nuts",
+					"Location": "Party Room"
+				}
+			}
+		},
+		"penalties": {
+		},
+		"error": null,
+		"utilities": {
+			"conceder_2_1_2_127_0_1_1_35": 0.61016,
+			"boulware_2_1_2_127_0_1_1_36": 0.9081
+		}
+	}
+]
Index: /opponentmodel/pom.xml
===================================================================
--- /opponentmodel/pom.xml	(revision 47)
+++ /opponentmodel/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>opponentmodel</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /party/pom.xml
===================================================================
--- /party/pom.xml	(revision 47)
+++ /party/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>party</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /pom.xml
===================================================================
--- /pom.xml	(revision 47)
+++ /pom.xml	(revision 48)
@@ -33,4 +33,5 @@
 		<module>boa</module>
 		<module>ip</module>
+		<module>logconverter</module>
 	</modules>
 </project>
Index: /profile/pom.xml
===================================================================
--- /profile/pom.xml	(revision 47)
+++ /profile/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>profile</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /profileconnection/pom.xml
===================================================================
--- /profileconnection/pom.xml	(revision 47)
+++ /profileconnection/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>profileconnection</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /protocol/pom.xml
===================================================================
--- /protocol/pom.xml	(revision 47)
+++ /protocol/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>protocol</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /protocol/src/main/java/geniusweb/protocol/NegoState.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/NegoState.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/NegoState.java	(revision 48)
@@ -1,3 +1,5 @@
 package geniusweb.protocol;
+
+import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
@@ -7,4 +9,5 @@
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 
+import geniusweb.protocol.session.SessionResult;
 import geniusweb.protocol.session.SessionState;
 import geniusweb.protocol.tournament.TournamentState;
@@ -40,3 +43,10 @@
 	boolean isFinal(long currentTimeMs);
 
+	/**
+	 * 
+	 * @return List of the{@link SessionResult}s. Each SessionResult is a short
+	 *         report of the final outcome. Assumes {@link #isFinal(long)}.
+	 *         result may be undefined if not.
+	 */
+	List<SessionResult> getResults();
 }
Index: /protocol/src/main/java/geniusweb/protocol/session/SessionResult.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/session/SessionResult.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/session/SessionResult.java	(revision 48)
@@ -34,6 +34,10 @@
 	 *                     be null. Some of them may have entered later of left
 	 *                     early. This list should contain them all.
-	 * @param agreements   the final Agreements.
-	 * @param penalties    the penalties in [0,1] for each participant.
+	 * @param agreements   the final Agreements. The key is the party ID, value
+	 *                     is the bid that the party agreed on. Only parties
+	 *                     that reached an agreement are in this list.
+	 * @param penalties    Key is the party ID, the value is the penalties in
+	 *                     [0,1] for that participant. A penalty only applies to
+	 *                     an agreement, not to a reservation bid.
 	 * @param error        a fatal error that terminated the session. Non-fatal
 	 *                     errors (warnings) are not to be reported. Null if no
Index: /protocol/src/main/java/geniusweb/protocol/session/SessionState.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/session/SessionState.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/session/SessionState.java	(revision 48)
@@ -65,10 +65,3 @@
 	Agreements getAgreements();
 
-	/**
-	 * 
-	 * @return the {@link SessionResult} which is a short report of the final
-	 *         outcome. Assumes {@link #isFinal(long)}. result may be undefined
-	 *         if not.
-	 */
-	SessionResult getResult();
 }
Index: /protocol/src/main/java/geniusweb/protocol/session/amop/AMOPState.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/session/amop/AMOPState.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/session/amop/AMOPState.java	(revision 48)
@@ -1,4 +1,5 @@
 package geniusweb.protocol.session.amop;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
@@ -251,7 +252,7 @@
 
 	@Override
-	public SessionResult getResult() {
-		return new SessionResult(partyprofiles, getAgreements(),
-				Collections.emptyMap(), null);
+	public List<SessionResult> getResults() {
+		return Arrays.asList(new SessionResult(partyprofiles, getAgreements(),
+				Collections.emptyMap(), null));
 	}
 
Index: /protocol/src/main/java/geniusweb/protocol/session/learn/LearnState.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/session/learn/LearnState.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/session/learn/LearnState.java	(revision 48)
@@ -1,4 +1,5 @@
 package geniusweb.protocol.session.learn;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -68,7 +69,7 @@
 
 	@Override
-	public SessionResult getResult() {
-		return new SessionResult(getPartyProfiles(), getAgreements(),
-				Collections.emptyMap(), null);
+	public List<SessionResult> getResults() {
+		return Arrays.asList(new SessionResult(getPartyProfiles(),
+				getAgreements(), Collections.emptyMap(), null));
 	}
 
Index: /protocol/src/main/java/geniusweb/protocol/session/mopac/MOPACState.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/session/mopac/MOPACState.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/session/mopac/MOPACState.java	(revision 48)
@@ -151,7 +151,7 @@
 
 	@Override
-	public SessionResult getResult() {
-		return new SessionResult(partyprofiles, getAgreements(),
-				Collections.emptyMap(), null);
+	public List<SessionResult> getResults() {
+		return Arrays.asList(new SessionResult(partyprofiles, getAgreements(),
+				Collections.emptyMap(), null));
 	}
 
Index: /protocol/src/main/java/geniusweb/protocol/session/mopac2/MOPAC2State.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/session/mopac2/MOPAC2State.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/session/mopac2/MOPAC2State.java	(revision 48)
@@ -151,7 +151,7 @@
 
 	@Override
-	public SessionResult getResult() {
-		return new SessionResult(partyprofiles, getAgreements(),
-				Collections.emptyMap(), null);
+	public List<SessionResult> getResults() {
+		return Arrays.asList(new SessionResult(partyprofiles, getAgreements(),
+				Collections.emptyMap(), null));
 	}
 
Index: /protocol/src/main/java/geniusweb/protocol/session/saop/SAOPState.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/session/saop/SAOPState.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/session/saop/SAOPState.java	(revision 48)
@@ -1,4 +1,5 @@
 package geniusweb.protocol.session.saop;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -191,7 +192,7 @@
 
 	@Override
-	public SessionResult getResult() {
-		return new SessionResult(getPartyProfiles(), getAgreements(),
-				Collections.emptyMap(), getError());
+	public List<SessionResult> getResults() {
+		return Arrays.asList(new SessionResult(getPartyProfiles(),
+				getAgreements(), Collections.emptyMap(), getError()));
 	}
 
Index: /protocol/src/main/java/geniusweb/protocol/session/shaop/BareSHAOPState.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/session/shaop/BareSHAOPState.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/session/shaop/BareSHAOPState.java	(revision 48)
@@ -1,4 +1,5 @@
 package geniusweb.protocol.session.shaop;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
@@ -171,5 +172,5 @@
 
 	@Override
-	public SessionResult getResult() {
+	public List<SessionResult> getResults() {
 		Map<PartyId, Double> penalties = new HashMap<>();
 		for (PartyId party : partyNumbers.keySet()) {
@@ -185,6 +186,6 @@
 				.stream().collect(Collectors.toMap(pid -> pid, pid -> settings
 						.getAllParties().get(partyNumbers.get(pid))));
-		return new SessionResult(allparties, getAgreements(), penalties,
-				getError());
+		return Arrays.asList(new SessionResult(allparties, getAgreements(),
+				penalties, getError()));
 
 	}
Index: /protocol/src/main/java/geniusweb/protocol/tournament/TournamentState.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/tournament/TournamentState.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/tournament/TournamentState.java	(revision 48)
@@ -3,6 +3,10 @@
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
 
 import geniusweb.protocol.NegoState;
+import geniusweb.protocol.tournament.allpermutations.AllPermutationsState;
+import geniusweb.protocol.tournament.allpermutationslearn.AllPermutationsLearnState;
 
 /**
@@ -13,4 +17,6 @@
  */
 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
+@JsonSubTypes({ @Type(value = AllPermutationsState.class),
+		@Type(value = AllPermutationsLearnState.class) })
 public interface TournamentState extends NegoState {
 
Index: /protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsProtocol.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsProtocol.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsProtocol.java	(revision 48)
@@ -1,4 +1,5 @@
 package geniusweb.protocol.tournament.allpermutations;
 
+import java.util.List;
 import java.util.logging.Level;
 
@@ -81,6 +82,6 @@
 			long now = System.currentTimeMillis();
 			if (sessionstate.isFinal(now)) {
-				SessionResult result = sessionstate.getResult();
-				state = state.with(result);
+				List<SessionResult> results = sessionstate.getResults();
+				state = state.with(results);
 				notifyListeners(new CurrentNegoState(state));
 				if (!state.isFinal(now)) {
Index: /protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsSettings.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsSettings.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsSettings.java	(revision 48)
@@ -67,4 +67,5 @@
 	protected final SessionSettings sessionsettings;
 	protected final int numberTournaments;
+	private final transient ImmutableList<SessionSettings> perms; // cache
 
 	/**
@@ -127,4 +128,6 @@
 		this.sessionsettings = sesettings;
 		this.numberTournaments = nTournaments;
+
+		this.perms = permutations1();
 	}
 
@@ -146,13 +149,20 @@
 	public TournamentProtocol getProtocol(Reporter logger) {
 		AllPermutationsState state = new AllPermutationsState(this,
-				permutations(), Collections.emptyList());
+				Collections.emptyList());
 		return new AllPermutationsProtocol(state, logger);
 	}
 
 	/**
-	 * @return {@link ImmutableList} containing all {@link SessionSettings} for
-	 *         all Sessions in the correct order.
+	 * @return All {@link SessionSettings} for the tournament, in the correct
+	 *         order.
 	 */
 	public ImmutableList<SessionSettings> permutations() {
+		return perms;
+	}
+
+	/**
+	 * @return list of all {@link SessionSettings} for this tournament
+	 */
+	private ImmutableList<SessionSettings> permutations1() {
 		ImmutableList<ImmutableList<TeamInfo>> partylistlist;
 		ImmutableList<Team> partieslist = new FixedList<Team>(teams);
Index: /protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsState.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsState.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsState.java	(revision 48)
@@ -5,8 +5,10 @@
 import java.util.List;
 
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 import geniusweb.protocol.session.SessionResult;
 import geniusweb.protocol.session.SessionSettings;
 import geniusweb.protocol.tournament.TournamentState;
-import tudelft.utilities.immutablelist.ImmutableList;
 
 /**
@@ -16,13 +18,12 @@
 
 	protected final AllPermutationsSettings toursettings; // original settings
-	protected final ImmutableList<SessionSettings> sessionsettings;
 	// limited to MAX_INT elements. But we need to store results anyway
 	protected final List<SessionResult> results;
 
-	public AllPermutationsState(AllPermutationsSettings toursettings,
-			ImmutableList<SessionSettings> settings,
-			List<SessionResult> results) {
+	@JsonCreator
+	public AllPermutationsState(
+			@JsonProperty("toursettings") AllPermutationsSettings toursettings,
+			@JsonProperty("results") List<SessionResult> results) {
 		this.toursettings = toursettings;
-		this.sessionsettings = settings;
 		this.results = results;
 	}
@@ -34,5 +35,5 @@
 	@Override
 	public boolean isFinal(long currentTimeMs) {
-		return sessionsettings.size().intValue() == results.size();
+		return toursettings.permutations().size().intValue() == results.size();
 	}
 
@@ -43,5 +44,6 @@
 		if (isFinal(0l))
 			return null;
-		return sessionsettings.get(BigInteger.valueOf(results.size()));
+		return toursettings.permutations()
+				.get(BigInteger.valueOf(results.size()));
 	}
 
@@ -53,5 +55,5 @@
 	 *                                  matching the expected participants
 	 */
-	public AllPermutationsState with(SessionResult result) {
+	public AllPermutationsState with(List<SessionResult> res) {
 		// FIXME do we really need this? Why is this not working?
 		// if (!new HashSet<PartyWithProfile>(getNextSettings().getAllParties())
@@ -60,7 +62,6 @@
 		// }
 		ArrayList<SessionResult> newresults = new ArrayList<>(results);
-		newresults.add(result);
-		return new AllPermutationsState(toursettings, sessionsettings,
-				newresults);
+		newresults.addAll(res);
+		return new AllPermutationsState(toursettings, newresults);
 	}
 
@@ -70,5 +71,5 @@
 	 */
 	public BigInteger getSize() {
-		return sessionsettings.size();
+		return toursettings.permutations().size();
 	}
 
Index: /protocol/src/main/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnSettings.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnSettings.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnSettings.java	(revision 48)
@@ -59,4 +59,5 @@
 
 	private final LearnSettings learnSettings;
+	private final transient ImmutableList<SessionSettings> perms2; // cache
 
 	/**
@@ -96,4 +97,5 @@
 				nTournaments);
 		this.learnSettings = learnSet;
+		this.perms2 = permutations2();
 	}
 
@@ -101,5 +103,5 @@
 	public TournamentProtocol getProtocol(Reporter logger) {
 		AllPermutationsLearnState state = new AllPermutationsLearnState(this,
-				permutations(), Collections.emptyList());
+				Collections.emptyList());
 		return new AllPermutationsLearnProtocol(state, logger);
 	}
@@ -112,10 +114,15 @@
 	}
 
+	@Override
+	public ImmutableList<SessionSettings> permutations() {
+		return this.perms2;
+	}
+
 	/**
 	 * @return {@link ImmutableList} containing all {@link SessionSettings} for
-	 *         all Sessions in the correct order.
-	 */
-	@Override
-	public ImmutableList<SessionSettings> permutations() {
+	 *         all Sessions in the correct order. Overrides the parent version
+	 *         of this.
+	 */
+	protected ImmutableList<SessionSettings> permutations2() {
 
 		ImmutableList<ImmutableList<TeamInfo>> partylistlist;
Index: /protocol/src/main/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnState.java
===================================================================
--- /protocol/src/main/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnState.java	(revision 47)
+++ /protocol/src/main/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnState.java	(revision 48)
@@ -4,8 +4,10 @@
 import java.util.List;
 
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 import geniusweb.protocol.session.SessionResult;
-import geniusweb.protocol.session.SessionSettings;
+import geniusweb.protocol.tournament.allpermutations.AllPermutationsSettings;
 import geniusweb.protocol.tournament.allpermutations.AllPermutationsState;
-import tudelft.utilities.immutablelist.ImmutableList;
 
 /**
@@ -14,8 +16,9 @@
 public class AllPermutationsLearnState extends AllPermutationsState {
 
-	public AllPermutationsLearnState(AllPermutationsLearnSettings toursettings,
-			ImmutableList<SessionSettings> settings,
-			List<SessionResult> results) {
-		super(toursettings, settings, results);
+	@JsonCreator
+	public AllPermutationsLearnState(
+			@JsonProperty("toursettings") AllPermutationsSettings toursettings,
+			@JsonProperty("results") List<SessionResult> results) {
+		super(toursettings, results);
 	}
 
@@ -28,10 +31,9 @@
 	 */
 	@Override
-	public AllPermutationsLearnState with(SessionResult result) {
+	public AllPermutationsLearnState with(List<SessionResult> result) {
 		ArrayList<SessionResult> newresults = new ArrayList<>(results);
-		newresults.add(result);
+		newresults.addAll(result);
 		return new AllPermutationsLearnState(
-				(AllPermutationsLearnSettings) toursettings, sessionsettings,
-				newresults);
+				(AllPermutationsLearnSettings) toursettings, newresults);
 	}
 
Index: /protocol/src/test/java/geniusweb/protocol/ProtocolExceptionTest.java
===================================================================
--- /protocol/src/test/java/geniusweb/protocol/ProtocolExceptionTest.java	(revision 47)
+++ /protocol/src/test/java/geniusweb/protocol/ProtocolExceptionTest.java	(revision 48)
@@ -18,5 +18,5 @@
 	private ObjectBuffer jackson = new ObjectBuffer();
 	private Exception exception;
-	private String asString1 = "{\"cause\":null,\"stackTrace\":[],\"party\":\"party1\",\"message\":\"party1:test\",\"localizedMessage\":\"party1:test\",\"suppressed\":[]}";
+	private String asString1 = "{\"cause\":null,\"stackTrace\":[],\"party\":\"party1\",\"message\":\"party1:test\",\"suppressed\":[],\"localizedMessage\":\"party1:test\"}";
 
 	@Before
@@ -36,5 +36,7 @@
 		ObjectMapper jackson = new ObjectMapper();
 		System.out.println(jackson.writeValueAsString(exception));
-		assertEquals(asString1, jackson.writeValueAsString(exception));
+		// disabled check , does not work either in Java8 or in Java16 because
+		// field order seems swapped
+//		assertEquals(asString1, jackson.writeValueAsString(exception));
 
 	}
Index: /protocol/src/test/java/geniusweb/protocol/session/learn/LearnStateTest.java
===================================================================
--- /protocol/src/test/java/geniusweb/protocol/session/learn/LearnStateTest.java	(revision 47)
+++ /protocol/src/test/java/geniusweb/protocol/session/learn/LearnStateTest.java	(revision 48)
@@ -157,5 +157,5 @@
 	@Test
 	public void getResultTest() {
-		SessionResult res = connectedstate.getResult();
+		SessionResult res = connectedstate.getResults().get(0);
 		assertTrue(res.getAgreements().getMap().isEmpty());
 	}
Index: /protocol/src/test/java/geniusweb/protocol/session/shaop/SHAOPStateTest.java
===================================================================
--- /protocol/src/test/java/geniusweb/protocol/session/shaop/SHAOPStateTest.java	(revision 47)
+++ /protocol/src/test/java/geniusweb/protocol/session/shaop/SHAOPStateTest.java	(revision 48)
@@ -75,8 +75,6 @@
 	private Map<PartyId, Integer> partynrs = new HashMap<>();
 
-	private TeamInfo team1 = mock(
-			TeamInfo.class);
-	private TeamInfo team2 = mock(
-			TeamInfo.class);
+	private TeamInfo team1 = mock(TeamInfo.class);
+	private TeamInfo team2 = mock(TeamInfo.class);
 
 	@Before
@@ -325,6 +323,5 @@
 				new ProgressRounds(10, 0, null), settings, null, 0, partynrs,
 				spent);
-		SessionResult res = state.getResult();
-
+		SessionResult res = state.getResults().get(0);
 	}
 
Index: /protocol/src/test/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsProtocolTest.java
===================================================================
--- /protocol/src/test/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsProtocolTest.java	(revision 47)
+++ /protocol/src/test/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsProtocolTest.java	(revision 48)
@@ -4,6 +4,6 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyLong;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
@@ -12,4 +12,5 @@
 
 import java.math.BigInteger;
+import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
@@ -54,5 +55,6 @@
 		when(finalsessionstate.getSettings()).thenReturn(settings);
 		when(finalsessionstate.getAgreements()).thenReturn(agreement);
-		when(finalsessionstate.getResult()).thenReturn(finalstate);
+		when(finalsessionstate.getResults())
+				.thenReturn(Arrays.asList(finalstate));
 		when(finalstate.getAgreements()).thenReturn(agreement);
 		when(state.with(any())).thenReturn(newstate);
@@ -109,9 +111,9 @@
 		sessionprotocol.getListener().notifyChange(evt);
 
-		ArgumentCaptor<SessionResult> argument = ArgumentCaptor
-				.forClass(SessionResult.class);
+		ArgumentCaptor<List<SessionResult>> argument = ArgumentCaptor
+				.forClass(List.class);
 		verify(state, times(1)).with(argument.capture());
-		assertEquals(agreement, argument.getValue().getAgreements());
-		assertNull(argument.getValue().getError());
+		assertEquals(agreement, argument.getValue().get(0).getAgreements());
+		assertNull(argument.getValue().get(0).getError());
 	}
 
Index: /protocol/src/test/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsStateTest.java
===================================================================
--- /protocol/src/test/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsStateTest.java	(revision 47)
+++ /protocol/src/test/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsStateTest.java	(revision 48)
@@ -7,5 +7,8 @@
 import static org.mockito.Mockito.when;
 
+import java.io.File;
+import java.io.IOException;
 import java.math.BigInteger;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -13,7 +16,11 @@
 import java.util.Map;
 
+import org.junit.Before;
 import org.junit.Test;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import geniusweb.actions.PartyId;
+import geniusweb.protocol.NegoState;
 import geniusweb.protocol.session.SessionResult;
 import geniusweb.protocol.session.SessionSettings;
@@ -22,5 +29,5 @@
 
 public class AllPermutationsStateTest {
-
+	private final static ObjectMapper jackson = new ObjectMapper();
 	private final AllPermutationsSettings toursettings = mock(
 			AllPermutationsSettings.class);;
@@ -31,5 +38,5 @@
 			ImmutableList.class);
 	private final AllPermutationsState state = new AllPermutationsState(
-			toursettings, settings, results);
+			toursettings, results);
 	private final SessionSettings session7settings = mock(
 			SessionSettings.class);
@@ -37,4 +44,9 @@
 	private PartyWithProfile pp1 = mock(PartyWithProfile.class);
 	private PartyWithProfile pp2 = mock(PartyWithProfile.class);
+
+	@Before
+	public void before() {
+		when(toursettings.permutations()).thenReturn(settings);
+	}
 
 	@SuppressWarnings("unchecked")
@@ -84,5 +96,5 @@
 		// use state with "real" results... to allow array copy in with
 		AllPermutationsState state = new AllPermutationsState(toursettings,
-				settings, results1);
+				results1);
 
 		when(settings.size()).thenReturn(BigInteger.TEN);
@@ -94,5 +106,5 @@
 		when(participants3.values()).thenReturn(participants);
 		when(result.getParticipants()).thenReturn(participants3);
-		AllPermutationsState state1 = state.with(result);
+		AllPermutationsState state1 = state.with(Arrays.asList(result));
 
 		assertEquals(8, state1.getResults().size());
@@ -100,3 +112,26 @@
 
 	}
+
+	@Test
+	public void testDeserialize() throws IOException {
+		NegoState state = jackson.readValue(
+				new File("src/test/resources/APP1646925947841.json"),
+				NegoState.class);
+		assertTrue(state instanceof AllPermutationsState);
+		AllPermutationsState negostate = (AllPermutationsState) state;
+
+		System.out.println(negostate);
+		// all sessions should be done so time irrelevant
+		assertTrue(negostate.isFinal(0));
+		assertEquals(1, negostate.getSettings().getNrTournaments());
+	}
+
+	@Test
+	public void testSerialize() throws URISyntaxException, IOException {
+		NegoState obj = jackson.readValue(
+				new File("src/test/resources/APP1646925947841.json"),
+				NegoState.class);
+		String string = jackson.writeValueAsString(obj);
+		// just smoke test, FIXME really check the output.
+	}
 }
Index: /protocol/src/test/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnProtocolTest.java
===================================================================
--- /protocol/src/test/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnProtocolTest.java	(revision 47)
+++ /protocol/src/test/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnProtocolTest.java	(revision 48)
@@ -4,6 +4,6 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyLong;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
@@ -12,4 +12,5 @@
 
 import java.math.BigInteger;
+import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
@@ -55,5 +56,6 @@
 		when(finalsessionstate.getSettings()).thenReturn(settings);
 		when(finalsessionstate.getAgreements()).thenReturn(agreement);
-		when(finalsessionstate.getResult()).thenReturn(finalstate);
+		when(finalsessionstate.getResults())
+				.thenReturn(Arrays.asList(finalstate));
 		when(finalstate.getAgreements()).thenReturn(agreement);
 		when(state.with(any())).thenReturn(newstate);
@@ -111,9 +113,9 @@
 		sessionprotocol.getListener().notifyChange(evt);
 
-		ArgumentCaptor<SessionResult> argument = ArgumentCaptor
-				.forClass(SessionResult.class);
+		ArgumentCaptor<List<SessionResult>> argument = ArgumentCaptor
+				.forClass(List.class);
 		verify(state, times(1)).with(argument.capture());
-		assertEquals(agreement, argument.getValue().getAgreements());
-		assertNull(argument.getValue().getError());
+		assertEquals(agreement, argument.getValue().get(0).getAgreements());
+		assertNull(argument.getValue().get(0).getError());
 	}
 
Index: /protocol/src/test/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnStateTest.java
===================================================================
--- /protocol/src/test/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnStateTest.java	(revision 47)
+++ /protocol/src/test/java/geniusweb/protocol/tournament/allpermutationslearn/AllPermutationsLearnStateTest.java	(revision 48)
@@ -13,4 +13,5 @@
 import java.util.Map;
 
+import org.junit.Before;
 import org.junit.Test;
 
@@ -28,8 +29,8 @@
 	private final List<SessionResult> results = mock(List.class);
 	@SuppressWarnings("unchecked")
-	private final ImmutableList<SessionSettings> settings = mock(
+	private final ImmutableList<SessionSettings> sesettings = mock(
 			ImmutableList.class);
 	private final AllPermutationsLearnState state = new AllPermutationsLearnState(
-			toursettings, settings, results);
+			toursettings, results);
 	private final SessionSettings session7settings = mock(
 			SessionSettings.class);
@@ -41,4 +42,9 @@
 	private final List<PartyWithProfile> participants = Arrays.asList(pp1, pp2);
 
+	@Before
+	public void before() {
+		when(toursettings.permutations()).thenReturn(sesettings);
+	}
+
 	@Test
 	public void getResultsTest() {
@@ -48,5 +54,5 @@
 	@Test
 	public void isFinalTestFalse() {
-		when(settings.size()).thenReturn(BigInteger.TEN);
+		when(sesettings.size()).thenReturn(BigInteger.TEN);
 		when(results.size()).thenReturn(7);
 		assertFalse(state.isFinal(NOW));
@@ -55,5 +61,5 @@
 	@Test
 	public void isFinalTestTrue() {
-		when(settings.size()).thenReturn(BigInteger.TEN);
+		when(sesettings.size()).thenReturn(BigInteger.TEN);
 		when(results.size()).thenReturn(10);
 		assertTrue(state.isFinal(NOW));
@@ -68,8 +74,9 @@
 	private void prepareNextSettings() {
 		when(results.size()).thenReturn(7); // result 0..6
-		when(settings.size()).thenReturn(BigInteger.TEN);
+		when(sesettings.size()).thenReturn(BigInteger.TEN);
 		// when(session7settings.getTeams()).thenReturn(participants);
 		when(session7settings.getAllParties()).thenReturn(participants);
-		when(settings.get(BigInteger.valueOf(7))).thenReturn(session7settings);
+		when(sesettings.get(BigInteger.valueOf(7)))
+				.thenReturn(session7settings);
 
 	}
@@ -84,8 +91,9 @@
 		// use state with "real" results... to allow array copy in with
 		AllPermutationsLearnState state0 = new AllPermutationsLearnState(
-				toursettings, settings, results1);
+				toursettings, results1);
 
-		when(settings.size()).thenReturn(BigInteger.TEN);
-		when(settings.get(BigInteger.valueOf(7))).thenReturn(session7settings);
+		when(sesettings.size()).thenReturn(BigInteger.TEN);
+		when(sesettings.get(BigInteger.valueOf(7)))
+				.thenReturn(session7settings);
 
 		SessionResult result = mock(SessionResult.class);
@@ -94,5 +102,5 @@
 		when(participants3.values()).thenReturn(participants);
 		when(result.getParticipants()).thenReturn(participants3);
-		AllPermutationsLearnState state1 = state0.with(result);
+		AllPermutationsLearnState state1 = state0.with(Arrays.asList(result));
 
 		assertEquals(8, state1.getResults().size());
Index: /protocol/src/test/resources/APP1646925947841.json
===================================================================
--- /protocol/src/test/resources/APP1646925947841.json	(revision 48)
+++ /protocol/src/test/resources/APP1646925947841.json	(revision 48)
@@ -0,0 +1,882 @@
+{
+	"AllPermutationsState": {
+		"toursettings": {
+			"AllPermutationsSettings": {
+				"teams": [
+					{
+						"Team": [
+							{
+								"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+								"parameters": {
+								}
+							}
+						]
+					},
+					{
+						"Team": [
+							{
+								"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+								"parameters": {
+								}
+							}
+						]
+					},
+					{
+						"Team": [
+							{
+								"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+								"parameters": {
+								}
+							}
+						]
+					}
+				],
+				"profileslists": [
+					{
+						"ProfileList": [
+							"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+						]
+					},
+					{
+						"ProfileList": [
+							"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+						]
+					},
+					{
+						"ProfileList": [
+							"ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+						]
+					}
+				],
+				"reuseTeams": false,
+				"teamsPerSession": 2,
+				"sessionsettings": {
+					"SAOPSettings": {
+						"participants": [
+						],
+						"deadline": {
+							"DeadlineRounds": {
+								"rounds": 10,
+								"durationms": 10000
+							}
+						}
+					}
+				},
+				"numberTournaments": 1
+			}
+		},
+
+		"results": [
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_1": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					},
+					"boulware_2_1_2_127_0_1_1_2": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_1": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					},
+					"boulware_2_1_2_127_0_1_1_2": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_3": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					},
+					"linear_2_1_2_127_0_1_1_4": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_3": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_4": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_6": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					},
+					"conceder_2_1_2_127_0_1_1_5": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_6": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Catering",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_5": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Catering",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_8": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					},
+					"linear_2_1_2_127_0_1_1_7": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"conceder_2_1_2_127_0_1_1_8": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_7": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_9": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					},
+					"conceder_2_1_2_127_0_1_1_10": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_9": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_10": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_12": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					},
+					"conceder_2_1_2_127_0_1_1_11": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_12": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_11": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_13": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"boulware_2_1_2_127_0_1_1_14": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_13": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Finger-Food",
+							"Location": "Party Room"
+						}
+					},
+					"boulware_2_1_2_127_0_1_1_14": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Finger-Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_16": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					},
+					"boulware_2_1_2_127_0_1_1_15": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_15": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_16": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_17": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"linear_2_1_2_127_0_1_1_18": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"conceder_2_1_2_127_0_1_1_17": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_18": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_20": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					},
+					"linear_2_1_2_127_0_1_1_19": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					}
+				},
+				"agreements": {
+					"conceder_2_1_2_127_0_1_1_20": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Hired Help",
+							"Food": "Finger-Food",
+							"Location": "Party Tent"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_19": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Hired Help",
+							"Food": "Finger-Food",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_21": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"conceder_2_1_2_127_0_1_1_22": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_21": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_22": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_23": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"boulware_2_1_2_127_0_1_1_24": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party2"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_24": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_23": {
+						"issuevalues": {
+							"Invitations": "Custom, Printed",
+							"Music": "MP3",
+							"Drinks": "Handmade Cocktails",
+							"Cleanup": "Water and Soap",
+							"Food": "Handmade Food",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_25": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"boulware_2_1_2_127_0_1_1_26": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_26": {
+						"issuevalues": {
+							"Invitations": "Photo",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_25": {
+						"issuevalues": {
+							"Invitations": "Photo",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Specialized Materials",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"boulware_2_1_2_127_0_1_1_27": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"linear_2_1_2_127_0_1_1_28": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_27": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "MP3",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"linear_2_1_2_127_0_1_1_28": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "MP3",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_30": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					},
+					"conceder_2_1_2_127_0_1_1_29": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_30": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_29": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"linear_2_1_2_127_0_1_1_31": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/linear-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"conceder_2_1_2_127_0_1_1_32": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"linear_2_1_2_127_0_1_1_31": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Catering",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_32": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "DJ",
+							"Drinks": "Catering",
+							"Cleanup": "Hired Help",
+							"Food": "Chips and Nuts",
+							"Location": "Party Tent"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_34": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					},
+					"boulware_2_1_2_127_0_1_1_33": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_33": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_34": {
+						"issuevalues": {
+							"Invitations": "Plain",
+							"Music": "Band",
+							"Drinks": "Non-Alcoholic",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Ballroom"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			},
+			{
+				"participants": {
+					"conceder_2_1_2_127_0_1_1_35": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/conceder-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party3"
+					},
+					"boulware_2_1_2_127_0_1_1_36": {
+						"party": {
+							"partyref": "http://127.0.1.1:8080/partiesserver/run/boulware-2.1.2",
+							"parameters": {
+							}
+						},
+						"profile": "ws://127.0.1.1:8080/profilesserver/websocket/get/party/party1"
+					}
+				},
+				"agreements": {
+					"boulware_2_1_2_127_0_1_1_36": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					},
+					"conceder_2_1_2_127_0_1_1_35": {
+						"issuevalues": {
+							"Invitations": "Custom, Handmade",
+							"Music": "DJ",
+							"Drinks": "Beer Only",
+							"Cleanup": "Water and Soap",
+							"Food": "Chips and Nuts",
+							"Location": "Party Room"
+						}
+					}
+				},
+				"penalties": {
+				},
+				"error": null
+			}
+		]
+	}
+}
Index: /pythonadapter/pom.xml
===================================================================
--- /pythonadapter/pom.xml	(revision 47)
+++ /pythonadapter/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>pythonadapter</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /references/pom.xml
===================================================================
--- /references/pom.xml	(revision 47)
+++ /references/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>references</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /simplerunner/pom.xml
===================================================================
--- /simplerunner/pom.xml	(revision 47)
+++ /simplerunner/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>simplerunner</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /timeline/pom.xml
===================================================================
--- /timeline/pom.xml	(revision 47)
+++ /timeline/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>timeline</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
Index: /timeline/src/test/java/geniusweb/progress/ProgressRoundsTest.java
===================================================================
--- /timeline/src/test/java/geniusweb/progress/ProgressRoundsTest.java	(revision 47)
+++ /timeline/src/test/java/geniusweb/progress/ProgressRoundsTest.java	(revision 48)
@@ -29,6 +29,6 @@
 	private final static long TESTTIME = 10; // milliseconds!
 
-	private final Date date = new Date(999l);
-	private final Date date0 = new Date(0l);
+	private final Date date = new Date(98765l);
+	private final Date date0 = new Date(100000l);
 
 	private final Progress deadline1 = new ProgressRounds(20, 0, date);
@@ -39,5 +39,5 @@
 	private ProgressRounds progress;
 	private final ObjectMapper jackson = new ObjectMapper();
-	private final String progressstring = "{\"ProgressRounds\":{\"duration\":10,\"currentRound\":0,\"endtime\":999}}";
+	private final String progressstring = "{\"ProgressRounds\":{\"duration\":10,\"currentRound\":0,\"endtime\":98765}}";
 
 	private final long start = 1234;
@@ -65,6 +65,6 @@
 	public List<String> getGeneralTestStrings() {
 		return Arrays.asList("ProgressRounds\\[0.*20\\]",
-				"ProgressRounds\\[0.*30\\]", "ProgressTime\\[0.*20ms\\]",
-				"ProgressTime\\[999.*20ms\\]");
+				"ProgressRounds\\[0.*30\\]", "ProgressTime\\[100000.*20ms\\]",
+				"ProgressTime\\[98765.*20ms\\]");
 	}
 
Index: /timeline/src/test/java/geniusweb/progress/ProgressTimeTest.java
===================================================================
--- /timeline/src/test/java/geniusweb/progress/ProgressTimeTest.java	(revision 47)
+++ /timeline/src/test/java/geniusweb/progress/ProgressTimeTest.java	(revision 48)
@@ -21,5 +21,7 @@
 
 public class ProgressTimeTest extends GeneralTests<Progress> {
-	private static final Date TIMEZERO = new Date(0l);
+	// we set T0 quite high because Python has trouble handling small datetime
+	private static final long T0 = 100000l;
+	private static final Date TIMEZERO = new Date(T0);
 	private final static long TESTTIME = 10; // milliseconds!
 	private final ProgressTime progress1 = new ProgressTime(TESTTIME, TIMEZERO);
@@ -29,5 +31,5 @@
 
 	private final ObjectMapper jackson = new ObjectMapper();
-	private final String progressstring = "{\"ProgressTime\":{\"duration\":10,\"start\":0}}";
+	private final String progressstring = "{\"ProgressTime\":{\"duration\":10,\"start\":100000}}";
 
 	private final long start = 1234;
@@ -44,6 +46,6 @@
 	@Override
 	public List<String> getGeneralTestStrings() {
-		return Arrays.asList("ProgressTime\\[0.*10ms\\]",
-				"ProgressTime\\[0.*200ms\\]");
+		return Arrays.asList("ProgressTime\\[100000.*10ms\\]",
+				"ProgressTime\\[100000.*200ms\\]");
 	}
 
@@ -56,5 +58,6 @@
 	public void testAdvancingTime() throws InterruptedException {
 		for (long n = 0; n <= TESTTIME; n++) {
-			assertEquals((Double) ((double) n / TESTTIME), progress1.get(n));
+			assertEquals((Double) ((double) n / TESTTIME),
+					progress1.get(T0 + n));
 		}
 	}
@@ -63,5 +66,5 @@
 	public void testAdvanceWhenDeadlineReached() throws InterruptedException {
 		ProgressTime progress = new ProgressTime(TESTTIME, TIMEZERO);
-		assertEquals((Double) 1d, progress1.get(TESTTIME));
+		assertEquals((Double) 1d, progress1.get(T0 + TESTTIME));
 	}
 
@@ -82,5 +85,5 @@
 		// object...
 		assertEquals(TESTTIME, newprog.getDuration().intValue());
-		assertEquals(0, newprog.getStart().getTime());
+		assertEquals(T0, newprog.getStart().getTime());
 
 	}
Index: /voting/pom.xml
===================================================================
--- /voting/pom.xml	(revision 47)
+++ /voting/pom.xml	(revision 48)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>voting</artifactId>
-	<version>2.1.2</version>
+	<version>2.1.3</version>
 	<packaging>jar</packaging>
 
