Index: cpp/frams/_demos/evol_test.cpp
===================================================================
--- cpp/frams/_demos/evol_test.cpp	(revision 1008)
+++ cpp/frams/_demos/evol_test.cpp	(revision 1009)
@@ -127,5 +127,5 @@
 		//TODO add b - bounding box volume (from Model), s - surface area (from geometry), v - volume (from geometry), h,w,d - three consecutive dimensions (from geometry)
 
-		printf("\nThe output contains 7 columns separated by the TAB character.\n");
+		printf("\nThe output consists of 7 columns separated by the TAB character.\n");
 		printf("The first column is the number of mutated or crossed over and evaluated genotypes.\n");
 		printf("The remaining columns are triplets of min,avg,max (in the population) of fitness, Parts, Joints, Neurons, Connections, genotype characters.\n");
@@ -192,9 +192,9 @@
 		if (i % population.size() == 0 || i == nr_evals - 1)
 		{
-			printf("Evaluation %d\t", i);
+			printf("Evaluation %d", i);
 			for (char c : string("!PJNCL"))
 			{
+				printf("\t");
 				print_stats(population, c);
-				printf("\t");
 			}
 			printf("\n");
@@ -204,5 +204,5 @@
 	{
 		printf("%.1f\t", ind.fitness);
-		printf("%s\n", ind.geno.getGenes().c_str());
+		printf("%s\n", ind.geno.getGenesAndFormat().c_str());
 	}
 
Index: cpp/frams/_demos/full_props.cpp
===================================================================
--- cpp/frams/_demos/full_props.cpp	(revision 1008)
+++ cpp/frams/_demos/full_props.cpp	(revision 1009)
@@ -63,5 +63,5 @@
 			{
 			case 'r': reverse = true; break;
-			case 'h': puts("usage: full_props [-r[everse]] [genotype_or_stdin]\n"); break;
+			case 'h': puts("Usage: full_props [-r[everse]] [genotype_or_stdin]\n"); break;
 			}
 		else
@@ -79,5 +79,5 @@
 	if (!m.isValid())
 	{
-		logPrintf("", "full_props", LOG_ERROR, "Cannot build Model from the supplied genotype\n");
+		logPrintf("full_props", "main", LOG_ERROR, "Cannot build Model from the supplied genotype.\n");
 		return 2;
 	}
@@ -88,16 +88,15 @@
 		Neuro *n = m.getNeuro(i);
 		SyntParam p = n->classProperties(reverse);
-		p.update();// ...so everyone reading the source can recognize that p was created to update the neuro d field
-		// but actually, calling update() here is not necessary, because ~SyntParam() would do it anyway
+		p.update();// ...so everyone reading the source can recognize that p was created to update the neuro d field;
+		// but actually, calling update() here is not necessary, because the ~SyntParam() destructor would do it anyway.
 	}
 	m.close();
 
-	// normal f0 (omitting default values) would be retrieved using m.getF0Geno()
-	// the following form allows for more control:
+	// Normal f0 (omitting default values) would be retrieved using m.getF0Geno().
+	// The following form allows for more control:
 	Geno f0_g;
-	m.makeGeno(f0_g, NULL, reverse);//third arg is "handle_defaults" == whether f0 should omit default property values
+	m.makeGeno(f0_g, NULL, reverse);//The third argument is "handle_defaults" == whether f0 should omit default property values
 	puts(f0_g.getGenesAndFormat().c_str());
 
 	return 0;
 }
-
Index: cpp/frams/_demos/genomanipulation.cpp
===================================================================
--- cpp/frams/_demos/genomanipulation.cpp	(revision 1008)
+++ cpp/frams/_demos/genomanipulation.cpp	(revision 1009)
@@ -378,5 +378,5 @@
 		"     need to uncomment srand(time(0)) in genomanipulation.cpp.\n"
 		"  3. This application will use custom genotype passed as\n"
-		"     a commandline parameter: genomanipulation XX\n"
+		"     a commandline parameter: genomanipulation \"/*9*/FULU\"\n"
 		"\n");
 	return 0;
Index: cpp/tests/SDK-tests.txt
===================================================================
--- cpp/tests/SDK-tests.txt	(revision 1008)
+++ cpp/tests/SDK-tests.txt	(revision 1009)
@@ -1,3 +1,3 @@
-exe:geno_test
+exe:geno_test.exe
 
 TESTNAME:geno_test valid f1
@@ -36,5 +36,5 @@
 RUNTEST
 
-##################################
+################################## another executable... ##################################
 
 exe:full_props
@@ -44,2 +44,283 @@
 out:*INSERTPLATFORMDEPENDENTFILE*:full_props_x
 RUNTEST
+
+TESTNAME:full_props with a more complex genotype
+arg:FIX[@,p:0.6543,1:-1.23456]X[G]
+out:*INSERTPLATFORMDEPENDENTFILE*:full_props-complex
+RUNTEST
+
+TESTNAME:full_props with fS
+arg:/*S*/1.1:ssC[S;S;S]{ry=-0.214;ty=0.781}fSC[S;S;*;M'4:-5.154;M'0]fE[M;Gpart]{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;z=1}ttC[*;*;Gpart]{st=0.262}fTE{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;y=1;z=1}ftC[*;*;N'0'2'3'9'12'14]{ry=-0.199;y=0.828;z=0.806}
+out:*INSERTPLATFORMDEPENDENTFILE*:full_props-fS
+RUNTEST
+
+################################## another executable... ##################################
+
+exe:f0_variants_test
+
+TESTNAME:f0_variants_test
+out:*INSERTPLATFORMDEPENDENTFILE*:f0_variants_test-default
+RUNTEST
+
+TESTNAME:f0_variants_test with a more complex genotype
+arg:FIX[@,p:0.6543,1:-1.23456]X[G]
+out:*INSERTPLATFORMDEPENDENTFILE*:f0_variants_test-complex
+RUNTEST
+
+TESTNAME:f0_variants_test with fS
+arg:/*S*/1.1:ssC[S;S;S]{ry=-0.214;ty=0.781}fSC[S;S;*;M'4:-5.154;M'0]fE[M;Gpart]{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;z=1}ttC[*;*;Gpart]{st=0.262}fTE{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;y=1;z=1}ftC[*;*;N'0'2'3'9'12'14]{ry=-0.199;y=0.828;z=0.806}
+out:*INSERTPLATFORMDEPENDENTFILE*:f0_variants_test-fS
+RUNTEST
+
+################################## another executable... ##################################
+
+exe:genoconv_test
+
+TESTNAME:genoconv_test
+out:*INSERTPLATFORMDEPENDENTFILE*:genoconv_test-default
+RUNTEST
+
+TESTNAME:genoconv_test with a more complex genotype
+arg:FIX[@,p:0.6543,1:-1.23456]X[G]
+out:*INSERTPLATFORMDEPENDENTFILE*:genoconv_test-complex
+RUNTEST
+
+TESTNAME:genoconv_test with a simple multiplying converter
+arg:/*multiply*/2X2r3X2(X2)
+out:*INSERTPLATFORMDEPENDENTFILE*:genoconv_test-simplemultiply
+RUNTEST
+
+TESTNAME:genoconv_test with a simple solid-shape converter
+arg:/*shapes*/ball,cube,cylinder,cube
+out:*INSERTPLATFORMDEPENDENTFILE*:genoconv_test-simplesolids
+RUNTEST
+
+################################## another executable... ##################################
+
+exe:genomanipulation
+
+TESTNAME:genomanipulation
+out:*INSERTPLATFORMDEPENDENTFILE*:genomanipulation-default
+RUNTEST
+
+TESTNAME:genomanipulation with a more complex genotype
+arg:FIX[@,p:0.6543,1:-1.23456]X[G]
+out:*INSERTPLATFORMDEPENDENTFILE*:genomanipulation-complex
+RUNTEST
+
+TESTNAME:genomanipulation with fS
+arg:/*S*/1.1:ssC[S;S;S]{ry=-0.214;ty=0.781}fSC[S;S;*;M'4:-5.154;M'0]fE[M;Gpart]{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;z=1}ttC[*;*;Gpart]{st=0.262}fTE{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;y=1;z=1}ftC[*;*;N'0'2'3'9'12'14]{ry=-0.199;y=0.828;z=0.806}
+out:*INSERTPLATFORMDEPENDENTFILE*:genomanipulation-fS
+RUNTEST
+
+################################## another executable... ##################################
+
+exe:genooper_test
+
+TESTNAME:genooper_test
+out:*INSERTPLATFORMDEPENDENTFILE*:genooper_test-default
+#RUNTEST #fS unstable and crashes all the time, so commented out
+#make deterministic?
+
+TESTNAME:genooper_test with a more complex genotype
+arg:/*4*/<<N:ML<rCXm>N:T>N:T><N:T><X>N:@[G:2.427]
+out:*INSERTPLATFORMDEPENDENTFILE*:genooper_test-complex
+#RUNTEST
+
+################################## another executable... ##################################
+
+TESTNAME:genooper_test_fTest
+exe:genooper_test_fTest
+out:*INSERTPLATFORMDEPENDENTFILE*:genooper_test_fTest
+RUNTEST
+
+################################## another executable... ##################################
+
+TESTNAME:loader_test_geno
+exe:loader_test_geno
+arg:similarity.gen
+arg:Spiral plant
+out:*INSERTPLATFORMDEPENDENTFILE*:loader_test_geno
+RUNTEST
+
+################################## another executable... ##################################
+
+TESTNAME:loader_test_param
+exe:loader_test_param
+arg:../frams/_demos/loader_test_param.in
+out:*INSERTPLATFORMDEPENDENTFILE*:loader_test_param
+RUNTEST
+
+################################## another executable... ##################################
+
+exe:multiline_f0_test
+
+TESTNAME:multiline_f0_test default
+out:*INSERTPLATFORMDEPENDENTFILE*:multiline_f0_test-default
+RUNTEST
+
+TESTNAME:multiline_f0_test with complex genotype
+arg:FIX[@,p:0.6543,1:-1.23456]X[G]
+out:*INSERTPLATFORMDEPENDENTFILE*:multiline_f0_test-complex
+RUNTEST
+
+TESTNAME:multiline_f0_test with fS
+arg:/*S*/1.1:ssC[S;S;S]{ry=-0.214;ty=0.781}fSC[S;S;*;M'4:-5.154;M'0]fE[M;Gpart]{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;z=1}ttC[*;*;Gpart]{st=0.262}fTE{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;y=1;z=1}ftC[*;*;N'0'2'3'9'12'14]{ry=-0.199;y=0.828;z=0.806}
+out:*INSERTPLATFORMDEPENDENTFILE*:multiline_f0_test-fS
+RUNTEST
+
+################################## another executable... ##################################
+
+TESTNAME:mutableparam_test
+exe:mutableparam_test
+out:*INSERTPLATFORMDEPENDENTFILE*:mutableparam_test
+RUNTEST
+
+################################## another executable... ##################################
+
+TESTNAME:neuro_layout_test
+exe:neuro_layout_test
+arg:/*4*/<lX>CfmQ<,fm<<<<rFX>N:N[-2:-0.202]>X>mfrm<<<N:M<rFX>N:N[-2:3.64]>XF>mN:*>N:T>N:T>m<m<<<N:M<r<r<<N:M<rX>N:N[-2:0.58]>X>qfrm<<<N:M<rFX>N:N[-2:3.64]>XF>mN:*>N:T>N:N[-2:-0.495]>N:N[-2:-0.495]>X>qfm<<imN:*><XF>N:M<rFX>N:N[-2:3.64]>N:T>N:T>N:T
+out:*INSERTPLATFORMDEPENDENTFILE*:neuro_layout_test
+RUNTEST
+
+################################## another executable... ##################################
+
+TESTNAME:neuro_test
+exe:neuro_test
+arg:X[N][Nu][G][Gpart][T][Tcontact][Tproximity][S][*][|][@][M][D][DoesNotExist][Fuzzy][VEye][VMotor][Sti][LMu][Water][Energy][Ch][ChMux][ChSel][Rnd][Sin][Delay][Light][Nn][PIDP][PIDV][SeeLight][SeeLight2][S0][S1][Thr]
+arg:30
+out:*INSERTPLATFORMDEPENDENTFILE*:neuro_test
+RUNTEST
+
+################################## another executable... ##################################
+
+TESTNAME:paramtree_paramlist_test
+exe:paramtree_paramlist_test
+out:*INSERTPLATFORMDEPENDENTFILE*:paramtree_paramlist_test
+RUNTEST
+
+################################## another executable... ##################################
+
+TESTNAME:paramtree_stdin_test
+exe:paramtree_stdin_test
+in:a
+in:a: b: d
+in:a: z
+in:a: b
+in:a: b: c
+in:a: y
+in:A
+out:*INSERTPLATFORMDEPENDENTFILE*:paramtree_stdin_test
+RUNTEST
+
+################################## another executable... ##################################
+
+TESTNAME:part_shapes
+exe:part_shapes
+out:*INSERTPLATFORMDEPENDENTFILE*:part_shapes
+RUNTEST
+
+################################## another executable... ##################################
+
+TESTNAME:saver_test_geno
+exe:saver_test_geno
+arg:_tmp_saver_test_output.gen
+arg:7
+out:*INSERTPLATFORMDEPENDENTFILE*:saver_test_geno
+RUNTEST
+# we could also verify the contents of the saved file, but for this we would need a way to print it (in frams we use a script function to do this)
+
+################################## another executable... ##################################
+
+exe:serial_test
+
+TESTNAME:serial_test
+out:*INSERTPLATFORMDEPENDENTFILE*:serial_test
+RUNTEST
+
+# TESTNAME:serial_test custom
+# out:*INSERTPLATFORMDEPENDENTFILE*:serial_test-custom
+# arg:{"2":[1]}
+# RUNTEST
+
+# Even though the command is launched correctly from python: ['../serial_test', '{"2":[1]}'] the executable in cygwin does not get its argument: 'input string = ' with default settings and input string = {\2\:[1]} with CYGWIN=noglob.
+# The problem is with characters like {} and "", and CYGWIN=noglob is supposed to fix this (it fixes the same problems with {}), but there are some bugs and it is not fixed.
+
+################################## another executable... ##################################
+
+TESTNAME:shapeconvert
+exe:shapeconvert
+out:*INSERTPLATFORMDEPENDENTFILE*:shapeconvert
+arg:FIX[@,p:0.6543,1:-1.23456](X[G],XX)
+RUNTEST
+
+################################## another executable... ##################################
+
+exe:evol_test
+
+TESTNAME:evol_test f9
+arg:1
+arg:10
+arg:100
+arg:0.6
+arg:0.4
+arg:9
+arg:PJNCL
+out:*INSERTPLATFORMDEPENDENTFILE*:evol_test-f9
+RUNTEST
+
+TESTNAME:evol_test f4
+arg:1
+arg:10
+arg:100
+arg:0.6
+arg:0.4
+arg:4
+arg:PJNCL
+out:*INSERTPLATFORMDEPENDENTFILE*:evol_test-f4
+RUNTEST
+
+TESTNAME:evol_test fH
+arg:1
+arg:10
+arg:100
+arg:0.6
+arg:0.4
+arg:H
+arg:PJNCL
+out:*INSERTPLATFORMDEPENDENTFILE*:evol_test-fH
+RUNTEST
+
+TESTNAME:evol_test fB
+arg:1
+arg:10
+arg:100
+arg:0.6
+arg:0.4
+arg:B
+arg:PJNCL
+out:*INSERTPLATFORMDEPENDENTFILE*:evol_test-fB
+RUNTEST
+
+TESTNAME:evol_test fL
+arg:1
+arg:10
+arg:100
+arg:0.6
+arg:0.4
+arg:L
+arg:PJNCL
+out:*INSERTPLATFORMDEPENDENTFILE*:evol_test-fL
+RUNTEST
+
+TESTNAME:evol_test fS
+arg:1
+arg:10
+arg:100
+arg:0.6
+arg:0.4
+arg:S
+arg:PJNCL
+out:*INSERTPLATFORMDEPENDENTFILE*:evol_test-fS
+RUNTEST
Index: cpp/tests/evol_test-f4.goal
===================================================================
--- cpp/tests/evol_test-f4.goal	(revision 1009)
+++ cpp/tests/evol_test-f4.goal	(revision 1009)
@@ -0,0 +1,22 @@
+Evaluation 0	4,4,4	2,2,2	1,1,1	0,0,0	0,0,0	1,1,1
+Evaluation 10	4,5.8,15	2,2,2	1,1,1	0,0.1,1	0,0,0	1,2.7,11
+Evaluation 20	4,5.8,15	2,2,2	1,1,1	0,0.1,1	0,0,0	1,2.7,11
+Evaluation 30	4,5.5,7	2,2,2	1,1,1	0,0,0	0,0,0	1,2.5,4
+Evaluation 40	5,6.3,8	2,2,2	1,1,1	0,0,0	0,0,0	2,3.3,5
+Evaluation 50	6,8.1,10	2,2,2	1,1,1	0,0,0	0,0,0	3,5.1,7
+Evaluation 60	6,9.1,11	2,2,2	1,1,1	0,0,0	0,0,0	3,6.1,8
+Evaluation 70	8,11.8,20	2,2,2	1,1,1	0,0,0	0,0,0	5,8.8,17
+Evaluation 80	10,15.1,20	2,2.1,3	1,1.1,2	0,0,0	0,0,0	7,11.9,17
+Evaluation 90	16,18.5,21	2,2,2	1,1,1	0,0,0	0,0,0	13,15.5,18
+Evaluation 99	10,17.9,24	2,2,2	1,1,1	0,0,0	0,0,0	7,14.9,21
+20.0	/*4*/IX#2Ql#2>>l#2l>ll
+17.0	/*4*/IX#2Ql>l#2l>ll
+21.0	/*4*/IX#2Ql#2>>l#2l>ll,
+12.0	/*4*/IXl#2l>ll
+20.0	/*4*/IX#2Ql#2>>l#2l>ll
+24.0	/*4*/IX#2Ql#2>>l#2l>l#2l,>
+16.0	/*4*/IX#2Ql>#2l>ll
+10.0	/*4*/IXQl#2>
+24.0	/*4*/IXN:M#2Ql#2>>l#2l>ll,
+15.0	/*4*/IX#2l>#2l>ll
+
Index: cpp/tests/evol_test-f9.goal
===================================================================
--- cpp/tests/evol_test-f9.goal	(revision 1009)
+++ cpp/tests/evol_test-f9.goal	(revision 1009)
@@ -0,0 +1,22 @@
+Evaluation 0	4,4,4	2,2,2	1,1,1	0,0,0	0,0,0	1,1,1
+Evaluation 10	4,4.9,10	2,2.3,4	1,1.3,3	0,0,0	0,0,0	1,1.3,3
+Evaluation 20	4,6.4,13	2,2.8,5	1,1.8,4	0,0,0	0,0,0	1,1.8,4
+Evaluation 30	4,6.4,11	2,2.7,4	1,1.7,3	0,0,0	0,0,0	1,2,4
+Evaluation 40	4,8.4,15	2,3.2,5	1,2.2,4	0,0,0	0,0,0	1,3,6
+Evaluation 50	5,11.1,13	2,4,5	1,3,4	0,0,0	0,0,0	2,4.1,6
+Evaluation 60	7,12.1,17	3,4.3,5	2,3.3,4	0,0,0	0,0,0	2,4.5,10
+Evaluation 70	7,13.4,22	3,5.1,8	2,4.1,7	0,0,0	0,0,0	2,4.2,7
+Evaluation 80	4,15,29	2,5.6,10	1,4.6,9	0,0,0	0,0,0	1,4.8,10
+Evaluation 90	4,19.6,39	2,7,13	1,6,12	0,0,0	0,0,0	1,6.6,14
+Evaluation 99	5,22.2,37	2,7.7,12	1,6.7,11	0,0,0	0,0,0	2,7.8,14
+37.0	/*9*/FUFFRFBLDLUFRL
+35.0	/*9*/FUFFBFBLDLUFRL
+14.0	/*9*/LFBDL
+22.0	/*9*/LDLUUUL
+5.0	/*9*/LR
+32.0	/*9*/FUFLBFLUUUF
+10.0	/*9*/UUL
+16.0	/*9*/FUUUL
+29.0	/*9*/FUFLBFUUUL
+22.0	/*9*/LULUUUL
+
Index: cpp/tests/evol_test-fB.goal
===================================================================
--- cpp/tests/evol_test-fB.goal	(revision 1009)
+++ cpp/tests/evol_test-fB.goal	(revision 1009)
@@ -0,0 +1,42 @@
+Evaluation 0	12,12,12	3,3,3	2,2,2	0,0,0	0,0,0	7,7,7
+Evaluation 10	9,12.3,16	2,2.5,3	1,1.5,2	0,0.3,1	0,0,0	6,8,11
+Evaluation 20	9,13.8,17	2,2.8,3	1,1.8,2	0,0.1,1	0,0,0	6,9.1,12
+Evaluation 30	9,17.5,21	2,4,6	1,3,5	0,0,0	0,0,0	6,10.5,13
+Evaluation 40	14,18.7,23	3,4.3,6	2,3.3,5	0,0,0	0,0,0	9,11.1,12
+Evaluation 50	17,19.7,22	4,4.8,5	3,3.8,4	0,0,0	0,0,0	10,11.1,13
+Evaluation 60	16,19.6,22	3,4.6,5	2,3.6,4	0,0,0	0,0,0	10,11.4,13
+Evaluation 70	18,21.3,22	4,4.9,5	3,3.9,4	0,0,0	0,0,0	11,12.5,13
+Evaluation 80	16,20.3,22	3,4.8,5	2,3.8,4	0,0,0	0,0,0	11,11.7,13
+Evaluation 90	18,20.9,23	4,4.8,5	3,3.8,4	0,0,0	0,0,0	11,12.3,14
+Evaluation 99	18,22,25	4,4.8,5	3,3.8,4	0,0,0	0,0,0	11,13.4,16
+23.0	//B
+5
+aaaaabzbgacz
+19.0	//B
+5
+aaacfaaazy
+18.0	//B
+5
+aabdaaazz
+22.0	//B
+5
+aaaaaazbacz
+25.0	//B
+5
+aaabaaabzbgacz
+22.0	//B
+5
+aaaaabzbacz
+23.0	//B
+5
+aaaaabzbgacz
+22.0	//B
+5
+aaaaaazbacz
+25.0	//B
+5
+aabaaaabzbgacz
+21.0	//B
+5
+aaacfaaazz
+
Index: cpp/tests/evol_test-fH.goal
===================================================================
--- cpp/tests/evol_test-fH.goal	(revision 1009)
+++ cpp/tests/evol_test-fH.goal	(revision 1009)
@@ -0,0 +1,165 @@
+Evaluation 0	7,7.6,13	2,2.1,3	1,1.1,2	0,0,0	0,0,0	4,4.4,8
+Evaluation 10	7,25.2,48	2,2.7,3	1,1.7,2	0,0,0	0,0,0	4,20.8,43
+Evaluation 20	7,99.3,318	2,2.8,4	1,1.8,3	0,0.2,1	0,0,0	4,94.5,310
+Evaluation 30	13,216.7,427	2,2.7,4	1,1.7,3	0,0.2,1	0,0.1,1	8,212,421
+Evaluation 40	13,190.8,333	2,2.7,5	1,1.7,4	0,0,0	0,0,0	8,186.4,324
+Evaluation 50	139,346.4,534	2,2.7,5	1,1.7,4	0,0.3,1	0,0,0	136,341.7,529
+Evaluation 60	414,542.3,670	2,3,4	1,2,3	0,0.4,1	0,0,0	408,536.9,663
+Evaluation 70	405,612,784	2,2.8,4	1,1.8,3	0,0.4,1	0,0,0	402,607,780
+Evaluation 80	529,742.4,1450	2,3.1,4	1,2.1,3	0,0.6,2	0,0,0	526,736.6,1441
+Evaluation 90	664,1104.8,1598	2,4.1,5	1,3.1,4	0,1.1,3	0,0.2,1	657,1096.3,1585
+Evaluation 99	656,1261.6,2154	3,5,9	2,4,8	0,1.7,3	0,0.5,1	650,1250.4,2138
+1594.0	//H
+3
+j:-0.023887430783361197, -0.28877452993765473, 0.8808639030903578, -0.7503338782116771, 0.4441613215021789, -0.9390940684825182, stam=0.226
+j:
+j:
+n:0.5960936606861651, -0.6287281136028469, 0.788, 0.7706753285601735, 0.359758909791708, -0.08774045528843999, d=*
+n:0.644235469866544, -0.6203041723929346, 0.022637964691966772, -0.4043163564056158, -0.19773531705141068, -0.7586860070005059, d=G
+n:-0.48259536596015096, -0.5689423708245158, 0.15982480067759752, 0.7935223132371902, -0.18653331650421023, 0.10415654024109244, d=@:p=0.829
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6980766113847494, -0.9333907472901046, 0.9179654428735375, 0.4844759553670883, -0.38602789491415024, -0.7604573033750057, -0.583
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, -1.595
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.162
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 0.604
+
+1785.0	//H
+3
+j:
+j:-0.023887430783361197, -0.28877452993765473, 0.8808639030903578, -0.7503338782116771, 0.4441613215021789, -0.9390940684825182, stam=0.226
+j:
+j:stif=0.94
+j:
+j:0.5583839416503906, 0.850326859857887, 0.43035749765112996, -0.08028824254870415, -0.9107754053547978, 0.5995917664840817, as=0.051
+j:-0.023887430783361197, -0.28877452993765473, 0.8808639030903578, -0.7503338782116771, 0.4441613215021789, -0.9390940684825182, stam=0.226
+j:
+n:-0.48259536596015096, -0.5689423708245158, 0.15982480067759752, 0.7935223132371902, -0.18653331650421023, 0.10415654024109244, d=@:p=0.829
+n:-0.48259536596015096, -0.5689423708245158, 0.15982480067759752, 0.7935223132371902, -0.18653331650421023, 0.10415654024109244, d=@:p=0.829
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.162
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, -1.595
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.162
+
+2154.0	//H
+3
+j:stif=0.94
+j:
+j:0.5583839416503906, 0.850326859857887, 0.43035749765112996, -0.08028824254870415, -0.9107754053547978, 0.5995917664840817, as=0.051
+j:-0.023887430783361197, -0.28877452993765473, 0.8808639030903578, -0.7503338782116771, 0.4441613215021789, -0.9390940684825182, stam=0.226
+j:
+j:
+n:0.644235469866544, -0.6203041723929346, 0.022637964691966772, -0.4043163564056158, -0.19773531705141068, -0.7586860070005059, d=G
+n:-0.48259536596015096, -0.5689423708245158, 0.15982480067759752, 0.7935223132371902, -0.18653331650421023, 0.10415654024109244, d=@:p=0.829
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.162
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6980766113847494, -0.9333907472901046, 0.9179654428735375, 0.4844759553670883, -0.38602789491415024, -0.7604573033750057, -0.583
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, -1.595
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.162
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 0.604
+
+1206.0	//H
+3
+j:-0.023887430783361197, -0.28877452993765473, 0.8808639030903578, -0.7503338782116771, 0.4441613215021789, -0.9390940684825182, stam=0.226
+j:
+j:
+j:
+n:0.5960936606861651, -0.6287281136028469, 0.788, 0.7706753285601735, 0.359758909791708, -0.08774045528843999, d=*
+n:-0.48259536596015096, -0.5689423708245158, 0.15982480067759752, 0.7935223132371902, -0.18653331650421023, 0.10415654024109244, d=@:p=0.829
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6980766113847494, -0.9333907472901046, 0.9179654428735375, 0.4844759553670883, -0.38602789491415024, -0.7604573033750057, -3.081
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.162
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 0.604
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, -1.595
+
+1579.0	//H
+3
+j:-0.023887430783361197, -0.28877452993765473, 0.8808639030903578, -0.7503338782116771, 0.4441613215021789, -0.9390940684825182, stam=0.226
+j:
+j:
+n:0.5960936606861651, -0.6287281136028469, 0.788, 0.7706753285601735, 0.359758909791708, -0.08774045528843999, d=*
+n:0.644235469866544, -0.6203041723929346, 0.261, -0.4043163564056158, -0.19773531705141068, -0.7586860070005059, d=G
+n:-0.48259536596015096, -0.5689423708245158, 0.15982480067759752, 0.7935223132371902, -0.18653331650421023, 0.10415654024109244, d=@:p=0.829
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6980766113847494, -0.9333907472901046, 0.9179654428735375, 0.4844759553670883, -0.38602789491415024, -0.7604573033750057, -3.081
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, -1.595
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.162
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 0.604
+
+670.0	//H
+3
+j:
+j:
+n:0.644235469866544, -0.6203041723929346, 0.022637964691966772, -0.4043163564056158, -0.19773531705141068, -0.7586860070005059, d=G
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, -1.556
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, -2.881
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+
+679.0	//H
+3
+j:stif=0.94
+j:
+j:0.5583839416503906, 0.850326859857887, 0.43035749765112996, -0.08028824254870415, -0.9107754053547978, 0.5995917664840817, as=0.051
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.162
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+
+1598.0	//H
+3
+j:
+j:-0.023887430783361197, -0.28877452993765473, 0.8808639030903578, -0.7503338782116771, 0.4441613215021789, -0.9390940684825182, stam=0.226
+j:
+j:
+n:0.5960936606861651, -0.6287281136028469, 0.788, 0.7706753285601735, 0.359758909791708, -0.08774045528843999, d=*
+n:0.644235469866544, -0.6203041723929346, 0.022637964691966772, -0.4043163564056158, -0.19773531705141068, -0.7586860070005059, d=G
+n:-0.48259536596015096, -0.5689423708245158, 0.15982480067759752, 0.7935223132371902, -0.18653331650421023, 0.10415654024109244, d=@:p=0.829
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.162
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6980766113847494, -0.9333907472901046, 0.9179654428735375, 0.4844759553670883, -0.38602789491415024, -0.7604573033750057, -0.583
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.162
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 0.604
+
+695.0	//H
+3
+j:
+j:stif=0.94
+j:-0.023887430783361197, -0.28877452993765473, 0.8808639030903578, -0.7503338782116771, 0.4441613215021789, -0.9390940684825182, stam=0.226
+j:
+j:
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.162
+
+656.0	//H
+3
+j:
+j:
+n:0.644235469866544, -0.6203041723929346, 0.022637964691966772, -0.4043163564056158, -0.19773531705141068, -0.7586860070005059, d=G
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.36, -1.556
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, -2.881
+c:0.6846841583028436, 0.2943482771515846, 0.6827722443267703, -0.7364042759872973, 0.43265439569950104, -0.4211878180503845, 1.28
+
+
Index: cpp/tests/evol_test-fL.goal
===================================================================
--- cpp/tests/evol_test-fL.goal	(revision 1009)
+++ cpp/tests/evol_test-fL.goal	(revision 1009)
@@ -0,0 +1,47 @@
+Evaluation 0	34,37.6,38	2,2,2	1,1,1	0,0,0	0,0,0	31,34.6,35
+Evaluation 10	29,40.4,56	2,2,2	1,1,1	0,0,0	0,0,0	26,37.4,53
+Evaluation 20	29,53,98	2,2.2,3	1,1.2,2	0,0.5,2	0,0.2,1	26,48.9,90
+Evaluation 30	29,80,119	2,2.3,3	1,1.3,2	0,1.2,2	0,0.6,1	26,74.6,111
+Evaluation 40	29,84.7,147	2,2.4,4	1,1.4,3	0,1.2,2	0,0.6,1	26,79.1,137
+Evaluation 50	34,126.8,162	2,3.5,4	1,2.5,3	0,2,3	0,0.5,1	31,118.3,151
+Evaluation 60	124,148.5,162	4,4,4	3,3,3	2,2.6,3	0,0.6,1	115,138.3,151
+Evaluation 70	133,158,178	4,4.2,5	3,3.2,4	2,2.9,4	0,0.8,1	124,146.9,167
+Evaluation 80	136,159.7,173	4,4.4,5	3,3.4,4	2,2.8,3	1,1,1	126,148.1,162
+Evaluation 90	136,163.1,189	4,4.6,5	3,3.6,4	2,2.8,3	1,1,1	126,151.1,178
+Evaluation 99	136,168.3,189	4,4.8,5	3,3.8,4	2,2.9,3	1,1,1	126,155.8,178
+167.0	//L
+w:w0
+i:axiom=N(d=Gpart:rz=-0.665)N(d=@:p=0.993)N(d=@:p=0.975)S()S(fr=0.8289400283247232)S()C(-0.7881847871467471)S(stam=0.5370225172955543), maxwords=300
+
+162.0	//L
+i:axiom=N(d=Gpart:rz=-0.665)N(d=@:p=0.948)N(d=@:p=0.975)S()S(fr=0.8289400283247232)S()C(-0.7881847871467471)S(stam=0.5370225172955543), maxwords=300
+
+167.0	//L
+i:axiom=N(d=Gpart:rz=-0.665)N(d=@:p=0.948)N(d=@:p=0.975)S()S(fr=0.8289400283247232)S()C(-0.7881847871467471)S(stam=0.5370225172955543), 0.0, maxwords=300
+
+136.0	//L
+i:axiom=N(d=@:p=0.993)N(d=@:p=0.975)S(fr=0.8289400283247232)S()C(-0.7881847871467471)S(stam=0.5370225172955543), maxwords=300
+
+189.0	//L
+i:axiom="N(d=Gpart:rz=-0.665)N(d=@:p=0.948)N(d=@:p=0.975)S()S(fr=0.8289400283247232, stam=0.4012594970408827)S()C(-0.7881847871467471)S(stam=0.5370225172955543)", maxwords=300
+
+167.0	//L
+w:w0
+i:axiom=N(d=Gpart:rz=-0.665)N(d=@:p=0.993)N(d=@:p=0.975)S()S(fr=0.8289400283247232)S()C(-0.7881847871467471)S(stam=0.5370225172955543), maxwords=300
+
+172.0	//L
+w:w0
+i:axiom=N(d=Gpart:rz=-0.665)N(d=@:p=0.993)N(d=@:p=0.975)S()S(fr=0.8289400283247232)S()C(-0.7881847871467471)S(stam=0.5370225172955543), 0.0, maxwords=300
+
+167.0	//L
+w:w0
+i:axiom=N(d=Gpart:rz=-0.665)N(d=@:p=0.991)N(d=@:p=0.975)S()S(fr=0.8289400283247232)S()C(-0.7881847871467471)S(stam=0.5370225172955543), maxwords=300
+
+189.0	//L
+w:w0
+i:axiom=N(d=Gpart:rz=-0.665)N(d=@:p=0.993)N(d=@:p=0.975)S()S(fr=0.8289400283247232)C(-0.8130810903385282)C(-0.7881847871467471)S(stam=0.5370225172955543), 0.0, maxwords=300
+
+167.0	//L
+i:axiom=N(d=Gpart:rz=-0.665)N(d=@:p=0.948)N(d=@:p=0.975)S()S(fr=0.8289400283247232)S()C(-0.7881847871467471)S(stam=0.5370225172955543), 0.0, maxwords=300
+
+
Index: cpp/tests/evol_test-fS.goal
===================================================================
--- cpp/tests/evol_test-fS.goal	(revision 1009)
+++ cpp/tests/evol_test-fS.goal	(revision 1009)
@@ -0,0 +1,66 @@
+Evaluation 0	31,36.4,37	1,1,1	0,0,0	0,0,0	0,0,0	30,35.4,36
+Evaluation 10	31,34,39	1,1,1	0,0,0	0,0,0	0,0,0	30,33,38
+Evaluation 20	23,34,39	1,1,1	0,0,0	0,0,0	0,0,0	22,33,38
+Evaluation 30	23,40.7,50	1,1,1	0,0,0	0,0,0	0,0,0	22,39.7,49
+Evaluation 40	39,74.6,148	1,1.3,2	0,0.3,1	0,0.4,1	0,0,0	38,72.6,144
+Evaluation 50	39,69.8,148	1,1.3,2	0,0.3,1	0,0.3,1	0,0,0	38,67.9,144
+Evaluation 60	39,75.9,148	1,1.4,2	0,0.4,1	0,0.4,1	0,0,0	38,73.7,144
+Evaluation 70	39,108.9,216	1,1.7,3	0,0.7,2	0,0.7,1	0,0,0	38,105.8,210
+[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+Evaluation 80	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+39,137.8,221	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+1,2,3	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+0,1,2	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+0,1,2	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+0,0,0	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+38,133.8,215
+[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+Evaluation 90	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+39,137.3,159	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+1,1.9,2	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+0,0.9,1	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+0,1.1,2	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+0,0,0	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+38,133.4,154
+[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+Evaluation 99	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+39,134.9,159	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+1,1.9,2	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+0,0.9,1	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+0,0.9,2	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+0,0,0	[WARN] Model.internalCheck: stif too big in Joint #0 (adjusted)
+[WARN] Model.internalCheck: rotstif too big in Joint #0 (adjusted)
+38,131.2,154
+140.0	/*S*/1.1:R[Gpart]{i=0.014;rz=-1.102;y=0.806;z=0.806}bC{rx=0.6168;ry=1.4967;rz=-0.3841;tx=-0.0382;ty=-0.5913;tz=1.197;x=0.971;y=0.433;z=0.829}
+39.0	/*S*/1.1:C{i=0.014;x=0.806;y=0.806;z=0.441}
+150.0	/*S*/1.1:R[Gpart:ry=-0.382]{i=0.014;rz=-1.102;y=0.806;z=0.806}FC{rx=0.6168;ry=1.4967;rz=-0.3841;tx=-0.0382;ty=-0.5913;tz=1.197;x=0.971;y=0.433;z=0.829}
+140.0	/*S*/1.1:R[Gpart:ry=0.214]{i=0.014;y=0.806;z=0.806}FTC{rx=0.6168;ry=1.4967;rz=-0.3841;tx=-0.0382;ty=-0.5913;tz=1.197;x=0.971;y=0.433;z=0.829}
+132.0	/*S*/1.1:R{i=0.014;rz=-1.102;y=0.806;z=0.806}FC{rx=0.6168;ry=1.4967;rz=-0.3841;tx=-0.0382;ty=-0.5913;tz=1.197;x=0.971;y=0.433;z=0.829}
+150.0	/*S*/1.1:R[Gpart:ry=-0.382]{i=0.014;rz=-1.102;y=0.806;z=0.806}FC{rx=0.6168;ry=1.4967;rz=-0.3841;tx=-0.0382;ty=-0.5913;tz=1.197;x=0.971;y=0.433;z=0.829}
+159.0	/*S*/1.1:R[Gpart:ry=-0.382]{i=0.014;rz=-1.102;y=0.806;z=0.806}bFC[Gpart]{rx=0.6168;ry=1.4967;rz=-0.3841;tx=-0.0382;ty=-0.5913;tz=1.197;x=0.971;y=0.433;z=0.829}
+139.0	/*S*/1.1:R[Gpart]{i=0.014;rz=-1.102;y=0.806;z=0.806}C{rx=0.6168;ry=1.4967;rz=-0.3841;tx=-0.0382;ty=-0.5913;tz=1.197;x=0.971;y=0.433;z=0.829}
+150.0	/*S*/1.1:R[Gpart:ry=-0.382]{i=0.014;rz=-1.102;y=0.806;z=0.806}FC{rx=0.6168;ry=1.4967;rz=-0.3841;tx=-0.0382;ty=-0.5913;tz=1.197;x=0.971;y=0.433;z=0.829}
+150.0	/*S*/1.1:R[Gpart:ry=-0.382]{i=0.014;rz=-1.102;y=0.806;z=0.806}FC{rx=0.6168;ry=1.4967;rz=-0.3841;tx=-0.0382;ty=-0.5913;tz=1.197;x=0.971;y=0.433;z=0.829}
+
Index: cpp/tests/f0_variants_test-complex.goal
===================================================================
--- cpp/tests/f0_variants_test-complex.goal	(revision 1009)
+++ cpp/tests/f0_variants_test-complex.goal	(revision 1009)
@@ -0,0 +1,31 @@
+
+Source genotype: 'FIX[@,p:0.6543,1:-1.23456]X[G]'
+                  ( format 1 )
+
+This example shows how to save a f0 genotype using low-level ParamInterface::saveSingleLine() calls
+
+
+==== With defdata (skips default values) ======
+m:
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, vg=0.5, vb=0.5
+p:x=1.0, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, vg=0.5, vb=0.5
+p:x=2.0, fr=0.976, ing=0.475, as=0.175, vr=0.5, vg=0.5, vb=0.5
+j:p1=0, p2=1, dx=1.0, dy=0.0, dz=0.0, stam=0.15625, vr=0.5, vg=0.5, vb=0.5
+j:p1=1, p2=2, dx=1.0, dy=0.0, dz=0.0, stam=0.175, vr=0.5, vg=0.5, vb=0.5
+n:j=0, d=@:p=0.6543
+n:j=1, d=G
+c:n1=0, n2=1, w=-1.23456
+
+
+==== Without defdata (saves all fields) ======
+m:se=1.0, Vstyle=
+p:x=0.0, y=0.0, z=0.0, sh=0, s=1.0, sx=1.0, sy=1.0, sz=1.0, h=0.0, dn=1.0, fr=1.12, ing=0.53125, as=0.15625, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=0.5, vg=0.5, vb=0.5
+p:x=1.0, y=0.0, z=0.0, sh=0, s=1.0, sx=1.0, sy=1.0, sz=1.0, h=0.0, dn=1.0, fr=1.12, ing=0.53125, as=0.15625, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=0.5, vg=0.5, vb=0.5
+p:x=2.0, y=0.0, z=0.0, sh=0, s=1.0, sx=1.0, sy=1.0, sz=1.0, h=0.0, dn=1.0, fr=0.976, ing=0.475, as=0.175, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=0.5, vg=0.5, vb=0.5
+j:p1=0, p2=1, rx=0.0, ry=0.0, rz=0.0, dx=1.0, dy=0.0, dz=0.0, sh=0, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=1.0, rotstif=1.0, stam=0.15625, i=, Vstyle=joint, vr=0.5, vg=0.5, vb=0.5
+j:p1=1, p2=2, rx=0.0, ry=0.0, rz=0.0, dx=1.0, dy=0.0, dz=0.0, sh=0, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=1.0, rotstif=1.0, stam=0.175, i=, Vstyle=joint, vr=0.5, vg=0.5, vb=0.5
+n:p=-1, j=0, d=@:p=0.6543, i=, Vstyle=neuro
+n:p=-1, j=1, d=G, i=, Vstyle=neuro
+c:n1=0, n2=1, w=-1.23456, i=
+
+
Index: cpp/tests/f0_variants_test-default.goal
===================================================================
--- cpp/tests/f0_variants_test-default.goal	(revision 1009)
+++ cpp/tests/f0_variants_test-default.goal	(revision 1009)
@@ -0,0 +1,31 @@
+
+Source genotype: 'X[|G:1.23]'
+                  ( format 1 )
+
+This example shows how to save a f0 genotype using low-level ParamInterface::saveSingleLine() calls
+
+
+==== With defdata (skips default values) ======
+m:
+p:vr=0.5, vg=0.5, vb=0.5
+p:x=1.0, vr=0.5, vg=0.5, vb=0.5
+j:p1=0, p2=1, dx=1.0, dy=0.0, dz=0.0, vr=0.5, vg=0.5, vb=0.5
+n:p=1
+n:j=0, d="|:p=0.25,r=1"
+n:j=0, d=G
+c:n1=0, n2=2, w=1.23
+c:n1=1, n2=0
+
+
+==== Without defdata (saves all fields) ======
+m:se=1.0, Vstyle=
+p:x=0.0, y=0.0, z=0.0, sh=0, s=1.0, sx=1.0, sy=1.0, sz=1.0, h=0.0, dn=1.0, fr=0.4, ing=0.25, as=0.25, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=0.5, vg=0.5, vb=0.5
+p:x=1.0, y=0.0, z=0.0, sh=0, s=1.0, sx=1.0, sy=1.0, sz=1.0, h=0.0, dn=1.0, fr=0.4, ing=0.25, as=0.25, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=0.5, vg=0.5, vb=0.5
+j:p1=0, p2=1, rx=0.0, ry=0.0, rz=0.0, dx=1.0, dy=0.0, dz=0.0, sh=0, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=1.0, rotstif=1.0, stam=0.25, i=, Vstyle=joint, vr=0.5, vg=0.5, vb=0.5
+n:p=1, j=-1, d=N, i=, Vstyle=neuro
+n:p=-1, j=0, d="|:p=0.25,r=1", i=, Vstyle=neuro
+n:p=-1, j=0, d=G, i=, Vstyle=neuro
+c:n1=0, n2=2, w=1.23, i=
+c:n1=1, n2=0, w=1.0, i=
+
+
Index: cpp/tests/f0_variants_test-fS.goal
===================================================================
--- cpp/tests/f0_variants_test-fS.goal	(revision 1009)
+++ cpp/tests/f0_variants_test-fS.goal	(revision 1009)
@@ -0,0 +1,85 @@
+
+Source genotype: '1.1:ssC[S;S;S]{ry=-0.214;ty=0.781}fSC[S;S;*;M'4:-5.154;M'0]fE[M;Gpart]{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;z=1}ttC[*;*;Gpart]{st=0.262}fTE{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;y=1;z=1}ftC[*;*;N'0'2'3'9'12'14]{ry=-0.199;y=0.828;z=0.806}'
+                  ( format S )
+
+This example shows how to save a f0 genotype using low-level ParamInterface::saveSingleLine() calls
+
+
+==== With defdata (skips default values) ======
+m:
+p:sh=2, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, ry=-0.214
+p:x=1.84400826446281, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.36363636363636365
+p:x=3.4488812833580815, y=-0.26888325253375556, z=1.3310278019498911, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942, rx=0.603, ry=-0.9391, rz=0.3034
+p:x=5.053754302253353, y=-0.5377665050675111, z=2.6620556038997822, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942
+p:x=5.552059067218389, y=-1.6581236294201593, z=4.369698100138417, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3005259203606311, rx=0.603, ry=-0.9391, rz=0.3034
+p:x=5.983025350431394, y=-2.6270811423738007, z=5.846578096885344, sh=2, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, fr=0.27320538214602824, ry=-0.199
+j:p1=0, p2=1, sh=1
+j:p1=1, p2=2, sh=1
+j:p1=2, p2=3, sh=1, stif=0.2165289256198347, rotstif=0.2165289256198347
+j:p1=3, p2=4, sh=1, stif=0.9090909090909091, rotstif=0.9090909090909091
+j:p1=4, p2=5, sh=1, stif=0.8264462809917354, rotstif=0.8264462809917354
+n:p=0, d=S
+n:p=0, d=S
+n:p=0, d=S
+n:p=1, d=S
+n:p=1, d=S
+n:p=1, d=*
+n:j=0, d=M
+n:j=0, d=M
+n:j=1, d=M
+n:p=2, d=Gpart
+n:p=3, d=*
+n:p=3, d=*
+n:p=3, d=Gpart
+n:p=5, d=*
+n:p=5, d=*
+n:p=5
+c:n1=6, n2=4, w=-5.154
+c:n1=7, n2=0
+c:n1=15, n2=0
+c:n1=15, n2=2
+c:n1=15, n2=3
+c:n1=15, n2=9
+c:n1=15, n2=12
+c:n1=15, n2=14
+
+
+==== Without defdata (saves all fields) ======
+m:se=1.0, Vstyle=
+p:x=0.0, y=0.0, z=0.0, sh=2, s=1.0, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, h=0.0, dn=1.0, fr=0.4, ing=0.25, as=0.25, rx=0.0, ry=-0.214, rz=0.0, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+p:x=1.84400826446281, y=0.0, z=0.0, sh=2, s=1.0, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, h=0.0, dn=1.0, fr=0.36363636363636365, ing=0.25, as=0.25, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+p:x=3.4488812833580815, y=-0.26888325253375556, z=1.3310278019498911, sh=1, s=1.0, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, h=0.0, dn=1.0, fr=0.3305785123966942, ing=0.25, as=0.25, rx=0.603, ry=-0.9391, rz=0.3034, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+p:x=5.053754302253353, y=-0.5377665050675111, z=2.6620556038997822, sh=2, s=1.0, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, h=0.0, dn=1.0, fr=0.3305785123966942, ing=0.25, as=0.25, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+p:x=5.552059067218389, y=-1.6581236294201593, z=4.369698100138417, sh=1, s=1.0, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, h=0.0, dn=1.0, fr=0.3005259203606311, ing=0.25, as=0.25, rx=0.603, ry=-0.9391, rz=0.3034, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+p:x=5.983025350431394, y=-2.6270811423738007, z=5.846578096885344, sh=2, s=1.0, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, h=0.0, dn=1.0, fr=0.27320538214602824, ing=0.25, as=0.25, rx=0.0, ry=-0.199, rz=0.0, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+j:p1=0, p2=1, sh=1, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=1.0, rotstif=1.0, stam=0.25, i=, Vstyle=joint, vr=1.0, vg=1.0, vb=1.0
+j:p1=1, p2=2, sh=1, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=1.0, rotstif=1.0, stam=0.25, i=, Vstyle=joint, vr=1.0, vg=1.0, vb=1.0
+j:p1=2, p2=3, sh=1, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=0.2165289256198347, rotstif=0.2165289256198347, stam=0.25, i=, Vstyle=joint, vr=1.0, vg=1.0, vb=1.0
+j:p1=3, p2=4, sh=1, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=0.9090909090909091, rotstif=0.9090909090909091, stam=0.25, i=, Vstyle=joint, vr=1.0, vg=1.0, vb=1.0
+j:p1=4, p2=5, sh=1, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=0.8264462809917354, rotstif=0.8264462809917354, stam=0.25, i=, Vstyle=joint, vr=1.0, vg=1.0, vb=1.0
+n:p=0, j=-1, d=S, i=, Vstyle=neuro
+n:p=0, j=-1, d=S, i=, Vstyle=neuro
+n:p=0, j=-1, d=S, i=, Vstyle=neuro
+n:p=1, j=-1, d=S, i=, Vstyle=neuro
+n:p=1, j=-1, d=S, i=, Vstyle=neuro
+n:p=1, j=-1, d=*, i=, Vstyle=neuro
+n:p=-1, j=0, d=M, i=, Vstyle=neuro
+n:p=-1, j=0, d=M, i=, Vstyle=neuro
+n:p=-1, j=1, d=M, i=, Vstyle=neuro
+n:p=2, j=-1, d=Gpart, i=, Vstyle=neuro
+n:p=3, j=-1, d=*, i=, Vstyle=neuro
+n:p=3, j=-1, d=*, i=, Vstyle=neuro
+n:p=3, j=-1, d=Gpart, i=, Vstyle=neuro
+n:p=5, j=-1, d=*, i=, Vstyle=neuro
+n:p=5, j=-1, d=*, i=, Vstyle=neuro
+n:p=5, j=-1, d=N, i=, Vstyle=neuro
+c:n1=6, n2=4, w=-5.154, i=
+c:n1=7, n2=0, w=1.0, i=
+c:n1=15, n2=0, w=1.0, i=
+c:n1=15, n2=2, w=1.0, i=
+c:n1=15, n2=3, w=1.0, i=
+c:n1=15, n2=9, w=1.0, i=
+c:n1=15, n2=12, w=1.0, i=
+c:n1=15, n2=14, w=1.0, i=
+
+
Index: cpp/tests/full_props-complex.goal
===================================================================
--- cpp/tests/full_props-complex.goal	(revision 1009)
+++ cpp/tests/full_props-complex.goal	(revision 1009)
@@ -0,0 +1,12 @@
+//0
+m:se=1.0, Vstyle=
+p:x=0.0, y=0.0, z=0.0, sh=0, s=1.0, sx=1.0, sy=1.0, sz=1.0, h=0.0, dn=1.0, fr=1.12, ing=0.53125, as=0.15625, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=0.5, vg=0.5, vb=0.5
+p:x=1.0, y=0.0, z=0.0, sh=0, s=1.0, sx=1.0, sy=1.0, sz=1.0, h=0.0, dn=1.0, fr=1.12, ing=0.53125, as=0.15625, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=0.5, vg=0.5, vb=0.5
+p:x=2.0, y=0.0, z=0.0, sh=0, s=1.0, sx=1.0, sy=1.0, sz=1.0, h=0.0, dn=1.0, fr=0.976, ing=0.475, as=0.175, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=0.5, vg=0.5, vb=0.5
+j:p1=0, p2=1, rx=0.0, ry=0.0, rz=0.0, dx=1.0, dy=0.0, dz=0.0, sh=0, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=1.0, rotstif=1.0, stam=0.15625, i=, Vstyle=joint, vr=0.5, vg=0.5, vb=0.5
+j:p1=1, p2=2, rx=0.0, ry=0.0, rz=0.0, dx=1.0, dy=0.0, dz=0.0, sh=0, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=1.0, rotstif=1.0, stam=0.175, i=, Vstyle=joint, vr=0.5, vg=0.5, vb=0.5
+n:p=-1, j=0, d=@:p=0.6543, i=, Vstyle=neuro
+n:p=-1, j=1, d=G, i=, Vstyle=neuro
+c:n1=0, n2=1, w=-1.23456, i=
+
+
Index: cpp/tests/full_props-fS.goal
===================================================================
--- cpp/tests/full_props-fS.goal	(revision 1009)
+++ cpp/tests/full_props-fS.goal	(revision 1009)
@@ -0,0 +1,39 @@
+//0s
+m:se=1.0, Vstyle=
+p:x=0.0, y=0.0, z=0.0, sh=2, s=1.0, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, h=0.0, dn=1.0, fr=0.4, ing=0.25, as=0.25, rx=0.0, ry=-0.214, rz=0.0, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+p:x=1.84400826446281, y=0.0, z=0.0, sh=2, s=1.0, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, h=0.0, dn=1.0, fr=0.36363636363636365, ing=0.25, as=0.25, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+p:x=3.4488812833580815, y=-0.26888325253375556, z=1.3310278019498911, sh=1, s=1.0, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, h=0.0, dn=1.0, fr=0.3305785123966942, ing=0.25, as=0.25, rx=0.603, ry=-0.9391, rz=0.3034, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+p:x=5.053754302253353, y=-0.5377665050675111, z=2.6620556038997822, sh=2, s=1.0, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, h=0.0, dn=1.0, fr=0.3305785123966942, ing=0.25, as=0.25, rx=0.0, ry=0.0, rz=0.0, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+p:x=5.552059067218389, y=-1.6581236294201593, z=4.369698100138417, sh=1, s=1.0, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, h=0.0, dn=1.0, fr=0.3005259203606311, ing=0.25, as=0.25, rx=0.603, ry=-0.9391, rz=0.3034, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+p:x=5.983025350431394, y=-2.6270811423738007, z=5.846578096885344, sh=2, s=1.0, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, h=0.0, dn=1.0, fr=0.27320538214602824, ing=0.25, as=0.25, rx=0.0, ry=-0.199, rz=0.0, i=, Vstyle=part, vs=0.2, vr=1.0, vg=1.0, vb=1.0
+j:p1=0, p2=1, sh=1, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=1.0, rotstif=1.0, stam=0.25, i=, Vstyle=joint, vr=1.0, vg=1.0, vb=1.0
+j:p1=1, p2=2, sh=1, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=1.0, rotstif=1.0, stam=0.25, i=, Vstyle=joint, vr=1.0, vg=1.0, vb=1.0
+j:p1=2, p2=3, sh=1, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=0.2165289256198347, rotstif=0.2165289256198347, stam=0.25, i=, Vstyle=joint, vr=1.0, vg=1.0, vb=1.0
+j:p1=3, p2=4, sh=1, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=0.9090909090909091, rotstif=0.9090909090909091, stam=0.25, i=, Vstyle=joint, vr=1.0, vg=1.0, vb=1.0
+j:p1=4, p2=5, sh=1, hx=0.0, hy=0.0, hz=0.0, hrx=0.0, hry=0.0, hrz=0.0, hxn=-1.5708, hxp=1.5708, hyn=-1.5708, hyp=1.5708, stif=0.8264462809917354, rotstif=0.8264462809917354, stam=0.25, i=, Vstyle=joint, vr=1.0, vg=1.0, vb=1.0
+n:p=0, j=-1, d=S, i=, Vstyle=neuro
+n:p=0, j=-1, d=S, i=, Vstyle=neuro
+n:p=0, j=-1, d=S, i=, Vstyle=neuro
+n:p=1, j=-1, d=S, i=, Vstyle=neuro
+n:p=1, j=-1, d=S, i=, Vstyle=neuro
+n:p=1, j=-1, d=*, i=, Vstyle=neuro
+n:p=-1, j=0, d="M:p=1.0, a=0", i=, Vstyle=neuro
+n:p=-1, j=0, d="M:p=1.0, a=0", i=, Vstyle=neuro
+n:p=-1, j=1, d="M:p=1.0, a=0", i=, Vstyle=neuro
+n:p=2, j=-1, d="Gpart:ry=0.0, rz=0.0", i=, Vstyle=neuro
+n:p=3, j=-1, d=*, i=, Vstyle=neuro
+n:p=3, j=-1, d=*, i=, Vstyle=neuro
+n:p=3, j=-1, d="Gpart:ry=0.0, rz=0.0", i=, Vstyle=neuro
+n:p=5, j=-1, d=*, i=, Vstyle=neuro
+n:p=5, j=-1, d=*, i=, Vstyle=neuro
+n:p=5, j=-1, d="N:in=0.8, fo=0.04, si=2.0, s=0.0", i=, Vstyle=neuro
+c:n1=6, n2=4, w=-5.154, i=
+c:n1=7, n2=0, w=1.0, i=
+c:n1=15, n2=0, w=1.0, i=
+c:n1=15, n2=2, w=1.0, i=
+c:n1=15, n2=3, w=1.0, i=
+c:n1=15, n2=9, w=1.0, i=
+c:n1=15, n2=12, w=1.0, i=
+c:n1=15, n2=14, w=1.0, i=
+
+
Index: cpp/tests/genoconv_test-complex.goal
===================================================================
--- cpp/tests/genoconv_test-complex.goal	(revision 1009)
+++ cpp/tests/genoconv_test-complex.goal	(revision 1009)
@@ -0,0 +1,101 @@
+*** Source genotype:
+Genotype:
+FIX[@,p:0.6543,1:-1.23456]X[G]
+Format: 1
+Valid: yes
+Comment: 
+*** Converted:
+Genotype:
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:2.0, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+n:j=0, d=@:p=0.6543
+n:j=1, d=G
+c:0, 1, -1.23456
+
+Format: 0
+Valid: yes
+Comment: 
+Conversion map:
+{ [0-1] -> [0-52]
+  [2] -> [53-110,166-222]
+  [3-25] -> [278-297,309-325]
+  [26] -> [111-165,223-277]
+  [27-29] -> [298-308]
+}
+                  p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5 p:1.0, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5 p:2.0, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5 j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5 j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5 n:j=0, d=@:p=0.6543 n:j=1, d=G c:0, 1, -1.23456 
+             FI : p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5 .................................................................................................................................................................................................................................................................................
+              X : .....................................................p:1.0, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5 .......................................................j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5 .......................................................................................................
+[@,p:0.6543,1:- : ......................................................................................................................................................................................................................................................................................n:j=0, d=@:p=0.6543 ...........c:0, 1, -1.23456 
+       1.23456] : ......................................................................................................................................................................................................................................................................................n:j=0, d=@:p=0.6543 ...........c:0, 1, -1.23456 
+              X : ...............................................................................................................p:2.0, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5 .........................................................j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5 ................................................
+            [G] : ..........................................................................................................................................................................................................................................................................................................n:j=1, d=G .................
+Reverse conversion map:
+{ [0-52] -> [0-1]
+  [53-110] -> [2]
+  [111-165] -> [26]
+  [166-222] -> [2]
+  [223-277] -> [26]
+  [278-297] -> [3-25]
+  [298-308] -> [27-29]
+  [309-325] -> [3-25]
+}
+                                                FIX[@,p:0.6543,1:-1.23456]X[G]
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0 : FI............................
+                                     .5, 0.5  : FI............................
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vr=0 : ..X...........................
+                                .5, 0.5, 0.5  : ..X...........................
+p:2.0, fr=0.976, ing=0.475, as=0.175, vr=0.5, : ..........................X...
+                                    0.5, 0.5  : ..........................X...
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0. : ..X...........................
+                                 5, 0.5, 0.5  : ..X...........................
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, : ..........................X...
+                                    0.5, 0.5  : ..........................X...
+                         n:j=0, d=@:p=0.6543  : ...[@,p:0.6543,1:-1.23456]....
+                                  n:j=1, d=G  : ...........................[G]
+                            c:0, 1, -1.23456  : ...[@,p:0.6543,1:-1.23456]....
+
+Model map for f1 genotype:
+                  Parts     Joints    Neurons
+                  012345678901234567890123456789
+             FI : 0.............................
+              X : .1........0...................
+[@,p:0.6543,1:- : ....................0.........
+       1.23456] : ....................0.........
+              X : ..2........1..................
+            [G] : .....................1........
+{ [0-1] -> [0]
+  [2] -> [1,10]
+  [3-25] -> [20]
+  [26] -> [2,11]
+  [27-29] -> [21]
+}
+
+Model map for f0 genotype:
+                                                Parts     Joints    Neurons
+                                                012345678901234567890123456789
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0 : 0.............................
+                                     .5, 0.5  : 0.............................
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vr=0 : .1............................
+                                .5, 0.5, 0.5  : .1............................
+p:2.0, fr=0.976, ing=0.475, as=0.175, vr=0.5, : ..2...........................
+                                    0.5, 0.5  : ..2...........................
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0. : ..........0...................
+                                 5, 0.5, 0.5  : ..........0...................
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, : ...........1..................
+                                    0.5, 0.5  : ...........1..................
+                         n:j=0, d=@:p=0.6543  : ....................0.........
+                                  n:j=1, d=G  : .....................1........
+                            c:0, 1, -1.23456  : ....................0.........
+{ [0-52] -> [0]
+  [53-110] -> [1]
+  [111-165] -> [2]
+  [166-222] -> [10]
+  [223-277] -> [11]
+  [278-297] -> [20]
+  [298-308] -> [21]
+  [309-325] -> [20]
+}
+
Index: cpp/tests/genoconv_test-default.goal
===================================================================
--- cpp/tests/genoconv_test-default.goal	(revision 1009)
+++ cpp/tests/genoconv_test-default.goal	(revision 1009)
@@ -0,0 +1,45 @@
+*** Source genotype:
+Genotype:
+X
+Format: 1
+Valid: yes
+Comment: 
+*** Converted:
+Genotype:
+p:vr=0.5, 0.5, 0.5
+p:1.0, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5
+
+Format: 0
+Valid: yes
+Comment: 
+Conversion map:
+{ [0] -> [0-85]
+}
+                  p:vr=0.5, 0.5, 0.5 p:1.0, vr=0.5, 0.5, 0.5 j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 
+              X : p:vr=0.5, 0.5, 0.5 p:1.0, vr=0.5, 0.5, 0.5 j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 
+Reverse conversion map:
+{ [0-85] -> [0]
+}
+                                                X
+p:vr=0.5, 0.5, 0.5 p:1.0, vr=0.5, 0.5, 0.5 j: : X
+    0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5  : X
+
+Model map for f1 genotype:
+                  Parts     Joints    Neurons
+                  012345678901234567890123456789
+              X : 01........0...................
+{ [0] -> [0-1,10]
+}
+
+Model map for f0 genotype:
+                                                Parts     Joints    Neurons
+                                                012345678901234567890123456789
+                          p:vr=0.5, 0.5, 0.5  : 0.............................
+                     p:1.0, vr=0.5, 0.5, 0.5  : .1............................
+  j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5  : ..........0...................
+{ [0-18] -> [0]
+  [19-42] -> [1]
+  [43-85] -> [10]
+}
+
Index: cpp/tests/genoconv_test-simplemultiply.goal
===================================================================
--- cpp/tests/genoconv_test-simplemultiply.goal	(revision 1009)
+++ cpp/tests/genoconv_test-simplemultiply.goal	(revision 1009)
@@ -0,0 +1,132 @@
+*** Source genotype:
+Genotype:
+2X2r3X2(X2)
+Format: multiply
+Valid: yes
+Comment: 
+*** Converted:
+Genotype:
+p:vr=0.5, 0.5, 0.5
+p:1.0, vr=0.5, 0.5, 0.5
+p:2.0, vr=0.5, 0.5, 0.5
+p:3.0, vr=0.5, 0.5, 0.5
+p:4.0, vr=0.5, 0.5, 0.5
+p:5.0, vr=0.5, 0.5, 0.5
+p:6.0, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5
+j:1, 2, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5
+j:2, 3, rx=-1.5706, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5
+j:3, 4, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5
+j:4, 5, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5
+j:5, 6, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5
+
+Format: 0
+Valid: yes
+Comment: 
+Conversion map:
+{ [1] -> [0-66,163-248]
+  [2] -> []
+  [3] -> [43-66]
+  [4] -> []
+  [5] -> [67-138,249-389]
+  [6] -> []
+  [7] -> [115-138]
+  [8] -> [139-162,390-432]
+  [9] -> []
+  [10] -> [115-138]
+}
+                  p:vr=0.5, 0.5, 0.5 p:1.0, vr=0.5, 0.5, 0.5 p:2.0, vr=0.5, 0.5, 0.5 p:3.0, vr=0.5, 0.5, 0.5 p:4.0, vr=0.5, 0.5, 0.5 p:5.0, vr=0.5, 0.5, 0.5 p:6.0, vr=0.5, 0.5, 0.5 j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 j:1, 2, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 j:2, 3, rx=-1.5706, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 j:3, 4, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 j:4, 5, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 j:5, 6, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 
+              2 : .................................................................................................................................................................................................................................................................................................................................................................................................................................................
+              X : p:vr=0.5, 0.5, 0.5 p:1.0, vr=0.5, 0.5, 0.5 p:2.0, vr=0.5, 0.5, 0.5 ................................................................................................j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 j:1, 2, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 ........................................................................................................................................................................................
+              2 : .................................................................................................................................................................................................................................................................................................................................................................................................................................................
+              r : ...........................................p:2.0, vr=0.5, 0.5, 0.5 ..............................................................................................................................................................................................................................................................................................................................................................................
+              3 : .................................................................................................................................................................................................................................................................................................................................................................................................................................................
+              X : ...................................................................p:3.0, vr=0.5, 0.5, 0.5 p:4.0, vr=0.5, 0.5, 0.5 p:5.0, vr=0.5, 0.5, 0.5 ..............................................................................................................j:2, 3, rx=-1.5706, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 j:3, 4, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 j:4, 5, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 ...........................................
+              2 : .................................................................................................................................................................................................................................................................................................................................................................................................................................................
+              ( : ...................................................................................................................p:5.0, vr=0.5, 0.5, 0.5 ......................................................................................................................................................................................................................................................................................................
+              X : ...........................................................................................................................................p:6.0, vr=0.5, 0.5, 0.5 ...................................................................................................................................................................................................................................j:5, 6, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 
+              2 : .................................................................................................................................................................................................................................................................................................................................................................................................................................................
+              ) : ...................................................................................................................p:5.0, vr=0.5, 0.5, 0.5 ......................................................................................................................................................................................................................................................................................................
+Reverse conversion map:
+{ [0-42] -> [1]
+  [43-66] -> [1,3]
+  [67-114] -> [5]
+  [115-138] -> [5,7,10]
+  [139-162] -> [8]
+  [163-248] -> [1]
+  [249-389] -> [5]
+  [390-432] -> [8]
+}
+                                                2X2r3X2(X2)
+  p:vr=0.5, 0.5, 0.5 p:1.0, vr=0.5, 0.5, 0.5  : .X.........
+                     p:2.0, vr=0.5, 0.5, 0.5  : .X.r.......
+p:3.0, vr=0.5, 0.5, 0.5 p:4.0, vr=0.5, 0.5, 0 : .....X.....
+                                          .5  : .....X.....
+                     p:5.0, vr=0.5, 0.5, 0.5  : .....X.(..)
+                     p:6.0, vr=0.5, 0.5, 0.5  : ........X..
+j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5 j: : .X.........
+    1, 2, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5  : .X.........
+j:2, 3, rx=-1.5706, dx=1.0, 0.0, 0.0, vr=0.5, : .....X.....
+ 0.5, 0.5 j:3, 4, dx=1.0, 0.0, 0.0, vr=0.5, 0 : .....X.....
+.5, 0.5 j:4, 5, dx=1.0, 0.0, 0.0, vr=0.5, 0.5 : .....X.....
+                                       , 0.5  : .....X.....
+  j:5, 6, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5  : ........X..
+
+Model map for fmultiply genotype:
+                  Parts     Joints    Neurons
+                  012345678901234567890123456789
+              2 : ..............................
+              X : 012.......01..................
+              2 : ..............................
+              r : ..2...........................
+              3 : ..............................
+              X : ...345......234...............
+              2 : ..............................
+              ( : .....5........................
+              X : ......6........5..............
+              2 : ..............................
+              ) : .....5........................
+{ [1] -> [0-2,10-11]
+  [2] -> []
+  [3] -> [2]
+  [4] -> []
+  [5] -> [3-5,12-14]
+  [6] -> []
+  [7] -> [5]
+  [8] -> [6,15]
+  [9] -> []
+  [10] -> [5]
+}
+
+Model map for f0 genotype:
+                                                Parts     Joints    Neurons
+                                                012345678901234567890123456789
+                          p:vr=0.5, 0.5, 0.5  : 0.............................
+                     p:1.0, vr=0.5, 0.5, 0.5  : .1............................
+                     p:2.0, vr=0.5, 0.5, 0.5  : ..2...........................
+                     p:3.0, vr=0.5, 0.5, 0.5  : ...3..........................
+                     p:4.0, vr=0.5, 0.5, 0.5  : ....4.........................
+                     p:5.0, vr=0.5, 0.5, 0.5  : .....5........................
+                     p:6.0, vr=0.5, 0.5, 0.5  : ......6.......................
+  j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5  : ..........0...................
+  j:1, 2, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5  : ...........1..................
+j:2, 3, rx=-1.5706, dx=1.0, 0.0, 0.0, vr=0.5, : ............2.................
+                                    0.5, 0.5  : ............2.................
+  j:3, 4, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5  : .............3................
+  j:4, 5, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5  : ..............4...............
+  j:5, 6, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5  : ...............5..............
+{ [0-18] -> [0]
+  [19-42] -> [1]
+  [43-66] -> [2]
+  [67-90] -> [3]
+  [91-114] -> [4]
+  [115-138] -> [5]
+  [139-162] -> [6]
+  [163-205] -> [10]
+  [206-248] -> [11]
+  [249-303] -> [12]
+  [304-346] -> [13]
+  [347-389] -> [14]
+  [390-432] -> [15]
+}
+
Index: cpp/tests/genoconv_test-simplesolids.goal
===================================================================
--- cpp/tests/genoconv_test-simplesolids.goal	(revision 1009)
+++ cpp/tests/genoconv_test-simplesolids.goal	(revision 1009)
@@ -0,0 +1,86 @@
+*** Source genotype:
+Genotype:
+ball,cube,cylinder,cube
+Format: shapes
+Valid: yes
+Comment: 
+*** Converted:
+Genotype:
+p:x=0,sh=1
+p:x=2,sh=2
+j:p1=0,p2=1,sh=1
+p:x=4,sh=3
+j:p1=1,p2=2,sh=1
+p:x=6,sh=2
+j:p1=2,p2=3,sh=1
+
+Format: 0s
+Valid: yes
+Comment: 
+Conversion map:
+{ [0-3] -> [0-10]
+  [4] -> []
+  [5-8] -> [11-38]
+  [9] -> []
+  [10-17] -> [39-66]
+  [18] -> []
+  [19-22] -> [67-94]
+}
+                  p:x=0,sh=1 p:x=2,sh=2 j:p1=0,p2=1,sh=1 p:x=4,sh=3 j:p1=1,p2=2,sh=1 p:x=6,sh=2 j:p1=2,p2=3,sh=1 
+           ball : p:x=0,sh=1 ....................................................................................
+              , : ...............................................................................................
+           cube : ...........p:x=2,sh=2 j:p1=0,p2=1,sh=1 ........................................................
+              , : ...............................................................................................
+       cylinder : .......................................p:x=4,sh=3 j:p1=1,p2=2,sh=1 ............................
+              , : ...............................................................................................
+           cube : ...................................................................p:x=6,sh=2 j:p1=2,p2=3,sh=1 
+Reverse conversion map:
+{ [0-10] -> [0-3]
+  [11-38] -> [5-8]
+  [39-66] -> [10-17]
+  [67-94] -> [19-22]
+}
+                                                ball,cube,cylinder,cube
+                                  p:x=0,sh=1  : ball...................
+                 p:x=2,sh=2 j:p1=0,p2=1,sh=1  : .....cube..............
+                 p:x=4,sh=3 j:p1=1,p2=2,sh=1  : ..........cylinder.....
+                 p:x=6,sh=2 j:p1=2,p2=3,sh=1  : ...................cube
+
+Model map for fshapes genotype:
+                  Parts     Joints    Neurons
+                  012345678901234567890123456789
+           ball : 0.............................
+              , : ..............................
+           cube : .1........0...................
+              , : ..............................
+       cylinder : ..2........1..................
+              , : ..............................
+           cube : ...3........2.................
+{ [0-3] -> [0]
+  [4] -> []
+  [5-8] -> [1,10]
+  [9] -> []
+  [10-17] -> [2,11]
+  [18] -> []
+  [19-22] -> [3,12]
+}
+
+Model map for f0s genotype:
+                                                Parts     Joints    Neurons
+                                                012345678901234567890123456789
+                                  p:x=0,sh=1  : 0.............................
+                                  p:x=2,sh=2  : .1............................
+                            j:p1=0,p2=1,sh=1  : ..........0...................
+                                  p:x=4,sh=3  : ..2...........................
+                            j:p1=1,p2=2,sh=1  : ...........1..................
+                                  p:x=6,sh=2  : ...3..........................
+                            j:p1=2,p2=3,sh=1  : ............2.................
+{ [0-10] -> [0]
+  [11-21] -> [1]
+  [22-38] -> [10]
+  [39-49] -> [2]
+  [50-66] -> [11]
+  [67-77] -> [3]
+  [78-94] -> [12]
+}
+
Index: cpp/tests/genomanipulation-complex.goal
===================================================================
--- cpp/tests/genomanipulation-complex.goal	(revision 1009)
+++ cpp/tests/genomanipulation-complex.goal	(revision 1009)
@@ -0,0 +1,330 @@
+    #############################################
+   ##                                           ##
+  ##    Welcome to Genotype Manipulation Demo!    ##
+   ##                                           ##
+    #############################################
+Found converter accepting f1: "Recursive encoding"
+Found 6 converter(s) producing f0
+
+Source genotype: 'FIX[@,p:0.6543,1:-1.23456]X[G]'
+                  ( format 1 )
+Converted to f0:
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:2.0, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+n:j=0, d=@:p=0.6543
+n:j=1, d=G
+c:0, 1, -1.23456
+
+Model contains: 3 part(s)
+                2 joint(s)
+                2 neuron(s)
+
+Investigating details...
+    #############################################
+   ##                                           ##
+  ##    P A R T    O B J E C T                   ##
+   ##                                           ##
+    #############################################
+            (part # 2)
+Here is the full listing of properties as they are printed in f0
+ (please compare with f0 genotype).
+Some properties have special meaning (eg. geometry and connections groups)
+and should be handled with care, because they influence other elements of the model.
+
+ [this data is provided by Part::properties() ]
+ #        id                      type  name        group (22 properties)
+ 0.        x = 2.0                  f   position.x  Geometry  
+ 1.        y = 0.0                  f   position.y  Geometry  
+ 2.        z = 0.0                  f   position.z  Geometry  
+ 3.       sh = 0                    d 0 3 0 shape       Geometry  
+ 4.        s = 1.0                  f 0.1 10.0 1.0 size        Geometry  
+ 5.       sx = 1.0                  f 0.001 1000.0 1.0 scale.x     Geometry  
+ 6.       sy = 1.0                  f 0.001 1000.0 1.0 scale.y     Geometry  
+ 7.       sz = 1.0                  f 0.001 1000.0 1.0 scale.z     Geometry  
+ 8.        h = 0.0                  f 0 1 0 hollow      Other properties
+ 9.       dn = 1.0                  f 0.2 5.0 1.0 density     Other properties
+10.       fr = 0.976                f 0.0 4.0 0.4 friction    Other properties
+11.      ing = 0.475                f 0.0 1.0 0.25 ingestion   Other properties
+12.       as = 0.175                f 0.0 1.0 0.25 assimilation  Other properties
+13.       rx = 0.0                  f   rot.x       Geometry  
+14.       ry = 0.0                  f   rot.y       Geometry  
+15.       rz = 0.0                  f   rot.z       Geometry  
+16.        i =                      s   info        Other properties
+17.   Vstyle = part                 s 0 0 part vis_style   Visual    
+18.       vs = 0.2                  f 0.05 0.7 0.2 visual thickness  Visual    
+19.       vr = 0.5                  f 0.0 1.0 1.0 red component  Visual    
+20.       vg = 0.5                  f 0.0 1.0 1.0 green component  Visual    
+21.       vb = 0.5                  f 0.0 1.0 1.0 blue component  Visual    
+
+However, there is a subset of properties which may be modified more freely.
+Properties on this list are related only to this part and can be changed
+without much consideration. They are guaranteed to be always valid; any inconsistencies
+will be silently repaired.
+
+ [this data is provided by Part::extraProperties() ]
+ #        id                      type  name        group (9 properties)
+ 0.        h = 0.0                  f 0 1 0 hollow      Extra properties
+ 1.       dn = 1.0                  f 0.2 5.0 1.0 density     Extra properties
+ 2.       fr = 0.976                f 0.0 4.0 0.4 friction    Extra properties
+ 3.      ing = 0.475                f 0.0 1.0 0.25 ingestion   Extra properties
+ 4.       as = 0.175                f 0.0 1.0 0.25 assimilation  Extra properties
+ 5.       vs = 0.2                  f 0.05 0.7 0.2 visual thickness  Extra properties
+ 6.       vr = 0.5                  f 0.0 1.0 1.0 red component  Extra properties
+ 7.       vg = 0.5                  f 0.0 1.0 1.0 green component  Extra properties
+ 8.       vb = 0.5                  f 0.0 1.0 1.0 blue component  Extra properties
+
+This set of properties can vary from release to release,
+but can be safely accessed by using extraProperties() call.
+This method accesses the full set of properies (even those
+which appear in future releases).
+Now we will try to change some of properties:
+
+      Change property #0 to random value from range [0..1]
+      Current value of 'h' (hollow) is '0.0'
+      Setting new value... [ using ParamInterface::set() ]
+      The value is now '0.548814'
+
+Let's see f0... (check out part #2 !)
+
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:2.0, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+n:j=0, d=@:p=0.6543
+n:j=1, d=G
+c:0, 1, -1.23456
+
+    #############################################
+   ##                                           ##
+  ##    J O I N T    O B J E C T                 ##
+   ##                                           ##
+    #############################################
+            (joint # 0)
+Similarly as with Part, the full list of properties comes first:
+
+ #        id                      type  name        group (27 properties)
+ 0.       p1 = 0                    d -1 999999 -1 part1 ref#  Connections
+ 1.       p2 = 1                    d -1 999999 -1 part2 ref#  Connections
+ 2.       rx = 0.0                  f   rotation.x  Geometry  
+ 3.       ry = 0.0                  f   rotation.y  Geometry  
+ 4.       rz = 0.0                  f   rotation.z  Geometry  
+ 5.       dx = 1.0                  f -2 2 0 delta.x     Geometry  
+ 6.       dy = 0.0                  f -2 2 0 delta.y     Geometry  
+ 7.       dz = 0.0                  f -2 2 0 delta.z     Geometry  
+ 8.       sh = 0                    d 0 3 0 shape       Geometry  
+ 9.       hx = 0.0                  f   hinge position.x  Geometry  
+10.       hy = 0.0                  f   hinge position.y  Geometry  
+11.       hz = 0.0                  f   hinge position.z  Geometry  
+12.      hrx = 0.0                  f   hinge rotation.x  Geometry  
+13.      hry = 0.0                  f   hinge rotation.y  Geometry  
+14.      hrz = 0.0                  f   hinge rotation.z  Geometry  
+15.      hxn = -1.5708              f -6.2832 0 -1.5708 hinge x negative limit  Geometry  
+16.      hxp = 1.5708               f 0 6.2832 1.5708 hinge x positive limit  Geometry  
+17.      hyn = -1.5708              f -6.2832 0 -1.5708 hinge y negative limit  Geometry  
+18.      hyp = 1.5708               f 0 6.2832 1.5708 hinge y positive limit  Geometry  
+19.     stif = 1.0                  f 0.0 1.0 1.0 stiffness   Other properties
+20.  rotstif = 1.0                  f 0.0 1.0 1.0 rotation stiffness  Other properties
+21.     stam = 0.15625              f 0.0 1.0 0.25 stamina     Other properties
+22.        i =                      s   info        Other properties
+23.   Vstyle = joint                s 0 0 joint vis_style   Visual    
+24.       vr = 0.5                  f 0.0 1.0 1.0 red component  Visual    
+25.       vg = 0.5                  f 0.0 1.0 1.0 green component  Visual    
+26.       vb = 0.5                  f 0.0 1.0 1.0 blue component  Visual    
+
+Actually, there are two kinds of Joints: delta and absolute.
+For this object, Joint::isDelta() returns 1, so this is the delta Joint.
+
+Delta fields (dx,dy,dz) describe relative location of the second part.
+This joint will change the second Part's positions to preserve delta distance.
+Let's move the first Part (#0) along y axis (+0.1) and change delta.z (dz) by 0.1.
+Position of the second Part referenced by this joint (part #1) is now changed:
+
+p:y=0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, 0.1, 0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:2.0, 0.1, 0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.1, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+n:j=0, d=@:p=0.6543
+n:j=1, d=G
+c:0, 1, -1.23456
+
+If no delta fields are defined, they will be computed automatically.
+You can always delete existing delta values by using Joint::resetDelta().
+Now we will change the second Part's z position by -0.2 and call resetDelta()...
+As you can see, Joint's delta fields have altered:
+
+p:y=0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, 0.1, -0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:2.0, 0.1, -0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, -0.1, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+n:j=0, d=@:p=0.6543
+n:j=1, d=G
+c:0, 1, -1.23456
+
+How would this joint look like with delta option disabled?
+[ by calling Joint::useDelta(0) ]
+f0 is now:
+
+p:y=0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, 0.1, -0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:2.0, 0.1, -0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+n:j=0, d=@:p=0.6543
+n:j=1, d=G
+c:0, 1, -1.23456
+
+...so this is an absolute joint.
+
+Absolute Joints adapt to its Parts' positions.
+We can move a Part, and it does not influence the second part, nor the Joint.
+Let's move the first Part along y axis by -0.1...
+The Part's position is changed, but everything else stays intact:
+
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, 0.1, -0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:2.0, 0.1, -0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+n:j=0, d=@:p=0.6543
+n:j=1, d=G
+c:0, 1, -1.23456
+
+Part references and delta fields are the 'core' properties of the Joint.
+The other properties are available from Joint::extraProperties()
+and at the moment are defined as follows:
+
+ #        id                      type  name        group (5 properties)
+ 0.     stif = 1.0                  f 0.0 1.0 1.0 stiffness   Extra properties
+ 1.  rotstif = 1.0                  f 0.0 1.0 1.0 rotation stiffness  Extra properties
+ 2.       vr = 0.5                  f 0.0 1.0 1.0 red component  Extra properties
+ 3.       vg = 0.5                  f 0.0 1.0 1.0 green component  Extra properties
+ 4.       vb = 0.5                  f 0.0 1.0 1.0 blue component  Extra properties
+
+They can be changed just like Part's extra properties:
+      Change property #4 to random value from range [0..1]
+      Current value of 'vb' (blue component) is '0.5'
+      Setting new value... [ using ParamInterface::set() ]
+      The value is now '0.592845'
+And after that we have this genotype:
+
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, 0.1, -0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:2.0, 0.1, -0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, stam=0.15625, vr=0.5, 0.5, 0.592845
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+n:j=0, d=@:p=0.6543
+n:j=1, d=G
+c:0, 1, -1.23456
+
+    #############################################
+   ##                                           ##
+  ##    N E U R O    O B J E C T                 ##
+   ##                                           ##
+    #############################################
+            (neuro # 0)
+Basic features of Neuro object are similar to those of Part and Joint.
+We can request a property list:
+
+ #        id                      type  name        group (10 properties)
+ 0.        p = -1                   d -1 999999 -1 part ref#   Connections
+ 1.        j = 0                    d -1 999999 -1 joint ref#  Connections
+ 2.        d = @:p=0.6543           s   details     Other     
+ 3.        i =                      s   info        Other     
+ 4.   Vstyle = neuro                s 0 0 neuro vis_style   Visual    
+ 5. getInputCount = 1                    d   input count  Connections
+ 9. classObject = null                 oNeuroClass neuron class  Connections
+
+...and extra properties (which are designed to be always valid and easy to change):
+
+ #        id                      type  name        group (0 properties)
+
+As usual, we will change something:
+Each neuron can have any number of inputs = weighted connections
+ with other neurons.
+According to Neuro::getInputCount(), this one has 1 inputs.
+Standard API is provided for accessing those inputs (getInput(int)),
+adding inputs (addInput(Neuro*)) and removing them (removeInput(int)).
+
+
+The most unusual thing is 'details' field (d).
+It is something like separate object with its own set of properties.
+Currently the value of 'd' is '@:p=0.6543'.
+'@' is the class name (Neuro::getClassName() == '@') and means 'Rotation muscle'.
+Neuro::getClass() gives you information about basic characteristic
+of the class, that can be analyzed automatically.
+For the current object we can learn that it supports 1 inputs (getPreferredInputs()) and doesn't provide useful output signal (getPreferredOutput()==0).
+Instances of '@' can be used in models having shape types: 'ball-and-stick'.
+Instances of '@' can be attached to Joints having any shapes.
+The class defines its own properties:
+
+ [ data provided by Neuro::classProperties() ]
+ #        id                      type  name        group (1 properties)
+ 0.        p = 0.6543               f 0.01 1.0 1.0 power       Rotation muscle
+and they can be changed:
+      Change property #0 to random value from range [0.01..1]
+      Current value of 'p' (power) is '0.6543'
+      Setting new value... [ using ParamInterface::set() ]
+      The value is now '0.718037'
+After that, 'details' contains the new object: '@:p=0.718037'.
+The class of this object can be changed using Neuro::setClassName()
+The following classes are available:
+ [ data provided by Neuro::getClassInfo()->getProperties() ]
+
+ #  class  description       properties
+ 0.     N  Neuron                 4
+ 1.    Nu  Unipolar neuron [EXPERIMENTAL!]   4
+ 2.     G  Gyroscope              0
+ 3. Gpart  Part Gyroscope         2
+ 4.     T  Touch                  3
+ 5.Tcontact  Touch contact          0
+ 6.Tproximity  Touch proximity        3
+ 7.     S  Smell                  0
+ 8.     *  Constant               0
+ 9.     |  Bend muscle            2
+10.     @  Rotation muscle        1
+11.     M  Muscle for solids      2
+12.     D  Differentiate          0
+13. Fuzzy  Fuzzy system [EXPERIMENTAL!]   4
+14.   Sti  Sticky [EXPERIMENTAL!]   0
+15.   LMu  Linear muscle [EXPERIMENTAL!]   1
+16. Water  Water detector         0
+17.Energy  Energy level           0
+18.    Ch  Channelize             0
+19. ChMux  Channel multiplexer    0
+20. ChSel  Channel selector       1
+21.   Rnd  Random noise           0
+22.   Sin  Sinus generator        2
+
+Let's change the Neuro's class to 'Water'...
+[WARN] Param.loadSingleLine: Unknown property 'Water.p' (ignored)
+Info for input #0 = ""
+Info for input #0, field "abc" = ""
+The final object description will be then: 'Water'
+And the full f0 genotype:
+
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, 0.1, -0.1, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:2.0, 0.1, -0.1, h=0.548814, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, stam=0.15625, vr=0.5, 0.5, 0.592845
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+n:j=0, d=Water
+n:j=1, d=G
+c:0, 1, -1.23456, i="test=44,abc=yeah"
+
+
+######### THE END ###########
+
+Hints:
+  1. You can redirect output: genomanipulation >filename.txt
+  2. Each run can yield different results and new behaviors, but you
+     need to uncomment srand(time(0)) in genomanipulation.cpp.
+  3. This application will use custom genotype passed as
+     a commandline parameter: genomanipulation "/*9*/FULU"
+
+
Index: cpp/tests/genomanipulation-default.goal
===================================================================
--- cpp/tests/genomanipulation-default.goal	(revision 1009)
+++ cpp/tests/genomanipulation-default.goal	(revision 1009)
@@ -0,0 +1,332 @@
+    #############################################
+   ##                                           ##
+  ##    Welcome to Genotype Manipulation Demo!    ##
+   ##                                           ##
+    #############################################
+Found converter accepting f1: "Recursive encoding"
+Found 6 converter(s) producing f0
+
+Source genotype: 'X[|G:1.23]'
+                  ( format 1 )
+Converted to f0:
+p:vr=0.5, 0.5, 0.5
+p:1.0, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5
+n:p=1
+n:j=0, d="|:p=0.25,r=1"
+n:j=0, d=G
+c:0, 2, 1.23
+c:1, 0
+
+Model contains: 2 part(s)
+                1 joint(s)
+                3 neuron(s)
+
+Investigating details...
+    #############################################
+   ##                                           ##
+  ##    P A R T    O B J E C T                   ##
+   ##                                           ##
+    #############################################
+            (part # 1)
+Here is the full listing of properties as they are printed in f0
+ (please compare with f0 genotype).
+Some properties have special meaning (eg. geometry and connections groups)
+and should be handled with care, because they influence other elements of the model.
+
+ [this data is provided by Part::properties() ]
+ #        id                      type  name        group (22 properties)
+ 0.        x = 1.0                  f   position.x  Geometry  
+ 1.        y = 0.0                  f   position.y  Geometry  
+ 2.        z = 0.0                  f   position.z  Geometry  
+ 3.       sh = 0                    d 0 3 0 shape       Geometry  
+ 4.        s = 1.0                  f 0.1 10.0 1.0 size        Geometry  
+ 5.       sx = 1.0                  f 0.001 1000.0 1.0 scale.x     Geometry  
+ 6.       sy = 1.0                  f 0.001 1000.0 1.0 scale.y     Geometry  
+ 7.       sz = 1.0                  f 0.001 1000.0 1.0 scale.z     Geometry  
+ 8.        h = 0.0                  f 0 1 0 hollow      Other properties
+ 9.       dn = 1.0                  f 0.2 5.0 1.0 density     Other properties
+10.       fr = 0.4                  f 0.0 4.0 0.4 friction    Other properties
+11.      ing = 0.25                 f 0.0 1.0 0.25 ingestion   Other properties
+12.       as = 0.25                 f 0.0 1.0 0.25 assimilation  Other properties
+13.       rx = 0.0                  f   rot.x       Geometry  
+14.       ry = 0.0                  f   rot.y       Geometry  
+15.       rz = 0.0                  f   rot.z       Geometry  
+16.        i =                      s   info        Other properties
+17.   Vstyle = part                 s 0 0 part vis_style   Visual    
+18.       vs = 0.2                  f 0.05 0.7 0.2 visual thickness  Visual    
+19.       vr = 0.5                  f 0.0 1.0 1.0 red component  Visual    
+20.       vg = 0.5                  f 0.0 1.0 1.0 green component  Visual    
+21.       vb = 0.5                  f 0.0 1.0 1.0 blue component  Visual    
+
+However, there is a subset of properties which may be modified more freely.
+Properties on this list are related only to this part and can be changed
+without much consideration. They are guaranteed to be always valid; any inconsistencies
+will be silently repaired.
+
+ [this data is provided by Part::extraProperties() ]
+ #        id                      type  name        group (9 properties)
+ 0.        h = 0.0                  f 0 1 0 hollow      Extra properties
+ 1.       dn = 1.0                  f 0.2 5.0 1.0 density     Extra properties
+ 2.       fr = 0.4                  f 0.0 4.0 0.4 friction    Extra properties
+ 3.      ing = 0.25                 f 0.0 1.0 0.25 ingestion   Extra properties
+ 4.       as = 0.25                 f 0.0 1.0 0.25 assimilation  Extra properties
+ 5.       vs = 0.2                  f 0.05 0.7 0.2 visual thickness  Extra properties
+ 6.       vr = 0.5                  f 0.0 1.0 1.0 red component  Extra properties
+ 7.       vg = 0.5                  f 0.0 1.0 1.0 green component  Extra properties
+ 8.       vb = 0.5                  f 0.0 1.0 1.0 blue component  Extra properties
+
+This set of properties can vary from release to release,
+but can be safely accessed by using extraProperties() call.
+This method accesses the full set of properies (even those
+which appear in future releases).
+Now we will try to change some of properties:
+
+      Change property #0 to random value from range [0..1]
+      Current value of 'h' (hollow) is '0.0'
+      Setting new value... [ using ParamInterface::set() ]
+      The value is now '0.548814'
+
+Let's see f0... (check out part #1 !)
+
+p:vr=0.5, 0.5, 0.5
+p:1.0, h=0.548814, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5
+n:p=1
+n:j=0, d="|:p=0.25,r=1"
+n:j=0, d=G
+c:0, 2, 1.23
+c:1, 0
+
+    #############################################
+   ##                                           ##
+  ##    J O I N T    O B J E C T                 ##
+   ##                                           ##
+    #############################################
+            (joint # 0)
+Similarly as with Part, the full list of properties comes first:
+
+ #        id                      type  name        group (27 properties)
+ 0.       p1 = 0                    d -1 999999 -1 part1 ref#  Connections
+ 1.       p2 = 1                    d -1 999999 -1 part2 ref#  Connections
+ 2.       rx = 0.0                  f   rotation.x  Geometry  
+ 3.       ry = 0.0                  f   rotation.y  Geometry  
+ 4.       rz = 0.0                  f   rotation.z  Geometry  
+ 5.       dx = 1.0                  f -2 2 0 delta.x     Geometry  
+ 6.       dy = 0.0                  f -2 2 0 delta.y     Geometry  
+ 7.       dz = 0.0                  f -2 2 0 delta.z     Geometry  
+ 8.       sh = 0                    d 0 3 0 shape       Geometry  
+ 9.       hx = 0.0                  f   hinge position.x  Geometry  
+10.       hy = 0.0                  f   hinge position.y  Geometry  
+11.       hz = 0.0                  f   hinge position.z  Geometry  
+12.      hrx = 0.0                  f   hinge rotation.x  Geometry  
+13.      hry = 0.0                  f   hinge rotation.y  Geometry  
+14.      hrz = 0.0                  f   hinge rotation.z  Geometry  
+15.      hxn = -1.5708              f -6.2832 0 -1.5708 hinge x negative limit  Geometry  
+16.      hxp = 1.5708               f 0 6.2832 1.5708 hinge x positive limit  Geometry  
+17.      hyn = -1.5708              f -6.2832 0 -1.5708 hinge y negative limit  Geometry  
+18.      hyp = 1.5708               f 0 6.2832 1.5708 hinge y positive limit  Geometry  
+19.     stif = 1.0                  f 0.0 1.0 1.0 stiffness   Other properties
+20.  rotstif = 1.0                  f 0.0 1.0 1.0 rotation stiffness  Other properties
+21.     stam = 0.25                 f 0.0 1.0 0.25 stamina     Other properties
+22.        i =                      s   info        Other properties
+23.   Vstyle = joint                s 0 0 joint vis_style   Visual    
+24.       vr = 0.5                  f 0.0 1.0 1.0 red component  Visual    
+25.       vg = 0.5                  f 0.0 1.0 1.0 green component  Visual    
+26.       vb = 0.5                  f 0.0 1.0 1.0 blue component  Visual    
+
+Actually, there are two kinds of Joints: delta and absolute.
+For this object, Joint::isDelta() returns 1, so this is the delta Joint.
+
+Delta fields (dx,dy,dz) describe relative location of the second part.
+This joint will change the second Part's positions to preserve delta distance.
+Let's move the first Part (#0) along y axis (+0.1) and change delta.z (dz) by 0.1.
+Position of the second Part referenced by this joint (part #1) is now changed:
+
+p:y=0.1, vr=0.5, 0.5, 0.5
+p:1.0, 0.1, 0.1, h=0.548814, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.1, vr=0.5, 0.5, 0.5
+n:p=1
+n:j=0, d="|:p=0.25,r=1"
+n:j=0, d=G
+c:0, 2, 1.23
+c:1, 0
+
+If no delta fields are defined, they will be computed automatically.
+You can always delete existing delta values by using Joint::resetDelta().
+Now we will change the second Part's z position by -0.2 and call resetDelta()...
+As you can see, Joint's delta fields have altered:
+
+p:y=0.1, vr=0.5, 0.5, 0.5
+p:1.0, 0.1, -0.1, h=0.548814, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, -0.1, vr=0.5, 0.5, 0.5
+n:p=1
+n:j=0, d="|:p=0.25,r=1"
+n:j=0, d=G
+c:0, 2, 1.23
+c:1, 0
+
+How would this joint look like with delta option disabled?
+[ by calling Joint::useDelta(0) ]
+f0 is now:
+
+p:y=0.1, vr=0.5, 0.5, 0.5
+p:1.0, 0.1, -0.1, h=0.548814, vr=0.5, 0.5, 0.5
+j:0, 1, vr=0.5, 0.5, 0.5
+n:p=1
+n:j=0, d="|:p=0.25,r=1"
+n:j=0, d=G
+c:0, 2, 1.23
+c:1, 0
+
+...so this is an absolute joint.
+
+Absolute Joints adapt to its Parts' positions.
+We can move a Part, and it does not influence the second part, nor the Joint.
+Let's move the first Part along y axis by -0.1...
+The Part's position is changed, but everything else stays intact:
+
+p:vr=0.5, 0.5, 0.5
+p:1.0, 0.1, -0.1, h=0.548814, vr=0.5, 0.5, 0.5
+j:0, 1, vr=0.5, 0.5, 0.5
+n:p=1
+n:j=0, d="|:p=0.25,r=1"
+n:j=0, d=G
+c:0, 2, 1.23
+c:1, 0
+
+Part references and delta fields are the 'core' properties of the Joint.
+The other properties are available from Joint::extraProperties()
+and at the moment are defined as follows:
+
+ #        id                      type  name        group (5 properties)
+ 0.     stif = 1.0                  f 0.0 1.0 1.0 stiffness   Extra properties
+ 1.  rotstif = 1.0                  f 0.0 1.0 1.0 rotation stiffness  Extra properties
+ 2.       vr = 0.5                  f 0.0 1.0 1.0 red component  Extra properties
+ 3.       vg = 0.5                  f 0.0 1.0 1.0 green component  Extra properties
+ 4.       vb = 0.5                  f 0.0 1.0 1.0 blue component  Extra properties
+
+They can be changed just like Part's extra properties:
+      Change property #4 to random value from range [0..1]
+      Current value of 'vb' (blue component) is '0.5'
+      Setting new value... [ using ParamInterface::set() ]
+      The value is now '0.592845'
+And after that we have this genotype:
+
+p:vr=0.5, 0.5, 0.5
+p:1.0, 0.1, -0.1, h=0.548814, vr=0.5, 0.5, 0.5
+j:0, 1, vr=0.5, 0.5, 0.592845
+n:p=1
+n:j=0, d="|:p=0.25,r=1"
+n:j=0, d=G
+c:0, 2, 1.23
+c:1, 0
+
+    #############################################
+   ##                                           ##
+  ##    N E U R O    O B J E C T                 ##
+   ##                                           ##
+    #############################################
+            (neuro # 0)
+Basic features of Neuro object are similar to those of Part and Joint.
+We can request a property list:
+
+ #        id                      type  name        group (10 properties)
+ 0.        p = 1                    d -1 999999 -1 part ref#   Connections
+ 1.        j = -1                   d -1 999999 -1 joint ref#  Connections
+ 2.        d = N                    s   details     Other     
+ 3.        i =                      s   info        Other     
+ 4.   Vstyle = neuro                s 0 0 neuro vis_style   Visual    
+ 5. getInputCount = 1                    d   input count  Connections
+ 9. classObject = null                 oNeuroClass neuron class  Connections
+
+...and extra properties (which are designed to be always valid and easy to change):
+
+ #        id                      type  name        group (0 properties)
+
+As usual, we will change something:
+Each neuron can have any number of inputs = weighted connections
+ with other neurons.
+According to Neuro::getInputCount(), this one has 1 inputs.
+Standard API is provided for accessing those inputs (getInput(int)),
+adding inputs (addInput(Neuro*)) and removing them (removeInput(int)).
+
+
+The most unusual thing is 'details' field (d).
+It is something like separate object with its own set of properties.
+Currently the value of 'd' is 'N'.
+'N' is the class name (Neuro::getClassName() == 'N') and means 'Neuron'.
+Neuro::getClass() gives you information about basic characteristic
+of the class, that can be analyzed automatically.
+For the current object we can learn that it supports any number of inputs (getPreferredInputs()) and provides meaningful output signal (getPreferredOutput()==1).
+Instances of 'N' can be used in models having any shape types.
+The class defines its own properties:
+
+ [ data provided by Neuro::classProperties() ]
+ #        id                      type  name        group (4 properties)
+ 0.       in = 0.8                  f 0.0 1.0 0.8 Inertia     (null)    
+ 1.       fo = 0.04                 f 0.0 999.0 0.04 Force       (null)    
+ 2.       si = 2.0                  f -99999.0 99999.0 2.0 Sigmoid     (null)    
+ 3.        s = 0.0                  f -1.0 1.0 0.0 State       (null)    
+and they can be changed:
+      Change property #0 to random value from range [0..1]
+      Current value of 'in' (Inertia) is '0.8'
+      Setting new value... [ using ParamInterface::set() ]
+      The value is now '0.715189'
+After that, 'details' contains the new object: 'N:in=0.715189'.
+The class of this object can be changed using Neuro::setClassName()
+The following classes are available:
+ [ data provided by Neuro::getClassInfo()->getProperties() ]
+
+ #  class  description       properties
+ 0.     N  Neuron                 4
+ 1.    Nu  Unipolar neuron [EXPERIMENTAL!]   4
+ 2.     G  Gyroscope              0
+ 3. Gpart  Part Gyroscope         2
+ 4.     T  Touch                  3
+ 5.Tcontact  Touch contact          0
+ 6.Tproximity  Touch proximity        3
+ 7.     S  Smell                  0
+ 8.     *  Constant               0
+ 9.     |  Bend muscle            2
+10.     @  Rotation muscle        1
+11.     M  Muscle for solids      2
+12.     D  Differentiate          0
+13. Fuzzy  Fuzzy system [EXPERIMENTAL!]   4
+14.   Sti  Sticky [EXPERIMENTAL!]   0
+15.   LMu  Linear muscle [EXPERIMENTAL!]   1
+16. Water  Water detector         0
+17.Energy  Energy level           0
+18.    Ch  Channelize             0
+19. ChMux  Channel multiplexer    0
+20. ChSel  Channel selector       1
+21.   Rnd  Random noise           0
+22.   Sin  Sinus generator        2
+
+Let's change the Neuro's class to 'Water'...
+[WARN] Param.loadSingleLine: Unknown property 'Water.in' (ignored)
+Info for input #0 = ""
+Info for input #0, field "abc" = ""
+The final object description will be then: 'Water'
+And the full f0 genotype:
+
+p:vr=0.5, 0.5, 0.5
+p:1.0, 0.1, -0.1, h=0.548814, vr=0.5, 0.5, 0.5
+j:0, 1, vr=0.5, 0.5, 0.592845
+n:p=1, d=Water
+n:j=0, d="|:p=0.25,r=1"
+n:j=0, d=G
+c:0, 2, 1.23, i="test=44,abc=yeah"
+c:1, 0
+
+
+######### THE END ###########
+
+Hints:
+  1. You can redirect output: genomanipulation >filename.txt
+  2. Each run can yield different results and new behaviors, but you
+     need to uncomment srand(time(0)) in genomanipulation.cpp.
+  3. This application will use custom genotype passed as
+     a commandline parameter: genomanipulation "/*9*/FULU"
+
+
Index: cpp/tests/genomanipulation-fS.goal
===================================================================
--- cpp/tests/genomanipulation-fS.goal	(revision 1009)
+++ cpp/tests/genomanipulation-fS.goal	(revision 1009)
@@ -0,0 +1,528 @@
+    #############################################
+   ##                                           ##
+  ##    Welcome to Genotype Manipulation Demo!    ##
+   ##                                           ##
+    #############################################
+Found converter accepting f1: "Recursive encoding"
+Found 6 converter(s) producing f0
+
+Source genotype: '1.1:ssC[S;S;S]{ry=-0.214;ty=0.781}fSC[S;S;*;M'4:-5.154;M'0]fE[M;Gpart]{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;z=1}ttC[*;*;Gpart]{st=0.262}fTE{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;y=1;z=1}ftC[*;*;N'0'2'3'9'12'14]{ry=-0.199;y=0.828;z=0.806}'
+                  ( format S )
+Converted to f0:
+p:sh=2, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, ry=-0.214
+p:1.84400826446281, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.36363636363636365
+p:3.4488812833580815, -0.26888325253375556, 1.3310278019498911, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942, rx=0.603, -0.9391, 0.3034
+p:5.053754302253353, -0.5377665050675111, 2.6620556038997822, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942
+p:5.552059067218389, -1.6581236294201593, 4.369698100138417, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3005259203606311, rx=0.603, -0.9391, 0.3034
+p:5.983025350431394, -2.6270811423738007, 5.846578096885344, sh=2, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, fr=0.27320538214602824, ry=-0.199
+j:0, 1, sh=1
+j:1, 2, sh=1
+j:2, 3, sh=1, stif=0.2165289256198347, rotstif=0.2165289256198347
+j:3, 4, sh=1, stif=0.9090909090909091, rotstif=0.9090909090909091
+j:4, 5, sh=1, stif=0.8264462809917354, rotstif=0.8264462809917354
+n:p=0, d=S
+n:p=0, d=S
+n:p=0, d=S
+n:p=1, d=S
+n:p=1, d=S
+n:p=1, d=*
+n:j=0, d=M
+n:j=0, d=M
+n:j=1, d=M
+n:p=2, d=Gpart
+n:p=3, d=*
+n:p=3, d=*
+n:p=3, d=Gpart
+n:p=5, d=*
+n:p=5, d=*
+n:p=5
+c:6, 4, -5.154
+c:7, 0
+c:15, 0
+c:15, 2
+c:15, 3
+c:15, 9
+c:15, 12
+c:15, 14
+
+Model contains: 6 part(s)
+                5 joint(s)
+                16 neuron(s)
+
+Investigating details...
+    #############################################
+   ##                                           ##
+  ##    P A R T    O B J E C T                   ##
+   ##                                           ##
+    #############################################
+            (part # 5)
+Here is the full listing of properties as they are printed in f0
+ (please compare with f0 genotype).
+Some properties have special meaning (eg. geometry and connections groups)
+and should be handled with care, because they influence other elements of the model.
+
+ [this data is provided by Part::properties() ]
+ #        id                      type  name        group (22 properties)
+ 0.        x = 5.983025350431394    f   position.x  Geometry  
+ 1.        y = -2.6270811423738007  f   position.y  Geometry  
+ 2.        z = 5.846578096885344    f   position.z  Geometry  
+ 3.       sh = 2                    d 0 3 0 shape       Geometry  
+ 4.        s = 1.0                  f 0.1 10.0 1.0 size        Geometry  
+ 5.       sx = 0.9090909090909091   f 0.001 1000.0 1.0 scale.x     Geometry  
+ 6.       sy = 0.7527272727272727   f 0.001 1000.0 1.0 scale.y     Geometry  
+ 7.       sz = 0.7327272727272728   f 0.001 1000.0 1.0 scale.z     Geometry  
+ 8.        h = 0.0                  f 0 1 0 hollow      Other properties
+ 9.       dn = 1.0                  f 0.2 5.0 1.0 density     Other properties
+10.       fr = 0.27320538214602824  f 0.0 4.0 0.4 friction    Other properties
+11.      ing = 0.25                 f 0.0 1.0 0.25 ingestion   Other properties
+12.       as = 0.25                 f 0.0 1.0 0.25 assimilation  Other properties
+13.       rx = 0.0                  f   rot.x       Geometry  
+14.       ry = -0.199               f   rot.y       Geometry  
+15.       rz = 0.0                  f   rot.z       Geometry  
+16.        i =                      s   info        Other properties
+17.   Vstyle = part                 s 0 0 part vis_style   Visual    
+18.       vs = 0.2                  f 0.05 0.7 0.2 visual thickness  Visual    
+19.       vr = 1.0                  f 0.0 1.0 1.0 red component  Visual    
+20.       vg = 1.0                  f 0.0 1.0 1.0 green component  Visual    
+21.       vb = 1.0                  f 0.0 1.0 1.0 blue component  Visual    
+
+However, there is a subset of properties which may be modified more freely.
+Properties on this list are related only to this part and can be changed
+without much consideration. They are guaranteed to be always valid; any inconsistencies
+will be silently repaired.
+
+ [this data is provided by Part::extraProperties() ]
+ #        id                      type  name        group (9 properties)
+ 0.        h = 0.0                  f 0 1 0 hollow      Extra properties
+ 1.       dn = 1.0                  f 0.2 5.0 1.0 density     Extra properties
+ 2.       fr = 0.27320538214602824  f 0.0 4.0 0.4 friction    Extra properties
+ 3.      ing = 0.25                 f 0.0 1.0 0.25 ingestion   Extra properties
+ 4.       as = 0.25                 f 0.0 1.0 0.25 assimilation  Extra properties
+ 5.       vs = 0.2                  f 0.05 0.7 0.2 visual thickness  Extra properties
+ 6.       vr = 1.0                  f 0.0 1.0 1.0 red component  Extra properties
+ 7.       vg = 1.0                  f 0.0 1.0 1.0 green component  Extra properties
+ 8.       vb = 1.0                  f 0.0 1.0 1.0 blue component  Extra properties
+
+This set of properties can vary from release to release,
+but can be safely accessed by using extraProperties() call.
+This method accesses the full set of properies (even those
+which appear in future releases).
+Now we will try to change some of properties:
+
+      Change property #0 to random value from range [0..1]
+      Current value of 'h' (hollow) is '0.0'
+      Setting new value... [ using ParamInterface::set() ]
+      The value is now '0.548814'
+
+Let's see f0... (check out part #5 !)
+
+p:sh=2, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, ry=-0.214
+p:1.84400826446281, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.36363636363636365
+p:3.4488812833580815, -0.26888325253375556, 1.3310278019498911, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942, rx=0.603, -0.9391, 0.3034
+p:5.053754302253353, -0.5377665050675111, 2.6620556038997822, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942
+p:5.552059067218389, -1.6581236294201593, 4.369698100138417, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3005259203606311, rx=0.603, -0.9391, 0.3034
+p:5.983025350431394, -2.6270811423738007, 5.846578096885344, sh=2, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, h=0.548814, fr=0.27320538214602824, ry=-0.199
+j:0, 1, sh=1
+j:1, 2, sh=1
+j:2, 3, sh=1, stif=0.2165289256198347, rotstif=0.2165289256198347
+j:3, 4, sh=1, stif=0.9090909090909091, rotstif=0.9090909090909091
+j:4, 5, sh=1, stif=0.8264462809917354, rotstif=0.8264462809917354
+n:p=0, d=S
+n:p=0, d=S
+n:p=0, d=S
+n:p=1, d=S
+n:p=1, d=S
+n:p=1, d=*
+n:j=0, d=M
+n:j=0, d=M
+n:j=1, d=M
+n:p=2, d=Gpart
+n:p=3, d=*
+n:p=3, d=*
+n:p=3, d=Gpart
+n:p=5, d=*
+n:p=5, d=*
+n:p=5
+c:6, 4, -5.154
+c:7, 0
+c:15, 0
+c:15, 2
+c:15, 3
+c:15, 9
+c:15, 12
+c:15, 14
+
+    #############################################
+   ##                                           ##
+  ##    J O I N T    O B J E C T                 ##
+   ##                                           ##
+    #############################################
+            (joint # 2)
+Similarly as with Part, the full list of properties comes first:
+
+ #        id                      type  name        group (21 properties)
+ 0.       p1 = 2                    d -1 999999 -1 part1 ref#  Connections
+ 1.       p2 = 3                    d -1 999999 -1 part2 ref#  Connections
+ 2.       sh = 1                    d 0 3 0 shape       Geometry  
+ 3.       hx = 0.0                  f   hinge position.x  Geometry  
+ 4.       hy = 0.0                  f   hinge position.y  Geometry  
+ 5.       hz = 0.0                  f   hinge position.z  Geometry  
+ 6.      hrx = 0.0                  f   hinge rotation.x  Geometry  
+ 7.      hry = 0.0                  f   hinge rotation.y  Geometry  
+ 8.      hrz = 0.0                  f   hinge rotation.z  Geometry  
+ 9.      hxn = -1.5708              f -6.2832 0 -1.5708 hinge x negative limit  Geometry  
+10.      hxp = 1.5708               f 0 6.2832 1.5708 hinge x positive limit  Geometry  
+11.      hyn = -1.5708              f -6.2832 0 -1.5708 hinge y negative limit  Geometry  
+12.      hyp = 1.5708               f 0 6.2832 1.5708 hinge y positive limit  Geometry  
+13.     stif = 0.2165289256198347   f 0.0 1.0 1.0 stiffness   Other properties
+14.  rotstif = 0.2165289256198347   f 0.0 1.0 1.0 rotation stiffness  Other properties
+15.     stam = 0.25                 f 0.0 1.0 0.25 stamina     Other properties
+16.        i =                      s   info        Other properties
+17.   Vstyle = joint                s 0 0 joint vis_style   Visual    
+18.       vr = 1.0                  f 0.0 1.0 1.0 red component  Visual    
+19.       vg = 1.0                  f 0.0 1.0 1.0 green component  Visual    
+20.       vb = 1.0                  f 0.0 1.0 1.0 blue component  Visual    
+
+Actually, there are two kinds of Joints: delta and absolute.
+For this object, Joint::isDelta() returns 0, so this is the absolute Joint.
+
+Absolute Joints adapt to its Parts' positions.
+We can move a Part, and it does not influence the second part, nor the Joint.
+Let's move the first Part along y axis by -0.1...
+The Part's position is changed, but everything else stays intact:
+
+p:sh=2, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, ry=-0.214
+p:1.84400826446281, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.36363636363636365
+p:3.4488812833580815, -0.36888325253375553, 1.3310278019498911, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942, rx=0.603, -0.9391, 0.3034
+p:5.053754302253353, -0.5377665050675111, 2.6620556038997822, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942
+p:5.552059067218389, -1.6581236294201593, 4.369698100138417, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3005259203606311, rx=0.603, -0.9391, 0.3034
+p:5.983025350431394, -2.6270811423738007, 5.846578096885344, sh=2, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, h=0.548814, fr=0.27320538214602824, ry=-0.199
+j:0, 1, sh=1
+j:1, 2, sh=1
+j:2, 3, sh=1, stif=0.2165289256198347, rotstif=0.2165289256198347
+j:3, 4, sh=1, stif=0.9090909090909091, rotstif=0.9090909090909091
+j:4, 5, sh=1, stif=0.8264462809917354, rotstif=0.8264462809917354
+n:p=0, d=S
+n:p=0, d=S
+n:p=0, d=S
+n:p=1, d=S
+n:p=1, d=S
+n:p=1, d=*
+n:j=0, d=M
+n:j=0, d=M
+n:j=1, d=M
+n:p=2, d=Gpart
+n:p=3, d=*
+n:p=3, d=*
+n:p=3, d=Gpart
+n:p=5, d=*
+n:p=5, d=*
+n:p=5
+c:6, 4, -5.154
+c:7, 0
+c:15, 0
+c:15, 2
+c:15, 3
+c:15, 9
+c:15, 12
+c:15, 14
+
+How would this joint look like with delta option enabled?
+[ by calling Joint::useDelta(1) ]
+f0 is now:
+
+p:sh=2, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, ry=-0.214
+p:1.84400826446281, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.36363636363636365
+p:3.4488812833580815, -0.36888325253375553, 1.3310278019498911, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942, rx=0.603, -0.9391, 0.3034
+p:5.053754302253353, -0.5377665050675109, 2.6620556038997822, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942
+p:5.552059067218389, -1.6581236294201593, 4.369698100138417, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3005259203606311, rx=0.603, -0.9391, 0.3034
+p:5.983025350431394, -2.6270811423738007, 5.846578096885344, sh=2, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, h=0.548814, fr=0.27320538214602824, ry=-0.199
+j:0, 1, sh=1
+j:1, 2, sh=1
+j:2, 3, rx=-0.6137069589668486, 0.9336120115153849, 0.32629609148341426, dx=1.6048730188952711, -0.16888325253375558, 1.3310278019498911, sh=1, stif=0.2165289256198347, rotstif=0.2165289256198347
+j:3, 4, sh=1, stif=0.9090909090909091, rotstif=0.9090909090909091
+j:4, 5, sh=1, stif=0.8264462809917354, rotstif=0.8264462809917354
+n:p=0, d=S
+n:p=0, d=S
+n:p=0, d=S
+n:p=1, d=S
+n:p=1, d=S
+n:p=1, d=*
+n:j=0, d=M
+n:j=0, d=M
+n:j=1, d=M
+n:p=2, d=Gpart
+n:p=3, d=*
+n:p=3, d=*
+n:p=3, d=Gpart
+n:p=5, d=*
+n:p=5, d=*
+n:p=5
+c:6, 4, -5.154
+c:7, 0
+c:15, 0
+c:15, 2
+c:15, 3
+c:15, 9
+c:15, 12
+c:15, 14
+
+...so this is a delta joint.
+
+Delta fields (dx,dy,dz) describe relative location of the second part.
+This joint will change the second Part's positions to preserve delta distance.
+Let's move the first Part (#2) along y axis (+0.1) and change delta.z (dz) by 0.1.
+Position of the second Part referenced by this joint (part #3) is now changed:
+
+p:sh=2, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, ry=-0.214
+p:1.84400826446281, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.36363636363636365
+p:3.4488812833580815, -0.26888325253375556, 1.3310278019498911, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942, rx=0.603, -0.9391, 0.3034
+p:5.053754302253353, -0.43776650506751086, 2.762055603899782, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942
+p:5.552059067218389, -1.6581236294201593, 4.369698100138417, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3005259203606311, rx=0.603, -0.9391, 0.3034
+p:5.983025350431394, -2.6270811423738007, 5.846578096885344, sh=2, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, h=0.548814, fr=0.27320538214602824, ry=-0.199
+j:0, 1, sh=1
+j:1, 2, sh=1
+j:2, 3, rx=-0.6137069589668486, 0.9336120115153849, 0.32629609148341426, dx=1.6048730188952711, -0.16888325253375558, 1.4310278019498912, sh=1, stif=0.2165289256198347, rotstif=0.2165289256198347
+j:3, 4, sh=1, stif=0.9090909090909091, rotstif=0.9090909090909091
+j:4, 5, sh=1, stif=0.8264462809917354, rotstif=0.8264462809917354
+n:p=0, d=S
+n:p=0, d=S
+n:p=0, d=S
+n:p=1, d=S
+n:p=1, d=S
+n:p=1, d=*
+n:j=0, d=M
+n:j=0, d=M
+n:j=1, d=M
+n:p=2, d=Gpart
+n:p=3, d=*
+n:p=3, d=*
+n:p=3, d=Gpart
+n:p=5, d=*
+n:p=5, d=*
+n:p=5
+c:6, 4, -5.154
+c:7, 0
+c:15, 0
+c:15, 2
+c:15, 3
+c:15, 9
+c:15, 12
+c:15, 14
+
+If no delta fields are defined, they will be computed automatically.
+You can always delete existing delta values by using Joint::resetDelta().
+Now we will change the second Part's z position by -0.2 and call resetDelta()...
+As you can see, Joint's delta fields have altered:
+
+p:sh=2, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, ry=-0.214
+p:1.84400826446281, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.36363636363636365
+p:3.4488812833580815, -0.26888325253375556, 1.3310278019498911, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942, rx=0.603, -0.9391, 0.3034
+p:5.053754302253353, -0.43776650506751086, 2.5620556038997817, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942
+p:5.552059067218389, -1.6581236294201593, 4.369698100138417, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3005259203606311, rx=0.603, -0.9391, 0.3034
+p:5.983025350431394, -2.6270811423738007, 5.846578096885344, sh=2, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, h=0.548814, fr=0.27320538214602824, ry=-0.199
+j:0, 1, sh=1
+j:1, 2, sh=1
+j:2, 3, rx=-0.6137069589668486, 0.9336120115153848, 0.32629609148341426, dx=1.6048730188952707, -0.16888325253375547, 1.2310278019498906, sh=1, stif=0.2165289256198347, rotstif=0.2165289256198347
+j:3, 4, sh=1, stif=0.9090909090909091, rotstif=0.9090909090909091
+j:4, 5, sh=1, stif=0.8264462809917354, rotstif=0.8264462809917354
+n:p=0, d=S
+n:p=0, d=S
+n:p=0, d=S
+n:p=1, d=S
+n:p=1, d=S
+n:p=1, d=*
+n:j=0, d=M
+n:j=0, d=M
+n:j=1, d=M
+n:p=2, d=Gpart
+n:p=3, d=*
+n:p=3, d=*
+n:p=3, d=Gpart
+n:p=5, d=*
+n:p=5, d=*
+n:p=5
+c:6, 4, -5.154
+c:7, 0
+c:15, 0
+c:15, 2
+c:15, 3
+c:15, 9
+c:15, 12
+c:15, 14
+
+Part references and delta fields are the 'core' properties of the Joint.
+The other properties are available from Joint::extraProperties()
+and at the moment are defined as follows:
+
+ #        id                      type  name        group (5 properties)
+ 0.     stif = 0.2165289256198347   f 0.0 1.0 1.0 stiffness   Extra properties
+ 1.  rotstif = 0.2165289256198347   f 0.0 1.0 1.0 rotation stiffness  Extra properties
+ 2.       vr = 1.0                  f 0.0 1.0 1.0 red component  Extra properties
+ 3.       vg = 1.0                  f 0.0 1.0 1.0 green component  Extra properties
+ 4.       vb = 1.0                  f 0.0 1.0 1.0 blue component  Extra properties
+
+They can be changed just like Part's extra properties:
+      Change property #4 to random value from range [0..1]
+      Current value of 'vb' (blue component) is '1.0'
+      Setting new value... [ using ParamInterface::set() ]
+      The value is now '0.592845'
+And after that we have this genotype:
+
+p:sh=2, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, ry=-0.214
+p:1.84400826446281, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.36363636363636365
+p:3.4488812833580815, -0.26888325253375556, 1.3310278019498911, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942, rx=0.603, -0.9391, 0.3034
+p:5.053754302253352, -0.4377665050675108, 2.5620556038997817, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942
+p:5.552059067218389, -1.6581236294201593, 4.369698100138417, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3005259203606311, rx=0.603, -0.9391, 0.3034
+p:5.983025350431394, -2.6270811423738007, 5.846578096885344, sh=2, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, h=0.548814, fr=0.27320538214602824, ry=-0.199
+j:0, 1, sh=1
+j:1, 2, sh=1
+j:2, 3, rx=-0.6137069589668486, 0.9336120115153848, 0.32629609148341426, dx=1.6048730188952707, -0.16888325253375547, 1.2310278019498906, sh=1, stif=0.2165289256198347, rotstif=0.2165289256198347, vb=0.592845
+j:3, 4, sh=1, stif=0.9090909090909091, rotstif=0.9090909090909091
+j:4, 5, sh=1, stif=0.8264462809917354, rotstif=0.8264462809917354
+n:p=0, d=S
+n:p=0, d=S
+n:p=0, d=S
+n:p=1, d=S
+n:p=1, d=S
+n:p=1, d=*
+n:j=0, d=M
+n:j=0, d=M
+n:j=1, d=M
+n:p=2, d=Gpart
+n:p=3, d=*
+n:p=3, d=*
+n:p=3, d=Gpart
+n:p=5, d=*
+n:p=5, d=*
+n:p=5
+c:6, 4, -5.154
+c:7, 0
+c:15, 0
+c:15, 2
+c:15, 3
+c:15, 9
+c:15, 12
+c:15, 14
+
+    #############################################
+   ##                                           ##
+  ##    N E U R O    O B J E C T                 ##
+   ##                                           ##
+    #############################################
+            (neuro # 4)
+Basic features of Neuro object are similar to those of Part and Joint.
+We can request a property list:
+
+ #        id                      type  name        group (10 properties)
+ 0.        p = 1                    d -1 999999 -1 part ref#   Connections
+ 1.        j = -1                   d -1 999999 -1 joint ref#  Connections
+ 2.        d = S                    s   details     Other     
+ 3.        i =                      s   info        Other     
+ 4.   Vstyle = neuro                s 0 0 neuro vis_style   Visual    
+ 5. getInputCount = 0                    d   input count  Connections
+ 9. classObject = null                 oNeuroClass neuron class  Connections
+
+...and extra properties (which are designed to be always valid and easy to change):
+
+ #        id                      type  name        group (0 properties)
+
+As usual, we will change something:
+Each neuron can have any number of inputs = weighted connections
+ with other neurons.
+According to Neuro::getInputCount(), this one has 0 inputs.
+Standard API is provided for accessing those inputs (getInput(int)),
+adding inputs (addInput(Neuro*)) and removing them (removeInput(int)).
+
+
+The most unusual thing is 'details' field (d).
+It is something like separate object with its own set of properties.
+Currently the value of 'd' is 'S'.
+'S' is the class name (Neuro::getClassName() == 'S') and means 'Smell'.
+Neuro::getClass() gives you information about basic characteristic
+of the class, that can be analyzed automatically.
+For the current object we can learn that it supports no inputs (getPreferredInputs()) and provides meaningful output signal (getPreferredOutput()==1).
+Instances of 'S' can be used in models having any shape types.
+Instances of 'S' can be attached to Parts.
+(This class does not have its own properties
+ - Neuro::classProperties().getPropCount()==0)
+The class of this object can be changed using Neuro::setClassName()
+The following classes are available:
+ [ data provided by Neuro::getClassInfo()->getProperties() ]
+
+ #  class  description       properties
+ 0.     N  Neuron                 4
+ 1.    Nu  Unipolar neuron [EXPERIMENTAL!]   4
+ 2.     G  Gyroscope              0
+ 3. Gpart  Part Gyroscope         2
+ 4.     T  Touch                  3
+ 5.Tcontact  Touch contact          0
+ 6.Tproximity  Touch proximity        3
+ 7.     S  Smell                  0
+ 8.     *  Constant               0
+ 9.     |  Bend muscle            2
+10.     @  Rotation muscle        1
+11.     M  Muscle for solids      2
+12.     D  Differentiate          0
+13. Fuzzy  Fuzzy system [EXPERIMENTAL!]   4
+14.   Sti  Sticky [EXPERIMENTAL!]   0
+15.   LMu  Linear muscle [EXPERIMENTAL!]   1
+16. Water  Water detector         0
+17.Energy  Energy level           0
+18.    Ch  Channelize             0
+19. ChMux  Channel multiplexer    0
+20. ChSel  Channel selector       1
+21.   Rnd  Random noise           0
+22.   Sin  Sinus generator        2
+
+Let's change the Neuro's class to 'D'...
+The final object description will be then: 'D'
+And the full f0 genotype:
+
+p:sh=2, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, ry=-0.214
+p:1.84400826446281, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.36363636363636365
+p:3.4488812833580815, -0.26888325253375556, 1.3310278019498911, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942, rx=0.603, -0.9391, 0.3034
+p:5.053754302253352, -0.4377665050675108, 2.5620556038997817, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942
+p:5.552059067218389, -1.6581236294201593, 4.369698100138417, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3005259203606311, rx=0.603, -0.9391, 0.3034
+p:5.983025350431394, -2.6270811423738007, 5.846578096885344, sh=2, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, h=0.548814, fr=0.27320538214602824, ry=-0.199
+j:0, 1, sh=1
+j:1, 2, sh=1
+j:2, 3, rx=-0.6137069589668486, 0.9336120115153848, 0.32629609148341426, dx=1.6048730188952707, -0.16888325253375547, 1.2310278019498906, sh=1, stif=0.2165289256198347, rotstif=0.2165289256198347, vb=0.592845
+j:3, 4, sh=1, stif=0.9090909090909091, rotstif=0.9090909090909091
+j:4, 5, sh=1, stif=0.8264462809917354, rotstif=0.8264462809917354
+n:p=0, d=S
+n:p=0, d=S
+n:p=0, d=S
+n:p=1, d=S
+n:p=1, d=D
+n:p=1, d=*
+n:j=0, d=M
+n:j=0, d=M
+n:j=1, d=M
+n:p=2, d=Gpart
+n:p=3, d=*
+n:p=3, d=*
+n:p=3, d=Gpart
+n:p=5, d=*
+n:p=5, d=*
+n:p=5
+c:6, 4, -5.154
+c:7, 0
+c:15, 0
+c:15, 2
+c:15, 3
+c:15, 9
+c:15, 12
+c:15, 14
+
+
+######### THE END ###########
+
+Hints:
+  1. You can redirect output: genomanipulation >filename.txt
+  2. Each run can yield different results and new behaviors, but you
+     need to uncomment srand(time(0)) in genomanipulation.cpp.
+  3. This application will use custom genotype passed as
+     a commandline parameter: genomanipulation "/*9*/FULU"
+
+
Index: cpp/tests/genooper_test_fTest.goal
===================================================================
--- cpp/tests/genooper_test_fTest.goal	(revision 1009)
+++ cpp/tests/genooper_test_fTest.goal	(revision 1009)
@@ -0,0 +1,28 @@
+GATCGATTACA   [mutated 0.0%]
+GATCCATTACA   [mutated 9.1%]
+GATCCTGTACA   [mutated 27.3%]
+GATCCTGTACA   [mutated 0.0%]
+GATCCTGTACA   [mutated 0.0%]
+GATCCTGTATA   [mutated 9.1%]
+GATCCTGTATA   [mutated 0.0%]
+GATACTGTATA   [mutated 9.1%]
+GATACTGTATA   [mutated 9.1%]
+GATACTGTATA   [mutated 0.0%]
+
+Crossing over the last mutant, 
+	GATACTGTATA
+and the simplest genotype
+	GATCGATTACA
+:
+Offspring 1:
+	GATACTCGATTACA  (35.7% genes from parent1)
+Offspring 2:
+	GATGTATA  (25.0% genes from parent2)
+
+Checking genotype:
+	ATGsomethingCG... error at position 4.
+After validation:
+	ATGCG
+...and how about YOUR genotype?
+
+
Index: cpp/tests/loader_test_geno.goal
===================================================================
--- cpp/tests/loader_test_geno.goal	(revision 1009)
+++ cpp/tests/loader_test_geno.goal	(revision 1009)
@@ -0,0 +1,34 @@
+//0s
+p:sh=2,sx=0.6,sy=0.6,sz=0.3,z=3.4,vr=0.8,0.8,0.4
+p:sh=2,sx=0.1,sy=0.1,sz=0.1,vr=0.8,0.8,0.4
+p:sh=2,sx=0.1,sy=0.1,sz=0.1,vr=0.8,0.8,0.4
+p:sh=2,sx=0.1,sy=0.1,sz=0.1,vr=0.8,0.8,0.4
+p:sh=2,sx=0.1,sy=0.1,sz=0.1,vr=0.8,0.8,0.4
+p:sh=1,sx=0.5,sy=0.5,sz=0.5,vr=0.6,0.3,0.1
+p:sh=3,sx=0.05,sy=0.3,sz=0.3,vr=0.3,0.8,0.1
+p:sh=3,sx=0.05,sy=0.3,sz=0.3,vr=0.3,0.8,0.1
+p:sh=3,sx=0.05,sy=0.3,sz=0.3,vr=0.3,0.8,0.1
+p:sh=3,sx=0.05,sy=0.3,sz=0.3,vr=0.3,0.8,0.1
+p:sh=3,sx=0.05,sy=0.3,sz=0.3,vr=0.3,0.8,0.1
+p:sh=3,sx=0.05,sy=0.3,sz=0.3,vr=0.3,0.8,0.1
+p:sh=3,sx=0.05,sy=0.3,sz=0.3,vr=0.3,0.8,0.1
+p:sh=3,sx=0.05,sy=0.3,sz=0.3,vr=0.3,0.8,0.1
+p:sh=3,sx=0.05,sy=0.3,sz=0.3,vr=0.3,0.8,0.1
+p:sh=3,sx=0.05,sy=0.3,sz=0.3,vr=0.3,0.8,0.1
+j:0,1,sh=1,dx=0.45,dy=0.45,dz=-0.4
+j:0,2,sh=1,dx=-0.45,dy=0.45,dz=-0.4
+j:0,3,sh=1,dx=0.45,dy=-0.45,dz=-0.4
+j:0,4,sh=1,dx=-0.45,dy=-0.45,dz=-0.4
+j:0,5,sh=1,dz=0.6
+j:5,6,sh=1,dx=-0.5,dy=0.35,dz=0.1,ry=-1.0,rx=1.3
+j:6,7,sh=1,dx=0.15,dy=0.55,rx=0.63,ry=0.63,rz=0.2
+j:7,8,sh=1,dx=0.15,dy=0.55,rx=0.63,ry=0.63,rz=0.2
+j:8,9,sh=1,dx=0.15,dy=0.55,rx=0.63,ry=0.63,rz=0.2
+j:9,10,sh=1,dx=0.15,dy=0.55,rx=0.63,ry=0.63,rz=0.2
+j:10,11,sh=1,dx=0.15,dy=0.55,rx=0.63,ry=0.63,rz=0.2
+j:11,12,sh=1,dx=0.15,dy=0.55,rx=0.63,ry=0.63,rz=0.2
+j:12,13,sh=1,dx=0.15,dy=0.55,rx=0.63,ry=0.63,rz=0.2
+j:13,14,sh=1,dx=0.15,dy=0.55,rx=0.63,ry=0.63,rz=0.2
+j:14,15,sh=1,dx=0.15,dy=0.55,rx=0.63,ry=0.63,rz=0.2
+
+
Index: cpp/tests/loader_test_param.goal
===================================================================
--- cpp/tests/loader_test_param.goal	(revision 1009)
+++ cpp/tests/loader_test_param.goal	(revision 1009)
@@ -0,0 +1,91 @@
+data:
+text:qwerty
+longtext:~
+Long multiline text
+1\\~
+22\~\n
+333\ \\
+4444~
+deftext:other
+i1:-12345
+i2:-5
+i3:2
+i4:10
+f1:22
+f2:100.0
+f3:10.0
+f4:2.0
+x1:@Serialized:3.14
+x2:@Serialized:314
+notchanged:101
+notloaded:0
+
+data:
+text:
+longtext:
+deftext:some text
+i1:0
+i2:1
+i3:0
+i4:10
+f1:0
+f2:-100.0
+f3:-10.0
+f4:44.0
+x1:@Serialized:"just x (string extvalue)"
+x2:@Serialized:null
+notchanged:102
+notloaded:0
+
+data:
+text:abcdefghij
+longtext:
+deftext:some text
+i1:0
+i2:-5
+i3:3
+i4:10
+f1:-256
+f2:-100.0
+f3:10.0
+f4:44.0
+x1:@Serialized:[1,2,3,1.0,2.0,3.0,"x","]","\""]
+x2:@Serialized:{"a":[1,2,3],"c":1.23,"b":"abc"}
+notchanged:103
+notloaded:0
+
+data:
+text:
+longtext:
+deftext:some text
+i1:16
+i2:5
+i3:3
+i4:10
+f1:0
+f2:-100.0
+f3:-10.0
+f4:44.0
+x1:@Serialized:{"a":[1,2,3],"c":^1,"b":^1}
+x2:@Serialized:[[100,^1],["abc"],[300,^2]]
+notchanged:104
+notloaded:0
+
+data:
+text:
+longtext:
+deftext:some text
+i1:0
+i2:1
+i3:0
+i4:10
+f1:0
+f2:-100.0
+f3:-10.0
+f4:44.0
+x1:@Serialized:null
+x2:@Serialized:[1,2,"3",{"key":"value"}]
+notchanged:105
+notloaded:0
+
+
Index: cpp/tests/multiline_f0_test-complex.goal
===================================================================
--- cpp/tests/multiline_f0_test-complex.goal	(revision 1009)
+++ cpp/tests/multiline_f0_test-complex.goal	(revision 1009)
@@ -0,0 +1,173 @@
+
+Source genotype: 'FIX[@,p:0.6543,1:-1.23456]X[G]'
+                  ( format 1 )
+Converted to f0:
+p:fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:1.0, fr=1.12, ing=0.53125, as=0.15625, vr=0.5, 0.5, 0.5
+p:2.0, fr=0.976, ing=0.475, as=0.175, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, stam=0.15625, vr=0.5, 0.5, 0.5
+j:1, 2, dx=1.0, 0.0, 0.0, stam=0.175, vr=0.5, 0.5, 0.5
+n:j=0, d=@:p=0.6543
+n:j=1, d=G
+c:0, 1, -1.23456
+
+
+Using Param::saveMultiLine() to create the "expanded" form of the f0 genotype...
+(MultiParamLoader should be able to load this)
+============================
+m:
+se:1.0
+Vstyle:
+
+p:
+x:0.0
+y:0.0
+z:0.0
+sh:0
+s:1.0
+sx:1.0
+sy:1.0
+sz:1.0
+h:0.0
+dn:1.0
+fr:1.12
+ing:0.53125
+as:0.15625
+rx:0.0
+ry:0.0
+rz:0.0
+i:
+Vstyle:part
+vs:0.2
+vr:0.5
+vg:0.5
+vb:0.5
+
+p:
+x:1.0
+y:0.0
+z:0.0
+sh:0
+s:1.0
+sx:1.0
+sy:1.0
+sz:1.0
+h:0.0
+dn:1.0
+fr:1.12
+ing:0.53125
+as:0.15625
+rx:0.0
+ry:0.0
+rz:0.0
+i:
+Vstyle:part
+vs:0.2
+vr:0.5
+vg:0.5
+vb:0.5
+
+p:
+x:2.0
+y:0.0
+z:0.0
+sh:0
+s:1.0
+sx:1.0
+sy:1.0
+sz:1.0
+h:0.0
+dn:1.0
+fr:0.976
+ing:0.475
+as:0.175
+rx:0.0
+ry:0.0
+rz:0.0
+i:
+Vstyle:part
+vs:0.2
+vr:0.5
+vg:0.5
+vb:0.5
+
+j:
+p1:0
+p2:1
+rx:0.0
+ry:0.0
+rz:0.0
+dx:1.0
+dy:0.0
+dz:0.0
+sh:0
+hx:0.0
+hy:0.0
+hz:0.0
+hrx:0.0
+hry:0.0
+hrz:0.0
+hxn:-1.5708
+hxp:1.5708
+hyn:-1.5708
+hyp:1.5708
+stif:1.0
+rotstif:1.0
+stam:0.15625
+i:
+Vstyle:joint
+vr:0.5
+vg:0.5
+vb:0.5
+
+j:
+p1:1
+p2:2
+rx:0.0
+ry:0.0
+rz:0.0
+dx:1.0
+dy:0.0
+dz:0.0
+sh:0
+hx:0.0
+hy:0.0
+hz:0.0
+hrx:0.0
+hry:0.0
+hrz:0.0
+hxn:-1.5708
+hxp:1.5708
+hyn:-1.5708
+hyp:1.5708
+stif:1.0
+rotstif:1.0
+stam:0.175
+i:
+Vstyle:joint
+vr:0.5
+vg:0.5
+vb:0.5
+
+n:
+p:-1
+j:0
+d:@:p=0.6543
+i:
+Vstyle:neuro
+
+n:
+p:-1
+j:1
+d:G
+i:
+Vstyle:neuro
+
+c:
+n1:0
+n2:1
+w:-1.23456
+i:
+
+
+
Index: cpp/tests/multiline_f0_test-default.goal
===================================================================
--- cpp/tests/multiline_f0_test-default.goal	(revision 1009)
+++ cpp/tests/multiline_f0_test-default.goal	(revision 1009)
@@ -0,0 +1,133 @@
+
+Source genotype: 'X[|G:1.23]'
+                  ( format 1 )
+Converted to f0:
+p:vr=0.5, 0.5, 0.5
+p:1.0, vr=0.5, 0.5, 0.5
+j:0, 1, dx=1.0, 0.0, 0.0, vr=0.5, 0.5, 0.5
+n:p=1
+n:j=0, d="|:p=0.25,r=1"
+n:j=0, d=G
+c:0, 2, 1.23
+c:1, 0
+
+
+Using Param::saveMultiLine() to create the "expanded" form of the f0 genotype...
+(MultiParamLoader should be able to load this)
+============================
+m:
+se:1.0
+Vstyle:
+
+p:
+x:0.0
+y:0.0
+z:0.0
+sh:0
+s:1.0
+sx:1.0
+sy:1.0
+sz:1.0
+h:0.0
+dn:1.0
+fr:0.4
+ing:0.25
+as:0.25
+rx:0.0
+ry:0.0
+rz:0.0
+i:
+Vstyle:part
+vs:0.2
+vr:0.5
+vg:0.5
+vb:0.5
+
+p:
+x:1.0
+y:0.0
+z:0.0
+sh:0
+s:1.0
+sx:1.0
+sy:1.0
+sz:1.0
+h:0.0
+dn:1.0
+fr:0.4
+ing:0.25
+as:0.25
+rx:0.0
+ry:0.0
+rz:0.0
+i:
+Vstyle:part
+vs:0.2
+vr:0.5
+vg:0.5
+vb:0.5
+
+j:
+p1:0
+p2:1
+rx:0.0
+ry:0.0
+rz:0.0
+dx:1.0
+dy:0.0
+dz:0.0
+sh:0
+hx:0.0
+hy:0.0
+hz:0.0
+hrx:0.0
+hry:0.0
+hrz:0.0
+hxn:-1.5708
+hxp:1.5708
+hyn:-1.5708
+hyp:1.5708
+stif:1.0
+rotstif:1.0
+stam:0.25
+i:
+Vstyle:joint
+vr:0.5
+vg:0.5
+vb:0.5
+
+n:
+p:1
+j:-1
+d:N
+i:
+Vstyle:neuro
+
+n:
+p:-1
+j:0
+d:|:p=0.25,r=1
+i:
+Vstyle:neuro
+
+n:
+p:-1
+j:0
+d:G
+i:
+Vstyle:neuro
+
+c:
+n1:0
+n2:2
+w:1.23
+i:
+
+c:
+n1:1
+n2:0
+w:1.0
+i:
+
+
+
Index: cpp/tests/multiline_f0_test-fS.goal
===================================================================
--- cpp/tests/multiline_f0_test-fS.goal	(revision 1009)
+++ cpp/tests/multiline_f0_test-fS.goal	(revision 1009)
@@ -0,0 +1,469 @@
+
+Source genotype: '1.1:ssC[S;S;S]{ry=-0.214;ty=0.781}fSC[S;S;*;M'4:-5.154;M'0]fE[M;Gpart]{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;z=1}ttC[*;*;Gpart]{st=0.262}fTE{rx=0.603;ry=-0.9391;rz=0.3034;tx=0.6534;ty=0.6856;tz=-0.166;x=1;y=1;z=1}ftC[*;*;N'0'2'3'9'12'14]{ry=-0.199;y=0.828;z=0.806}'
+                  ( format S )
+Converted to f0:
+p:sh=2, sx=0.8264462809917354, sy=0.8264462809917354, sz=0.8264462809917354, ry=-0.214
+p:1.84400826446281, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.36363636363636365
+p:3.4488812833580815, -0.26888325253375556, 1.3310278019498911, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942, rx=0.603, -0.9391, 0.3034
+p:5.053754302253353, -0.5377665050675111, 2.6620556038997822, sh=2, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3305785123966942
+p:5.552059067218389, -1.6581236294201593, 4.369698100138417, sh=1, sx=0.9090909090909091, sy=0.9090909090909091, sz=0.9090909090909091, fr=0.3005259203606311, rx=0.603, -0.9391, 0.3034
+p:5.983025350431394, -2.6270811423738007, 5.846578096885344, sh=2, sx=0.9090909090909091, sy=0.7527272727272727, sz=0.7327272727272728, fr=0.27320538214602824, ry=-0.199
+j:0, 1, sh=1
+j:1, 2, sh=1
+j:2, 3, sh=1, stif=0.2165289256198347, rotstif=0.2165289256198347
+j:3, 4, sh=1, stif=0.9090909090909091, rotstif=0.9090909090909091
+j:4, 5, sh=1, stif=0.8264462809917354, rotstif=0.8264462809917354
+n:p=0, d=S
+n:p=0, d=S
+n:p=0, d=S
+n:p=1, d=S
+n:p=1, d=S
+n:p=1, d=*
+n:j=0, d=M
+n:j=0, d=M
+n:j=1, d=M
+n:p=2, d=Gpart
+n:p=3, d=*
+n:p=3, d=*
+n:p=3, d=Gpart
+n:p=5, d=*
+n:p=5, d=*
+n:p=5
+c:6, 4, -5.154
+c:7, 0
+c:15, 0
+c:15, 2
+c:15, 3
+c:15, 9
+c:15, 12
+c:15, 14
+
+
+Using Param::saveMultiLine() to create the "expanded" form of the f0 genotype...
+(MultiParamLoader should be able to load this)
+============================
+m:
+se:1.0
+Vstyle:
+
+p:
+x:0.0
+y:0.0
+z:0.0
+sh:2
+s:1.0
+sx:0.8264462809917354
+sy:0.8264462809917354
+sz:0.8264462809917354
+h:0.0
+dn:1.0
+fr:0.4
+ing:0.25
+as:0.25
+rx:0.0
+ry:-0.214
+rz:0.0
+i:
+Vstyle:part
+vs:0.2
+vr:1.0
+vg:1.0
+vb:1.0
+
+p:
+x:1.84400826446281
+y:0.0
+z:0.0
+sh:2
+s:1.0
+sx:0.9090909090909091
+sy:0.9090909090909091
+sz:0.9090909090909091
+h:0.0
+dn:1.0
+fr:0.36363636363636365
+ing:0.25
+as:0.25
+rx:0.0
+ry:0.0
+rz:0.0
+i:
+Vstyle:part
+vs:0.2
+vr:1.0
+vg:1.0
+vb:1.0
+
+p:
+x:3.4488812833580815
+y:-0.26888325253375556
+z:1.3310278019498911
+sh:1
+s:1.0
+sx:0.9090909090909091
+sy:0.9090909090909091
+sz:0.9090909090909091
+h:0.0
+dn:1.0
+fr:0.3305785123966942
+ing:0.25
+as:0.25
+rx:0.603
+ry:-0.9391
+rz:0.3034
+i:
+Vstyle:part
+vs:0.2
+vr:1.0
+vg:1.0
+vb:1.0
+
+p:
+x:5.053754302253353
+y:-0.5377665050675111
+z:2.6620556038997822
+sh:2
+s:1.0
+sx:0.9090909090909091
+sy:0.9090909090909091
+sz:0.9090909090909091
+h:0.0
+dn:1.0
+fr:0.3305785123966942
+ing:0.25
+as:0.25
+rx:0.0
+ry:0.0
+rz:0.0
+i:
+Vstyle:part
+vs:0.2
+vr:1.0
+vg:1.0
+vb:1.0
+
+p:
+x:5.552059067218389
+y:-1.6581236294201593
+z:4.369698100138417
+sh:1
+s:1.0
+sx:0.9090909090909091
+sy:0.9090909090909091
+sz:0.9090909090909091
+h:0.0
+dn:1.0
+fr:0.3005259203606311
+ing:0.25
+as:0.25
+rx:0.603
+ry:-0.9391
+rz:0.3034
+i:
+Vstyle:part
+vs:0.2
+vr:1.0
+vg:1.0
+vb:1.0
+
+p:
+x:5.983025350431394
+y:-2.6270811423738007
+z:5.846578096885344
+sh:2
+s:1.0
+sx:0.9090909090909091
+sy:0.7527272727272727
+sz:0.7327272727272728
+h:0.0
+dn:1.0
+fr:0.27320538214602824
+ing:0.25
+as:0.25
+rx:0.0
+ry:-0.199
+rz:0.0
+i:
+Vstyle:part
+vs:0.2
+vr:1.0
+vg:1.0
+vb:1.0
+
+j:
+p1:0
+p2:1
+sh:1
+hx:0.0
+hy:0.0
+hz:0.0
+hrx:0.0
+hry:0.0
+hrz:0.0
+hxn:-1.5708
+hxp:1.5708
+hyn:-1.5708
+hyp:1.5708
+stif:1.0
+rotstif:1.0
+stam:0.25
+i:
+Vstyle:joint
+vr:1.0
+vg:1.0
+vb:1.0
+
+j:
+p1:1
+p2:2
+sh:1
+hx:0.0
+hy:0.0
+hz:0.0
+hrx:0.0
+hry:0.0
+hrz:0.0
+hxn:-1.5708
+hxp:1.5708
+hyn:-1.5708
+hyp:1.5708
+stif:1.0
+rotstif:1.0
+stam:0.25
+i:
+Vstyle:joint
+vr:1.0
+vg:1.0
+vb:1.0
+
+j:
+p1:2
+p2:3
+sh:1
+hx:0.0
+hy:0.0
+hz:0.0
+hrx:0.0
+hry:0.0
+hrz:0.0
+hxn:-1.5708
+hxp:1.5708
+hyn:-1.5708
+hyp:1.5708
+stif:0.2165289256198347
+rotstif:0.2165289256198347
+stam:0.25
+i:
+Vstyle:joint
+vr:1.0
+vg:1.0
+vb:1.0
+
+j:
+p1:3
+p2:4
+sh:1
+hx:0.0
+hy:0.0
+hz:0.0
+hrx:0.0
+hry:0.0
+hrz:0.0
+hxn:-1.5708
+hxp:1.5708
+hyn:-1.5708
+hyp:1.5708
+stif:0.9090909090909091
+rotstif:0.9090909090909091
+stam:0.25
+i:
+Vstyle:joint
+vr:1.0
+vg:1.0
+vb:1.0
+
+j:
+p1:4
+p2:5
+sh:1
+hx:0.0
+hy:0.0
+hz:0.0
+hrx:0.0
+hry:0.0
+hrz:0.0
+hxn:-1.5708
+hxp:1.5708
+hyn:-1.5708
+hyp:1.5708
+stif:0.8264462809917354
+rotstif:0.8264462809917354
+stam:0.25
+i:
+Vstyle:joint
+vr:1.0
+vg:1.0
+vb:1.0
+
+n:
+p:0
+j:-1
+d:S
+i:
+Vstyle:neuro
+
+n:
+p:0
+j:-1
+d:S
+i:
+Vstyle:neuro
+
+n:
+p:0
+j:-1
+d:S
+i:
+Vstyle:neuro
+
+n:
+p:1
+j:-1
+d:S
+i:
+Vstyle:neuro
+
+n:
+p:1
+j:-1
+d:S
+i:
+Vstyle:neuro
+
+n:
+p:1
+j:-1
+d:*
+i:
+Vstyle:neuro
+
+n:
+p:-1
+j:0
+d:M
+i:
+Vstyle:neuro
+
+n:
+p:-1
+j:0
+d:M
+i:
+Vstyle:neuro
+
+n:
+p:-1
+j:1
+d:M
+i:
+Vstyle:neuro
+
+n:
+p:2
+j:-1
+d:Gpart
+i:
+Vstyle:neuro
+
+n:
+p:3
+j:-1
+d:*
+i:
+Vstyle:neuro
+
+n:
+p:3
+j:-1
+d:*
+i:
+Vstyle:neuro
+
+n:
+p:3
+j:-1
+d:Gpart
+i:
+Vstyle:neuro
+
+n:
+p:5
+j:-1
+d:*
+i:
+Vstyle:neuro
+
+n:
+p:5
+j:-1
+d:*
+i:
+Vstyle:neuro
+
+n:
+p:5
+j:-1
+d:N
+i:
+Vstyle:neuro
+
+c:
+n1:6
+n2:4
+w:-5.154
+i:
+
+c:
+n1:7
+n2:0
+w:1.0
+i:
+
+c:
+n1:15
+n2:0
+w:1.0
+i:
+
+c:
+n1:15
+n2:2
+w:1.0
+i:
+
+c:
+n1:15
+n2:3
+w:1.0
+i:
+
+c:
+n1:15
+n2:9
+w:1.0
+i:
+
+c:
+n1:15
+n2:12
+w:1.0
+i:
+
+c:
+n1:15
+n2:14
+w:1.0
+i:
+
+
+
Index: cpp/tests/mutableparam_test.goal
===================================================================
--- cpp/tests/mutableparam_test.goal	(revision 1009)
+++ cpp/tests/mutableparam_test.goal	(revision 1009)
@@ -0,0 +1,47 @@
+
+=== Combined ===
+groups:
+- Group 1
+- Group 1: Added Group
+- Group 1: Added Group 2
+- Group 2
+- Group 3
+properties:
+- f1 (i=9)
+- f2 (i=19)
+- f3 (i=29)
+
+Now adding new property in p1...
+
+=== After adding f4 ===
+groups:
+- Group 1
+- Group 1: Added Group
+- Group 1: Added Group 2
+- Group 2
+- Group 3
+properties:
+- f1 (i=9)
+- f4 (i=10)
+- f2 (i=20)
+- f3 (i=30)
+
+=== Transaction view maintains the original index association ===
+groups:
+- Group 1
+- Group 1: Added Group
+- Group 1: Added Group 2
+- Group 2
+- Group 3
+properties:
+- f1 (i=9)
+- f2 (i=19)
+- f3 (i=29)
+
+Properties changed: YES   Groups changed: NO
+
+Now removing group in p1...
+
+Properties changed: YES   Groups changed: YES
+
+
Index: cpp/tests/neuro_layout_test.goal
===================================================================
--- cpp/tests/neuro_layout_test.goal	(revision 1009)
+++ cpp/tests/neuro_layout_test.goal	(revision 1009)
@@ -0,0 +1,29 @@
+16 neurons, using layout type=2 (Smart)
+#0   T	0,0	50x50
+#1   T	140,0	50x50
+#2   T	0,-140	50x50
+#3   *	280,0	50x50
+#4   T	140,-140	50x50
+#5   N	350,0	50x50
+#6   *	280,-140	50x50
+#7   T	280,-280	50x50
+#8   N	350,-140	50x50
+#9   N	350,-280	50x50
+#10  N	420,-140	50x50
+#11  N	420,-280	50x50
+#12  T	0,-280	50x50
+#13  N	490,-280	50x50
+#14  *	140,-280	50x50
+#15  N	560,-280	50x50
+===========================================
+   12:T          14:*          7:T    9:N    11:N   13:N   15:N   
+                                                                  
+                                                                  
+                                                                  
+   2:T           4:T           6:*    8:N    10:N                 
+                                                                  
+                                                                  
+                                                                  
+   0:T           1:T           3:*    5:N                         
+===========================================
+
Index: cpp/tests/neuro_test.goal
===================================================================
--- cpp/tests/neuro_test.goal	(revision 1009)
+++ cpp/tests/neuro_test.goal	(revision 1009)
@@ -0,0 +1,52 @@
+36 neurons,[WARN] NeuroFactory.createNeuroImpl: Neuro class 'M' does not support shape type '0'
+[WARN] NeuroNetImpl.create: neuron #11 (M) implementation not available
+[WARN] NeuroNetImpl.create: neuron #13 (DoesNotExist) implementation not available
+[WARN] NeuroNetImpl.create: neuron #15 (VEye) implementation not available
+[WARN] NeuroNetImpl.create: neuron #16 (VMotor) implementation not available
+[WARN] NeuroNetImpl.create: neuron #26 (Delay) implementation not available
+[WARN] NeuroNetImpl.create: neuron #27 (Light) implementation not available
+[WARN] NeuroNetImpl.create: neuron #28 (Nn) implementation not available
+[WARN] NeuroNetImpl.create: neuron #29 (PIDP) implementation not available
+[WARN] NeuroNetImpl.create: neuron #30 (PIDV) implementation not available
+[WARN] NeuroNetImpl.create: neuron #31 (SeeLight) implementation not available
+[WARN] NeuroNetImpl.create: neuron #32 (SeeLight2) implementation not available
+[WARN] NeuroNetImpl.create: neuron #33 (S0) implementation not available
+[WARN] NeuroNetImpl.create: neuron #34 (S1) implementation not available
+[WARN] NeuroNetImpl.create: neuron #35 (Thr) implementation not available
+[WARN] NeuroNetImpl.create: neuron #14 (Fuzzy) initialization failed
+ 15 errors:
+14 x missing implementation (#11.M,#13.DoesNotExist,#15.VEye,#16.VMotor,#26.Delay,#27.Light,#28.Nn,#29.PIDP,#30.PIDV,#31.SeeLight,#32.SeeLight2,#33.S0,#34.S1,#35.Thr)
+1 x failed initialization (#14.Fuzzy)
+step	#0.N	#1.Nu	#2.G	#3.Gpart	#4.T	#5.Tcontact	#6.Tproximity	#7.S	#8.*	#9.|	#10.@	#11.M	#12.D	#13.DoesNotExist	#14.Fuzzy	#15.VEye	#16.VMotor	#17.Sti	#18.LMu	#19.Water	#20.Energy	#21.Ch	#22.ChMux	#23.ChSel	#24.Rnd	#25.Sin	#26.Delay	#27.Light	#28.Nn	#29.PIDP	#30.PIDV	#31.SeeLight	#32.SeeLight2	#33.S0	#34.S1	#35.Thr
+0	0.000488135	0.500464	0.00215189	0.00344266	0.00102763	0.00357946	0.000448832	0.00347252	1	0.00123564	0.00145894	-0.00115618	-0.000624128	-0.00202465	0.00391773	-0.00443287	0.00463663	-0.00227344	-0.00116558	-0.000223349	0.00291725	0.00312169	0.000288949	-0.000200228	0.000680446	-0.00107215	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+1	0.00046861	0.500446	0	0	0	0	0	0	1	0	0	-0.00115618	0.000624128	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.556314	0.0627905	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+2	0.000434245	0.500413	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.719298	0.125333	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+3	0.000389383	0.50037	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.740024	0.187381	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+4	0.000337919	0.500321	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.740175	0.24869	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+5	0.00028323	0.500269	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.957237	0.309017	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+6	0.00022815	0.500217	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.0527839	0.368125	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+7	0.00017496	0.500166	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.598317	0.425779	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+8	0.00012541	0.500119	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.601822	0.481754	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+9	8.07533e-05	0.500077	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.0770413	0.535827	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+10	4.17978e-05	0.50004	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.040955	0.587785	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+11	8.96149e-06	0.500009	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.561058	0.637424	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+12	-1.7666e-05	0.499983	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.357759	0.684547	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+13	-3.82614e-05	0.499964	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.763451	0.728969	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+14	-5.32072e-05	0.499949	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.441265	0.770513	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+15	-6.30356e-05	0.49994	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.279842	0.809017	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+16	-6.83769e-05	0.499935	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.16404	0.844328	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+17	-6.99149e-05	0.499934	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.713293	0.876307	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+18	-6.83486e-05	0.499935	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.0747465	0.904827	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+19	-6.43617e-05	0.499939	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.889338	0.929776	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+20	-5.85977e-05	0.499944	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.517231	0.951057	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+21	-5.16426e-05	0.499951	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.0436967	0.968583	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+22	-4.40128e-05	0.499958	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.788185	0.982287	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+23	-3.61484e-05	0.499966	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.170676	0.992115	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+24	-2.8411e-05	0.499973	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.0527992	0.998027	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+25	-2.10846e-05	0.49998	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.470889	1	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+26	-1.43801e-05	0.499986	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.627335	0.998027	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+27	-8.44135e-06	0.499992	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.548467	0.992115	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+28	-3.35266e-06	0.499997	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	0.473836	0.982287	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+29	8.52392e-07	0.500001	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.0876993	0.968583	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+30	4.18234e-06	0.500004	0	0	0	0	0	0	1	0	0	-0.00115618	0	-0.00202465	0.00391773	-0.00443287	0.00463663	0	0	0	0	0	0	0	-0.566899	0.951057	0.00425597	0.00336079	-0.00428964	-0.00162604	-0.00412871	0.00148172	-0.00479782	-0.00131758	0.0033262	0.00457155
+
Index: cpp/tests/paramtree_paramlist_test.goal
===================================================================
--- cpp/tests/paramtree_paramlist_test.goal	(revision 1009)
+++ cpp/tests/paramtree_paramlist_test.goal	(revision 1009)
@@ -0,0 +1,28 @@
+└─┬ [Tree root]		(not a group)
+  ├─┬ Genetics		(g=0,"Genetics")
+  │ ├── Active operators		(g=1,"Genetics: Active operators")
+  │ ├── Neurons to add		(g=2,"Genetics: Neurons to add")
+  │ ├── f4		(g=3,"Genetics: f4")
+  │ ├── f9		(g=4,"Genetics: f9")
+  │ ├── fF		(g=5,"Genetics: fF")
+  │ ├── fn		(g=6,"Genetics: fn")
+  │ ├── fTest		(g=7,"Genetics: fTest")
+  │ ├─┬ fB		(g=8,"Genetics: fB")
+  │ │ ├── Mutation		(g=9,"Genetics: fB: Mutation")
+  │ │ └── Crossover		(g=10,"Genetics: fB: Crossover")
+  │ ├── fH		(g=11,"Genetics: fH")
+  │ ├─┬ fL		(g=12,"Genetics: fL")
+  │ │ ├── Probabilities of mutating axiom and rules		(g=13,"Genetics: fL: Probabilities of mutating axiom and rules")
+  │ │ └── Probabilities of mutation types		(g=14,"Genetics: fL: Probabilities of mutation types")
+  │ └── fS		(g=15,"Genetics: fS")
+  ├── Geno		(g=16,"Geno")
+  ├── Model		(g=17,"Model")
+  ├── Vector		(g=18,"Vector")
+  ├── Dictionary		(g=19,"Dictionary")
+  ├── XYZ		(g=20,"XYZ")
+  ├── Orient		(g=21,"Orient")
+  ├── Genotype		(g=22,"Genotype")
+  └─┬ Creature		(not a group)
+    ├── Neurons		(g=23,"Creature: Neurons")
+    └── Geometry		(g=24,"Creature: Geometry")
+
Index: cpp/tests/paramtree_stdin_test.goal
===================================================================
--- cpp/tests/paramtree_stdin_test.goal	(revision 1009)
+++ cpp/tests/paramtree_stdin_test.goal	(revision 1009)
@@ -0,0 +1,12 @@
+(loading group names from stdin)
+7 groups
+
+└─┬ [Tree root]		(not a group)
+  ├─┬ a		(g=0,"a")
+  │ ├── z		(g=2,"a: z")
+  │ ├─┬ b		(g=3,"a: b")
+  │ │ ├── d		(g=1,"a: b: d")
+  │ │ └── c		(g=4,"a: b: c")
+  │ └── y		(g=5,"a: y")
+  └── A		(g=6,"A")
+
Index: cpp/tests/part_shapes.goal
===================================================================
--- cpp/tests/part_shapes.goal	(revision 1009)
+++ cpp/tests/part_shapes.goal	(revision 1009)
@@ -0,0 +1,44 @@
+//0s
+p:sh=1, sy=0.7, sz=0.4
+p:1.0, sh=1, sx=0.9, sy=0.63, sz=0.36000000000000004, rx=0.10000000000000003, 0.19999999999999998, 0.29999999999999993
+p:1.8426640272257795, 0.260666529862964, 0.1788023977155551, sh=1, sx=0.81, sy=0.5670000000000001, sz=0.32400000000000007, rx=0.13808669019769443, 0.42035825292871176, 0.5983443807960972
+p:2.453676692193477, 0.6771993843888386, 0.50935330809034, sh=1, sx=0.7290000000000001, sy=0.5103000000000001, sz=0.2916000000000001, rx=0.09931899168188495, 0.6411696655688546, 0.9281320894976495
+p:2.8038163494411, 1.144867119871271, 0.9453924228624562, sh=1, sx=0.6561000000000001, sy=0.45927000000000007, sz=0.26244000000000006, rx=-0.0508678834140355, 0.8352605372405658, 1.3398264106880768
+p:2.9045952639659256, 1.5734096003943585, 1.4318717777936978, sh=1, sx=0.5904900000000002, sy=0.41334300000000007, sz=0.23619600000000007, rx=-0.35230461258336737, 0.9570308312423439, 1.8863978754398574
+p:2.7990344836199674, 1.8967049535832903, 1.9145885439819008, sh=1, sx=0.5314410000000002, sy=0.3720087000000001, sz=0.21257640000000008, rx=-0.7405336877073184, 0.9531453201489807, 2.5147044296432366
+p:2.549785601507846, 2.077250744420876, 2.3478410669493828, sh=1, sx=0.47829690000000014, sy=0.3348078300000001, sz=0.1913187600000001, rx=-1.0334725042183834, 0.8257581906137964, 3.0533851341586113
+p:2.2267611218154277, 2.1058180609178136, 2.6994189651415414, sh=1, sx=0.43046721000000016, sy=0.30132704700000007, sz=0.1721868840000001, rx=-1.1761487722698027, 0.6291781757493043, -2.824331705531365
+p:1.8960928227086258, 1.9972423634866159, 2.952740525176071, sh=1, sx=0.38742048900000015, sy=0.27119434230000006, sz=0.15496819560000008, rx=-1.209905083954168, 0.4077881373309235, -2.497457349984353
+p:1.6117065276381082, 1.783670701302811, 3.106383668808028, sh=1, sx=0.34867844010000015, sy=0.24407490807000007, sz=0.13947137604000007, rx=-1.1680909122962837, 0.18806847422834463, -2.1997658329492182
+p:0.04894345998764038, z=0.30901700258255005, sh=3, sx=0.3128689344768277, sy=0.05, sz=0.05, rx=-1.546024634805094, 1.41371677309148
+p:0.23992645740509033, z=0.8968022465705872, sh=3, sx=0.3128689224093409, sy=0.05, sz=0.05, rx=-1.343474826195397, 1.0995573606273648
+p:0.6031977534294128, z=1.3968022465705872, sh=3, sx=0.3128689534320107, sy=0.05, sz=0.05, rx=-0.9553166181245092, 0.7853981633974483
+p:1.1031978130340576, z=1.7600735425949097, sh=3, sx=0.3128689755174676, sy=0.05, sz=0.05, rx=-0.5194665743234458, 0.4712388796778248
+p:1.6909830570220947, z=1.9510565400123596, sh=3, sx=0.3128688756060144, sy=0.05, sz=0.05, rx=-0.15900495985476545, 0.15707958350572937
+p:2.309017062187195, z=1.9510564804077148, sh=3, sx=0.31286900267186113, sy=0.05, sz=0.05, rx=0.15900509312057215, -0.15707971206553287
+p:2.896802306175232, z=1.760073482990265, sh=3, sx=0.3128688422412704, sy=0.05, sz=0.05, rx=0.5194665784785317, -0.47123888291162425
+p:3.3968021869659424, z=1.3968023657798767, sh=3, sx=0.31286882699146806, sy=0.05, sz=0.05, rx=0.9553164276144905, -0.7853980286865252
+p:3.76007342338562, z=0.8968026340007782, sh=3, sx=0.3128687896390344, sy=0.05, sz=0.05, rx=1.3434746156488504, -1.0995571444029681
+p:3.951056480407715, z=0.30901766021781896, sh=3, sx=0.3128688240996787, sy=0.05, sz=0.05, rx=1.5460245560475507, -1.4137165243302325
+j:0, 1, sh=1
+j:1, 2, sh=1
+j:2, 3, sh=1
+j:3, 4, sh=1
+j:4, 5, sh=1
+j:5, 6, sh=1
+j:6, 7, sh=1
+j:7, 8, sh=1
+j:8, 9, sh=1
+j:9, 10, sh=1
+j:10, 11, sh=1
+j:11, 12, sh=1
+j:12, 13, sh=1
+j:13, 14, sh=1
+j:14, 15, sh=1
+j:15, 16, sh=1
+j:16, 17, sh=1
+j:17, 18, sh=1
+j:18, 19, sh=1
+j:19, 20, sh=1
+
+
Index: cpp/tests/saver_test_geno.goal
===================================================================
--- cpp/tests/saver_test_geno.goal	(revision 1009)
+++ cpp/tests/saver_test_geno.goal	(revision 1009)
@@ -0,0 +1,2 @@
+Saving 7 genotypes to _tmp_saver_test_output.gen
+
Index: cpp/tests/serial_test.goal
===================================================================
--- cpp/tests/serial_test.goal	(revision 1009)
+++ cpp/tests/serial_test.goal	(revision 1009)
@@ -0,0 +1,19 @@
+DESERIALIZATION TEST
+input string = [1,2,3,null,{"x":3.4,"y":[7,77,777]},4]
+OK, consumed 39 of 39 characters
+
+Vector object:
+   int:1
+   int:2
+   int:3
+   null
+   Dictionary object:
+      key "y"
+         Vector object:
+            int:7
+            int:77
+            int:777
+      key "x"
+         double:3.4
+   int:4
+
Index: cpp/tests/shapeconvert.goal
===================================================================
--- cpp/tests/shapeconvert.goal	(revision 1009)
+++ cpp/tests/shapeconvert.goal	(revision 1009)
@@ -0,0 +1,10 @@
+//0s
+p:0.5, sh=3, sx=0.5, sy=0.20000000298023224, sz=0.20000000298023224, rx=-1.5707963267948966, rz=3.141592653589793
+p:1.249998939636273, -0.4330133140917716, sh=3, sx=0.5, sy=0.20000000298023224, sz=0.20000000298023224, rz=2.0943926535897934
+p:1.249998939636273, 0.4330133140917716, sh=3, sx=0.5, sy=0.20000000298023224, sz=0.20000000298023224, rz=-2.0943926535897934
+p:1.7499968189088184, 1.2990399422753147, sh=3, sx=0.5, sy=0.20000000298023224, sz=0.20000000298023224, rz=-2.0943926535897934
+j:0, 1, sh=1
+j:0, 2, sh=1
+j:2, 3, sh=1
+
+
