[llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/Makefile neural.c ref.in test.in
Chris Lattner
lattner at cs.uiuc.edu
Sat Oct 11 16:20:39 PDT 2003
Changes in directory llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural:
Makefile added (r1.1)
neural.c added (r1.1)
ref.in added (r1.1)
test.in added (r1.1)
---
Log message:
Initial checkin of the FreeBench benchmark suite
---
Diffs of the changes: (+1810 -0)
Index: llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/Makefile
diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/Makefile:1.1
*** /dev/null Sat Oct 11 16:18:57 2003
--- llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/Makefile Sat Oct 11 16:18:47 2003
***************
*** 0 ****
--- 1,12 ----
+ LEVEL = ../../../../../..
+
+ PROG = neural
+ CPPFLAGS = -DVERSION='"1.00"' -DCOMPDATE="\"today\"" -DCFLAGS='""' -DHOSTNAME="\"thishost\""
+ LDFLAGS = -lm
+ ifdef LARGE_PROBLEM_SIZE
+ RUN_OPTIONS = ref.in
+ else
+ RUN_OPTIONS = test.in
+ endif
+ include $(LEVEL)/test/Programs/MultiSource/Makefile.multisrc
+
Index: llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/neural.c
diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/neural.c:1.1
*** /dev/null Sat Oct 11 16:18:58 2003
--- llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/neural.c Sat Oct 11 16:18:47 2003
***************
*** 0 ****
--- 1,785 ----
+ /* (C) 1996, 2001 Fredrik Warg
+ *
+ * CHANGELOG
+ * 2001-02-06: This program was originally an assignment in a course in
+ * neural networks, all the way back in 1996. It has been modified for use
+ * with FreeBench.
+ *
+ * 1996-09-29:
+ * This program stores letters represented as x*y bit patterns in a Hopfield
+ * network using Hebbian/Delta learning. The program can be trained with all letters
+ * at once or step-by-step so that the progress can be studied closely. Functions
+ * for unlearning using random vectors and for creating generators for the
+ * stored patterns using the clamping method are also available. For the function
+ * that find the closest stable state for a probe vector, both bipolar and
+ * continuous versions are available. The program uses a simple menu system for
+ * manouvering. The letters are read from the file 'w.txt'.
+ *
+ * The program has no error-detection code. Erroneus input or failure to find
+ * the input file will create undefined output. So will using the functions
+ * in the menu in the wrong order or using a wrongly formatted input file :)
+ */
+
+ /* include files */
+ #include <stdio.h>
+ #include <string.h>
+ #include <stdlib.h>
+ #include <math.h>
+
+ #define BENCHMARK /* Run the program as a benchmark */
+
+ /* flags for normal or complement hamming distance computation mode */
+ #define MODE_NORMAL 1
+ #define MODE_COMPLEMENT -1
+
+ /* flags for all at once or step by step T-matrix computation mode */
+ #define MODE_ALL 1
+ #define MODE_TRACE 2
+
+ /* flags for continuous or two-valued neuron mode */
+ #define MODE_CONT 1
+ #define MODE_BIN 2
+
+ /* Parametrizing the NN */
+
+ /*
+ #define NNWIDTH 30
+ #define NNHEIGHT 42
+ #define NNTOT 1260
+ #define NUMPATS 10
+ */
+
+ int NNWIDTH;
+ int NNHEIGHT;
+ int NNTOT;
+ int NUMPATS;
+
+ /* Typedefs */
+ typedef enum {WFALSE, WTRUE} wbool;
+ typedef float real;
+
+ /* Global variables */
+
+ /*
+ char vnames[NUMPATS];
+ int vectors[NUMPATS][NNTOT], newvectors[NUMPATS][NNTOT], generators[NUMPATS][NNTOT];
+ real Tmatrix[NNTOT][NNTOT];
+ */
+
+ char *vnames;
+ int *stored;
+ real **Tmatrix;
+ int **vectors, **newvectors, **generators;
+ int nmode=MODE_BIN;
+ unsigned long randnum;
+
+
+ /* Function Declarations */
+ static int hamming(int *ny, int *orig, int mode);
+ static void checkham ();
+ static void generateT (int mode);
+ static void delta(real n);
+ static int run (signed int *source, signed int *dest);
+ static void readvector (FILE *fp);
+ static void storecheck ();
+ static void printT();
+ static void printV(int vector, signed int *vect);
+ static void unlearn(int seed, int iter);
+ static int runcont(signed int *source, signed int *dest);
+ static void mysrand(unsigned long seed);
+ static real myrand();
+ static double myexp(double in);
+
+ #ifndef BENCHMARK
+ static void printvec (int vecs[][]);
+ static void makegenerators(int n);
+ static void usegenerators(int n);
+ #endif
+
+ /* The main function types the menu and calls the appropriate function requested by the user
+ * until the user types 'q' to quit the program. */
+ int main (int c, char *v[])
+ {
+ FILE *fp;
+ char indata[100];
+ int i;
+
+ fprintf(stderr,"Compile date: %s\n", COMPDATE);
+ fprintf(stderr,"Compiler switches: %s\n", CFLAGS);
+
+ if (c!=2) {
+ fprintf(stderr,"Wrong number of arguments, 1 needed, %d specified.\n",c-1);
+ fprintf(stderr,"USAGE: %s <datafile>\n",v[0]);
+ exit(1);
+ }
+
+ fp=fopen(v[1], "r");
+ if (fp==NULL) {
+ fprintf(stderr,"ABORT: Could not read datafile %s\n",v[1]);
+ exit(1);
+ }
+
+ /* Size of NeuralNet specifed in datafile. */
+ fgets(indata,99,fp);
+ NNWIDTH = atoi(indata);
+ fgets(indata,99,fp);
+ NNHEIGHT = atoi(indata);
+ fgets(indata,99,fp);
+ NUMPATS = atoi(indata);
+ NNTOT = NNWIDTH*NNHEIGHT;
+
+ printf("Matrix size is %dx%d\n",NNWIDTH,NNHEIGHT);
+
+ /* Allocating lots of space... */
+
+ vnames = (char *)malloc(sizeof(char)*NUMPATS);
+ stored = (int *)malloc(sizeof(int)*NUMPATS);
+ if (!vnames || !stored) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+
+ Tmatrix = (real **)malloc(sizeof(real *)*NNTOT);
+ if (!Tmatrix) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+ for (i=0; i<NNTOT; i++) {
+ Tmatrix[i] = (real *)malloc(sizeof(real)*NNTOT);
+ if (!Tmatrix[i]) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+ }
+
+ vectors = (int **)malloc(sizeof(int *)*NUMPATS);
+ newvectors = (int **)malloc(sizeof(int *)*NUMPATS);
+ generators = (int **)malloc(sizeof(int *)*NUMPATS);
+ if (!vectors || !newvectors || !generators) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+ for (i=0; i<NUMPATS; i++) {
+ vectors[i] = (int *)malloc(sizeof(int)*NNTOT);
+ newvectors[i] = (int *)malloc(sizeof(int)*NNTOT);
+ generators[i] = (int *)malloc(sizeof(int)*NNTOT);
+ if (!vectors[i] || !newvectors[i] || !generators[i]) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+ }
+
+ /* Do some operations (This is for FreeBench) */
+ readvector(fp); /* read from file */
+ printf("Checking hamming distances...\n");
+ checkham(); /* check hamming distances */
+ printf("Generating T matrix...\n");
+ generateT(MODE_ALL); /* generate t matrix */
+
+ #if 0
+ printf("Store check...\n");
+ storecheck(); /* check if vectors were stored */
+
+ printf("Applying unlearning vectors...\n");
+ unlearn(10,15);
+ storecheck(); /* check if vectors were stored */
+ #endif
+
+ nmode=MODE_CONT; /* set continuous neuron mode */
+ printf("Delta learning...\n");
+ delta(0.5); /* try to learn vectors using delta learning */
+ printf("Store check...\n");
+ storecheck(); /* check if vectors were stored */
+
+
+ /* original menu system removed
+ char option;
+
+ printf("\nNeural Computing - assignment 1\n\n");
+ do {
+ printf("\nr - read vectors from file and check hamming distances\np - print original vectors");
+ printf("\nt - generate T-matrix\ns - generate T-matrix step-by-step");
+ printf("\nc - check if vectors are stored\nu - unlearning");
+ printf("\ng - compute generators for stored vectors and use the generators to print original vectors");
+ printf("\nm - print T-matrix\nz - set continuous neuron mode\nx - set two-valued neuron mode (default)");
+ printf("\nq - quit program\nOption > ");
+ option=getchar();
+ getchar();
+ switch(option) {
+ case 'r' :
+ readvector();
+ checkham();
+ break;
+ case 'p' :
+ printvec(vectors);
+ break;
+ case 't' :
+ generateT(MODE_ALL);
+ break;
+ case 's' :
+ generateT(MODE_TRACE);
+ break;
+ case 'c' :
+ storecheck();
+ break;
+ case 'u' :
+ unlearn();
+ break;
+ case 'g' :
+ makegenerators();
+ usegenerators();
+ break;
+ case 'm' :
+ printT();
+ break;
+ case 'z' :
+ nmode=MODE_CONT;
+ printf("Continuous meurons used!");
+ break;
+ case 'x' :
+ nmode=MODE_BIN;
+ printf("Two-valued neurons used");
+ break;
+ }
+ } while(option != 'q');
+ */
+
+ return 0;
+ } /* main */
+
+
+ /* Computes the hamming distance between ny and orig, two 35-bit vectors.
+ * Mode is one of MODE_NORMAL or MODE_COMPLEMENT. The latter computes the
+ * hamming distence between ny and the complement vector of orig. */
+ static int hamming(signed int *ny, signed int *orig, int mode)
+ {
+ int hd=0, neuron;
+
+ for(neuron=0; neuron<NNTOT; neuron++)
+ if(ny[neuron] != (orig[neuron]*mode))
+ hd++;
+ return hd;
+ } /* hamming */
+
+
+ /* Checks the hamming distance between all vectors and complements of the global
+ * ten-letter storage variable 'vectors'. If the hamming distance
+ * is less than 2 the output is highlighted with square brackets because a hamming
+ * distance of <2 is not allowed and the original vectors will have to be changed. */
+ static void checkham()
+ {
+ int vec, comp, hd;
+ int hamwarn=0;
+
+ /* printf("\nHamming distances for original vectors:\n"); */
+ for(vec=0; vec<NUMPATS; vec++) {
+ for(comp=(vec+1); comp<NUMPATS; comp++) {
+ if((hd=hamming(vectors[vec], vectors[comp], MODE_NORMAL))<2)
+ /* printf ("[!!%c-%c->%d!!] ", vnames[vec], vnames[comp], hd); */ hamwarn++;
+ else
+ /* printf ("%c-%c->%d ",vnames[vec], vnames[comp], hd) */ ;
+ if((hd=hamming(vectors[vec], vectors[comp], MODE_COMPLEMENT))<2)
+ /* printf ("[!!%c-%c'->%d!!] ", vnames[vec], vnames[comp], hd); */ hamwarn++;
+ else
+ /* printf ("%c-%c'->%d ",vnames[vec], vnames[comp], hd)*/ ;
+ } /* for */
+ } /* for */
+ /* printf("\n"); */
+ if (hamwarn)
+ printf("WARNING: %d vectors have a hamming distance <2, please modify input vectors!\n",hamwarn);
+
+ } /* checkham */
+
+
+ /* Generates a T-matrix with Hebbian learning. Mode can be MODE_ALL or MODE_TRACE.
+ * MODE_ALL trains all 10 vectors at once and MODE_TRACE views the current
+ * learning status between each vector. */
+ static void generateT(int mode)
+ {
+ int row, col, vec;
+ char option='0';
+
+ for(row=0; row<NNTOT; row++)
+ for(col=0; col<NNTOT; col++)
+ Tmatrix[row][col]=0.0;
+
+ for(vec=0; vec<10; vec++) {
+ for(row=0; row<NNTOT; row++) {
+ for(col=0; col<NNTOT; col++) {
+ if(row==col)
+ Tmatrix[row][col]=0.0;
+ else
+ Tmatrix[row][col]+=vectors[vec][row]*vectors[vec][col];
+ } /* for */
+ } /* for */
+ if (mode==MODE_TRACE) {
+ storecheck();
+ printf("\nc-cont, b-break: ");
+ option=getchar();
+ getchar();
+ } /* if */
+ if(option=='b')
+ break;
+ } /* for */
+
+ } /* generateT */
+
+
+ /* Trains the T-matrix with Delta learning. The learning rate, c, can be
+ * altered in order to study the effects of different learning rates. */
+ static void delta (real n)
+ {
+ int vec, row, col, neuron;
+ real *tempvecC; /* n=0.5 */
+ wbool status;
+
+ tempvecC=(real *)malloc(NNTOT*sizeof(real));
+ if (!tempvecC) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+ /* Set learning rate
+ if (nn==-1.0) {
+ printf("\nChoose value n: ");
+ scanf("%f", &n);
+ getchar();
+ */
+
+ do {
+ status=WTRUE;
+ for(vec=0; vec<NUMPATS; ++vec) {
+
+ if(nmode==MODE_BIN)
+ run(vectors[vec], newvectors[vec]);
+ else
+ runcont(vectors[vec], newvectors[vec]);
+
+ for(neuron=0; neuron<NNTOT; ++neuron)
+ if((tempvecC[neuron]=(real)(vectors[vec][neuron]-newvectors[vec][neuron])*n) != 0.0)
+ status=WFALSE;
+
+ for(row=0; row<NNTOT; ++row) {
+ for(col=0; col<NNTOT; ++col) {
+ if(row==col)
+ Tmatrix[row][col]=0.0;
+ else
+ Tmatrix[row][col]+=tempvecC[row]*(real)(vectors[vec][col]);
+ } /* for */
+ } /* for */
+
+ } /* for */
+ } while (!status);
+
+ } /* delta */
+
+
+ /* Updates the vector in source with asynchronous updating and places the result in dest.
+ * This function uses the sgn function for the updating. The number of iterations needed
+ * to reach a stable state is returned. */
+ static int run (signed int *source, signed int *dest)
+ {
+ signed int neuron, thesum, row, max=0, *tempvecA, *tempvecB;
+ wbool stable=WFALSE;
+
+ tempvecA=(int *)malloc(NNTOT*sizeof(int));
+ tempvecB=(int *)malloc(NNTOT*sizeof(int));
+
+ if (!tempvecA || !tempvecB) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+
+ for(neuron=0; neuron<NNTOT; neuron++)
+ tempvecA[neuron]=source[neuron];
+
+ while((!stable) && (max<500)) {
+ for(row=0; row<NNTOT; row++) {
+ thesum=0;
+ for(neuron=0; neuron<NNTOT; neuron++)
+ thesum+=Tmatrix[row][neuron]*tempvecA[neuron];
+ tempvecB[row]= (thesum>=0) ? 1 : -1;
+ } /* for */
+ for(neuron=0; neuron<NNTOT; neuron++)
+ if(tempvecA[neuron]==0)
+ tempvecA[neuron]=tempvecB[neuron];
+ if(hamming(tempvecB, tempvecA, MODE_NORMAL)==0)
+ stable=WTRUE;
+ else {
+ neuron=0;
+ while((neuron<NNTOT) && (tempvecB[neuron]==tempvecA[neuron]))
+ neuron++;
+ tempvecA[neuron]=tempvecB[neuron];
+ } /* else */
+ max++;
+ } /* while */
+
+ if(max==500)
+ printf("Warning! No stable state reached after 500 iterations, aborting!");
+
+ for(neuron=0; neuron<NNTOT; neuron++)
+ dest[neuron]=tempvecA[neuron];
+
+ return max;
+
+ } /* run */
+
+
+ /* Reads NUMPATS bit patterns from the file 'w.txt' and places them in 'vectors'. The actual
+ * letters are stored in 'vnames'. The patterns are stored as -1 (.) and +1 (X). */
+ static void readvector (FILE *fp)
+ {
+ char *srow;
+ int vec, row, column, vpos;
+
+ srow = (char *)malloc((NNWIDTH+2)*sizeof(char));
+ if (!srow) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+
+ for(vec=0; vec<NUMPATS; vec++) {
+ vpos=0;
+ fscanf(fp, "%s", srow);
+ vnames[vec]=srow[0];
+ for(row=0; row<NNHEIGHT; row++) {
+ fscanf(fp, "%s", srow);
+ for(column=0; column<NNWIDTH; column++) {
+ vectors[vec][vpos] = (srow[column]=='X') ? 1 : -1;
+ vpos++;
+ } /* for */
+ } /* for */
+ } /* for */
+ fclose(fp);
+
+ printf("Vectors read from file!\n");
+ } /* readvector */
+
+
+ /* Checks all original vectors to see if they are stored. All vectors are written on the
+ * screen. If a vector is stored the word 'Stored' appears beneath the typed pattern,
+ * otherwise the hamming distance between the original and computed vector is displayed.
+ * The number of iterations needed to reach a stable state is displayed below the "hamming
+ * distance or stored" line. */
+ static void storecheck ()
+ {
+ int vec, hd, *iter;
+
+ iter = (int *)malloc((NUMPATS)*sizeof(int));
+ if (!iter) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+
+ for(vec=0; vec<NUMPATS; vec++)
+ if(nmode==MODE_BIN)
+ iter[vec]=run(vectors[vec], newvectors[vec]);
+ else
+ iter[vec]=runcont(vectors[vec], newvectors[vec]);
+
+ /* putchar('\n');
+ printvec(newvectors); */
+
+ for(vec=0; vec<NUMPATS; vec++) {
+ if((hd=hamming(vectors[vec], newvectors[vec], MODE_NORMAL))==0) {
+ stored[vec]=1;
+ printf("Pattern %d stored.\n", vec);
+ }
+ else {
+ stored[vec]=0;
+ printf("Pattern %d: hamming distance=%-.2d.\n",vec,hd);
+ }
+ } /* for */
+
+ /*
+ printf("\nNumber of iterations used:\n");
+ for (vec=0; vec<NUMPATS; vec++)
+ printf("%.5d ", iter[vec]);
+ putchar('\n');
+ */
+
+ } /* storecheck */
+
+
+ #ifndef BENCHMARK
+ /* Prints the vectors in the NUMPATS vector storage variable 'vecs' on the screen. -1's are
+ * printed as '.' and +1's as 'X' */
+ static void printvec (int vecs[][])
+ {
+ int row, vec, neuron;
+
+ for(row=0; row<NNHEIGHT; row++) {
+ for(vec=0; vec<NUMPATS; vec++) {
+ for(neuron=0; neuron<NNWIDTH; neuron++) {
+ if(vecs[vec][row*NNWIDTH+neuron]==1)
+ putchar('X');
+ else
+ putchar('.');
+ } /* for */
+ printf(" ");
+ } /* for */
+ putchar('\n');
+ } /* for */
+ putchar ('\n');
+ } /* printvec */
+ #endif
+
+ /* Prints the T-matrix on the screen. */
+ static void printT()
+ {
+ int row, col;
+
+ putchar('\n');
+ printf("The T-matrix:\n");
+
+ for (row=0; row<NNTOT; row++) {
+ for(col=0; col<NNTOT; col++)
+ printf("%.1f ", Tmatrix[row][col]);
+ putchar('\n');
+ } /* for */
+
+ putchar('\n');
+ } /* printT */
+
+
+ /* Prints the vector vect on screen as 1's and -1's. The argument 'vector' is used to
+ * indicate the number of the vector so that the actual letter can be printed from vnames. */
+ static void printV (int vector, signed int vect[])
+ {
+ int neuron;
+
+ printf("%c -> ",vnames[vector]);
+ for (neuron=0; neuron<NNTOT; ++neuron)
+ if(vect[neuron] != 0)
+ printf("%d ", vect[neuron]);
+ putchar('\n');
+ } /* printV */
+
+
+ /* Applies random unlearning to the T-matrix. The user is asked to type in a random
+ * seed and number of unlearning vectors (recommended about 100).
+ * Unlearning could improve the number of stored patterns, on the other hand, it
+ * might also make things worse ;)
+ */
+ static void unlearn (int seed, int iter)
+ {
+ int vecs, neuron, row, col;
+ real *tempvec;
+
+ tempvec = (real *)malloc((NNTOT)*sizeof(real));
+ if (!tempvec) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+
+ /*
+ printf("\nRandom seed: ");
+ scanf("%d", &seed);
+ srand(seed);
+ printf("\nNumber of unlearning vectors: ");
+ scanf("%d", &iter);
+ getchar();
+ */
+
+ mysrand(seed);
+
+ for(vecs=0; vecs<iter; vecs++) {
+ for(neuron=0; neuron<NNTOT; neuron++)
+ tempvec[neuron]= (myrand()>=0.5) ? 1 : -1;
+ for(row=0; row<NNTOT; row++) {
+ for(col=0; col<NNTOT; col++) {
+ if(row==col)
+ Tmatrix[row][col]=0.0;
+ else
+ Tmatrix[row][col]+=0.01*tempvec[row]*tempvec[col];
+ } /* for */
+ } /* for */
+ } /* for */
+
+ } /* unlearn */
+
+
+ /* Creates generators for all (or n first) stored vectors in 'newvectors' and places the
+ * generators in the global variable 'generators'. The generators are found using
+ * the clamping method. */
+ #ifndef BENCHMARK
+ static void makegenerators (int n)
+ {
+ int vec, neuron, generator, count=0;
+ signed int probe[NNTOT], dest[NNTOT];
+
+ probe = (int *)malloc((NNTOT)*sizeof(int));
+ dest = (int *)malloc((NNTOT)*sizeof(int));
+ if (!probe || !dest) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+
+ for(vec=0; vec<NUMPATS; vec++)
+ for(neuron=0; neuron<NNTOT; neuron++)
+ generators[vec][neuron]=0;
+
+ for(vec=0; vec<NUMPATS; vec++) {
+ if(hamming(vectors[vec], newvectors[vec], MODE_NORMAL)==0) {
+ generator=0;
+ for(neuron=0; neuron<NNTOT; neuron++)
+ probe[neuron]=0;
+ do {
+ probe[generator]=newvectors[vec][generator];
+ if(nmode==MODE_BIN)
+ run(probe, dest);
+ else
+ runcont(probe, dest);
+ generator++;
+ } while((hamming(dest, newvectors[vec], MODE_NORMAL) != 0) && (generator<NNTOT));
+ for(neuron=0; neuron<NNTOT; neuron++)
+ generators[vec][neuron]=probe[neuron];
+ count++; if (count>=n) break;
+ } /* if */
+ } /* for */
+ } /* generators */
+
+
+ /* Proves that the generators works by computing the original vector from the
+ * generator and print it on the screen. */
+ static void usegenerators (int n)
+ {
+ signed int genvec[NUMPATS][NNTOT];
+ int vec, neuron, count=0;
+
+ for(vec=0; vec<NUMPATS; vec++)
+ for(neuron=0; neuron<NNTOT; neuron++)
+ genvec[vec][neuron]=0;
+
+ for(vec=0; vec<NUMPATS; vec++) {
+ if(generators[vec][0] != 0) {
+ printV(vec, generators[vec]);
+ if(nmode==MODE_BIN)
+ run(generators[vec], genvec[vec]);
+ else
+ runcont(generators[vec], genvec[vec]);
+ } /* if */
+ if (stored[vec]) count++; if (count>=n) break;
+ }
+ printf("\nThe vectors recreated using the generators:\n");
+ printvec(genvec);
+ putchar('\n');
+
+ } /* usegenerators */
+ #endif
+
+ /* Same as run, updates 'source' until a stable state is reached and copies the
+ * computed vector to 'dest'. But runcont uses continuous neurons. Number of iterations
+ * needed to reach a stable state is returned. */
+ static int runcont (signed int source[], signed int dest[])
+ {
+ signed int neuron, row, max=0, maxcont=0;
+ real *tempvecA, thesum;
+ signed int *tempvecC;
+ wbool stable=WFALSE, threshold=WFALSE;
+
+ tempvecA = (real *)malloc((NNTOT)*sizeof(real));
+ tempvecC = (signed int *)malloc((NNTOT)*sizeof(signed int));
+ if (!tempvecA || !tempvecC) {
+ fprintf(stderr,"ABORT: Out of memory\n");
+ exit(1);
+ }
+
+ for(neuron=0; neuron<NNTOT; neuron++)
+ tempvecA[neuron]=dest[neuron]=source[neuron];
+
+ while((!stable) && (max<500)) {
+ maxcont=0;
+ for(row=0; row<NNTOT; row++) {
+ thesum=0.0;
+ for(neuron=0; neuron<NNTOT; neuron++)
+ thesum+=Tmatrix[row][neuron]*source[neuron];
+ tempvecA[row]=(1.0-myexp(-1.0*thesum))/(1.0+myexp(-1.0*thesum));
+ } /* for */
+ while((!threshold) && (maxcont<50)) {
+ threshold=WTRUE;
+ for(row=0; row<NNTOT; row++) {
+ if(fabs(tempvecA[row])<0.7) {
+ thesum=0.0;
+ for(neuron=0; neuron<NNTOT; neuron++)
+ thesum+=Tmatrix[row][neuron]*tempvecA[neuron];
+ if ((tempvecA[row]=(1.0-myexp(-1.0*thesum))/(1.0+myexp(-1.0*thesum)))<0.7)
+ threshold=WFALSE;
+ } /* if */
+ }
+ maxcont++;
+ } /* while */
+ for(neuron=0; neuron<NNTOT; neuron++)
+ tempvecC[neuron] = (tempvecA[neuron]>0) ? 1 : -1;
+ if(hamming(dest, tempvecC, MODE_NORMAL)==0)
+ stable=WTRUE;
+ else {
+ neuron=0;
+ while((neuron<NNTOT) && (dest[neuron]==tempvecC[neuron]))
+ neuron++;
+ dest[neuron]=tempvecC[neuron];
+ for(neuron=0; neuron<NNTOT; neuron++)
+ tempvecA[neuron]=dest[neuron];
+ } /* else */
+ max++;
+ } /* while */
+
+ if(max==500)
+ printf("Warning! No stable state reached after 500 iterations!");
+ return max;
+
+ } /* runcont */
+
+ /* A pseudo-random algorithm, just to make sure you always get the
+ * same pseudo-random sequence, to make sure the benchmark is fair for all
+ * platforms. For our purposes, it is not very important that this algorithm
+ * gives a good random sequence, so don't worry about the quality of it.
+ */
+ static void mysrand(unsigned long seed) {
+ randnum = seed;
+ }
+
+ static real myrand() {
+ randnum = (randnum*1103515245+12345)%4294967296;
+ return ((real)randnum/(real)4294967296);
+ }
+
+ static double myexp(double in)
+ {
+ if (in>2.0e2)
+ in=200.0;
+ if (in<-2.0e2)
+ in=-200.0;
+
+ return exp(in);
+ }
+
+ /* END OF PROGRAM */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/ref.in
diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/ref.in:1.1
*** /dev/null Sat Oct 11 16:18:58 2003
--- llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/ref.in Sat Oct 11 16:18:47 2003
***************
*** 0 ****
--- 1,720 ----
+ 50
+ 70
+ 10
+ F
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ r
+ ..................................................
+ .X....X....X....X....X....X....X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ ..................................................
+ .X....X....X....X....X....X....X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ ..................................................
+ .X....X....X....X....X....X....X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ ..................................................
+ .X....X....X....X....X....X....X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ ..................................................
+ .X....X....X....X....X....X....X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ ..................................................
+ .X....X....X....X....X....X....X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ ..................................................
+ .X....X....X....X....X....X....X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ ..................................................
+ .X....X....X....X....X....X....X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ ..................................................
+ .X....X....X....X....X....X....X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ ..................................................
+ .X....X....X....X....X....X....X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ ..................................................
+ .X....X....X....X....X....X....X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ .X....X....X....X....X....X....X....X....X....X...
+ e
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....X....X....X....X....X....X....
+ X....X....X....X....X....X....X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ d
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ ....X....X....X....X....X....X....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX
+ i
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ K
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...XX...XX...XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...XX...XX...XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...XX...XX...XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...XX...XX...XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...XX...XX...XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...XX...XX...XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...XX...XX...XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...XX...XX...XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...XX...XX...XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...XX...XX...XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ W
+ ..................................................
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ ..................................................
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ ..................................................
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ ..................................................
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ ..................................................
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ ..................................................
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ ..................................................
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ ..................................................
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ ..................................................
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ ..................................................
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ A
+ ..X....X....X....X....X....X....X....X....X....X..
+ .X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ ..X....X....X....X....X....X....X....X....X....X..
+ .X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ ..X....X....X....X....X....X....X....X....X....X..
+ .X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ ..X....X....X....X....X....X....X....X....X....X..
+ .X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ ..X....X....X....X....X....X....X....X....X....X..
+ .X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ ..X....X....X....X....X....X....X....X....X....X..
+ .X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ ..X....X....X....X....X....X....X....X....X....X..
+ .X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ ..X....X....X....X....X....X....X....X....X....X..
+ .X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ ..X....X....X....X....X....X....X....X....X....X..
+ .X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ ..X....X....X....X....X....X....X....X....X....X..
+ .X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ G
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X....X....X....X....X....X....X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X....X....X....X....X....X....X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X....X....X....X....X....X....X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X....X....X....X....X....X....X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X....X....X....X....X....X....X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X....X....X....X....X....X....X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X....X....X....X....X....X....X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X....X....X....X....X....X....X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X....X....X....X....X....X....X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X....X....X....X....X....X....X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ X...XX...XX...XX...XX...XX...XX...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX..XXX.
+ 7
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ...X....X....X....X....X....X....X....X....X....X.
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ...X....X....X....X....X....X....X....X....X....X.
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ...X....X....X....X....X....X....X....X....X....X.
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ...X....X....X....X....X....X....X....X....X....X.
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ...X....X....X....X....X....X....X....X....X....X.
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ...X....X....X....X....X....X....X....X....X....X.
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ...X....X....X....X....X....X....X....X....X....X.
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ...X....X....X....X....X....X....X....X....X....X.
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ...X....X....X....X....X....X....X....X....X....X.
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..................................................
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X....X....X....X....X....X....X
+ ...X....X....X....X....X....X....X....X....X....X.
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
+ ..X....X....X....X....X....X....X....X....X....X..
Index: llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/test.in
diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/test.in:1.1
*** /dev/null Sat Oct 11 16:18:58 2003
--- llvm/test/Programs/MultiSource/Benchmarks/FreeBench/neural/test.in Sat Oct 11 16:18:47 2003
***************
*** 0 ****
--- 1,293 ----
+ 20
+ 28
+ 10
+ F
+ XXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....
+ X....X....X....X....
+ XXX..XXX..XXX..XXX..
+ X....X....X....X....
+ X....X....X....X....
+ X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....
+ X....X....X....X....
+ XXX..XXX..XXX..XXX..
+ X....X....X....X....
+ X....X....X....X....
+ X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....
+ X....X....X....X....
+ XXX..XXX..XXX..XXX..
+ X....X....X....X....
+ X....X....X....X....
+ X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXX
+ X....X....X....X....
+ X....X....X....X....
+ XXX..XXX..XXX..XXX..
+ X....X....X....X....
+ X....X....X....X....
+ X....X....X....X....
+ r
+ ....................
+ .X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X...
+ .X....X....X....X...
+ .X....X....X....X...
+ .X....X....X....X...
+ ....................
+ .X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X...
+ .X....X....X....X...
+ .X....X....X....X...
+ .X....X....X....X...
+ ....................
+ .X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X...
+ .X....X....X....X...
+ .X....X....X....X...
+ .X....X....X....X...
+ ....................
+ .X....X....X....X...
+ .XXXX.XXXX.XXXX.XXXX
+ .X....X....X....X...
+ .X....X....X....X...
+ .X....X....X....X...
+ .X....X....X....X...
+ e
+ ....................
+ XXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....
+ X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXX
+ ....................
+ XXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....
+ X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXX
+ ....................
+ XXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....
+ X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXX
+ ....................
+ XXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...X
+ X.XXXX.XXXX.XXXX.XXX
+ X....X....X....X....
+ X....X....X....X....
+ XXXXXXXXXXXXXXXXXXXX
+ d
+ ....X....X....X....X
+ ....X....X....X....X
+ ....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X
+ ....X....X....X....X
+ ....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X
+ ....X....X....X....X
+ ....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX
+ ....X....X....X....X
+ ....X....X....X....X
+ ....X....X....X....X
+ .XXXX.XXXX.XXXX.XXXX
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ .XXXX.XXXX.XXXX.XXXX
+ i
+ ..X....X....X....X..
+ ....................
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ....................
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ....................
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ....................
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ K
+ X...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ X..X.X..X.X..X.X..X.
+ X.X..X.X..X.X..X.X..
+ XX...XX...XX...XX...
+ X.X..X.X..X.X..X.X..
+ X..X.X..X.X..X.X..X.
+ X...XX...XX...XX...X
+ W
+ ....................
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX.
+ ....................
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX.
+ ....................
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX.
+ ....................
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ X.X.XX.X.XX.X.XX.X.X
+ X.X.XX.X.XX.X.XX.X.X
+ .XXX..XXX..XXX..XXX.
+ A
+ ..X....X....X....X..
+ .X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ ..X....X....X....X..
+ .X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ ..X....X....X....X..
+ .X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ ..X....X....X....X..
+ .X.X..X.X..X.X..X.X.
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ XXXXXXXXXXXXXXXXXXXX
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ G
+ .XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...X
+ X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...X
+ X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...X
+ X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX.
+ .XXX..XXX..XXX..XXX.
+ X...XX...XX...XX...X
+ X....X....X....X....
+ X.XX.X.XX.X.XX.X.XX.
+ X...XX...XX...XX...X
+ X...XX...XX...XX...X
+ .XXX..XXX..XXX..XXX.
+ 7
+ ....................
+ XXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X
+ ...X....X....X....X.
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ....................
+ XXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X
+ ...X....X....X....X.
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ....................
+ XXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X
+ ...X....X....X....X.
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ....................
+ XXXXXXXXXXXXXXXXXXXX
+ ....X....X....X....X
+ ...X....X....X....X.
+ ..X....X....X....X..
+ ..X....X....X....X..
+ ..X....X....X....X..
More information about the llvm-commits
mailing list