# include "stdio.h" # define U(x) ((unsigned char)(x)) # define NLSTATE yyprevious=YYNEWLINE # define BEGIN yybgin = yysvec + 1 + # define INITIAL 0 # define YYLERR yysvec # define YYSTATE (yyestate-yysvec-1) # define YYOPTIM 1 # define YYLMAX 2048 # define output(c) (void)putc(c,yyout) #if defined(__cplusplus) || defined(__STDC__) #ifdef __cplusplus extern "C" { #endif int yylex(void); int yyback(int *, int); int yyinput(void); int yylook(void); void yyoutput(int); int yyracc(int); int yyreject(void); void yyunput(int); #ifndef yyless void yyless(long int); #endif #ifndef yywrap int yywrap(void); #endif #ifdef __cplusplus } #endif #endif # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar) # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;} # define yymore() (yymorfg=1) # define ECHO (void)fprintf(yyout, "%s",yytext) # define REJECT { nstr = yyreject(); goto yyfussy;} int yyleng; extern char yytext[]; int yymorfg; extern char *yysptr, yysbuf[]; int yytchar; FILE *yyin = {stdin}, *yyout = {stdout}; extern int yylineno; struct yysvf { struct yywork *yystoff; struct yysvf *yyother; int *yystops;}; struct yysvf *yyestate; extern struct yysvf yysvec[], *yybgin; # line 3 "dbin.lex" /* (leave the space! lex insists on it!) Version 1.1 : P. Lebrun, Fermilab, July 1996 - Add a parameter (F77) or define (C) statement to the .inc and .h files so that we can check at mcfastRead run time if when we start overflowing the arrays. - Enforce the grouping rule upon reading a DBIN data file (F77 only), if the varname changes (refering to the template name, or the name of the data structure, then the index refering to the array of D.S. better be one, to make sure we start filling at the appropriate location. Version 1.2 : Lebrun, Fermilab, June 1997 - Add a warining if the 'database' statement is missing in the beginning of the file, to avoid such an obvious crash button. Since I am not sure where that check ought to go, this fix is probably not 100% reliable. - Fix the extraneous MAXNUM, in case of nested structure (It was my mistake!) - Fix a small XDR bug in the filter for integer arrays ------------ T. Wenaus 7/95 ToDo (.=done) ---- - $$$ f90 option on Fortran side - $$$ pointers - $$$ self-describing XDR I/O . new index behaviour; no prefix if '-' leads. . update structures . dummy word following n_obj_* in common to protect against misaligned commons . VARIABLE keyword following array declaration to stipulate that the most recent integer should be interpreted as the useful dimension of the array for XDR read/write . output of nested substructures in internal mode to XDR file implemented . eliminate C++ entirely from dbin and auxiliary code (eg. //, extern "C") . unify the Fortran and C data spaces . switch from use of CLHEP Strings to char arrays. No longer any C++ dependence in dbin. Can be used with C or C++. . ,->* in XDR filter code on dimension string; will correctly handle multi-dim arrays . write only the used number of array objects to XDR. VARIABLE keyword. . ivar eliminated; was causing fp overflows. rvar now used to load integers. - $$$ 'will generate file' report in dbin startup . access to version string - $$$ alternate (faster?) xdr encoding: copy to contiguous arrays . undimensioned instantiations . mgr code needs to be produced in close_makes since one routine for each declared structure should be generated. . handle F<-> moving routines for case of multi-dimensional arrays. [issue warning.] . XDR handling: have to handle moving of data between C data structures and Fortran data structures. Do this from the MGR routine, which performs the move before/after the XDR activity depending on encode/decode state. Need new routines, includes generated for XDR: . include file defining mapping of Fortran struct for C access . 'move from C structs to Fortran' and vice versa. . new units: fcmap -> nameFstruct.h fftoc -> nameFtoC.cc fctof -> nameCtoF.cc . add comment to GUI structure. Protect GUI, XDR code with cpp flags. . reimplement DOUBLE . xdr mgr code for multiple instantiations. Avoid code for non-existent instantiations. - verbatim directive for internal-mode (& other) include files - $$$ bounds checking for fixed-size templates - single-pass scheme for include files - command mode: - $$$ make ndim available to the user routine - $$$ make command name available to the user routine (for single-routine handling of multiple commands) - 2nd arg on dbin command line: dir to put generated sources in . dynamic instantiation of templates; declared array size . tools on Fortran and C++ sides to loop through all instantiations of an object . C++ side file handling in dbinc.cc . User's Guide . defining params in terms of other params (internal mode) FORTRAN STRUCTURES Handling of structures and templates has been converted to VMS-style Fortran structures. TEMPLATE INSTANTIATION - MAKE no longer accepts an instantiation name. Uses the index. DEFINE replaces this function of MAKE, but not fully re-implemented. GUI MENU DEFINITION - GUI menu definition file now generated: xxxxGUI.h. XDR/MCFIO DATA STRUCTURE I/O INTERNAL DATA STRUCTURE DEFINITION - MODE INTERNAL declaration - RECORD statement, instantiation handling. Instance name allowed as param on RECORD stmt. Hence multiple instantiations. - separation of structure def file from instantiation file - relaxed fixed size declarations, multi-dimensional arrays - restricted file set - different master include name, _dst - no _db extension to rerouted include file names DOUBLE - re-implemented * * dbin - DataBase INput tool * --------------------------- * * Torre Wenaus 31/12/1993 * * This utility takes an ascii parameter definition file and * using lex parsing of the file constructs * - a Fortran include file containing a common block that includes * all parameters, with explicit typing and documentation * - a Fortran routine to read the parameter definition file as the * data file that specifies parameter values, with extensive * error checking * - analogous include file and input routine in C. * * Thus given an ascii database that simultaneously specifies the * structure, mnemonic names, actual values, and documentation of * a parameter set, this package automatically generates the code * needed to read and use this database in Fortran and C programs. * * Accommodating a change in the database (eg. addition of a parameter) * involves nothing more than changing the database file itself and * rerunning this tool; a valuable simplification over the several manual * coding modifications -- in two languages if C and Fortran are * supported -- traditionally required. * * Example illustrating database file structure: * * STRUCTURE MUON ! parameter group, eg. subdetector name * REAL BLEN 400. ! barrel length * INT NBPL 24 ! number of barrel planes * REAL PLTHK(2) 1.0 2.0 ! inner and outer plate thicknesses * END STRUCTURE * * * Building variable names from mnemonics * -------------------------------------- * The derivation of variable name from the given mnemonic can be * done in whatever way is desired. What is presently done is * the first two characters of the structure (subdetector) name * are appended (with a leading _) to the mnemonic to come up with * the variable name. eg. the BLEN parameter above would have a * variable name BLEN_MU. * * * * Template structures: * -------------------- * * TEMPLATE MAT 5 ! structure template for materials, with max no. of materials * REAL A * REAL Z * REAL DENS * REAL RADL * REAL ABSL * END TEMPLATE * MAKE MAT CSI 129.97 54.02 4.51 1.86 37. ! instantiate template MAT, name CSI * MAKE MAT SCINT 6.25 3.4 1.03 43. 437. * * => COMMON // MAT_A(N_MAT), MAT_Z(N_MAT), MAT_DENS(N_MAT), MAT_RADL(N_MAT)... * IF (VARNAME.EQ.'MAT_TEMPLATE') THEN * INDEX = IMATIDX ! from lookup list using object name string * MAT_A(INDEX) = RVAR(1) * MAT_Z(INDEX) = RVAR(2) ... * * New: * - PROVIDE statement to have specified include file added to generated * .inc,.h * - FFREAD handling * - To split include file into several: * INCNAME name where name doesn't include type; .h,.inc added automatically * - dbin now accepts db filename on command line (or from stdin for backwards * compatibility). Path is prefixed to INCLUDEd files so they can be found * when the db is not in the current directory. * - .inc,.h diversion to new filename: INCNAME directive * - DIMENSION statement to generate constant integer parameter for array * dimensioning. Must appear OUTSIDE structures and templates. Variable name * is the mnemonic name without modification (so be sure to make it unique) * - INDEX statement to generate mnemonic pointers into an array. Like * DIMENSION, must appear OUTSIDE structures and templates and mnemonic * names are taken directly for variable names. * - DOUBLE supported only for structures, to reduce amount of code to be * maintained, and because only need for it I foresee is for constants * like pi. * - new COMMAND/CALL type for passing template-like structures to a * user routine for processing, rather than dbin loading the information * into dbin-defined data structures. Very much like defining and then * calling a command, hence the name. * - strings need not be quoted in COMMANDS (but ONLY in COMMANDS) * */ # define STRUCTURE 2 # line 197 "dbin.lex" #include #include #include # define MAXLINE 2000 # define YYLMAX 2048 # define TEMPLATE 4 # line 206 "dbin.lex" # define COMMAND 6 # line 210 "dbin.lex" # define FFREAD 8 # line 214 "dbin.lex" /***** DBIN Version number *****/ int idbin_version = 0001; char* stlower(char* st); char* stupper(char* st); void strsub(char* str, char* sub, char* repl); void check_finc_fh(); int npgmlines = 0, ntotlines = 0, ntotchars = 0, ndim = 0, n2dim = 0; int is_template = 0, n_elements = 0, n_templates = 0, indx = 0; int nguiel = 0, declare_record; int is_command = 0, new_template = 0, fixed_size = 0, print_listing = 0; int indxtot = 0, internal_mode = 0, incfile_open = 0; int nstructbase = 0, n_templ_entries = 0, ischar = 0, cray=0; int nv, nn, n, n1, np, nq; char *chmaterial = "material", *chnest = "nest", *chinternal="internal"; char dbpath[40]; /* pathname of database file */ char vartype[20], typenamc[20], typenamf[20], parent[30]; char fname[80], incfname[80], *fpnt; char dbin_dbvsn[10], dim[30], dim1[30], cstruct[30], template_size[30]; char varlist[10000], varlistc[10000], line1[MAXLINE]; int nvars = 0, nvarsc = 0; char curtype[30], curname[30], curstruct[30], fullname[30], curcomment[1000]; char values[50000], dbname[30], curvar[30], curvarc[30], *curval, *curnum, *curnumc; char uroutine[30]; char *iprefix = "ies_", *rprefix = "res_"; char *objname, *arg1, *arg2, *valpnt, *idxlst; extern char *getenv(); FILE *finc, *fh, *frdf, *frdc, *finitc, *finitf, *fopen(); FILE *fgui, *fxdr, *fxdrall, *fxdrmgr, *fxdrinc; FILE *finc_original, *fh_original; FILE *yyinlist[10]; int inlist = 0; # define YYNEWLINE 10 yylex(void){ int nstr; extern int yyprevious; while((nstr = yylook()) >= 0) yyfussy: switch(nstr){ case 0: if(yywrap()) return(0); break; case 1: # line 279 "dbin.lex" ntotchars++; break; case 2: # line 281 "dbin.lex" ntotlines++; break; case 3: # line 283 "dbin.lex" { ++npgmlines; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); /* turn mnemonic into variable name */ varsave(-1); fprintf(finitf,"* %s\n",line1); fprintf(finitc,"/* %s */\n",line1); fprintf(frdf, " else if (varname.eq.'%s.%s') then\n",curstruct,curname); if (strcmp(stlower(curtype),"real") == 0) { strcpy(vartype,"rvar"); strcpy(typenamf,"real"); strcpy(typenamc,"float"); } if (strcmp(stlower(curtype),"double") == 0) { strcpy(vartype,"dvar"); strcpy(typenamf,"double precision"); strcpy(typenamc,"double"); } if (strncmp(stlower(curtype),"int",3) == 0) { strcpy(vartype,"rvar"); strcpy(typenamf,"integer"); strcpy(typenamc,"int"); } if (strncmp(stlower(curtype),"char",4) == 0 || strcmp(stlower(curtype),"material") == 0) { strcpy(vartype,"chvar"); strcpy(typenamf,"character*80"); strcpy(typenamc,"char"); } if (strlen(dim) == 0) { fprintf(frdf, " %s.%s = %s(1) ! %s\n",curstruct,curname,vartype,curcomment); fprintf(finc, " %s %s ! %s\n",typenamf,curname,curcomment); if (strcmp(typenamc,"char")==0) { fprintf(frdc,"if (varname==\"%s.%s\"){ strcpy(%s->%s,chvar[0]); iok=1;}\n", curstruct,curname,curstruct,curname); fprintf(fh," %s %s[80]; /* %s */\n",typenamc,curname,curcomment); } else { fprintf(frdc,"if (varname==\"%s.%s\"){ %s->%s = %s[0]; iok=1;}\n", curstruct,curname,curstruct,curname,vartype); fprintf(fh," %s %s; /* %s */\n",typenamc,curname,curcomment); } curval = strtok(values," /\t\n"); if (strcmp(typenamc,"char")==0) { fprintf(finitc, " strcpy(%s->%s,%s);\n",curstruct,curname,curval); n1=0; while (n1%s = %s;\n",curstruct,curname,curval); } fprintf(finitf, " %s.%s = %s\n",curstruct,curname,curval); } else { if (strcmp(typenamc,"char")==0) { fprintf(frdf, " do i=1,%s ! %s\n",dim,curcomment); fprintf(frdf, " %s.%s(i) = chvar(i)\n",curstruct,curname); fprintf(frdf, " enddo\n"); } else { if (strcmp(typenamc,"double")==0) { fprintf(frdf, " call ucopy(%s,%s.%s,%s*2) ! %s\n",vartype,curstruct,curname,dim,curcomment); } else { fprintf(frdf, " call ucopy(%s,%s.%s,%s) ! %s\n",vartype,curstruct,curname,dim,curcomment); } } fprintf(finc, " %s %s(%s) ! %s\n",typenamf,curname,dim,curcomment); if (strcmp(typenamc,"char")==0) { fprintf(frdc, "if (varname==\"%s.%s\")\n {int i=0; while (i<%s) {strcpy(%s->%s[i],chvar[i]);i++;};iok=1;}\n", curstruct,curname,dim,curstruct,curname); } else { fprintf(frdc, "if (varname==\"%s.%s\")\n {int i=0; while (i<%s) {%s->%s[i]=%s[i];i++;};iok=1;}\n", curstruct,curname,dim,curstruct,curname,vartype); } strcpy(dim1,dim); strsub(dim1,",","]["); if (strcmp(typenamc,"char")==0) { fprintf(fh," %s %s[%s][80]; /* %s */\n",typenamc,curname,dim1,curcomment); } else { fprintf(fh," %s %s[%s]; /* %s */\n",typenamc,curname,dim1,curcomment); } arg1 = values; n = 0; while (n%s[%d],%s);\n",curstruct,curname,n,curval); n1=0; while (n1%s[%d] = %s;\n",curstruct,curname,n,curval); } fprintf(finitf, " %s.%s(%d) = %s\n",curstruct,curname,n+1,curval); n++; } } } break; case 4: # line 393 "dbin.lex" { ++npgmlines; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); fprintf(finitf,"* %s\n",line1); fprintf(finitc,"/* %s */\n",line1); if (strlen(dim) == 0) { varsave(-1); fprintf(frdf, " %s(index).%s = rvar(inum) ! %s\n",curstruct,curname,curcomment); fprintf(frdf, " inum = inum + 1\n"); fprintf(finc, " real %s ! %s\n",curname,curcomment); fprintf(frdc, " %s[index].%s = rvar[inum++];\n",curstruct,curname); fprintf(fh," float %s; /* %s */\n",curname,curcomment); strsub(curcomment,"\"","'"); nguiel++; fprintf(fgui," \"%s\", \"float\", \"%s\",\n",curname,curcomment); fprintf(fxdr," if (!xdr_float(xdrs,&(dbobj->%s))) return 0;\n",curname); n_elements++; } else { int i; for (i=0;i%s;\n",curname); strsub(dim,",","*"); if (strcmp(stlower(values),"variable") != 0) fprintf(fxdr," ui = %s;\n",dim); fprintf(fxdr, " if (!xdr_array(xdrs,(char **) &dat,&ui,ui,sizeof(float),(xdrproc_t) xdr_float)) return 0;\n"); n_elements = n_elements + ndim; } } break; case 5: # line 442 "dbin.lex" { ++npgmlines; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); varsave(-1); if (strlen(dim) == 0) { fprintf(frdf, " %s_%s = rvar(inum) ! %s\n",curstruct,curname,curcomment); fprintf(frdf, " inum = inum + 1\n"); fprintf(finc, " real %s_%s ! %s\n",curstruct,curname,curcomment); fprintf(frdc, " %s.%s = rvar[inum++];\n",curstruct,curname); fprintf(fh," float %s; /* %s */\n",curname,curcomment); } else { fprintf(frdf, " call ucopy(rvar(inum),%s_%s,ndim) ! %s\n", curstruct,curname,curcomment); fprintf(frdf, " inum = inum + ndim\n"); fprintf(finc, " real %s_%s(%s) ! %s\n",curstruct,curname,dim,curcomment); fprintf(frdc, " { int i=0; while (i%s))) return 0;\n",curname); n_elements++; } else { int i; for (i=0;i%s;\n",curname); strsub(dim,",","*"); if (strcmp(stlower(values),"variable") != 0) fprintf(fxdr," ui = %s;\n",dim); fprintf(fxdr, " if (!xdr_array(xdrs,(char **) &ddat,&ui,ui,sizeof(double),(xdrproc_t) xdr_double)) return 0;\n"); n_elements = n_elements + ndim; } } break; case 7: # line 522 "dbin.lex" { ++npgmlines; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); varsave(-1); if (strlen(dim) == 0) { fprintf(frdf, " %s_%s = dvar(inum) ! %s\n",curstruct,curname,curcomment); fprintf(frdf, " inum = inum + 1\n"); fprintf(finc, " double precision %s_%s ! %s\n",curstruct,curname,curcomment); fprintf(frdc, " %s.%s = dvar[inum++];\n",curstruct,curname); fprintf(fh," double %s; /* %s */\n",curname,curcomment); } else { fprintf(frdf, " call ucopy(rvar(inum),%s_%s,ndim*2) ! %s\n", curstruct,curname,curcomment); fprintf(frdf, " inum = inum + ndim\n"); fprintf(finc, " double precision %s_%s(%s) ! %s\n",curstruct,curname,dim,curcomment); fprintf(frdc, " { int i=0; while (i%s))) return 0;\n",curname); fprintf(fxdr," ui = dbobj->%s;\n",curname); n_elements++; } else { int i; for (i=0;i%s;\n",curname); strsub(dim,",","*"); if (strcmp(stlower(values),"variable") != 0) fprintf(fxdr," ui = %s;\n",dim); fprintf(fxdr, " if (!xdr_array(xdrs,(char **) &idat,&ui,ui,sizeof(int),(xdrproc_t) xdr_int)) return 0;\n"); n_elements = n_elements + ndim; } } break; case 9: # line 602 "dbin.lex" { ++npgmlines; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); varsave(-1); if (strlen(dim) == 0) { fprintf(frdf, " %s_%s = rvar(inum) ! %s\n",curstruct,curname,curcomment); fprintf(frdf, " ndim = rvar(inum)\n"); fprintf(frdf, " inum = inum + 1\n"); fprintf(finc, " integer %s_%s ! %s\n",curstruct,curname,curcomment); fprintf(frdc, " ndim = rvar[inum];\n"); fprintf(frdc, " %s.%s = rvar[inum++];\n",curstruct,curname); fprintf(fh," int %s; /* %s */\n",curname,curcomment); } else { fprintf(frdf, " call ucopy(rvar(inum),%s_%s,ndim) ! %s\n", curstruct,curname,curcomment); fprintf(frdf, " inum = inum + ndim\n"); fprintf(finc, " integer %s_%s(%s) ! %s\n",curstruct,curname,dim,curcomment); fprintf(frdc, " { int i=0; while (ix_op == XDR_ENCODE) {\n"); fprintf(fxdr," ln = strlen(dbobj->%s); }\n",curname); fprintf(fxdr," if (!xdr_int(xdrs,&ln)) return 0;\n"); fprintf(fxdr," xdrstring = dbobj->%s;\n",curname); fprintf(fxdr," if (!xdr_string(xdrs,&xdrstring,ln)) return 0;\n", curname); n_elements++; } else { int i; for (i=0;ix_op == XDR_ENCODE) {\n"); fprintf(fxdr," ln = strlen(dbobj->%s[%d]); }\n",curname,i); fprintf(fxdr," if (!xdr_int(xdrs,&ln)) return 0;\n"); fprintf(fxdr," xdrstring = dbobj->%s[%d];\n",curname,i); fprintf(fxdr," if (!xdr_string(xdrs,&xdrstring,ln)) return 0;\n", curname,i); } n_elements = n_elements + ndim; } } break; case 11: # line 697 "dbin.lex" { ++npgmlines; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); varsave(-1); if (strlen(dim) == 0) { fprintf(frdf, " %s_%s = chvar(inum) ! %s\n",curstruct,curname,curcomment); fprintf(frdf, " inum = inum + 1\n"); fprintf(finc, " character %s_%s*80 ! %s\n",curstruct,curname,curcomment); fprintf(frdc, " strcpy(%s.%s,chvar[inum++]);\n",curstruct,curname); fprintf(fh," char %s[80]; /* %s */\n",curname,curcomment); } else { fprintf(frdf, " do i=1,ndim ! %s\n",curcomment); fprintf(frdf, " %s_%s(i) = chvar(inum) ! %s\n", curstruct,curname,curcomment); fprintf(frdf, " inum = inum + 1\n"); fprintf(frdf, " enddo\n"); fprintf(finc, " character %s_%s(%s)*80 ! %s\n", curstruct,curname,dim,curcomment); fprintf(frdc, " int i=0; while (i0 && curname[0] != '-') { fprintf(finc," integer %s_%s\n",curname,curval); fprintf(finc," parameter( %s_%s = %d) ! %s\n", curname,curval,n1+1,curcomment); fprintf(fh,"static const int %s_%s = %d; /* %s */\n", curname,curval,n1,curcomment); } else { fprintf(finc," integer %s\n",curval); fprintf(finc," parameter( %s = %d) ! %s\n", curval,n1+1,curcomment); fprintf(fh,"static const int %s = %d; /* %s */\n", curval,n1,curcomment); } arg1=NULL; n1++; } } break; case 19: # line 824 "dbin.lex" { ++npgmlines; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); fprintf(finc," integer %s\n",curname); fprintf(finc," parameter( %s = %s) ! %s\n", curname,values,curcomment); fprintf(fh,"#define %s %s /* %s */\n", curname,values,curcomment); } break; case 20: # line 833 "dbin.lex" { close_makes(curstruct); nvars=0; nvarsc=0; ++npgmlines; BEGIN(STRUCTURE); dbinparse(yytext,curtype,curname,curvar,curcomment,dim); strcpy(curstruct, curname); fprintf(finc,"\n***** structure %s *****\n",curstruct); fprintf(finc," structure /%s_s/\n",curstruct); fprintf(fh,"\n/***** structure %s *****/\n",curstruct); fprintf(fh,"\ntypedef struct _%s_s {\n",curstruct); fprintf(finitf,"\n***** structure %s *****\n",curstruct); fprintf(finitc,"\n/***** structure %s *****/\n",curstruct); is_template = 0; is_command = 0; strcpy(cstruct,curstruct); } break; case 21: # line 849 "dbin.lex" { close_makes(curstruct); n_templ_entries = 0; new_template = 1; fixed_size = 0; nvars=0; nvarsc=0; parent[0]='\0'; nguiel = 0; ++npgmlines; BEGIN(TEMPLATE); n_templates++; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); strcpy(curstruct, curname); template_size[0]='\0'; if (ndim > 0) { strcpy(template_size,dim); fixed_size = ndim; if (fixed_size < 2) fixed_size = 2; } check_finc_fh(); fprintf(finc,"\n***** template %s *****\n",curstruct); /* Adding maximum dimension allowed, so that we can protect ourself against overwrites (P.L.) */ if (ndim > 0) { fprintf(finc," integer MAXNUM_%s\n",curstruct); fprintf(finc," parameter(MAXNUM_%s = %s)\n", curstruct, template_size); } fprintf(finc," structure /%s_s/\n",curstruct); fprintf(fh,"\n/***** template %s *****/\n",curstruct); if (ndim > 0) fprintf(fh, "#define MAXNUM_%s %s\n", curstruct, template_size); fprintf(fh,"\ntypedef struct _%s_s {\n",curstruct); fprintf(finitf,"\n***** template %s *****\n",curstruct); fprintf(finitf," template_name(%d) = '%s'\n", n_templates,curstruct); fprintf(finitc,"\n/***** template %s *****/\n",curstruct); fprintf(frdf, " else if (varname.eq.'TEMPLATE_%s') then\n",curstruct); fprintf(frdf, " inum = 1\n"); /* fprintf(frdf, " index = index_for(objname) ! objname is instance name\n"); */ fprintf(frdf," index = n_instance\n"); /* protect ourself against overwrites (P.L.), July 1996 */ fprintf(frdf," if(index .gt. %s) then \n", template_size); fprintf(frdf," print *, 'Attempting to overwrite structure %s '\n", curstruct); fprintf(frdf," print *, 'Current Index = ', index,\n"); fprintf(frdf," & ', Maximum allowed %s'\n", template_size); fprintf(frdf, " print *, ' This is a fatal error, stopping' \n"); fprintf(frdf," stop \n"); fprintf(frdf," end if \n"); fprintf(frdf," n_obj_%s = n_instance\n",curstruct); fprintf(frdc, "if ( !strcmp(varname,\"TEMPLATE_%s\") ) {\n",curstruct); fprintf(frdc, " inum = 0; iok = 1;\n"); fprintf(frdc, " getmembers(n_el_%s);\n",curstruct); fprintf(frdc," index = n_instance-1;\n"); fprintf(frdc," *n_obj_%s = n_instance;\n",curstruct); fprintf(fgui,"\"%s\", {\n",curstruct); fprintf(fxdrinc,"\nbool_t xdr_%s(XDR *xdrs, %s_s *dbobj);\n",curstruct, curstruct); fprintf(fxdr,"bool_t xdr_%s(XDR *xdrs, %s_s *dbobj)\n{\n",curstruct, curstruct); fprintf(fxdr," ui = 0;\n"); is_template = 1; is_command = 0; n_elements = 0; } break; case 22: # line 922 "dbin.lex" { ++npgmlines; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); strcpy(template_size,dim); strcpy(curstruct, curname); new_template = 1; n_templ_entries = 0; declare_record = 1; if (strlen(values) == 0) { close_makes(curstruct); } else { close_makes(values); } declare_record = 0; } break; case 23: # line 937 "dbin.lex" { ++npgmlines; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); if (*curtype == *chnest) { if (strlen(dim) == 0) { fprintf(finc," record /%s_s/ %s\n",curname,values); fprintf(fh," %s_s %s;\n",curname,values); fprintf(fxdr," if (!xdr_%s(xdrs,&(dbobj->%s))) return 0;\n", curname,values); } else { fprintf(finc," record /%s_s/ %s(%s)\n",curname,values,dim); fprintf(fh," %s_s %s[%s];\n",curname,values,dim); strsub(dim,",","*"); fprintf(fxdr," for (i=0;i<%s;i++)\n",dim); fprintf(fxdr," if (!xdr_%s(xdrs,&(dbobj->%s[i]))) return 0;\n", curname,values); } } strsub(curcomment,"\"","'"); nguiel++; fprintf(fgui," \"%s\", \"child\", \"%s\",\n",curname,curcomment); } break; case 24: # line 959 "dbin.lex" { ++npgmlines; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); strcpy(parent,curname); } break; case 25: # line 964 "dbin.lex" { /* $$$ support user fn. being in either Fortran or C */ close_makes(curstruct); nvars=0; nvarsc=0; ++npgmlines; BEGIN(COMMAND); dbinparse(yytext,curtype,curname,curvar,curcomment,dim); strcpy(uroutine,values); /* name of user routine */ strcpy(curstruct, curname); fprintf(finc,"***** command %s *****\n",curstruct); fprintf(fh,"/***** command %s *****/\n",curstruct); fprintf(fh,"extern int %s(void);\n",uroutine); fprintf(fh,"\ntypedef struct _%s_s {\n",curstruct); fprintf(frdf, " else if (varname.eq.'COMMAND_%s') then\n",curstruct); fprintf(frdf, " inum = 1\n"); fprintf(frdf, " ndim = nvars\n"); fprintf(frdc, "if (varname==\"COMMAND_%s\") {\n",curstruct); fprintf(frdc, " ndim = nvars; iok=1;\n"); fprintf(frdc, " getmembers(n_el_%s);\n",curstruct); is_template = 0; is_command = 1; n_elements = 0; } break; case 26: # line 991 "dbin.lex" { /* $$$ like the original make; requires a name for the instantiation */ ++npgmlines; dbinparse(yytext,curtype,curname,curvar,curcomment,dim); fprintf(finitf,"* %s\n",line1); fprintf(finitc,"/* %s */\n",line1); objname = strtok(values," "); valpnt = objname + strlen(objname)+1; indx++; indxtot++; fprintf(fh,"extern %s_s %s_%s;\n",curstruct,curstruct,objname); n = 0; while (n0) { curval[strlen(curval)]=' '; curnum[strlen(curnum)]=' '; curnumc[strlen(curnumc)]=' '; } n1=0; arg1=valpnt; while(n1<=n) { curval = strtok(arg1," /\n"); /* strtok sticks in '\0'; have to remove it */ if (n1' in char values */ n1=0; while (n10) { curval[strlen(curval)]='@'; curnum[strlen(curnum)]=' '; curnumc[strlen(curnumc)]=' '; } n1=0; arg1=valpnt; while(n1<=n) { curval = strtok(arg1,"@/\n"); /* strtok sticks in '\0'; have to remove it */ if (n1' in char values */ n1=0; while (n1 int n, i; strcpy(dbin_dbvsn,"0000"); print_listing = 0; cray = 0; inlist = 0; /* if dbin filename is on command line... */ if (argc>1) { printf("Reading database %s\n",argv[1]); /* Extract path from the db filename */ getpath(argv[1]); if (access(argv[1],F_OK)!=0) { printf("dbin error: file %s does not exist.\n",argv[1]); return 1;} yyin = fopen(argv[1],"r"); } else { dbpath[0] = '\n'; } /* check for options */ if (argc>0) { for (i=0;i 0) inlist--; yyin = yyinlist[inlist]; yylex(); /* yyrestart(); */ } docloseout(); printf("Directive lines in database file: %d\n",npgmlines); } /****************************************************************************/ dbinparse(char *str, char *typ, char *nam, char *var, char *com, char *dim) { /* Parse line for the name and comment */ int c, nc, nt, ncm, nd, npv, len1, after_cont, after_com, got_token, ii; len1 = strcspn(str,"/"); if (len1>=MAXLINE) { printf("truncated line at %d chars:\n%s\n",MAXLINE,str); len1=MAXLINE-1; } strncpy(line1,str,len1); line1[len1] = '\0'; if (print_listing == 1) printf("TheLine-->\"%s\"<--TheLine\n",str); /* zap any comments following line continuation chars */ after_cont = after_com = 0; for (nc=0;nc=0;ii--) { if ((values[ii] != ' ') && (values[ii] != '\t')) got_token++; if (got_token == 0) npv=ii; } values[npv] = '\0'; /* comment */ while (((str[nc] == '!') || (str[nc] == '\t')) && (nc < strlen(str))) { ++nc; } while (nc <= strlen(str)) { com[ncm++] = str[nc++]; } /* terminate (or, if empty, zero out) the strings */ nam[nn] = '\0'; var[nn] = '\0'; dim[nd] = '\0'; if (!internal_mode) ndim = strtol(dim,(char**)NULL,0); /* nd returns as dimension */ nv = nn; com[ncm] = '\0'; stlower(typ); stlower(nam); } /*****************************************************************************/ yywrap() { return (1); } /*****************************************************************************/ doheaders() { /* Fortran include file for declarations */ strcpy(fname,dbname); if (!internal_mode) { strcat(fname,"_db.inc"); } else { strcat(fname,"_dst.inc"); } finc = fopen(fname, "w"); finc_original = finc; fprintf(finc,"*\n*** dbin v%d Fortran include file ***\n",idbin_version); fprintf(finc,"*** Database %s \n*\n",dbname); fprintf(finc," integer idbin_version ! dbin version number\n"); fprintf(finc," parameter (idbin_version = %d)\n*\n",idbin_version); fprintf(finc," character*(*) dbin_%s_dbvsn ! database version number\n", dbname); fprintf(finc," parameter (dbin_%s_dbvsn = '%s')\n",dbname,dbin_dbvsn); /* Fortran read routine */ strcpy(fname,dbname); strcat(fname,"_read.F"); if (internal_mode) strcpy(fname,"/dev/null"); frdf = fopen(fname, "w"); fprintf(frdf," subroutine %s_read(fname)\n",dbname); fprintf(frdf,"*\n*** Database read routine ***\n*\n"); fprintf(frdf,"*\n* Generated automatically using the dbin tool.\n*\n"); fprintf(frdf,"* Not to be modified by user.\n*\n"); fprintf(frdf," implicit none\n"); fprintf(frdf," character*(*) fname\n"); fprintf(frdf,"C\n"); comheadf(frdf); fprintf(frdf," logical end_of_file\n"); fprintf(frdf," integer index_for\n"); fprintf(frdf," external index_for\n"); fprintf(frdf," integer istat, inum, index, i, ndim\n"); fprintf(frdf," character previous_varname*(db_chlen)\n"); fprintf(frdf," save previous_varname\n"); fprintf(frdf," data previous_varname/'Empty'/\n"); fprintf(frdf," integer MAXNUM_DBINERRORS\n"); fprintf(frdf," parameter (MAXNUM_DBINERRORS = 10)\n"); fprintf(frdf," integer num_dbinerrors\n"); fprintf(frdf,"*\n"); fprintf(frdf," call %s_init\n",dbname); fprintf(frdf," 100 call dbin_getrec(fname,end_of_file,istat)\n"); fprintf(frdf," if (end_of_file) goto 999\n"); /* Handling of error message from dbin_getrec */ fprintf(frdf," if (istat.ne.0) then\n"); fprintf(frdf," num_dbinerrors = num_dbinerrors + 1\n"); fprintf(frdf," if (istat .eq. 2) then \n"); fprintf(frdf," print *, ' Probably filename error, Stop '\n"); fprintf(frdf," stop\n"); fprintf(frdf," else \n"); fprintf(frdf," print *, ' Unknow error in DBIN, istat = ', istat\n"); fprintf(frdf," end if\n"); fprintf(frdf," if (num_dbinerrors .ge. MAXNUM_DBINERRORS) then\n"); fprintf(frdf," print *, ' Maximum number of error reached, stop '\n"); fprintf(frdf," stop\n"); fprintf(frdf," else \n"); fprintf(frdf," goto 100\n"); fprintf(frdf," end if\n"); fprintf(frdf," end if\n"); fprintf(frdf,"* \n"); /* Checking now the group rule: if the varname changed, the index must be */ /* set to 1 to start filling a new array of structures. */ fprintf(frdf," if((previous_varname .ne. varname) .and.\n"); fprintf(frdf," & (n_instance .ne. 1)) then\n"); fprintf(frdf," print*, ' Fatal error in DBIN read : '\n"); fprintf(frdf," print*, ' Unexpected change of Data structure name '\n"); fprintf(frdf," print*, ' Previous Data structure ', previous_varname\n"); fprintf(frdf," print*, ' Current Data structure ', varname\n"); fprintf(frdf," print*, ' Index to struct. array = ', n_instance\n"); fprintf(frdf," stop\n"); fprintf(frdf," else \n"); fprintf(frdf," previous_varname = varname\n"); fprintf(frdf," end if \n"); fprintf(frdf," if (varname.eq.'fake_name') then ! match name\n"); /* C include file */ strcpy(fname,dbname); if (!internal_mode) { strcat(fname,"_db.h"); } else { strcat(fname,"_dst.h"); } fh = fopen(fname, "w"); fh_original = fh; fprintf(fh,"/*** dbin v%d C include file ***/\n",idbin_version); fprintf(fh,"/*** Database %s ***/\n",dbname); /* fprintf(fh,"#ifndef %s_H\n",dbname); */ /* fprintf(fh,"#define %s_H\n\n",dbname); */ fprintf(fh,"#include \n"); /* fprintf(fh,"extern \"C\" {\n"); */ fprintf(fh,"static const int dbin_version=%d; /* dbin version number */\n", idbin_version); fprintf(fh,"static const char* dbin_%s_dbvsn=\"%s\"; /* db version number */\n", dbname,dbin_dbvsn); /* fprintf(fh,"}\n"); */ /* C read routine */ strcpy(fname,dbname); strcat(fname,"Read.c"); if (internal_mode) strcpy(fname,"/dev/null"); frdc = fopen(fname, "w"); fprintf(frdc,"/*** Database read routine ***/\n"); fprintf(frdc,"/*** Generated automatically using the dbin tool. */\n"); fprintf(frdc,"/*** Not to be modified by user. */\n"); fprintf(frdc,"#include \n"); comheadc(frdc); /* fprintf(frdc,"#include \"%sGlobal.h\"\n",dbname); */ fprintf(frdc,"void dbin_getrec(char* fname[],void (*)(void));\n"); fprintf(frdc,"void %s_interpret();\n",dbname); fprintf(frdc,"void %sInit();\n",dbname); fprintf(frdc,"void getmembers(long);\n\n",dbname); /* fprintf(frdc,"extern \"C\"{\n"); */ fprintf(frdc,"void %sRead(char* fname)\n{\n",dbname); fprintf(frdc," void (*pf)(); /* pointer to interpreter */\n"); fprintf(frdc," pf = &%s_interpret;\n",dbname); fprintf(frdc," %sInit();\n",dbname); fprintf(frdc," dbin_getrec(&fname,pf);\n",dbname); fprintf(frdc,"}\n"); if (cray) fprintf(frdc,"void %READ(char* fname)\n{\n",stupper(dbname)); else fprintf(frdc,"void %sread_(char* fname)\n{\n",stlower(dbname)); fprintf(frdc," *(strstr(fname,\" \"))='\\0';\n"); fprintf(frdc," %sRead(fname);\n}\n",dbname); /* fprintf(frdc,"}\n"); for extern "C" */ fprintf(frdc,"void %s_interpret()\n{\n",dbname); fprintf(frdc,"int inum, index, i, ndim, iok;\niok=0;\n"); /* Fortran init routine */ strcpy(fname,dbname); strcat(fname,"_init.F"); if (internal_mode) strcpy(fname,"/dev/null"); finitf = fopen(fname, "w"); fprintf(finitf," subroutine %s_init\n",dbname); fprintf(finitf,"*\n*** Database default init routine ***\n*\n"); fprintf(finitf,"*\n* Generated automatically using the dbin tool.\n*\n"); fprintf(finitf,"* Not to be modified by user.\n*\n"); fprintf(finitf," implicit none\n"); comheadf(finitf); /* C init routine */ strcpy(fname,dbname); strcat(fname,"Init.c"); if (internal_mode) strcpy(fname,"/dev/null"); finitc = fopen(fname, "w"); fprintf(finitc,"/*** Database default init routine ***/\n"); fprintf(finitc,"/*** Generated automatically using the dbin tool. */\n"); fprintf(finitc,"/*** Not to be modified by user. */\n"); comheadc(finitc); fprintf(finitc,"void %sInit() {\n",dbname); /* GUI menu definition routine */ strcpy(fname,dbname); strcat(fname,"GUI.h"); if (internal_mode) strcpy(fname,"/dev/null"); fgui = fopen(fname, "w"); fprintf(fgui,"/*** GUI code for dbin database interaction ***/\n"); fprintf(fgui,"/*** Generated automatically using the dbin tool. */\n"); fprintf(fgui,"/*** Not to be modified by user. */\n"); fprintf(fgui,"static struct element_keys {\n"); fprintf(fgui," char *name;\n"); fprintf(fgui," struct parameter_definition {\n"); fprintf(fgui," char *name;\n"); fprintf(fgui," char *value_type;\n"); fprintf(fgui," char *comment;\n"); fprintf(fgui," } parameters[MAX_NUM_PARAMETERS];\n"); fprintf(fgui," int num_parameters;\n"); fprintf(fgui," char *parent;\n"); fprintf(fgui,"} geo_keys[] = {\n"); /* XDR I/O definition routine for MCFIO package */ strcpy(fname,dbname); strcat(fname,"XDR.c"); fxdr = fopen(fname, "w"); fprintf(fxdr,"/*** XDR code for dbin database I/O ***/\n"); fprintf(fxdr,"/*** Generated automatically using the dbin tool. */\n"); fprintf(fxdr,"/*** Not to be modified by user. */\n"); fprintf(fxdr,"#include \"%sXDRinc.h\"\n",dbname); fprintf(fxdr,"static int *idat, ln, i;\n"); fprintf(fxdr,"static u_int ui;\n"); fprintf(fxdr,"static float *dat;\n"); fprintf(fxdr,"static double *ddat;\n"); fprintf(fxdr,"static char* xdrstring;\n"); fprintf(fxdr,"\n"); /* XDR I/O manager routine for MCFIO package */ strcpy(fname,dbname); strcat(fname,"XDRmgr.c"); fxdrmgr = fopen(fname, "w"); fprintf(fxdrmgr,"/*** XDR manager code for dbin database I/O ***/\n"); fprintf(fxdrmgr,"/*** Generated automatically using the dbin tool. */\n"); fprintf(fxdrmgr,"/*** Not to be modified by user. */\n"); fprintf(fxdrmgr,"#include \"%sXDRinc.h\"\n",dbname); fprintf(fxdrmgr,"static int i;\n\n"); /* XDR I/O routine for entire database */ strcpy(fname,dbname); strcat(fname,"XDRall.c"); fxdrall = fopen(fname, "w"); fprintf(fxdrall,"/*** XDR I/O for entire dbin database ***/\n"); fprintf(fxdrall,"/*** Generated automatically using the dbin tool. */\n"); fprintf(fxdrall,"/*** Not to be modified by user. */\n"); fprintf(fxdrall,"#include \"%sXDRinc.h\"\n\n",dbname); fprintf(fxdrall,"void %s_xdr_all(XDR* xdrs);\n\n",dbname); fprintf(fxdrall,"void %s_xdr_all(XDR* xdrs)\n{\n",dbname); /* XDR I/O include file for MCFIO package */ strcpy(fname,dbname); strcat(fname,"XDRinc.h"); fxdrinc = fopen(fname, "w"); fprintf(fxdrinc,"/*** XDR include file for dbin database I/O ***/\n"); fprintf(fxdrinc,"/*** Generated automatically using the dbin tool. */\n"); fprintf(fxdrinc,"/*** Not to be modified by user. */\n"); if (!internal_mode) { fprintf(fxdrinc,"#include \"%s_db.h\"\n",dbname); } else { fprintf(fxdrinc,"#include \"%s_dst.h\"\n",dbname); } fprintf(fxdrinc,"#include \n"); fprintf(fxdrinc,"#include \n"); fprintf(fxdrinc,"#include \n"); fprintf(fxdrinc,"#include \n"); fprintf(fxdrinc,"#include \"mcfio_Dict.h\"\n"); fprintf(fxdrinc,"#include \"mcf_xdr.h\"\n"); } /*****************************************************************************/ docloseout() { fprintf(frdf," else\n"); fprintf(frdf, " print *,'dbin error: unidentified parameter: ',varname\n"); fprintf(frdf," endif\n"); fprintf(frdf," goto 100\n"); fprintf(frdf," 999 continue\n"); fprintf(frdf," end\n"); /* fprintf(fh,"\n#endif\n"); */ fprintf(finitf," n_templates = %d\n",n_templates); fprintf(finitf," n_totobjs = %d\n",indxtot); fprintf(finitf," end\n"); fprintf(finitc,"}\n"); } varsave(int idm) { int nch=0; int nc = 0; while (curname[nc] != '\0') {varlist[nvars++] = curname[nc++];} nc = 0; while (curname[nc] != '\0') {varlistc[nvarsc++] = curname[nc++];} if (idm >= 0) { varlist[nvars++] = '('; nch=sprintf(&varlist[nvars],"%d",idm+1); varlist[nvars+nch] = ')'; nvars=nvars+nch+1; varlistc[nvarsc++] = '['; nch=sprintf(&varlistc[nvarsc],"%d",idm); varlistc[nvarsc+nch] = ']'; nvarsc=nvarsc+nch+1; } varlist[nvars++] = ' '; varlist[nvars] = '\0'; varlistc[nvarsc++] = ' '; varlistc[nvarsc] = '\0'; } close_makes(char *instname) { if (internal_mode != 0) { if (new_template>0 && strlen(template_size)>0) n_templ_entries++; } else { n_templ_entries++; } if (print_listing) printf("close_makes: n_templ_entries %d, new_template %d, mode %d\n", n_templ_entries, new_template,internal_mode); if (new_template > 0) { fprintf(finitf," n_obj_%s=%d\n",curstruct,indx); fprintf(finitc,"*n_obj_%s=%d;\n",curstruct,indx); if (indx<=0) indx=1; if (fixed_size > 0) indx = fixed_size; if (internal_mode) { if (strlen(template_size)>0 || declare_record == 1) { if (strlen(template_size)==0) { fprintf(finc," integer n_obj_%s\n",instname); fprintf(finc," parameter (n_obj_%s=1)\n",instname); fprintf(finc," record /%s_s/ %s\n", curstruct,instname); fprintf(finc, " common /%s_c/ %s\n",instname,instname); } else { fprintf(finc," integer n_obj_%s\n",instname); /* dummy word to ensure alignment */ fprintf(finc," integer idm%s\n",instname); fprintf(finc," record /%s_s/ %s(%s)\n", curstruct,instname,template_size); fprintf(finc, " common /%s_c/\n + n_obj_%s, idm%s, %s\n", instname,instname,instname,instname); } } } else { fprintf(finc," integer n_obj_%s\n",curstruct); /* dummy word to ensure alignment */ fprintf(finc," integer idm%s\n",instname); fprintf(finc," record /%s_s/ %s(%d)\n", curstruct,instname,indx); fprintf(finc," common /%s_c/\n + n_obj_%s, idm%s, %s\n", instname,instname,instname,instname); } if (strlen(template_size)>0 || declare_record ==1) { fprintf(fxdrinc,"int %s_xdr_io(XDR* xdrs);\n",instname); fprintf(fxdrall,"%s_xdr_io(xdrs);\n",instname); fprintf(fxdrmgr,"int %s_xdr_io(XDR* xdrs)\n{\n",instname); fprintf(fxdrmgr," (void) xdr_int(xdrs,n_obj_%s);\n",instname); if (strlen(template_size)>0) fprintf(fxdrmgr," for (i=0;i<*n_obj_%s;i++)\n",instname); else fprintf(fxdrmgr," i=0;\n"); fprintf(fxdrmgr," if (!xdr_%s(xdrs,&%s[i])) return 0;\n", curstruct,instname); fprintf(fxdrmgr," return 1;\n}\n\n"); } if (n_templ_entries == 1 || declare_record == 1) { /* fprintf(fh,"extern \"C\" {\n"); */ if (internal_mode) { if (strlen(template_size)>0 || declare_record == 1) { fprintf(fh,"extern struct %s_c {\n",instname); fprintf(fh," int n_obj_%s;\n",instname); fprintf(fh," int idm%s;\n",instname); fprintf(fh," %s_s %s[1];\n",curstruct,instname); if (cray) { fprintf(fh,"} %s_C;\n",stupper(instname)); fprintf(fh,"static int *n_obj_%s = &(%s_C.n_obj_%s);\n", instname,stupper(instname),instname); fprintf(fh,"static %s_s *%s = &%s_C.%s[0];\n", curstruct,stupper(instname),instname,instname); } else { fprintf(fh,"} %s_c_;\n",stlower(instname)); fprintf(fh,"static int *n_obj_%s = &(%s_c_.n_obj_%s);\n", instname,stlower(instname),instname); fprintf(fh,"static %s_s *%s = &%s_c_.%s[0];\n", curstruct,stlower(instname),instname,instname); } } } else { fprintf(fh,"extern struct %s_c {\n",instname); fprintf(fh," int n_obj_%s;\n",instname); fprintf(fh," int idm%s;\n",instname); fprintf(fh," %s_s %s[1];\n",curstruct,instname); if (cray) { fprintf(fh,"} %s_C;\n",stupper(instname)); fprintf(fh,"static int *n_obj_%s = &(%s_C.n_obj_%s);\n", instname,stupper(instname),instname); fprintf(fh,"static %s_s *%s = &%s_C.%s[0];\n", curstruct,stupper(instname),instname,instname); } else { fprintf(fh,"} %s_c_;\n",stlower(instname)); fprintf(fh,"static int *n_obj_%s = &(%s_c_.n_obj_%s);\n", instname,stlower(instname),instname); fprintf(fh,"static %s_s *%s = &%s_c_.%s[0];\n", curstruct,stlower(instname),instname,instname); } } } indx = 0; new_template = 0; } } comheadf(FILE *fl) { fprintf(fl,"#include \"%s_db.inc\"\n",dbname); fprintf(fl,"#include \"dbin.inc\"\n"); } comheadc(FILE *fl){ fprintf(fl,"#include \"%s_db.h\"\n",dbname); fprintf(fl,"extern int n_instance;\n"); fprintf(fl,"extern double dvar[100];\n"); fprintf(fl,"extern float rvar[100];\n"); fprintf(fl,"extern int nvars;\n"); fprintf(fl,"extern char chvar[20][80];\n"); fprintf(fl,"extern char varname[80], objname[80];\n"); } nam2var(){ int i, ln; strcpy(curvarc,curvar); /* C variable name */ strcpy(curvarc,curstruct); ln = strlen(curvarc); curvarc[ln] = '.'; i=0; while (i= 'A' && st[i] <= 'Z') st[i] = st[i] + 'a' - 'A'; i++; } return st; } char * stupper(char* st) { int i=0; while (st[i] != '\0') { if (st[i] >= 'a' && st[i] <= 'z') st[i] = st[i] + 'A' - 'a'; i++; } return st; } void strsub(char* str, char* sub, char* repl) { /* for each char in sub that appears in str, substitute repl */ /* do it without doing a malloc for a new string, cuz I said so */ int i, j, k, l, ioff=0; for (i=0;i<=strlen(str)+ioff;i++) for (j=0;j0) for (l=strlen(str)+ioff+k;l>=i;l--) str[l+1]=str[l]; str[i] = repl[k]; i++; ioff++; } } /* ** Added by P.L., to recover gracefully if one attempts to start a template ** without decalring a database. */ void check_finc_fh() { if ((finc == NULL) || (fh == NULL)) { printf("DBin error: Uninitialized file descriptor \n"); printf(" Probable cause: missing database declaration \n"); printf(" Ending dbin here! \n"); exit(2); } } int yyvstop[] = { 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 1, 0, 1, 0, 2, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 1, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 39, 0, 15, 0, 3, 0, 12, 39, 0, 3, 15, 0, 13, 39, 0, 8, 15, 0, 14, 39, 0, 9, 15, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 39, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 15, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 23, 0, 28, 0, 39, 0, 39, 0, 39, 0, 37, 0, 15, 0, 15, 0, 15, 0, 15, 0, 27, 0, 38, 0, 16, 0, 37, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 12, 39, 0, 12, 39, 0, 12, 39, 0, 3, 15, 0, 3, 15, 0, 3, 15, 0, 3, 15, 0, 3, 16, 0, 10, 0, 13, 39, 0, 13, 39, 0, 13, 39, 0, 8, 15, 0, 8, 15, 0, 8, 15, 0, 8, 15, 0, 4, 16, 0, 11, 0, 14, 39, 0, 14, 39, 0, 14, 39, 0, 9, 15, 0, 9, 15, 0, 9, 15, 0, 9, 15, 0, 5, 16, 0, 28, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 39, 0, 36, 39, 0, 36, 39, 0, 36, 0, 36, 0, 36, 37, 0, 36, 0, 36, 0, 36, 0, 15, 36, 0, 15, 36, 0, 15, 36, 0, 15, 36, 0, 27, 36, 0, 36, 38, 0, 23, 36, 0, 36, 0, 36, 0, 16, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 37, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 23, 0, 23, 0, 23, 0, 28, 0, 28, 0, 28, 0, 23, 0, 39, 0, 39, 0, 34, 0, 37, 0, 37, 0, 37, 0, 37, 0, 18, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 27, 0, 27, 0, 27, 0, 27, 0, 38, 0, 38, 0, 38, 0, 16, 0, 16, 0, 16, 0, 16, 0, 37, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 12, 39, 0, 12, 39, 0, 3, 15, 0, 3, 15, 0, 3, 15, 0, 3, 15, 0, 3, 15, 0, 3, 16, 0, 3, 16, 0, 3, 16, 0, 3, 16, 0, 10, 0, 10, 0, 10, 0, 10, 0, 13, 39, 0, 13, 39, 0, 8, 15, 0, 8, 15, 0, 8, 15, 0, 8, 15, 0, 8, 15, 0, 4, 16, 0, 4, 16, 0, 4, 16, 0, 4, 16, 0, 11, 0, 11, 0, 11, 0, 11, 0, 14, 39, 0, 14, 39, 0, 9, 15, 0, 9, 15, 0, 9, 15, 0, 9, 15, 0, 9, 15, 0, 5, 16, 0, 5, 16, 0, 5, 16, 0, 5, 16, 0, 28, 36, 0, 28, 36, 0, 28, 36, 0, 23, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 39, 0, 36, 39, 0, 34, 36, 0, 36, 0, 36, 37, 0, 36, 37, 0, 36, 37, 0, 36, 37, 0, 36, 0, 36, 0, 18, 36, 0, 15, 36, 0, 15, 36, 0, 15, 36, 0, 15, 36, 0, 27, 36, 0, 27, 36, 0, 27, 36, 0, 27, 36, 0, 36, 38, 0, 36, 38, 0, 36, 38, 0, 23, 36, 0, 23, 36, 0, 23, 36, 0, 36, 0, 36, 0, 16, 36, 0, 16, 36, 0, 16, 36, 0, 16, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 37, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 23, 0, 23, 0, 28, 0, 28, 0, 23, 0, 23, 0, 23, 0, 26, 0, 17, 0, 34, 0, 34, 0, 34, 0, 33, 0, 37, 0, 37, 0, 37, 0, 18, 0, 18, 0, 18, 0, 18, 0, 15, 0, 15, 0, 15, 0, 15, 0, 27, 0, 27, 0, 27, 0, 27, 0, 27, 0, 38, 0, 38, 0, 24, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 22, 0, 37, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 17, 0, 3, 15, 0, 3, 15, 0, 3, 15, 0, 3, 15, 0, 3, 16, 0, 3, 16, 0, 3, 16, 0, 3, 16, 0, 3, 16, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 6, 17, 0, 8, 15, 0, 8, 15, 0, 8, 15, 0, 8, 15, 0, 4, 16, 0, 4, 16, 0, 4, 16, 0, 4, 16, 0, 4, 16, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 7, 17, 0, 9, 15, 0, 9, 15, 0, 9, 15, 0, 9, 15, 0, 5, 16, 0, 5, 16, 0, 5, 16, 0, 5, 16, 0, 5, 16, 0, 28, 36, 0, 28, 36, 0, 23, 36, 0, 23, 36, 0, 23, 36, 0, 36, 0, 36, 0, 26, 36, 0, 36, 0, 17, 36, 0, 34, 36, 0, 34, 36, 0, 34, 36, 0, 33, 36, 0, 36, 37, 0, 36, 37, 0, 36, 37, 0, 36, 0, 36, 0, 18, 36, 0, 18, 36, 0, 18, 36, 0, 18, 36, 0, 15, 36, 0, 15, 36, 0, 15, 36, 0, 27, 36, 0, 27, 36, 0, 27, 36, 0, 27, 36, 0, 36, 38, 0, 36, 38, 0, 23, 36, 0, 23, 36, 0, 24, 36, 0, 36, 0, 16, 36, 0, 16, 36, 0, 16, 36, 0, 16, 36, 0, 22, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 37, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 23, 0, 23, 0, 28, 0, 28, 0, 23, 0, 23, 0, 25, 0, 26, 0, 26, 0, 26, 0, 26, 0, 17, 0, 17, 0, 17, 0, 17, 0, 34, 0, 34, 0, 33, 0, 33, 0, 33, 0, 35, 37, 0, 37, 0, 37, 0, 30, 0, 31, 0, 18, 0, 18, 0, 18, 0, 18, 0, 18, 0, 15, 0, 15, 0, 15, 0, 27, 0, 27, 0, 27, 0, 27, 0, 27, 0, 27, 0, 38, 0, 38, 0, 24, 0, 24, 0, 24, 0, 29, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 22, 0, 22, 0, 22, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 15, 0, 3, 15, 0, 3, 15, 0, 3, 16, 0, 3, 16, 0, 3, 16, 0, 3, 16, 0, 3, 16, 0, 3, 16, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 8, 15, 0, 8, 15, 0, 8, 15, 0, 4, 16, 0, 4, 16, 0, 4, 16, 0, 4, 16, 0, 4, 16, 0, 4, 16, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 9, 15, 0, 9, 15, 0, 9, 15, 0, 5, 16, 0, 5, 16, 0, 5, 16, 0, 5, 16, 0, 5, 16, 0, 5, 16, 0, 28, 36, 0, 28, 36, 0, 23, 36, 0, 23, 36, 0, 25, 36, 0, 36, 0, 26, 36, 0, 26, 36, 0, 26, 36, 0, 26, 36, 0, 36, 0, 17, 36, 0, 17, 36, 0, 17, 36, 0, 17, 36, 0, 34, 36, 0, 34, 36, 0, 33, 36, 0, 33, 36, 0, 33, 36, 0, 35, 36, 37, 0, 36, 37, 0, 36, 37, 0, 30, 36, 0, 31, 36, 0, 18, 36, 0, 18, 36, 0, 18, 36, 0, 18, 36, 0, 15, 36, 0, 27, 36, 0, 27, 36, 0, 27, 36, 0, 27, 36, 0, 27, 36, 0, 36, 38, 0, 36, 38, 0, 23, 36, 0, 23, 36, 0, 24, 36, 0, 24, 36, 0, 24, 36, 0, 29, 36, 0, 16, 36, 0, 16, 36, 0, 16, 36, 0, 16, 36, 0, 16, 36, 0, 22, 36, 0, 22, 36, 0, 22, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 23, 0, 23, 0, 25, 0, 25, 0, 25, 0, 32, 0, 26, 0, 26, 0, 26, 0, 26, 0, 26, 0, 17, 0, 17, 0, 17, 0, 17, 0, 17, 0, 34, 0, 34, 0, 33, 0, 33, 0, 35, 37, 0, 35, 37, 0, 35, 37, 0, 37, 0, 30, 0, 30, 0, 30, 0, 31, 0, 31, 0, 31, 0, 18, 0, 18, 0, 18, 0, 18, 0, 18, 0, 18, 0, 15, 0, 15, 0, 15, 0, 27, 0, 27, 0, 27, 0, 24, 0, 24, 0, 29, 0, 29, 0, 29, 0, 16, 0, 16, 0, 16, 0, 22, 0, 22, 0, 21, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 15, 0, 3, 15, 0, 3, 15, 0, 3, 16, 0, 3, 16, 0, 3, 16, 0, 10, 0, 10, 0, 10, 0, 10, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 8, 15, 0, 8, 15, 0, 8, 15, 0, 4, 16, 0, 4, 16, 0, 4, 16, 0, 11, 0, 11, 0, 11, 0, 11, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 9, 15, 0, 9, 15, 0, 9, 15, 0, 5, 16, 0, 5, 16, 0, 5, 16, 0, 23, 36, 0, 23, 36, 0, 25, 36, 0, 25, 36, 0, 25, 36, 0, 32, 36, 0, 26, 36, 0, 26, 36, 0, 26, 36, 0, 26, 36, 0, 36, 0, 17, 36, 0, 17, 36, 0, 17, 36, 0, 17, 36, 0, 34, 36, 0, 34, 36, 0, 33, 36, 0, 33, 36, 0, 35, 36, 37, 0, 35, 36, 37, 0, 35, 36, 37, 0, 36, 37, 0, 30, 36, 0, 30, 36, 0, 30, 36, 0, 31, 36, 0, 31, 36, 0, 31, 36, 0, 18, 36, 0, 18, 36, 0, 18, 36, 0, 18, 36, 0, 18, 36, 0, 27, 36, 0, 24, 36, 0, 24, 36, 0, 29, 36, 0, 29, 36, 0, 29, 36, 0, 16, 36, 0, 22, 36, 0, 22, 36, 0, 36, 0, 21, 36, 0, 36, 0, 36, 0, 23, 0, 23, 0, 25, 0, 25, 0, 32, 0, 32, 0, 32, 0, 26, 0, 26, 0, 26, 0, 26, 0, 26, 0, 26, 0, 19, 0, 17, 0, 17, 0, 17, 0, 17, 0, 17, 0, 17, 0, 34, 0, 34, 0, 33, 0, 33, 0, 35, 37, 0, 35, 37, 0, 30, 0, 30, 0, 31, 0, 31, 0, 18, 0, 18, 0, 18, 0, 18, 0, 18, 0, 15, 0, 27, 0, 27, 0, 27, 0, 24, 0, 24, 0, 29, 0, 29, 0, 16, 0, 16, 0, 16, 0, 22, 0, 22, 0, 20, 0, 21, 0, 21, 0, 21, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 15, 0, 3, 16, 0, 3, 16, 0, 3, 16, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 8, 15, 0, 4, 16, 0, 4, 16, 0, 4, 16, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 9, 15, 0, 5, 16, 0, 5, 16, 0, 5, 16, 0, 23, 36, 0, 23, 36, 0, 25, 36, 0, 25, 36, 0, 32, 36, 0, 32, 36, 0, 32, 36, 0, 26, 36, 0, 26, 36, 0, 26, 36, 0, 26, 36, 0, 26, 36, 0, 19, 36, 0, 17, 36, 0, 17, 36, 0, 17, 36, 0, 17, 36, 0, 17, 36, 0, 34, 36, 0, 34, 36, 0, 33, 36, 0, 33, 36, 0, 35, 36, 37, 0, 35, 36, 37, 0, 30, 36, 0, 30, 36, 0, 31, 36, 0, 31, 36, 0, 18, 36, 0, 18, 36, 0, 18, 36, 0, 24, 36, 0, 24, 36, 0, 29, 36, 0, 29, 36, 0, 22, 36, 0, 22, 36, 0, 20, 36, 0, 21, 36, 0, 21, 36, 0, 21, 36, 0, 25, 0, 25, 0, 32, 0, 32, 0, 26, 0, 26, 0, 26, 0, 26, 0, 26, 0, 19, 0, 19, 0, 19, 0, 19, 0, 17, 0, 17, 0, 17, 0, 17, 0, 17, 0, 33, 0, 33, 0, 35, 37, 0, 35, 37, 0, 30, 0, 30, 0, 31, 0, 31, 0, 18, 0, 18, 0, 18, 0, 27, 0, 24, 0, 24, 0, 29, 0, 29, 0, 16, 0, 22, 0, 22, 0, 20, 0, 20, 0, 20, 0, 21, 0, 21, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 16, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 4, 16, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 5, 16, 0, 25, 36, 0, 25, 36, 0, 32, 36, 0, 32, 36, 0, 26, 36, 0, 26, 36, 0, 26, 36, 0, 19, 36, 0, 19, 36, 0, 19, 36, 0, 19, 36, 0, 17, 36, 0, 17, 36, 0, 17, 36, 0, 33, 36, 0, 33, 36, 0, 35, 36, 37, 0, 35, 36, 37, 0, 30, 36, 0, 30, 36, 0, 31, 36, 0, 31, 36, 0, 24, 36, 0, 24, 36, 0, 29, 36, 0, 29, 36, 0, 22, 36, 0, 22, 36, 0, 20, 36, 0, 20, 36, 0, 20, 36, 0, 21, 36, 0, 21, 36, 0, 25, 0, 25, 0, 32, 0, 32, 0, 26, 0, 26, 0, 26, 0, 26, 0, 26, 0, 19, 0, 19, 0, 19, 0, 19, 0, 19, 0, 17, 0, 17, 0, 17, 0, 17, 0, 17, 0, 33, 0, 33, 0, 35, 37, 0, 35, 37, 0, 30, 0, 30, 0, 31, 0, 31, 0, 18, 0, 24, 0, 24, 0, 29, 0, 29, 0, 22, 0, 22, 0, 20, 0, 20, 0, 21, 0, 21, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 3, 17, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 6, 17, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 7, 17, 0, 25, 36, 0, 25, 36, 0, 32, 36, 0, 32, 36, 0, 26, 36, 0, 26, 36, 0, 19, 36, 0, 19, 36, 0, 19, 36, 0, 19, 36, 0, 17, 36, 0, 17, 36, 0, 33, 36, 0, 33, 36, 0, 35, 36, 37, 0, 35, 36, 37, 0, 30, 36, 0, 30, 36, 0, 31, 36, 0, 31, 36, 0, 24, 36, 0, 24, 36, 0, 29, 36, 0, 29, 36, 0, 22, 36, 0, 22, 36, 0, 20, 36, 0, 20, 36, 0, 21, 36, 0, 21, 36, 0, 25, 0, 25, 0, 32, 0, 32, 0, 26, 0, 19, 0, 19, 0, 19, 0, 19, 0, 19, 0, 19, 0, 17, 0, 35, 37, 0, 35, 37, 0, 30, 0, 30, 0, 31, 0, 31, 0, 29, 0, 29, 0, 20, 0, 20, 0, 21, 0, 21, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 17, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 6, 17, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 7, 17, 0, 25, 36, 0, 25, 36, 0, 32, 36, 0, 32, 36, 0, 19, 36, 0, 19, 36, 0, 19, 36, 0, 19, 36, 0, 19, 36, 0, 35, 36, 37, 0, 35, 36, 37, 0, 30, 36, 0, 30, 36, 0, 31, 36, 0, 31, 36, 0, 29, 36, 0, 29, 36, 0, 20, 36, 0, 20, 36, 0, 21, 36, 0, 21, 36, 0, 25, 0, 25, 0, 32, 0, 32, 0, 19, 0, 19, 0, 19, 0, 19, 0, 19, 0, 35, 37, 0, 35, 37, 0, 30, 0, 30, 0, 31, 0, 31, 0, 29, 0, 29, 0, 20, 0, 20, 0, 21, 0, 21, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11, 0, 25, 36, 0, 25, 36, 0, 32, 36, 0, 32, 36, 0, 19, 36, 0, 19, 36, 0, 19, 36, 0, 35, 36, 37, 0, 35, 36, 37, 0, 30, 36, 0, 30, 36, 0, 31, 36, 0, 31, 36, 0, 29, 36, 0, 29, 36, 0, 20, 36, 0, 20, 36, 0, 21, 36, 0, 21, 36, 0, 32, 0, 32, 0, 19, 0, 19, 0, 19, 0, 19, 0, 19, 0, 20, 0, 20, 0, 21, 0, 21, 0, 3, 0, 3, 0, 3, 0, 10, 0, 10, 0, 10, 0, 11, 0, 11, 0, 11, 0, 32, 36, 0, 32, 36, 0, 19, 36, 0, 19, 36, 0, 20, 36, 0, 20, 36, 0, 21, 36, 0, 21, 36, 0, 32, 0, 32, 0, 19, 0, 19, 0, 19, 0, 20, 0, 20, 0, 21, 0, 21, 0, 3, 0, 3, 0, 10, 0, 10, 0, 11, 0, 11, 0, 32, 36, 0, 32, 36, 0, 19, 36, 0, 19, 36, 0, 20, 36, 0, 20, 36, 0, 21, 36, 0, 21, 36, 0, 19, 0, 19, 0, 20, 0, 20, 0, 19, 36, 0, 19, 36, 0, 20, 36, 0, 20, 36, 0, 19, 0, 19, 0, 20, 0, 20, 0, 19, 36, 0, 19, 36, 0, 20, 36, 0, 20, 36, 0, 0}; # define YYTYPE int struct yywork { YYTYPE verify, advance; } yycrank[] = { 0,0, 0,0, 1,11, 0,0, 2,11, 0,0, 0,0, 0,0, 0,0, 0,0, 1,12, 1,13, 2,16, 2,13, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 3,11, 0,0, 0,0, 0,0, 12,115, 0,0, 91,279, 0,0, 3,37, 3,13, 0,0, 5,11, 0,0, 0,0, 91,279, 91,0, 0,0, 0,0, 0,0, 5,59, 5,13, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 12,115, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 4,46, 0,0, 0,0, 0,0, 0,0, 0,0, 2,17, 2,18, 2,19, 2,20, 14,118, 20,149, 2,21, 24,156, 20,150, 1,14, 2,22, 2,14, 22,152, 2,23, 9,14, 2,24, 2,25, 2,26, 3,38, 3,39, 7,75, 19,148, 21,151, 17,141, 3,40, 12,116, 22,153, 25,157, 3,41, 3,14, 17,142, 26,158, 2,27, 2,28, 2,29, 2,30, 15,119, 17,143, 2,31, 5,60, 5,14, 1,15, 2,32, 2,15, 6,62, 2,33, 9,15, 2,34, 2,35, 2,36, 3,42, 3,43, 4,47, 4,48, 4,49, 4,20, 3,44, 12,117, 4,50, 23,154, 3,45, 3,15, 4,51, 4,14, 29,166, 4,23, 18,144, 4,52, 4,25, 4,26, 18,145, 5,61, 5,15, 31,169, 18,146, 30,167, 23,155, 32,170, 30,168, 34,174, 18,147, 33,172, 35,175, 36,176, 4,53, 4,54, 4,55, 4,30, 7,76, 7,14, 4,56, 32,171, 38,186, 39,187, 4,57, 4,15, 8,78, 4,33, 33,173, 4,58, 4,35, 4,36, 6,63, 6,64, 6,65, 6,20, 40,188, 41,189, 6,66, 27,159, 42,190, 43,191, 6,67, 6,14, 44,192, 6,23, 27,160, 6,68, 6,25, 6,26, 7,77, 7,15, 45,193, 27,161, 47,207, 28,162, 48,208, 49,209, 50,210, 28,163, 51,211, 52,212, 53,213, 28,164, 6,69, 6,70, 6,71, 6,30, 10,91, 28,165, 6,72, 54,214, 55,215, 56,216, 6,73, 6,15, 10,92, 6,33, 57,217, 6,74, 6,35, 6,36, 58,218, 60,222, 8,79, 8,80, 8,81, 8,20, 61,223, 63,237, 8,82, 64,238, 65,239, 66,240, 8,83, 8,14, 67,241, 8,23, 68,242, 8,84, 8,25, 8,26, 69,243, 70,244, 71,245, 72,246, 73,247, 74,248, 76,252, 77,253, 79,267, 80,268, 81,269, 82,270, 83,271, 84,272, 8,85, 8,86, 8,87, 8,30, 85,273, 86,274, 8,88, 87,275, 88,276, 75,249, 8,89, 8,15, 89,277, 8,33, 16,120, 8,90, 8,35, 8,36, 10,93, 10,94, 10,95, 10,96, 37,177, 90,278, 10,97, 59,219, 113,0, 95,0, 10,98, 10,99, 97,0, 10,100, 75,249, 10,101, 10,102, 10,103, 118,341, 16,120, 98,279, 119,342, 141,343, 99,0, 101,0, 106,0, 103,0, 37,177, 98,279, 98,0, 59,219, 142,344, 10,104, 10,105, 10,106, 10,107, 143,345, 108,0, 10,108, 102,0, 144,346, 110,0, 10,109, 10,110, 111,279, 10,111, 145,347, 10,112, 10,113, 10,114, 146,348, 46,194, 111,279, 111,0, 16,121, 16,122, 16,123, 16,124, 62,224, 75,250, 16,125, 147,349, 37,178, 37,179, 16,126, 16,116, 148,350, 16,127, 37,180, 16,128, 16,129, 16,130, 37,181, 37,116, 46,194, 59,220, 59,116, 95,310, 150,353, 152,357, 97,313, 62,224, 99,316, 101,319, 98,314, 103,321, 16,131, 16,132, 16,133, 16,134, 153,358, 75,251, 16,135, 154,359, 37,182, 37,183, 16,136, 16,117, 98,315, 16,137, 37,184, 16,138, 16,139, 16,140, 37,185, 37,117, 78,254, 59,221, 59,117, 46,195, 46,196, 46,197, 93,279, 102,320, 113,339, 46,198, 62,225, 62,226, 62,227, 46,199, 93,279, 93,0, 62,228, 112,0, 46,200, 106,329, 62,229, 94,279, 155,360, 78,254, 157,363, 62,230, 110,335, 149,351, 114,0, 94,279, 94,0, 108,332, 151,354, 151,355, 111,336, 46,201, 46,202, 46,203, 158,364, 159,365, 149,352, 46,204, 62,231, 62,232, 62,233, 46,205, 92,279, 160,366, 62,234, 151,356, 46,206, 111,337, 62,235, 100,279, 92,280, 92,0, 161,367, 62,236, 78,255, 78,256, 78,257, 100,279, 100,0, 96,279, 78,258, 156,361, 104,279, 156,362, 78,259, 162,368, 93,303, 96,279, 96,0, 78,260, 104,279, 104,0, 163,369, 93,304, 105,279, 164,370, 165,371, 166,350, 167,372, 168,374, 93,305, 94,306, 105,279, 105,0, 170,377, 94,307, 78,261, 78,262, 78,263, 94,308, 107,279, 167,373, 78,264, 171,378, 109,279, 94,309, 78,265, 172,379, 107,279, 107,0, 173,380, 78,266, 109,279, 109,0, 112,338, 169,375, 169,376, 175,383, 92,281, 92,282, 92,283, 92,284, 176,384, 100,317, 92,285, 114,340, 186,385, 187,386, 92,286, 92,287, 188,387, 92,288, 169,356, 92,289, 92,290, 92,291, 189,388, 174,381, 96,311, 174,382, 100,318, 96,312, 190,389, 191,390, 192,387, 193,391, 195,207, 194,194, 196,208, 199,211, 92,292, 92,293, 92,294, 92,295, 201,213, 202,214, 92,296, 205,217, 208,392, 209,393, 92,297, 92,298, 210,394, 92,299, 207,385, 92,300, 92,301, 92,302, 104,322, 211,357, 194,194, 212,395, 207,344, 213,389, 214,396, 104,323, 215,393, 216,394, 211,388, 218,397, 105,325, 213,366, 104,324, 217,377, 105,326, 222,398, 223,399, 225,237, 105,327, 226,238, 224,224, 229,241, 217,391, 231,243, 105,328, 232,244, 235,247, 237,400, 238,401, 239,402, 109,333, 107,330, 240,403, 241,398, 107,331, 194,195, 194,196, 194,197, 242,404, 243,405, 244,406, 194,198, 245,402, 224,224, 109,334, 194,199, 246,403, 247,399, 248,407, 249,249, 194,200, 252,408, 253,409, 255,267, 256,268, 259,271, 261,273, 262,274, 265,277, 267,410, 268,411, 269,412, 270,413, 254,254, 271,408, 272,414, 273,415, 194,201, 194,202, 194,203, 274,416, 275,412, 249,249, 194,204, 276,413, 277,409, 278,417, 194,205, 224,225, 224,226, 224,227, 279,0, 194,206, 281,0, 224,228, 287,0, 254,254, 282,0, 224,229, 283,0, 341,462, 292,0, 285,0, 224,230, 294,0, 298,0, 342,462, 290,0, 284,0, 343,463, 293,0, 299,0, 300,0, 289,0, 296,0, 344,464, 345,465, 280,0, 295,0, 305,0, 224,231, 224,232, 224,233, 291,0, 286,0, 301,0, 224,234, 249,250, 288,0, 302,0, 224,235, 254,255, 254,256, 254,257, 307,0, 224,236, 304,0, 254,258, 297,0, 346,466, 347,467, 254,259, 348,468, 349,469, 306,0, 325,0, 254,260, 322,0, 281,303, 351,473, 324,0, 309,0, 282,306, 323,0, 287,316, 281,304, 282,307, 327,0, 303,0, 249,251, 282,308, 308,0, 281,305, 254,261, 254,262, 254,263, 282,309, 283,310, 284,311, 254,264, 285,313, 284,312, 289,319, 254,265, 280,281, 280,282, 280,283, 280,284, 254,266, 286,314, 280,285, 290,320, 291,321, 288,317, 280,286, 280,287, 305,420, 280,288, 292,322, 280,289, 280,290, 280,291, 310,0, 286,315, 307,422, 292,323, 298,335, 293,325, 299,336, 304,419, 288,318, 293,326, 292,324, 300,338, 294,329, 293,327, 280,292, 280,293, 280,294, 280,295, 295,330, 293,328, 280,296, 295,331, 296,332, 299,337, 280,297, 280,298, 306,421, 280,299, 302,340, 280,300, 280,301, 280,302, 303,418, 297,333, 309,424, 311,279, 308,423, 314,0, 312,0, 301,339, 313,279, 315,0, 316,0, 311,279, 311,0, 317,0, 319,279, 297,334, 313,279, 313,0, 318,0, 321,0, 320,0, 322,441, 319,279, 319,0, 323,442, 324,443, 310,425, 325,444, 326,0, 328,0, 330,279, 329,0, 327,446, 331,0, 332,279, 334,0, 335,0, 333,0, 330,279, 330,0, 336,0, 337,0, 332,279, 332,0, 339,0, 352,474, 353,475, 340,0, 354,476, 338,279, 354,477, 350,470, 355,478, 357,483, 356,479, 358,484, 359,485, 338,279, 338,0, 350,470, 350,0, 360,486, 356,479, 356,0, 361,487, 362,488, 363,489, 315,433, 364,490, 365,463, 314,432, 311,426, 312,428, 366,491, 313,429, 313,430, 367,492, 368,493, 319,437, 369,494, 319,438, 370,495, 371,496, 316,434, 311,427, 317,435, 321,440, 318,436, 372,497, 373,498, 374,499, 313,431, 320,439, 375,500, 376,502, 375,501, 377,483, 378,484, 379,503, 380,504, 356,480, 381,487, 382,505, 383,506, 384,507, 385,508, 386,509, 387,510, 388,514, 389,508, 390,515, 391,516, 392,517, 395,525, 393,518, 387,510, 387,0, 396,526, 397,525, 350,471, 326,445, 329,425, 393,518, 393,0, 398,527, 334,454, 356,481, 399,528, 400,529, 394,521, 330,448, 331,450, 332,451, 332,452, 333,453, 401,530, 328,447, 394,521, 394,0, 404,538, 405,529, 335,455, 337,457, 330,449, 336,456, 338,458, 340,461, 338,459, 339,460, 332,431, 406,539, 350,472, 402,531, 387,511, 403,534, 407,538, 408,540, 409,541, 356,482, 410,542, 402,531, 402,0, 403,534, 403,0, 411,543, 414,551, 415,542, 416,552, 412,544, 417,551, 421,0, 418,0, 413,547, 419,0, 420,0, 394,522, 412,544, 412,0, 424,0, 387,512, 413,547, 413,0, 393,519, 422,0, 423,0, 425,560, 426,0, 429,279, 427,0, 428,0, 430,0, 432,0, 433,0, 425,560, 425,0, 429,279, 429,0, 435,0, 434,0, 431,569, 403,535, 394,523, 436,0, 437,0, 438,0, 439,0, 441,0, 431,569, 431,0, 440,0, 442,0, 387,513, 443,0, 444,0, 393,520, 445,0, 446,0, 447,0, 413,548, 448,0, 402,532, 449,0, 450,0, 451,279, 452,0, 421,556, 403,536, 453,0, 455,0, 454,0, 456,0, 451,279, 451,0, 394,524, 424,559, 457,0, 412,545, 418,553, 458,0, 419,554, 459,0, 420,555, 460,0, 423,558, 413,549, 431,570, 422,557, 427,564, 428,565, 430,568, 432,573, 433,574, 402,533, 425,561, 426,563, 461,0, 435,576, 463,602, 403,537, 464,605, 465,606, 466,607, 429,566, 467,608, 429,567, 463,602, 463,0, 468,609, 412,546, 437,578, 469,610, 431,571, 434,575, 438,579, 462,599, 472,0, 413,550, 471,0, 436,577, 440,581, 439,580, 470,470, 462,599, 462,0, 473,613, 425,562, 474,614, 476,619, 477,620, 470,470, 470,0, 478,621, 481,0, 475,615, 485,634, 486,635, 482,0, 488,640, 489,641, 490,642, 444,584, 475,615, 475,0, 431,572, 441,553, 447,587, 491,605, 446,586, 442,582, 492,643, 445,585, 443,583, 449,589, 450,590, 493,644, 452,593, 494,645, 479,479, 453,573, 448,588, 454,574, 456,594, 495,646, 463,603, 496,647, 479,479, 479,0, 497,613, 498,648, 481,480, 451,591, 483,627, 451,592, 482,480, 455,575, 500,650, 458,578, 501,651, 480,479, 483,627, 483,0, 459,596, 502,621, 457,595, 484,631, 471,611, 480,622, 480,623, 503,652, 460,597, 499,615, 462,600, 484,631, 484,0, 504,653, 463,604, 487,636, 461,598, 499,615, 499,0, 481,625, 475,616, 475,617, 479,480, 487,636, 487,0, 505,654, 506,655, 507,656, 509,661, 480,624, 513,0, 508,657, 512,0, 514,667, 472,612, 515,668, 483,628, 510,510, 516,669, 508,657, 508,0, 511,510, 462,601, 480,480, 517,670, 510,510, 510,0, 519,0, 518,518, 511,662, 511,663, 520,0, 523,0, 475,618, 524,0, 482,626, 518,518, 518,0, 526,682, 527,683, 528,684, 487,637, 521,521, 530,689, 533,0, 532,0, 483,629, 513,511, 536,0, 512,511, 521,521, 521,0, 522,521, 511,664, 539,701, 537,0, 525,678, 508,658, 499,617, 484,632, 522,673, 522,674, 540,702, 510,511, 525,678, 525,0, 529,685, 511,511, 541,703, 523,522, 543,708, 524,522, 545,0, 531,531, 529,685, 529,0, 487,638, 508,659, 483,630, 546,0, 512,665, 531,531, 531,0, 552,720, 522,675, 536,535, 549,0, 550,0, 521,522, 499,649, 499,618, 484,633, 537,535, 554,0, 555,0, 519,671, 534,534, 557,0, 522,522, 558,0, 523,676, 562,0, 525,679, 566,0, 534,534, 534,0, 535,534, 561,0, 487,639, 508,660, 513,666, 538,697, 529,686, 532,690, 535,692, 535,693, 536,695, 542,704, 556,0, 538,697, 538,0, 544,544, 559,0, 549,548, 550,548, 542,704, 542,0, 547,547, 563,0, 544,544, 544,0, 520,672, 529,687, 568,0, 524,677, 547,547, 547,0, 525,680, 535,694, 548,547, 545,709, 584,0, 534,535, 564,0, 533,691, 567,0, 576,0, 548,711, 548,712, 555,725, 551,716, 554,724, 535,535, 553,721, 549,714, 537,696, 572,0, 538,698, 551,716, 551,0, 577,0, 553,721, 553,0, 542,705, 529,688, 557,727, 571,0, 558,728, 560,560, 525,681, 579,0, 548,713, 565,734, 547,548, 556,726, 561,730, 560,560, 560,0, 566,738, 546,710, 565,734, 565,0, 569,569, 542,706, 581,0, 548,548, 563,732, 550,715, 559,729, 570,569, 569,569, 569,0, 538,699, 572,570, 582,0, 580,0, 551,717, 570,741, 564,733, 573,745, 567,739, 562,731, 583,0, 571,570, 574,749, 585,0, 586,0, 573,745, 573,0, 575,752, 587,0, 568,740, 574,749, 574,0, 576,755, 542,707, 589,0, 575,752, 575,0, 553,722, 588,0, 570,742, 591,0, 577,756, 538,700, 593,0, 592,0, 594,0, 569,570, 584,765, 578,757, 551,718, 596,0, 595,0, 571,743, 570,570, 597,0, 600,0, 578,757, 578,0, 565,735, 565,736, 579,761, 598,0, 603,0, 573,746, 590,734, 601,0, 606,785, 599,599, 581,763, 553,723, 580,762, 602,602, 590,734, 590,0, 572,744, 599,599, 599,0, 607,786, 605,782, 602,602, 602,0, 551,719, 604,0, 608,787, 609,788, 610,789, 605,782, 605,0, 612,0, 614,793, 611,0, 565,737, 615,615, 573,747, 578,758, 616,0, 618,0, 613,790, 574,750, 617,0, 615,615, 615,0, 582,724, 619,797, 575,753, 613,790, 613,0, 583,764, 620,798, 633,0, 634,814, 621,799, 622,0, 635,815, 600,778, 625,0, 640,821, 603,780, 626,0, 621,799, 621,0, 589,769, 641,822, 585,766, 586,767, 573,748, 587,768, 632,0, 588,732, 578,759, 574,751, 592,772, 631,631, 590,736, 642,823, 622,624, 575,754, 629,0, 630,0, 643,824, 631,631, 631,0, 623,623, 597,776, 605,783, 594,773, 595,774, 591,771, 611,350, 622,480, 623,623, 623,0, 625,480, 593,740, 596,775, 626,480, 601,779, 621,800, 639,0, 598,777, 644,825, 578,760, 617,795, 616,794, 590,770, 590,737, 613,791, 638,0, 645,787, 604,781, 646,826, 624,804, 647,789, 627,627, 629,628, 630,628, 605,784, 628,627, 612,350, 624,804, 624,0, 627,627, 627,0, 621,801, 648,793, 628,807, 628,808, 649,0, 623,803, 625,356, 650,828, 618,796, 629,810, 636,636, 651,829, 639,637, 632,812, 637,636, 613,792, 652,814, 653,830, 636,636, 636,0, 624,805, 638,637, 637,816, 637,817, 654,821, 655,831, 628,809, 633,813, 656,832, 657,657, 659,0, 660,0, 621,802, 661,838, 624,806, 662,0, 627,628, 657,657, 657,0, 658,657, 628,628, 626,356, 630,811, 638,819, 663,663, 665,0, 637,818, 658,833, 658,834, 667,843, 666,0, 668,838, 663,663, 663,0, 664,840, 669,844, 636,637, 670,845, 662,664, 671,0, 637,637, 672,0, 664,840, 664,0, 676,0, 673,0, 639,820, 659,658, 660,658, 674,674, 677,0, 658,835, 662,511, 680,0, 682,845, 657,658, 681,0, 674,674, 674,0, 683,855, 684,856, 689,862, 665,511, 690,0, 691,0, 658,658, 664,841, 666,511, 673,675, 675,847, 663,839, 701,862, 659,836, 687,0, 688,0, 702,872, 695,0, 675,847, 675,0, 703,873, 664,842, 676,522, 673,522, 678,678, 649,827, 708,879, 720,879, 677,522, 710,0, 785,947, 680,679, 678,678, 678,0, 681,679, 679,678, 674,846, 692,0, 671,393, 685,685, 665,387, 686,685, 675,848, 679,850, 679,851, 696,0, 660,837, 685,685, 685,0, 686,857, 686,858, 687,686, 688,686, 680,853, 695,535, 693,693, 675,849, 694,864, 709,0, 676,394, 692,694, 699,0, 690,402, 693,693, 693,0, 694,864, 694,0, 679,852, 700,0, 706,0, 678,679, 697,697, 672,393, 686,859, 692,535, 698,697, 687,860, 666,387, 707,0, 697,697, 697,0, 679,679, 696,535, 698,867, 698,868, 685,686, 722,0, 686,686, 681,854, 694,865, 723,0, 695,403, 714,0, 715,0, 731,0, 691,402, 727,0, 677,394, 699,698, 726,0, 711,0, 693,863, 704,704, 694,866, 705,704, 700,698, 706,705, 698,869, 718,0, 688,861, 704,704, 704,0, 705,874, 705,875, 725,0, 707,705, 709,412, 697,698, 712,712, 710,412, 699,870, 698,698, 728,0, 711,713, 713,881, 719,0, 712,712, 712,0, 729,0, 714,548, 715,548, 706,877, 713,881, 713,0, 716,716, 730,0, 705,876, 711,548, 721,721, 733,0, 735,0, 722,889, 716,716, 716,0, 717,716, 718,717, 721,721, 721,0, 704,705, 724,891, 705,705, 696,403, 717,884, 717,885, 726,895, 727,896, 713,882, 724,891, 724,0, 700,871, 732,899, 736,0, 719,717, 737,0, 712,880, 734,734, 714,413, 718,887, 732,899, 732,0, 713,883, 739,0, 707,878, 734,734, 734,0, 738,0, 717,886, 723,890, 751,0, 750,0, 716,717, 743,0, 725,894, 744,0, 731,425, 754,0, 747,0, 729,898, 748,0, 755,0, 717,717, 753,0, 749,749, 730,425, 740,908, 728,897, 741,569, 733,902, 742,912, 715,413, 749,749, 749,0, 740,908, 740,0, 741,741, 741,0, 742,912, 742,0, 735,903, 756,0, 761,0, 746,745, 759,0, 745,745, 760,0, 724,892, 719,888, 762,0, 743,570, 746,915, 744,570, 745,745, 745,0, 747,746, 736,904, 748,746, 752,752, 763,0, 741,742, 732,900, 742,913, 764,0, 765,0, 738,906, 752,752, 752,0, 766,0, 757,757, 739,907, 767,0, 740,909, 747,917, 741,570, 746,916, 742,914, 757,757, 757,0, 724,893, 750,919, 759,758, 753,921, 760,758, 768,0, 770,0, 758,757, 743,431, 769,0, 746,746, 737,905, 745,746, 771,0, 732,901, 758,925, 755,923, 772,0, 773,0, 740,910, 756,924, 761,929, 774,0, 775,0, 759,927, 776,0, 780,0, 777,0, 748,918, 754,922, 779,0, 778,0, 751,920, 783,0, 781,0, 763,931, 757,758, 782,782, 786,948, 758,926, 784,0, 787,949, 744,431, 788,953, 762,930, 782,782, 782,0, 791,0, 789,954, 787,949, 787,0, 740,911, 790,790, 758,758, 792,0, 795,0, 789,954, 789,0, 760,928, 793,960, 790,790, 790,0, 794,0, 796,0, 797,966, 798,967, 815,987, 793,960, 793,0, 805,805, 814,984, 822,997, 765,933, 799,799, 801,0, 812,0, 813,0, 800,799, 814,984, 814,0, 766,896, 799,799, 799,0, 805,806, 764,932, 800,968, 800,969, 787,950, 802,0, 810,0, 803,623, 823,998, 780,943, 804,804, 789,955, 783,945, 768,898, 767,934, 803,973, 769,902, 811,0, 804,804, 804,623, 771,936, 778,941, 806,975, 770,935, 791,958, 787,951, 800,970, 824,947, 801,800, 774,938, 775,929, 777,940, 789,956, 772,937, 825,999, 807,0, 799,800, 794,963, 795,964, 803,974, 800,800, 773,923, 802,800, 810,628, 816,0, 793,961, 806,805, 826,1000, 776,939, 781,944, 812,982, 784,946, 779,942, 803,803, 811,628, 819,0, 804,806, 787,952, 807,809, 801,971, 806,806, 808,808, 820,0, 792,959, 789,957, 809,977, 814,985, 816,818, 827,0, 808,808, 808,0, 810,980, 807,628, 809,977, 809,0, 828,966, 817,817, 793,962, 796,965, 829,967, 818,989, 816,637, 821,994, 813,983, 817,817, 817,0, 830,987, 831,1001, 818,989, 818,0, 821,994, 821,0, 819,637, 832,1002, 833,0, 834,834, 836,0, 809,978, 814,986, 820,637, 835,1004, 837,0, 841,841, 834,834, 834,0, 802,972, 842,1015, 808,976, 835,1004, 835,0, 819,992, 809,979, 818,990, 839,663, 811,981, 838,1009, 841,842, 833,835, 843,1016, 840,840, 844,1017, 839,1013, 817,988, 838,1009, 838,0, 854,0, 818,991, 840,840, 840,663, 849,1024, 842,841, 833,658, 835,1005, 836,658, 845,1018, 855,1031, 848,848, 850,0, 837,658, 846,674, 856,1032, 834,1003, 845,1018, 845,0, 842,842, 839,1014, 835,1006, 846,1022, 847,847, 820,993, 848,849, 836,1007, 853,0, 849,848, 857,0, 861,0, 847,847, 847,674, 827,963, 839,839, 850,852, 838,1010, 854,679, 821,995, 851,851, 840,842, 872,1052, 849,849, 860,0, 873,1053, 852,1026, 846,1023, 851,851, 851,0, 850,679, 858,858, 870,0, 857,859, 852,1026, 852,0, 845,1019, 948,1135, 838,1011, 858,858, 858,0, 846,846, 953,1141, 871,0, 837,1008, 853,679, 859,1034, 857,686, 861,686, 997,1183, 847,849, 821,996, 866,1045, 998,1184, 859,1034, 859,0, 862,1039, 845,1020, 852,1027, 863,693, 865,865, 860,686, 867,0, 853,1029, 862,1039, 862,0, 851,1025, 863,1043, 854,1030, 870,698, 838,1012, 889,0, 852,1028, 864,864, 865,866, 868,868, 866,865, 858,1033, 859,1035, 860,1037, 871,698, 864,864, 864,693, 868,868, 868,0, 867,869, 869,1047, 870,1050, 874,0, 845,1021, 866,866, 863,1044, 859,1036, 882,882, 869,1047, 869,0, 877,0, 878,0, 861,1038, 867,698, 875,875, 890,0, 862,1040, 883,1066, 876,1055, 863,863, 879,1060, 882,883, 875,875, 875,0, 888,0, 874,876, 876,1055, 876,0, 879,1060, 879,0, 880,712, 884,0, 869,1048, 864,866, 881,881, 868,1046, 887,0, 862,1041, 880,1064, 874,705, 893,0, 883,882, 881,881, 881,712, 871,1051, 892,0, 869,1049, 877,705, 878,705, 885,885, 876,1056, 889,1073, 894,0, 895,0, 884,886, 883,883, 901,0, 885,885, 885,0, 897,0, 875,1054, 888,717, 880,1065, 891,891, 876,1057, 877,1058, 879,1061, 900,0, 884,717, 862,1042, 886,1068, 891,891, 891,0, 887,717, 896,1079, 903,0, 880,880, 898,1084, 886,1068, 886,0, 881,883, 899,899, 896,1079, 896,0, 902,1090, 898,1084, 898,0, 879,1062, 904,0, 899,899, 899,0, 887,1071, 902,1090, 902,0, 905,0, 885,1067, 906,0, 907,0, 878,1059, 919,0, 908,908, 910,0, 886,1069, 911,0, 909,908, 913,623, 912,912, 892,1075, 908,908, 908,0, 894,1077, 888,1072, 909,1098, 890,1074, 912,912, 920,0, 886,1070, 914,912, 921,0, 879,1063, 896,1080, 922,0, 897,1083, 898,1085, 917,0, 914,1102, 895,1078, 900,1088, 913,913, 924,0, 932,0, 918,0, 931,0, 903,1093, 893,1076, 928,0, 909,1099, 930,0, 910,909, 933,0, 911,909, 896,1081, 913,914, 927,0, 898,1086, 934,0, 908,909, 935,0, 901,1089, 914,913, 909,909, 915,745, 912,914, 902,1091, 904,1094, 906,1096, 907,1097, 919,1108, 916,1103, 915,915, 915,0, 917,746, 923,1112, 914,914, 936,0, 937,0, 916,1103, 916,0, 918,746, 910,1100, 923,1112, 923,0, 928,758, 896,1082, 938,0, 939,0, 898,1087, 940,0, 925,757, 941,0, 927,758, 942,0, 943,0, 915,916, 945,0, 902,1092, 925,925, 925,0, 924,1115, 917,1106, 916,1104, 921,1110, 905,1095, 926,1116, 944,0, 946,0, 999,1135, 915,746, 927,1119, 929,1121, 958,0, 926,1116, 926,0, 911,1101, 916,1105, 920,1109, 931,1125, 929,1121, 929,0, 947,1132, 925,926, 962,0, 930,1124, 959,0, 965,0, 952,0, 961,0, 947,1132, 947,0, 964,0, 932,1077, 949,949, 928,1120, 954,954, 925,758, 926,1117, 922,1111, 951,0, 918,1107, 949,949, 949,0, 954,954, 954,0, 956,0, 957,0, 972,0, 1000,1185, 935,1093, 1001,1186, 926,1118, 934,1127, 923,1113, 950,949, 1002,1184, 933,1126, 1016,1198, 978,978, 945,1130, 943,463, 955,954, 950,1136, 950,1137, 952,950, 941,462, 960,960, 936,1096, 937,1097, 955,1142, 955,1143, 958,1147, 978,979, 1017,1198, 960,960, 960,0, 951,950, 938,1115, 983,0, 949,950, 1031,1210, 954,955, 956,955, 957,955, 972,800, 923,1114, 950,1138, 947,1133, 961,1149, 980,0, 964,1154, 971,0, 929,1122, 955,1144, 939,1128, 940,1129, 982,0, 963,1151, 951,1139, 942,462, 950,950, 966,1155, 946,1131, 967,1158, 944,463, 963,1151, 963,0, 955,955, 968,0, 966,1155, 966,0, 967,1158, 967,0, 969,969, 956,1145, 962,1150, 959,1148, 965,1154, 952,1140, 947,1134, 975,975, 969,969, 969,0, 986,0, 929,1123, 970,1162, 980,628, 985,0, 971,800, 996,0, 973,623, 968,970, 974,1167, 970,1162, 970,0, 976,808, 979,1172, 972,1166, 973,973, 973,0, 974,1167, 974,0, 977,977, 976,1170, 975,805, 968,800, 981,0, 957,1146, 980,483, 971,1165, 977,977, 977,808, 995,0, 992,0, 990,990, 982,484, 1005,1005, 970,1163, 975,806, 969,1161, 979,978, 1032,1210, 973,974, 993,0, 974,1168, 991,1180, 963,1152, 976,1171, 990,991, 983,484, 1005,1006, 970,1164, 988,817, 966,1156, 979,979, 967,1159, 973,803, 984,984, 974,1169, 1052,1225, 988,1178, 976,976, 985,1173, 981,628, 987,1175, 984,984, 984,0, 989,989, 977,979, 991,990, 992,637, 1011,0, 987,1175, 987,0, 1003,834, 989,989, 989,817, 1006,1189, 963,1153, 1007,0, 993,637, 1008,0, 1003,1187, 991,991, 988,1179, 966,1157, 994,994, 967,1160, 1004,1004, 1012,0, 986,1174, 995,1181, 1053,1225, 1073,0, 994,994, 994,0, 1004,1004, 1004,834, 988,988, 992,487, 996,1182, 1006,1005, 1009,1009, 1141,1300, 1015,1015, 1027,1027, 1003,1188, 1020,0, 1011,1010, 1074,0, 1009,1009, 1009,0, 1183,1335, 989,991, 1010,1009, 1006,1006, 1007,658, 981,483, 1008,658, 1027,1028, 1003,1003, 1013,663, 1010,1190, 1010,1191, 1014,1195, 1021,0, 1012,1010, 1018,1018, 1015,841, 1013,1013, 1013,0, 1029,0, 1014,1195, 1014,0, 1004,1006, 1018,1018, 1018,0, 1083,0, 1185,1300, 1124,0, 1011,1193, 993,487, 1015,842, 987,1176, 1020,1019, 1024,1024, 1010,1192, 1035,1035, 1009,1010, 1019,1018, 1186,1335, 1007,508, 1030,0, 1013,1014, 0,0, 1022,674, 1014,1196, 1019,1199, 1019,1200, 1073,553, 1010,1010, 1035,1036, 1021,1019, 1022,1022, 1022,0, 0,0, 1025,851, 1013,839, 1029,679, 1024,848, 1014,1197, 1023,1204, 1028,1209, 1018,1019, 1025,1207, 987,1177, 1020,1202, 1037,0, 1036,1213, 1023,1204, 1023,0, 1019,1201, 1038,0, 1024,849, 1026,1026, 1008,508, 1033,858, 1022,1023, 1041,0, 1030,679, 1012,1194, 1034,1034, 1026,1026, 1026,851, 1033,1211, 1019,1019, 1028,1027, 1029,525, 1025,1208, 1034,1034, 1034,858, 1022,846, 1036,1035, 1023,1205, 1042,0, 1050,0, 1083,1250, 1074,553, 0,0, 1051,0, 1028,1028, 1124,1283, 1025,1025, 1039,1039, 1037,686, 1040,1039, 1036,1036, 1023,1206, 1033,1212, 1038,686, 1043,693, 1039,1039, 1039,0, 1040,1214, 1040,1215, 1041,1040, 1021,1203, 1045,1045, 1043,1043, 1043,0, 1026,1028, 1044,1219, 1033,1033, 1059,0, 1048,1048, 1046,868, 1047,1047, 1034,1036, 1049,1224, 1044,1219, 1044,0, 1042,1040, 1050,698, 1046,1222, 1047,1047, 1047,868, 1051,698, 1040,1216, 1048,1049, 1037,529, 1030,525, 1045,865, 1043,1044, 1058,0, 1057,1228, 1076,0, 1054,875, 1041,1217, 1056,1056, 1039,1040, 1055,1055, 1040,1040, 1049,1048, 1044,1220, 1054,1226, 1045,866, 1043,863, 1046,1223, 1055,1055, 1055,875, 1059,705, 1050,538, 1056,1057, 1062,0, 1063,0, 1060,1060, 1049,1049, 1044,1221, 1057,1056, 1071,0, 1066,1066, 1046,1046, 1047,1049, 1060,1060, 1060,0, 1061,1060, 1038,529, 1064,712, 1054,1227, 1068,1068, 1058,705, 1070,1239, 1057,1057, 1061,1229, 1061,1230, 1064,1064, 1064,0, 1068,1068, 1068,885, 1069,1069, 1065,1234, 1072,0, 1054,1054, 1075,0, 1066,882, 1042,1218, 1055,1057, 1051,538, 1065,1234, 1065,0, 1062,1061, 1063,1061, 1067,885, 1069,1070, 1077,1242, 1070,1069, 1071,717, 1061,1231, 1066,883, 1064,1065, 1067,1237, 1060,1061, 1077,1242, 1077,0, 1078,0, 1058,542, 1082,0, 1081,0, 1080,1079, 1070,1070, 1087,0, 1061,1061, 1065,1235, 1064,880, 1086,0, 1068,1070, 1080,1246, 1059,542, 1072,717, 1079,1079, 1091,0, 1085,1084, 1062,1232, 1084,1084, 1067,1238, 1071,551, 1065,1236, 1079,1079, 1079,0, 1085,1251, 1076,1241, 1084,1084, 1084,0, 1089,0, 1088,0, 1092,0, 1094,0, 1095,0, 1067,1067, 1109,0, 1080,1247, 1090,1090, 1110,0, 1082,1080, 1081,1080, 1101,0, 1075,1240, 1087,1085, 1093,1259, 1090,1090, 1090,0, 1086,1085, 1100,0, 1085,1252, 1080,1080, 1063,1233, 1093,1259, 1093,0, 1111,0, 1108,0, 1077,1243, 1104,808, 1096,1263, 1078,1245, 1097,1266, 1079,1080, 1081,1248, 1085,1085, 1098,908, 1084,1085, 1096,1263, 1096,0, 1097,1266, 1097,0, 1113,0, 1114,0, 1098,1098, 1098,0, 1107,0, 1072,551, 1091,1257, 1123,0, 1101,909, 1086,1253, 1104,1104, 1106,0, 1127,0, 1130,0, 1120,0, 1100,909, 1126,0, 1102,912, 1077,1244, 1088,1255, 1099,1269, 1094,1262, 1103,1103, 1082,1249, 1104,1105, 1102,1102, 1098,1099, 1105,1103, 1099,1269, 1099,0, 1103,1103, 1128,0, 1122,0, 1129,0, 1119,0, 1105,1274, 1100,1272, 1087,1254, 1112,1112, 1131,0, 1098,909, 1107,746, 1110,575, 1093,1260, 1108,574, 1133,0, 1112,1112, 1112,0, 1106,746, 1102,913, 1089,1256, 1120,758, 1099,1270, 1092,1258, 1095,1262, 1113,1275, 1109,574, 1116,1116, 1125,0, 1105,1104, 1096,1264, 1101,1273, 1097,1267, 1102,914, 1117,817, 1116,1116, 1099,1271, 1134,0, 1103,1105, 1115,1277, 1106,573, 1119,758, 1118,1116, 1105,1105, 1121,1121, 1093,1261, 1132,1132, 1115,1277, 1115,0, 1130,1287, 1118,1280, 1148,0, 1121,1121, 1121,0, 1132,1132, 1132,0, 1136,0, 1117,1117, 1114,1276, 1139,0, 1111,575, 1122,1281, 1096,1265, 1147,0, 1097,1268, 1107,573, 1140,0, 1135,1291, 1123,1282, 1142,0, 1119,578, 1117,1118, 1149,0, 1116,1118, 1118,1117, 1135,1291, 1135,0, 1126,1245, 1145,0, 1136,1138, 1150,0, 1137,1137, 1120,578, 1127,1285, 1133,1289, 1146,0, 1152,0, 1125,1284, 1118,1118, 1137,1137, 1137,0, 1138,1295, 1142,1144, 1136,950, 1129,1284, 1153,0, 1139,950, 1156,0, 1157,0, 1138,1295, 1138,0, 1143,1143, 1159,0, 1140,950, 1151,1151, 1128,1286, 1142,955, 1131,1288, 1144,1302, 1143,1143, 1143,0, 1160,0, 1151,1151, 1151,0, 1174,0, 1145,955, 1144,1302, 1144,0, 1115,1278, 1139,1298, 1154,615, 1164,1319, 1146,955, 1138,1296, 1155,1155, 1163,1163, 1177,0, 1137,1294, 1154,615, 1154,0, 1173,0, 1147,1307, 1155,1155, 1155,0, 1135,1292, 1161,969, 1165,0, 1138,1297, 1134,1290, 1163,1164, 1144,1303, 1166,0, 1176,0, 1161,1317, 1149,1309, 1164,1163, 1168,623, 1143,1301, 1158,1158, 1152,1311, 1115,1279, 1148,1308, 1182,0, 1145,1305, 1144,1304, 1162,1162, 1158,1158, 1158,0, 1140,1299, 1164,1164, 1167,1167, 0,0, 1296,1296, 1162,1162, 1162,969, 1156,1313, 1135,1293, 1161,1318, 1167,1167, 1168,1168, 1159,1315, 1169,1167, 1250,0, 1165,800, 1181,0, 1172,1172, 1296,1297, 1170,808, 1166,800, 1169,1322, 1303,1303, 1161,1161, 1244,0, 1168,1169, 1150,1310, 1170,1170, 1170,0, 1190,0, 1171,1323, 1154,617, 1153,1312, 1290,0, 1146,1306, 1256,0, 1303,1304, 1165,1320, 1171,1323, 1171,0, 1157,1314, 1172,978, 1265,0, 1162,1164, 1173,1326, 1169,1168, 0,0, 1193,0, 1167,1169, 1175,1175, 0,0, 1170,1171, 1190,1192, 1160,1316, 1180,1180, 1172,979, 1176,1328, 1175,1175, 1175,0, 1169,1169, 1174,1327, 1178,817, 1171,1324, 1154,618, 1189,1189, 1170,976, 1190,1010, 1194,0, 1286,0, 1178,1178, 1178,0, 1179,1330, 1177,1329, 1181,1333, 1166,1321, 1196,663, 1171,1325, 1184,1336, 1180,990, 1179,1330, 1179,0, 1187,834, 1250,1409, 1182,1334, 1193,1010, 1184,1336, 1184,0, 1188,1339, 1189,1005, 1187,1187, 1187,0, 1191,1191, 1180,991, 1178,1179, 1202,0, 1188,1339, 1188,0, 1192,1343, 1196,1196, 1191,1191, 1191,0, 1195,1195, 1189,1006, 1179,1331, 1194,1010, 1192,1343, 1192,0, 1178,988, 1197,1195, 1195,1195, 1204,1204, 1199,0, 1196,1197, 1187,1188, 1203,0, 1198,1349, 1197,1348, 1179,1332, 1204,1204, 1188,1340, 1206,1204, 1218,0, 1193,1346, 1198,1349, 1198,0, 1244,1400, 1205,674, 1187,1003, 1206,1359, 1192,1344, 1200,1200, 1202,1019, 1290,1439, 1188,1341, 1199,1201, 1256,1416, 1201,1354, 1191,1342, 1200,1200, 1200,0, 1197,1196, 1209,1209, 1265,1422, 1192,1345, 1201,1354, 1201,0, 1243,0, 1195,1197, 1199,1019, 1205,1205, 1241,0, 1203,1019, 1206,1205, 1240,0, 1197,1197, 1260,0, 1204,1206, 1213,1213, 1218,1040, 1286,1434, 1184,1337, 1198,1350, 1207,851, 1205,1206, 1208,1360, 1209,1027, 1206,1206, 1217,0, 1201,1355, 1202,1357, 1207,1207, 1207,0, 1208,1360, 1208,0, 1194,1347, 1257,0, 1200,1353, 1214,0, 1210,1363, 1209,1028, 1211,858, 1213,1035, 1201,1356, 1233,0, 0,0, 1258,0, 1210,1363, 1210,0, 1211,1211, 1211,0, 1212,1367, 1198,1351, 1184,1338, 1215,1215, 1207,1208, 1213,1036, 1208,1361, 1216,1371, 1212,1367, 1212,0, 1214,1216, 1215,1215, 1215,0, 1219,1219, 1217,1040, 1216,1371, 1216,0, 1220,693, 1207,1025, 1221,1219, 1208,1362, 1219,1219, 1211,1212, 1282,0, 1214,1040, 1243,1399, 1232,0, 1221,1376, 1260,1419, 1240,1397, 1233,1061, 1203,1358, 1212,1368, 1198,1352, 1210,1364, 1222,868, 1211,1033, 1224,1224, 1218,1375, 1216,1372, 1220,1220, 1254,0, 1228,1228, 1222,1222, 1222,0, 1268,0, 1212,1369, 1223,1377, 0,0, 1215,1370, 1229,0, 1221,1220, 1217,1374, 1216,1373, 1220,1221, 1223,1377, 1223,0, 1257,1417, 1241,1398, 1219,1221, 1225,1380, 1224,1048, 1226,875, 1232,1061, 1210,1365, 1221,1221, 1228,1056, 1222,1223, 1225,1380, 1225,0, 1226,1226, 1226,0, 1276,0, 1229,1231, 1230,1230, 1224,1049, 1234,1234, 1227,1384, 1254,1085, 1223,1378, 1228,1057, 1222,1046, 1230,1230, 1230,0, 1234,1234, 1227,1384, 1227,0, 1229,1061, 1235,712, 1231,1388, 1261,0, 1249,0, 1248,0, 1223,1379, 1226,1227, 1236,1234, 1210,1366, 1231,1388, 1231,0, 1258,1418, 1233,1392, 1232,1391, 1239,1239, 1236,1393, 1255,0, 1237,885, 1225,1381, 1238,1394, 1226,1054, 1227,1385, 1242,1242, 1235,1235, 1282,1433, 1237,1237, 1237,0, 1238,1394, 1238,0, 1279,0, 1242,1242, 1242,0, 1230,1387, 1231,1389, 1234,1236, 1227,1386, 1245,1401, 1235,1236, 1239,1069, 1236,1235, 1249,1080, 1248,1080, 1253,0, 1264,0, 1245,1401, 1245,0, 1246,1079, 1231,1390, 1225,1382, 1237,1238, 1247,1404, 1238,1395, 1239,1070, 1236,1236, 1246,1246, 1246,0, 1267,0, 1268,1424, 1247,1404, 1247,0, 1254,1414, 1251,1084, 1275,0, 1237,1067, 1248,1407, 1238,1396, 1252,1410, 1272,0, 1259,1259, 1251,1251, 1251,0, 1273,0, 1278,0, 1281,0, 1252,1410, 1252,0, 1259,1259, 1259,0, 1246,1247, 1253,1085, 1225,1383, 1262,734, 1247,1405, 1270,969, 1255,1415, 1285,0, 1269,1269, 1287,0, 1276,1429, 1262,734, 1262,0, 1263,1263, 1246,1080, 1251,1252, 1269,1269, 1249,1408, 1247,1406, 1261,1420, 1252,1411, 1263,1263, 1263,0, 1266,1266, 1288,0, 1245,1402, 1272,909, 1271,1269, 1270,1270, 1251,1085, 1273,909, 1266,1266, 1266,0, 1264,1421, 1252,1412, 1271,1425, 1274,1103, 1280,1116, 1283,0, 1253,1413, 1292,0, 1277,1277, 1270,1271, 1289,0, 1274,1274, 1280,1280, 1267,1423, 1293,0, 1272,1426, 1277,1277, 1277,0, 1308,0, 1281,1432, 1284,1435, 1269,1271, 1279,1431, 1275,1428, 1245,1403, 1307,0, 1271,1270, 1310,0, 1284,1435, 1284,0, 1297,1444, 1311,0, 1298,0, 1278,1430, 1287,605, 1274,1104, 1280,1117, 1291,1291, 1299,0, 1262,736, 1271,1271, 1309,0, 1312,0, 1306,0, 1294,1137, 1291,1291, 1291,0, 1295,1295, 1304,1453, 1274,1105, 1280,1118, 1273,1427, 1294,1442, 1301,1143, 1297,1296, 1295,1295, 1295,1137, 1305,0, 1300,1447, 1314,0, 1313,0, 1301,1451, 1292,1440, 1315,0, 1283,1434, 1316,0, 1300,1447, 1300,0, 1297,1297, 1298,950, 1302,1302, 1262,737, 1304,1303, 1320,0, 1285,1409, 1299,950, 1294,1443, 1289,1438, 1302,1302, 1302,1143, 1306,955, 1288,605, 1321,0, 1307,613, 1326,0, 1301,1452, 1304,1304, 1327,0, 1319,1319, 1328,0, 1294,1294, 1337,0, 1329,0, 1295,1297, 1305,955, 1298,1445, 1333,0, 1311,1458, 1317,969, 1301,1301, 1309,1456, 1293,1441, 1334,0, 1284,1436, 1300,1448, 1324,808, 1317,1317, 1317,0, 1308,613, 1338,0, 1320,800, 1418,0, 1319,1163, 1305,1454, 1318,1464, 1331,817, 1302,1304, 1313,1460, 1310,1457, 1321,800, 1315,1462, 1322,1167, 1318,1464, 1318,0, 1323,1323, 1300,1449, 1319,1164, 0,0, 1324,1324, 1322,1322, 1317,1318, 1306,1455, 1323,1323, 1299,1446, 1346,0, 1284,1437, 1590,0, 1325,1323, 1331,1331, 1330,1330, 1312,1459, 1332,1330, 1324,1325, 1326,1468, 1317,1161, 1325,1467, 1318,1465, 1330,1330, 1314,1461, 1332,1472, 1337,1478, 1320,621, 1331,1332, 1322,1168, 1316,1463, 1335,1475, 1398,0, 1300,1450, 1328,1470, 1340,834, 1318,1466, 1347,0, 1351,0, 1335,1475, 1335,0, 1333,1473, 1336,1336, 1322,1169, 1339,1339, 1325,1324, 1323,1325, 1346,1010, 1341,1339, 1332,1331, 1336,1336, 1336,0, 1339,1339, 1344,1344, 1327,1469, 1779,0, 1341,1480, 1342,1191, 1340,1340, 1325,1325, 1345,1483, 1330,1332, 1343,1343, 1332,1332, 1352,0, 1342,1481, 1346,1484, 1344,1345, 1321,621, 1329,1471, 1343,1343, 1343,1191, 1340,1341, 1348,1195, 1347,1010, 1351,1350, 1338,1479, 1349,1349, 1418,1536, 1334,1474, 1341,1340, 1348,1348, 1590,1682, 1350,1349, 1345,1344, 1349,1349, 1349,0, 1357,0, 1353,1200, 1342,1482, 1339,1341, 1350,1486, 1350,1487, 1351,1489, 1341,1341, 1355,1355, 1353,1491, 1356,1493, 1345,1345, 1358,0, 1365,0, 1352,1350, 1354,1354, 1342,1342, 1360,1360, 1348,1196, 1359,1204, 1361,851, 1343,1345, 1355,1356, 1354,1354, 1354,1200, 1360,1360, 1335,1476, 1359,1359, 1350,1488, 1366,0, 1440,0, 1363,1363, 1348,1197, 1353,1492, 1356,1355, 1398,724, 1349,1350, 1357,1019, 1347,1485, 1363,1363, 1363,0, 1779,1807, 1350,1350, 1361,1361, 1362,1360, 1367,1367, 1364,1363, 1353,1353, 1356,1356, 1358,1019, 1365,1364, 1359,1205, 1362,1496, 1367,1367, 1364,1497, 1364,1498, 1357,1494, 1361,1362, 1335,1477, 1368,858, 1372,1372, 1354,1356, 1369,1367, 1360,1362, 1352,1490, 1359,1206, 1366,1364, 1370,1215, 1365,1500, 1373,1505, 1369,1502, 1371,1371, 1374,0, 1375,0, 1372,1373, 1370,1503, 1362,1361, 1363,1364, 1364,1499, 1371,1371, 1371,1215, 1377,1377, 1368,1368, 1378,868, 1382,0, 1400,0, 1399,0, 1376,1219, 1383,0, 1377,1377, 1362,1362, 1367,1369, 1364,1364, 1373,1372, 1369,1368, 1376,1376, 1368,1369, 1379,1377, 1403,0, 1370,1504, 1358,1495, 1385,875, 1402,0, 1380,1380, 1440,1556, 1379,1508, 1378,1378, 1373,1373, 1369,1369, 1374,1040, 1375,1040, 1380,1380, 1380,0, 1370,1370, 1381,1380, 1391,0, 1366,1501, 1371,1373, 1384,1384, 1376,1220, 1378,1379, 1382,1381, 1381,1509, 1381,1510, 1385,1385, 1383,1381, 1384,1384, 1377,1379, 1374,1506, 1379,1378, 1392,0, 1389,1389, 1388,1388, 1376,1221, 1386,1384, 1390,1517, 1387,1230, 1397,0, 1385,1386, 1382,1512, 1388,1388, 1388,1230, 1386,1514, 1379,1379, 1387,1515, 1389,1390, 1381,1511, 1393,1234, 1394,1394, 1380,1381, 1404,1404, 1395,885, 1391,1061, 1399,1521, 1396,1394, 1393,1393, 1394,1394, 1402,1523, 1404,1404, 1390,1389, 1381,1381, 1375,1507, 1396,1520, 1415,0, 1384,1386, 1407,0, 1386,1385, 1392,1061, 1387,1516, 1405,1137, 1408,0, 1391,1518, 1416,0, 1390,1390, 1395,1395, 1383,1513, 1411,1143, 1413,0, 1388,1390, 1393,1235, 1386,1386, 1401,1401, 1387,1387, 1406,1404, 1400,1522, 1403,1524, 1396,1395, 1414,0, 1395,1396, 1401,1401, 1401,0, 1406,1525, 1405,1405, 1393,1236, 1394,1396, 1397,724, 1404,1406, 1410,1410, 1417,0, 1411,1411, 1396,1396, 1409,1528, 1407,1080, 1412,1410, 1419,0, 1410,1410, 1405,1406, 1408,1080, 1420,0, 1409,1528, 1409,0, 1412,1532, 1421,0, 1411,1412, 1413,1085, 1406,1405, 1422,0, 1423,0, 1392,1519, 1424,0, 1428,0, 1415,732, 1427,0, 1426,0, 1414,1085, 1429,0, 1425,1269, 1430,0, 1407,1526, 1406,1406, 1431,0, 1434,1549, 1433,0, 1413,1533, 1425,1425, 1412,1411, 1435,1435, 1437,0, 1432,0, 1434,1549, 1434,0, 1439,0, 1441,0, 1410,1412, 1435,1435, 1435,0, 1442,1137, 1409,1529, 1438,0, 1412,1412, 1436,0, 1457,0, 1444,1444, 1459,0, 1442,1442, 1442,0, 1445,0, 1417,1535, 1425,1270, 1427,909, 1426,909, 1446,0, 1416,732, 1456,0, 1461,0, 1408,1527, 1471,0, 1462,0, 1409,1530, 1421,1539, 1419,1537, 1460,0, 1425,1271, 1447,1447, 1423,1541, 1414,1534, 1444,1296, 1450,0, 1442,1443, 1428,1543, 1443,1558, 1447,1447, 1447,0, 1449,0, 1468,0, 1454,0, 1455,0, 1453,1453, 1443,1558, 1443,0, 1444,1297, 1458,0, 1442,1294, 1445,950, 1463,0, 1448,1447, 1430,1545, 1469,0, 1446,950, 1470,0, 1409,1531, 1426,740, 1474,0, 1448,1563, 1448,1564, 1422,1540, 1420,1538, 1432,1547, 1424,1542, 1436,1552, 1473,0, 1453,1303, 1443,1559, 1434,1550, 1450,1448, 1438,1554, 1429,1544, 1476,0, 1456,1573, 1447,1448, 1449,1448, 1451,1143, 1454,955, 1455,955, 1445,1561, 1453,1304, 1443,1560, 1448,1565, 1437,1553, 1451,1451, 1451,0, 1431,1546, 1427,740, 1433,1548, 1452,1568, 1462,1579, 1465,969, 1460,1577, 1457,1574, 1464,1464, 1439,1555, 1448,1448, 1452,1568, 1452,0, 1459,1576, 1434,1551, 1449,1566, 1464,1464, 1441,1557, 1466,1464, 1458,1575, 1454,1571, 1468,1582, 1451,1452, 1477,0, 1467,1323, 1472,1330, 1466,1581, 1478,0, 1465,1465, 1475,1475, 1446,1562, 1461,1578, 1467,1467, 1472,1472, 1479,0, 1452,1569, 1451,1301, 1475,1475, 1475,0, 1485,0, 1480,1339, 1450,1567, 1465,1466, 1471,1585, 1470,1584, 1483,1483, 1535,0, 1484,0, 1480,1480, 1452,1570, 1466,1465, 1473,1586, 1489,0, 1455,1572, 1464,1466, 1486,0, 1467,1324, 1472,1331, 1490,0, 1481,1191, 1476,1588, 1539,0, 1537,0, 1463,1580, 1466,1466, 1482,1592, 1469,1583, 1481,1481, 1481,0, 1483,1344, 1467,1325, 1472,1332, 1480,1340, 1482,1592, 1482,0, 1474,1587, 1485,1010, 0,0, 1486,1488, 1487,1487, 1493,1493, 1546,0, 1494,0, 1483,1345, 1484,1010, 0,0, 1480,1341, 1487,1487, 1487,0, 1489,1350, 1488,1598, 1481,1482, 1486,1350, 1495,0, 1478,1590, 1490,1350, 1524,0, 1482,1593, 1488,1598, 1488,0, 1491,1200, 1535,1642, 1522,0, 1500,0, 1493,1355, 1481,1342, 1492,1603, 1540,0, 1491,1491, 1491,0, 1501,0, 1482,1594, 1496,1360, 1484,1595, 1492,1603, 1492,0, 1497,0, 0,0, 1493,1356, 1494,1019, 1496,1496, 1537,1644, 1488,1599, 1502,1367, 1506,0, 1487,1597, 1489,1601, 1539,1646, 1507,0, 1477,1589, 1495,1019, 1502,1502, 1491,1492, 1479,1591, 1498,1498, 1512,0, 1488,1600, 1485,1596, 1492,1604, 1497,1499, 1500,1364, 1499,1609, 1498,1498, 1498,0, 1496,1361, 1509,0, 1491,1353, 1501,1364, 1494,1606, 1499,1609, 1499,0, 1503,1215, 1492,1605, 1497,1364, 1504,1614, 1502,1368, 1521,0, 1505,1505, 1496,1362, 1503,1503, 1503,0, 1506,1040, 1504,1614, 1504,0, 1490,1602, 1507,1040, 1508,1377, 1510,1510, 1509,1511, 1502,1369, 1513,0, 1523,0, 1512,1381, 1499,1610, 1508,1508, 1510,1510, 1510,0, 1500,1612, 1538,0, 1536,0, 1498,1608, 1505,1372, 1509,1381, 1503,1504, 1517,1517, 1511,1620, 1504,1615, 1499,1611, 1514,1384, 1546,1653, 1506,1617, 1495,1607, 1518,0, 1511,1620, 1511,0, 1505,1373, 1514,1514, 1503,1370, 1508,1378, 1519,0, 1504,1616, 1522,1631, 1524,1633, 1520,1394, 1526,0, 1540,1647, 1515,1230, 1513,1381, 1517,1389, 1512,1623, 1516,1625, 1520,1520, 1508,1379, 1510,1619, 1515,1515, 1515,0, 1501,1613, 1511,1621, 1516,1625, 1516,0, 1514,1385, 1542,0, 1517,1390, 1521,1630, 1527,0, 1525,1404, 1507,1618, 1541,0, 1530,0, 1518,1061, 1531,0, 1511,1622, 1529,1528, 1525,1525, 1514,1386, 1520,1395, 1519,1061, 1533,0, 1515,1516, 1528,1528, 1529,1636, 1526,1080, 1516,1626, 1532,1410, 1534,0, 1523,1632, 1543,0, 1528,1528, 1528,0, 1520,1396, 1544,0, 1532,1532, 1515,1387, 1545,0, 1547,0, 1548,0, 1516,1627, 1525,1405, 1518,1628, 1550,0, 1551,0, 1527,1080, 1553,0, 1552,0, 1529,1637, 1530,1529, 1536,1643, 1531,1529, 1554,0, 1538,1645, 1555,0, 1525,1406, 1526,1634, 1556,0, 1533,1085, 1532,1411, 1513,1624, 1557,0, 1529,1529, 1549,1549, 1561,0, 1534,1085, 1559,1137, 1562,0, 1578,0, 1528,1529, 1558,1558, 1549,1549, 1549,0, 1532,1412, 1560,1558, 1530,1638, 1564,1564, 1573,0, 1558,1558, 1541,1648, 1574,0, 1519,1629, 1560,1664, 1565,1666, 1564,1564, 1564,0, 1568,1568, 1533,1640, 1563,0, 1559,1559, 1566,0, 1565,1666, 1565,0, 1567,0, 1568,1568, 1575,0, 1569,1143, 1576,0, 1543,1650, 1580,0, 1571,0, 1561,950, 1572,0, 1559,1560, 1562,950, 1542,1649, 1560,1559, 1554,1660, 1527,1635, 1531,1639, 1547,1654, 1563,1565, 1556,1662, 1545,1652, 1552,1658, 1565,1667, 1558,1560, 1550,1656, 1579,0, 1569,1569, 1560,1560, 1577,0, 1564,1665, 1561,787, 1582,0, 1563,1448, 1534,1641, 1566,1448, 1570,1568, 1565,1668, 1567,1448, 1583,0, 1568,1570, 1569,1570, 1544,1651, 1573,793, 1570,1671, 1571,955, 1584,0, 1572,955, 1585,0, 1555,1661, 1586,0, 1548,1655, 1581,1464, 1553,1659, 1587,0, 1588,0, 1557,1663, 1589,0, 1551,1657, 1599,1599, 1581,1581, 1591,0, 1575,1672, 1646,0, 1592,1592, 1566,1669, 1562,787, 1571,789, 1570,1569, 0,0, 1593,1191, 1594,1592, 1592,1592, 1599,1600, 1595,0, 1596,0, 1602,0, 1598,1598, 1574,793, 1594,1684, 1603,1603, 1579,1676, 1570,1570, 1578,1675, 1581,1465, 1598,1598, 1598,1487, 1601,0, 1603,1603, 1597,1487, 1600,1687, 1610,1610, 1604,1200, 1593,1593, 1580,1677, 1607,0, 1576,1673, 1597,1685, 1581,1466, 1606,0, 1567,1670, 1572,789, 0,0, 1594,1593, 1577,1674, 1610,1611, 1582,814, 1593,1594, 1586,821, 1584,1678, 1592,1594, 1595,1010, 1596,1010, 1602,1350, 1600,1599, 1604,1604, 1612,0, 1594,1594, 1611,1693, 1631,0, 1613,0, 1597,1686, 1605,1603, 1598,1600, 1601,1350, 1615,1215, 1603,1605, 1588,1680, 1600,1600, 1604,1605, 1605,1690, 0,0, 1607,1019, 1595,838, 1633,0, 1597,1597, 1606,1019, 1617,0, 1646,1714, 1608,1498, 1618,0, 1609,1609, 1611,1610, 1585,1679, 1587,821, 1583,814, 1601,1688, 1608,1691, 1615,1615, 1609,1609, 1609,1498, 1614,1614, 1616,1614, 1612,1364, 1605,1604, 1621,1621, 1611,1611, 1613,1364, 1606,845, 1614,1614, 1616,1696, 1589,1681, 1615,1616, 1591,1683, 1620,1620, 1622,1699, 1596,838, 1602,1689, 1605,1605, 1621,1622, 1619,1510, 1608,1692, 1620,1620, 1620,1510, 1617,1040, 1612,1694, 1623,0, 1618,1040, 1619,1697, 1630,0, 1624,0, 1626,1230, 1625,1625, 1627,1625, 1616,1615, 1608,1608, 1607,845, 1609,1611, 1628,0, 1622,1621, 1625,1625, 1627,1702, 1636,1528, 1629,0, 1632,0, 1634,0, 1617,862, 1614,1616, 1616,1616, 1635,0, 1636,1636, 1636,0, 1619,1698, 1622,1622, 1626,1626, 1638,0, 1631,1704, 1639,0, 1640,0, 1643,0, 1620,1622, 1613,1695, 1642,0, 1623,1381, 1637,1707, 1627,1626, 1619,1619, 1624,1381, 1626,1627, 1641,0, 1644,0, 1633,1706, 1637,1707, 1637,0, 1636,1637, 1628,1061, 1645,0, 1647,0, 1625,1627, 1627,1627, 1629,1061, 1618,862, 1634,1080, 1648,0, 1630,1703, 1623,1700, 1635,1080, 1649,0, 1636,1529, 1650,0, 1651,0, 1652,0, 1638,1529, 1653,0, 1639,1529, 1640,1085, 1637,1708, 1628,879, 1656,0, 1632,1705, 1654,0, 1655,0, 1657,0, 1658,0, 1634,896, 1659,0, 1641,1085, 1660,0, 1661,0, 1662,0, 1637,1709, 1663,0, 1668,1730, 1672,0, 1667,1667, 1664,1558, 1665,1564, 1640,898, 1666,1666, 1673,0, 1642,902, 1624,1701, 1638,1710, 1664,1664, 1665,1728, 1671,1568, 1666,1666, 1666,1564, 1667,1668, 1644,1712, 1675,0, 1669,0, 1670,0, 1671,1671, 1629,879, 1674,0, 1668,1667, 1676,0, 1648,1716, 1677,0, 1635,896, 1679,0, 1678,0, 1680,0, 1681,0, 1682,0, 1683,0, 1664,1559, 1665,1729, 1643,902, 1668,1668, 1684,1592, 1689,0, 0,0, 1652,1718, 1688,0, 1639,1711, 1671,1569, 1654,929, 1684,1684, 1641,898, 1664,1560, 1665,1665, 1650,923, 1666,1668, 1662,1726, 0,0, 1645,1713, 1669,1448, 1670,1448, 1656,1720, 1671,1570, 0,0, 1658,1722, 1649,1717, 1660,1724, 1704,0, 1687,1687, 1685,1487, 1695,0, 1703,0, 1672,1733, 1713,0, 1684,1593, 1647,1715, 1721,0, 1685,1685, 1685,0, 1653,1719, 1689,1350, 1669,1731, 1655,929, 1688,1350, 1674,1735, 1686,1745, 1694,0, 1651,923, 1684,1594, 1700,0, 1663,1727, 1678,1739, 1687,1599, 1686,1745, 1686,0, 1676,1737, 1693,1693, 1657,1721, 1659,1723, 1661,1725, 1690,1603, 1685,1686, 1682,1743, 1701,0, 1691,1498, 1706,0, 1687,1600, 1695,1364, 1690,1690, 1680,1741, 1673,1734, 1675,1736, 1691,1691, 1691,0, 1670,1732, 1685,1597, 1692,1750, 1686,1746, 1688,1748, 1696,1614, 1693,1610, 1699,1699, 1679,1740, 1694,1364, 1692,1750, 1692,0, 1700,1381, 1696,1696, 1705,0, 1677,1738, 1712,0, 1686,1747, 1690,1604, 1707,1707, 1693,1611, 1683,1744, 1691,1692, 1715,0, 1710,0, 1703,1760, 1701,1381, 1707,1707, 1681,1742, 1708,1564, 1697,1510, 1699,1621, 1690,1605, 1689,1749, 1692,1751, 1702,1625, 1691,1608, 1696,1615, 1697,1697, 1697,0, 1711,0, 1698,1755, 1714,0, 1702,1702, 1694,1753, 1699,1622, 1709,1707, 1700,1758, 1692,1752, 1698,1755, 1698,0, 1696,1616, 1708,1708, 1704,1761, 1709,1764, 1716,0, 1717,0, 1718,0, 1719,0, 1713,1768, 1695,1754, 1710,1529, 1697,1698, 1720,0, 1722,0, 1707,1709, 1708,1709, 1702,1626, 1723,0, 1721,1776, 1705,1762, 1724,0, 1725,0, 1698,1756, 1727,0, 1731,0, 1697,1619, 1711,1529, 1709,1708, 1706,1763, 1726,0, 1702,1627, 1728,1564, 1710,1765, 1712,1767, 1730,1730, 1729,1781, 1698,1757, 1732,0, 1733,0, 1728,1728, 1728,0, 1709,1709, 1701,1759, 1729,1781, 1729,0, 1734,0, 1735,0, 1736,0, 1737,0, 1714,1769, 1738,0, 1740,0, 1741,0, 1739,0, 1742,0, 0,0, 1770,0, 1744,0, 1730,1667, 1743,0, 1745,1745, 1731,1448, 1715,1770, 1728,1729, 1718,1773, 1746,1487, 1748,0, 1729,1782, 1745,1745, 1760,0, 1761,0, 1716,1771, 1730,1668, 1768,0, 1732,1448, 1750,1750, 1749,0, 1728,1665, 1724,947, 1722,1777, 1711,1766, 1729,1783, 1753,0, 1750,1750, 1726,1779, 1747,1745, 1754,0, 1720,1775, 1746,1746, 1759,0, 1752,1750, 1763,0, 1731,1784, 1747,1790, 1762,0, 1751,1498, 1733,963, 1719,1774, 1752,1793, 1767,0, 1755,1755, 1775,0, 1746,1747, 1748,1350, 1717,1772, 1735,966, 1745,1747, 1737,967, 1755,1755, 1741,1786, 1727,1780, 1725,947, 1739,987, 1749,1350, 1743,1788, 1723,1778, 1756,1510, 1747,1746, 1751,1751, 1753,1364, 1757,1755, 1750,1752, 1752,1751, 1754,1364, 1758,0, 1765,0, 1759,1381, 1760,1077, 1757,1796, 1748,1791, 1766,0, 1747,1747, 1751,1752, 1769,0, 1772,0, 1734,963, 1752,1752, 1732,1785, 1736,966, 1756,1756, 1764,1707, 1738,967, 1740,987, 1742,1787, 1744,1789, 1753,1794, 1755,1757, 1770,1096, 1764,1764, 1762,1799, 1771,0, 1773,0, 1757,1756, 1756,1757, 1774,0, 1776,0, 1777,0, 1767,1093, 1775,1803, 1778,0, 1761,1077, 1758,1381, 1765,1529, 1768,1093, 1780,0, 1782,1564, 1757,1757, 1766,1529, 1781,1781, 1783,1781, 1784,0, 1749,1792, 1764,1708, 1786,0, 1788,0, 1785,0, 1781,1781, 1783,1809, 1763,1800, 1787,0, 1789,0, 1754,1795, 1791,0, 1792,0, 1759,1798, 1799,0, 1764,1709, 1758,1797, 1782,1782, 1790,1745, 1793,1750, 1795,0, 1769,1096, 1765,1801, 1794,0, 1796,1755, 1797,0, 1790,1790, 1793,1793, 1800,0, 1803,0, 1783,1782, 1782,1783, 1796,1796, 1804,0, 1798,0, 1806,0, 1784,1448, 1805,0, 1771,1097, 1773,1115, 1777,1805, 1785,1448, 1802,0, 1781,1783, 1783,1783, 1801,0, 1807,0, 1808,0, 1791,1350, 1792,1350, 1790,1746, 1793,1751, 1813,0, 1810,0, 1772,1097, 1811,0, 1796,1756, 1795,1364, 1814,0, 1766,1802, 1794,1364, 1812,0, 1797,1381, 1815,0, 1790,1747, 1793,1752, 1791,1816, 1817,0, 1827,0, 1816,0, 1796,1757, 1798,1381, 1784,1810, 1776,1804, 1774,1115, 1778,1806, 1786,1812, 1788,1814, 1794,1818, 1802,1529, 1797,1820, 1809,1781, 1801,1529, 1818,0, 1822,0, 1819,0, 1820,0, 1799,1822, 1821,0, 1809,1809, 1810,1448, 1823,0, 1811,1448, 1824,0, 1825,0, 1826,0, 1828,0, 1829,0, 1780,1808, 1792,1817, 1830,0, 1832,0, 1833,0, 1803,1826, 1817,1350, 1807,1135, 1816,1350, 1795,1819, 1831,0, 1785,1811, 1837,0, 1805,1828, 1836,0, 1809,1782, 1787,1813, 1789,1815, 1810,1830, 1814,1184, 1801,1824, 1840,0, 1818,1364, 1798,1821, 1819,1364, 1820,1381, 1834,0, 1821,1381, 1835,0, 1809,1783, 1841,0, 1838,0, 1824,1529, 1825,1529, 1844,0, 1800,1823, 1839,0, 1816,1198, 1812,1832, 1830,1448, 1808,1135, 1804,1827, 1842,0, 1806,1829, 1843,0, 1822,1245, 1845,0, 1831,1448, 0,0, 1802,1825, 0,0, 1818,1210, 1811,1831, 0,0, 1820,1225, 0,0, 1815,1184, 1828,1284, 1824,1834, 0,0, 0,0, 1813,1833, 0,0, 1834,1529, 0,0, 1835,1529, 0,0, 1817,1198, 1838,1448, 0,0, 0,0, 1830,1838, 1826,1836, 1839,1448, 0,0, 1832,1840, 0,0, 1827,1837, 0,0, 1842,1529, 1840,1335, 1843,1529, 0,0, 0,0, 1823,1245, 1819,1210, 1836,1844, 0,0, 1821,1225, 0,0, 1829,1284, 1825,1835, 0,0, 1844,1434, 0,0, 1834,1842, 0,0, 0,0, 0,0, 1838,1300, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1833,1841, 0,0, 1842,1409, 1831,1839, 0,0, 0,0, 0,0, 0,0, 1837,1845, 0,0, 0,0, 0,0, 0,0, 1841,1335, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1835,1843, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1839,1300, 1845,1434, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1843,1409, 0,0, 0,0, 0,0}; struct yysvf yysvec[] = { 0, 0, 0, yycrank+-1, 0, yyvstop+1, yycrank+-3, 0, yyvstop+3, yycrank+-21, 0, yyvstop+5, yycrank+-55, yysvec+2, yyvstop+7, yycrank+-32, 0, yyvstop+9, yycrank+-105, yysvec+2, yyvstop+11, yycrank+-81, yysvec+5, yyvstop+13, yycrank+-157, yysvec+2, yyvstop+15, yycrank+-6, yysvec+1, yyvstop+17, yycrank+-207, yysvec+2, yyvstop+19, yycrank+0, 0, yyvstop+21, yycrank+17, 0, yyvstop+23, yycrank+0, 0, yyvstop+25, yycrank+5, 0, yyvstop+27, yycrank+5, 0, yyvstop+29, yycrank+261, 0, yyvstop+31, yycrank+28, 0, yyvstop+33, yycrank+71, 0, yyvstop+35, yycrank+13, 0, yyvstop+37, yycrank+5, 0, yyvstop+39, yycrank+14, 0, yyvstop+41, yycrank+17, 0, yyvstop+43, yycrank+64, 0, yyvstop+45, yycrank+8, 0, yyvstop+47, yycrank+13, 0, yyvstop+49, yycrank+32, 0, yyvstop+51, yycrank+82, 0, yyvstop+53, yycrank+98, 0, yyvstop+55, yycrank+24, 0, yyvstop+57, yycrank+43, 0, yyvstop+59, yycrank+33, 0, yyvstop+61, yycrank+50, 0, yyvstop+63, yycrank+54, 0, yyvstop+65, yycrank+48, 0, yyvstop+67, yycrank+36, 0, yyvstop+69, yycrank+52, 0, yyvstop+71, yycrank+269, 0, yyvstop+73, yycrank+90, 0, yyvstop+75, yycrank+84, 0, yyvstop+77, yycrank+98, 0, yyvstop+79, yycrank+112, 0, yyvstop+81, yycrank+76, 0, yyvstop+83, yycrank+70, 0, yyvstop+85, yycrank+74, 0, yyvstop+87, yycrank+95, 0, yyvstop+89, yycrank+316, yysvec+16, yyvstop+91, yycrank+122, yysvec+17, yyvstop+93, yycrank+117, yysvec+18, yyvstop+95, yycrank+119, 0, yyvstop+97, yycrank+120, 0, yyvstop+99, yycrank+135, yysvec+22, yyvstop+101, yycrank+132, 0, yyvstop+103, yycrank+98, yysvec+27, yyvstop+105, yycrank+100, yysvec+28, yyvstop+107, yycrank+102, 0, yyvstop+109, yycrank+103, 0, yyvstop+111, yycrank+121, yysvec+32, yyvstop+113, yycrank+121, 0, yyvstop+115, yycrank+272, 0, yyvstop+117, yycrank+158, 0, yyvstop+119, yycrank+131, 0, yyvstop+121, yycrank+323, yysvec+16, yyvstop+123, yycrank+157, yysvec+17, yyvstop+125, yycrank+152, yysvec+18, yyvstop+127, yycrank+154, 0, yyvstop+129, yycrank+155, 0, yyvstop+131, yycrank+171, yysvec+22, yyvstop+133, yycrank+169, 0, yyvstop+135, yycrank+138, yysvec+27, yyvstop+137, yycrank+132, yysvec+28, yyvstop+139, yycrank+134, 0, yyvstop+141, yycrank+135, 0, yyvstop+143, yycrank+149, yysvec+32, yyvstop+145, yycrank+146, 0, yyvstop+147, yycrank+256, yysvec+59, yyvstop+149, yycrank+183, 0, yyvstop+151, yycrank+152, 0, yyvstop+153, yycrank+371, yysvec+16, yyvstop+155, yycrank+178, yysvec+17, yyvstop+157, yycrank+172, yysvec+18, yyvstop+159, yycrank+174, 0, yyvstop+161, yycrank+175, 0, yyvstop+163, yycrank+189, yysvec+22, yyvstop+165, yycrank+186, 0, yyvstop+167, yycrank+156, yysvec+27, yyvstop+169, yycrank+150, yysvec+28, yyvstop+171, yycrank+153, 0, yyvstop+173, yycrank+154, 0, yyvstop+175, yycrank+171, yysvec+32, yyvstop+177, yycrank+178, 0, yyvstop+179, yycrank+-27, 0, yyvstop+181, yycrank+-425, 0, yyvstop+184, yycrank+-385, 0, yyvstop+187, yycrank+-400, 0, yyvstop+190, yycrank+-273, yysvec+91, yyvstop+193, yycrank+-442, 0, yyvstop+196, yycrank+-276, yysvec+91, yyvstop+199, yycrank+-293, 0, yyvstop+202, yycrank+-287, yysvec+91, yyvstop+205, yycrank+-432, 0, yyvstop+208, yycrank+-288, yysvec+91, yyvstop+211, yycrank+-303, yysvec+91, yyvstop+214, yycrank+-290, yysvec+91, yyvstop+217, yycrank+-445, 0, yyvstop+220, yycrank+-457, 0, yyvstop+223, yycrank+-289, yysvec+91, yyvstop+226, yycrank+-473, 0, yyvstop+229, yycrank+-301, yysvec+91, yyvstop+232, yycrank+-477, 0, yyvstop+235, yycrank+-305, yysvec+91, yyvstop+238, yycrank+-317, 0, yyvstop+241, yycrank+-387, yysvec+91, yyvstop+244, yycrank+-272, yysvec+91, yyvstop+247, yycrank+-398, yysvec+91, yyvstop+250, yycrank+0, yysvec+12, 0, yycrank+0, yysvec+14, 0, yycrank+0, yysvec+15, 0, yycrank+209, 0, 0, yycrank+180, 0, 0, yycrank+0, yysvec+16, 0, yycrank+0, yysvec+17, 0, yycrank+0, yysvec+18, 0, yycrank+0, yysvec+19, 0, yycrank+0, yysvec+20, 0, yycrank+0, yysvec+21, 0, yycrank+0, yysvec+22, 0, yycrank+0, yysvec+23, 0, yycrank+0, yysvec+24, 0, yycrank+0, yysvec+25, 0, yycrank+0, yysvec+26, 0, yycrank+0, yysvec+27, 0, yycrank+0, yysvec+28, 0, yycrank+0, yysvec+29, 0, yycrank+0, yysvec+30, 0, yycrank+0, yysvec+31, 0, yycrank+0, yysvec+32, 0, yycrank+0, yysvec+33, 0, yycrank+0, yysvec+34, 0, yycrank+0, yysvec+35, 0, yycrank+0, yysvec+36, 0, yycrank+220, 0, 0, yycrank+232, 0, 0, yycrank+233, 0, 0, yycrank+230, 0, 0, yycrank+250, 0, 0, yycrank+247, 0, 0, yycrank+250, 0, 0, yycrank+272, 0, 0, yycrank+338, 0, 0, yycrank+276, 0, 0, yycrank+345, 0, 0, yycrank+278, 0, 0, yycrank+296, 0, 0, yycrank+285, 0, 0, yycrank+323, 0, 0, yycrank+380, 0, 0, yycrank+322, 0, 0, yycrank+341, 0, 0, yycrank+311, 0, 0, yycrank+322, 0, 0, yycrank+327, 0, 0, yycrank+333, 0, 0, yycrank+354, 0, 0, yycrank+350, 0, 0, yycrank+343, 0, 0, yycrank+361, 0, 0, yycrank+361, 0, 0, yycrank+355, 0, 0, yycrank+390, 0, 0, yycrank+361, 0, 0, yycrank+377, 0, 0, yycrank+367, 0, 0, yycrank+373, 0, 0, yycrank+414, 0, 0, yycrank+377, 0, 0, yycrank+387, 0, 0, yycrank+0, yysvec+37, 0, yycrank+0, yysvec+38, 0, yycrank+0, yysvec+39, 0, yycrank+0, yysvec+40, 0, yycrank+0, yysvec+41, 0, yycrank+0, yysvec+42, 0, yycrank+0, yysvec+43, 0, yycrank+0, yysvec+44, 0, yycrank+0, yysvec+45, 0, yycrank+435, 0, 0, yycrank+416, 0, 0, yycrank+420, 0, 0, yycrank+426, 0, 0, yycrank+419, 0, 0, yycrank+400, 0, 0, yycrank+402, 0, 0, yycrank+403, 0, 0, yycrank+512, yysvec+16, 0, yycrank+448, yysvec+17, 0, yycrank+443, yysvec+18, 0, yycrank+0, yysvec+49, 0, yycrank+0, yysvec+50, 0, yycrank+458, yysvec+22, 0, yycrank+0, yysvec+52, 0, yycrank+424, yysvec+27, 0, yycrank+418, yysvec+28, 0, yycrank+0, yysvec+55, 0, yycrank+0, yysvec+56, 0, yycrank+434, yysvec+32, 0, yycrank+0, yysvec+58, 0, yycrank+473, 0, 0, yycrank+447, 0, 0, yycrank+465, 0, 0, yycrank+452, yysvec+151, 0, yycrank+468, 0, 0, yycrank+480, yysvec+156, 0, yycrank+450, 0, 0, yycrank+431, 0, 0, yycrank+450, 0, 0, yycrank+435, yysvec+169, 0, yycrank+450, 0, 0, yycrank+456, yysvec+174, 0, yycrank+0, yysvec+59, 0, yycrank+0, yysvec+60, 0, yycrank+0, yysvec+61, 0, yycrank+475, 0, 0, yycrank+444, 0, 0, yycrank+555, yysvec+16, 0, yycrank+489, yysvec+17, 0, yycrank+484, yysvec+18, 0, yycrank+0, yysvec+65, 0, yycrank+0, yysvec+66, 0, yycrank+500, yysvec+22, 0, yycrank+0, yysvec+68, 0, yycrank+463, yysvec+27, 0, yycrank+458, yysvec+28, 0, yycrank+0, yysvec+71, 0, yycrank+0, yysvec+72, 0, yycrank+473, yysvec+32, 0, yycrank+0, yysvec+74, 0, yycrank+506, yysvec+207, 0, yycrank+487, 0, 0, yycrank+505, 0, 0, yycrank+492, yysvec+151, 0, yycrank+493, yysvec+211, 0, yycrank+517, yysvec+156, 0, yycrank+486, yysvec+213, 0, yycrank+467, 0, 0, yycrank+486, 0, 0, yycrank+474, yysvec+169, 0, yycrank+475, yysvec+217, 0, yycrank+495, yysvec+174, 0, yycrank+584, yysvec+59, 0, yycrank+0, yysvec+76, 0, yycrank+0, yysvec+77, 0, yycrank+511, 0, 0, yycrank+480, 0, 0, yycrank+598, yysvec+16, 0, yycrank+525, yysvec+17, 0, yycrank+519, yysvec+18, 0, yycrank+0, yysvec+81, 0, yycrank+0, yysvec+82, 0, yycrank+534, yysvec+22, 0, yycrank+0, yysvec+84, 0, yycrank+496, yysvec+27, 0, yycrank+490, yysvec+28, 0, yycrank+0, yysvec+87, 0, yycrank+0, yysvec+88, 0, yycrank+505, yysvec+32, 0, yycrank+0, yysvec+90, 0, yycrank+538, yysvec+207, 0, yycrank+519, 0, 0, yycrank+537, 0, 0, yycrank+522, yysvec+151, 0, yycrank+524, yysvec+211, 0, yycrank+544, yysvec+156, 0, yycrank+513, yysvec+213, 0, yycrank+497, 0, 0, yycrank+515, 0, 0, yycrank+502, yysvec+169, 0, yycrank+503, yysvec+217, 0, yycrank+523, yysvec+174, 0, yycrank+-615, yysvec+91, yyvstop+253, yycrank+-641, yysvec+92, yyvstop+255, yycrank+-617, yysvec+93, yyvstop+257, yycrank+-621, yysvec+94, yyvstop+259, yycrank+-623, yysvec+91, yyvstop+261, yycrank+-632, yysvec+96, yyvstop+263, yycrank+-626, yysvec+91, yyvstop+265, yycrank+-648, yysvec+98, yyvstop+267, yycrank+-619, yysvec+91, yyvstop+269, yycrank+-652, yysvec+100, yyvstop+271, yycrank+-637, yysvec+91, yyvstop+273, yycrank+-631, yysvec+91, yyvstop+275, yycrank+-647, yysvec+91, yyvstop+277, yycrank+-625, yysvec+104, yyvstop+279, yycrank+-634, yysvec+105, yyvstop+281, yycrank+-628, yysvec+91, yyvstop+283, yycrank+-642, yysvec+107, yyvstop+285, yycrank+-638, yysvec+91, yyvstop+287, yycrank+-662, yysvec+109, yyvstop+289, yycrank+-629, yysvec+91, yyvstop+291, yycrank+-635, yysvec+111, yyvstop+293, yycrank+-636, yysvec+91, yyvstop+295, yycrank+-649, yysvec+91, yyvstop+297, yycrank+-653, yysvec+91, yyvstop+299, yycrank+-682, yysvec+91, yyvstop+301, yycrank+-660, yysvec+91, yyvstop+303, yycrank+-643, yysvec+91, yyvstop+305, yycrank+-668, yysvec+91, yyvstop+307, yycrank+-658, yysvec+91, yyvstop+309, yycrank+-685, yysvec+91, yyvstop+311, yycrank+-675, yysvec+91, yyvstop+313, yycrank+-716, yysvec+91, yyvstop+315, yycrank+-760, 0, yyvstop+317, yycrank+-754, yysvec+91, yyvstop+319, yycrank+-765, 0, yyvstop+321, yycrank+-753, yysvec+91, yyvstop+323, yycrank+-757, yysvec+91, yyvstop+325, yycrank+-758, yysvec+91, yyvstop+327, yycrank+-761, yysvec+91, yyvstop+329, yycrank+-766, yysvec+91, yyvstop+331, yycrank+-771, 0, yyvstop+333, yycrank+-768, yysvec+91, yyvstop+335, yycrank+-767, yysvec+91, yyvstop+337, yycrank+-671, yysvec+91, yyvstop+339, yycrank+-677, yysvec+91, yyvstop+341, yycrank+-674, yysvec+91, yyvstop+343, yycrank+-669, yysvec+91, yyvstop+345, yycrank+-776, yysvec+91, yyvstop+347, yycrank+-681, yysvec+91, yyvstop+349, yycrank+-777, yysvec+91, yyvstop+351, yycrank+-779, yysvec+91, yyvstop+353, yycrank+-787, 0, yyvstop+355, yycrank+-781, yysvec+91, yyvstop+357, yycrank+-791, 0, yyvstop+359, yycrank+-785, yysvec+91, yyvstop+361, yycrank+-783, yysvec+91, yyvstop+363, yycrank+-784, yysvec+91, yyvstop+365, yycrank+-788, yysvec+91, yyvstop+367, yycrank+-789, yysvec+91, yyvstop+369, yycrank+-806, 0, yyvstop+371, yycrank+-792, yysvec+91, yyvstop+373, yycrank+-795, yysvec+91, yyvstop+375, yycrank+550, 0, 0, yycrank+524, 0, 0, yycrank+567, 0, 0, yycrank+573, 0, 0, yycrank+573, 0, 0, yycrank+608, 0, 0, yycrank+601, 0, 0, yycrank+607, 0, 0, yycrank+611, 0, 0, yycrank+-808, 0, yyvstop+377, yycrank+605, 0, 0, yycrank+734, 0, 0, yycrank+735, 0, 0, yycrank+730, 0, 0, yycrank+741, 0, 0, yycrank+-811, 0, yyvstop+379, yycrank+742, 0, 0, yycrank+744, 0, 0, yycrank+745, 0, 0, yycrank+733, 0, 0, yycrank+746, 0, 0, yycrank+744, 0, 0, yycrank+739, 0, 0, yycrank+746, 0, 0, yycrank+719, 0, 0, yycrank+723, 0, 0, yycrank+725, 0, 0, yycrank+738, 0, 0, yycrank+732, 0, 0, yycrank+738, 0, 0, yycrank+742, 0, 0, yycrank+736, 0, 0, yycrank+746, 0, 0, yycrank+747, 0, 0, yycrank+743, 0, 0, yycrank+751, 0, 0, yycrank+753, 0, 0, yycrank+754, 0, 0, yycrank+755, 0, 0, yycrank+739, 0, 0, yycrank+751, 0, 0, yycrank+749, 0, 0, yycrank+744, 0, 0, yycrank+750, 0, 0, yycrank+781, 0, 0, yycrank+798, 0, 0, yycrank+-864, 0, yyvstop+381, yycrank+797, 0, 0, yycrank+753, 0, 0, yycrank+770, 0, 0, yycrank+768, 0, 0, yycrank+804, 0, 0, yycrank+-871, 0, yyvstop+383, yycrank+-886, 0, yyvstop+386, yycrank+795, 0, 0, yycrank+777, 0, 0, yycrank+768, 0, 0, yycrank+813, 0, 0, yycrank+784, 0, 0, yycrank+804, 0, 0, yycrank+827, 0, 0, yycrank+-909, 0, yyvstop+389, yycrank+-911, 0, yyvstop+392, yycrank+821, 0, 0, yycrank+784, 0, 0, yycrank+810, 0, 0, yycrank+805, 0, 0, yycrank+845, 0, 0, yycrank+814, 0, 0, yycrank+835, 0, 0, yycrank+856, 0, 0, yycrank+-925, 0, yyvstop+395, yycrank+-929, 0, yyvstop+398, yycrank+847, 0, 0, yycrank+810, 0, 0, yycrank+827, 0, 0, yycrank+819, 0, 0, yycrank+-919, yysvec+91, yyvstop+401, yycrank+-921, yysvec+91, yyvstop+403, yycrank+-922, yysvec+91, yyvstop+405, yycrank+-918, yysvec+91, yyvstop+407, yycrank+-931, yysvec+91, yyvstop+409, yycrank+-932, yysvec+91, yyvstop+411, yycrank+-926, yysvec+91, yyvstop+413, yycrank+-942, 0, yyvstop+415, yycrank+-934, yysvec+91, yyvstop+418, yycrank+-936, yysvec+91, yyvstop+420, yycrank+-937, yysvec+91, yyvstop+422, yycrank+-944, 0, yyvstop+424, yycrank+-938, yysvec+91, yyvstop+426, yycrank+-956, 0, yyvstop+428, yycrank+-939, yysvec+91, yyvstop+431, yycrank+-940, yysvec+91, yyvstop+433, yycrank+-946, yysvec+91, yyvstop+435, yycrank+-945, yysvec+91, yyvstop+437, yycrank+-950, yysvec+91, yyvstop+439, yycrank+-951, yysvec+91, yyvstop+441, yycrank+-952, yysvec+91, yyvstop+443, yycrank+-953, yysvec+91, yyvstop+445, yycrank+-957, yysvec+91, yyvstop+447, yycrank+-954, yysvec+91, yyvstop+449, yycrank+-958, yysvec+91, yyvstop+451, yycrank+-960, yysvec+91, yyvstop+453, yycrank+-961, yysvec+91, yyvstop+455, yycrank+-963, yysvec+91, yyvstop+457, yycrank+-964, yysvec+91, yyvstop+459, yycrank+-965, yysvec+91, yyvstop+461, yycrank+-967, yysvec+91, yyvstop+463, yycrank+-969, yysvec+91, yyvstop+465, yycrank+-970, yysvec+91, yyvstop+467, yycrank+-980, 0, yyvstop+469, yycrank+-972, yysvec+91, yyvstop+471, yycrank+-975, yysvec+91, yyvstop+473, yycrank+-977, yysvec+91, yyvstop+475, yycrank+-976, yysvec+91, yyvstop+477, yycrank+-978, yysvec+91, yyvstop+479, yycrank+-983, yysvec+91, yyvstop+481, yycrank+-986, yysvec+91, yyvstop+483, yycrank+-988, yysvec+91, yyvstop+485, yycrank+-990, yysvec+91, yyvstop+487, yycrank+-1003, yysvec+91, yyvstop+489, yycrank+-1031, 0, yyvstop+491, yycrank+-1014, 0, yyvstop+493, yycrank+949, 0, 0, yycrank+953, 0, 0, yycrank+953, 0, 0, yycrank+943, 0, 0, yycrank+947, 0, 0, yycrank+952, 0, 0, yycrank+-1038, 0, yyvstop+495, yycrank+-1025, yysvec+470, yyvstop+497, yycrank+-1023, yysvec+470, yyvstop+499, yycrank+974, 0, 0, yycrank+979, 0, 0, yycrank+-1050, 0, yyvstop+501, yycrank+960, 0, 0, yycrank+981, 0, 0, yycrank+961, 0, 0, yycrank+-1074, 0, yyvstop+503, yycrank+-1095, 0, yyvstop+505, yycrank+-1040, yysvec+479, yyvstop+507, yycrank+-1044, yysvec+479, yyvstop+509, yycrank+-1088, 0, yyvstop+511, yycrank+-1101, 0, yyvstop+513, yycrank+974, 0, 0, yycrank+980, 0, 0, yycrank+-1113, 0, yyvstop+515, yycrank+973, 0, 0, yycrank+989, 0, 0, yycrank+981, 0, 0, yycrank+964, 0, 0, yycrank+970, 0, 0, yycrank+974, 0, 0, yycrank+964, 0, 0, yycrank+970, 0, 0, yycrank+974, 0, 0, yycrank+985, 0, 0, yycrank+989, 0, 0, yycrank+-1107, 0, yyvstop+517, yycrank+976, 0, 0, yycrank+998, 0, 0, yycrank+980, 0, 0, yycrank+996, 0, 0, yycrank+1007, 0, 0, yycrank+1010, 0, 0, yycrank+1026, 0, 0, yycrank+1018, 0, 0, yycrank+-1129, 0, yyvstop+519, yycrank+1051, 0, 0, yycrank+-1135, 0, yyvstop+521, yycrank+-1139, 0, yyvstop+523, yycrank+-1121, yysvec+510, yyvstop+525, yycrank+-1119, yysvec+510, yyvstop+527, yycrank+1050, 0, 0, yycrank+1026, 0, 0, yycrank+1023, 0, 0, yycrank+1067, 0, 0, yycrank+-1146, 0, yyvstop+529, yycrank+-1136, yysvec+518, yyvstop+532, yycrank+-1140, yysvec+518, yyvstop+535, yycrank+-1160, 0, yyvstop+538, yycrank+-1170, 0, yyvstop+541, yycrank+-1141, yysvec+521, yyvstop+544, yycrank+-1143, yysvec+521, yyvstop+547, yycrank+-1174, 0, yyvstop+550, yycrank+1049, 0, 0, yycrank+1076, 0, 0, yycrank+1045, 0, 0, yycrank+-1184, 0, yyvstop+553, yycrank+1086, 0, 0, yycrank+-1191, 0, yyvstop+555, yycrank+-1154, yysvec+531, yyvstop+558, yycrank+-1153, yysvec+531, yyvstop+561, yycrank+-1214, 0, yyvstop+564, yycrank+-1224, 0, yyvstop+567, yycrank+-1157, yysvec+534, yyvstop+570, yycrank+-1164, yysvec+534, yyvstop+573, yycrank+-1229, 0, yyvstop+576, yycrank+1065, 0, 0, yycrank+1099, 0, 0, yycrank+1073, 0, 0, yycrank+-1235, 0, yyvstop+579, yycrank+1113, 0, 0, yycrank+-1239, 0, yyvstop+581, yycrank+-1181, yysvec+544, yyvstop+584, yycrank+-1188, yysvec+544, yyvstop+587, yycrank+-1245, 0, yyvstop+590, yycrank+-1257, 0, yyvstop+593, yycrank+-1195, yysvec+547, yyvstop+596, yycrank+-1196, yysvec+547, yyvstop+599, yycrank+-1268, 0, yyvstop+602, yycrank+1094, 0, 0, yycrank+-1271, 0, yyvstop+605, yycrank+-1202, yysvec+91, yyvstop+608, yycrank+-1203, yysvec+91, yyvstop+610, yycrank+-1227, yysvec+91, yyvstop+612, yycrank+-1206, yysvec+91, yyvstop+614, yycrank+-1208, yysvec+91, yyvstop+616, yycrank+-1231, yysvec+91, yyvstop+618, yycrank+-1286, 0, yyvstop+620, yycrank+-1216, yysvec+560, yyvstop+623, yycrank+-1210, yysvec+560, yyvstop+626, yycrank+-1237, yysvec+91, yyvstop+629, yycrank+-1252, yysvec+91, yyvstop+631, yycrank+-1290, 0, yyvstop+633, yycrank+-1212, yysvec+91, yyvstop+636, yycrank+-1254, yysvec+91, yyvstop+638, yycrank+-1242, yysvec+91, yyvstop+640, yycrank+-1300, 0, yyvstop+642, yycrank+-1307, yysvec+480, yyvstop+645, yycrank+-1275, yysvec+569, yyvstop+648, yycrank+-1265, yysvec+569, yyvstop+651, yycrank+-1317, 0, yyvstop+654, yycrank+-1322, 0, yyvstop+657, yycrank+-1327, 0, yyvstop+660, yycrank+-1255, yysvec+91, yyvstop+663, yycrank+-1269, yysvec+91, yyvstop+665, yycrank+-1348, 0, yyvstop+667, yycrank+-1279, yysvec+91, yyvstop+670, yycrank+-1304, yysvec+91, yyvstop+672, yycrank+-1293, yysvec+91, yyvstop+674, yycrank+-1303, yysvec+91, yyvstop+676, yycrank+-1311, yysvec+91, yyvstop+678, yycrank+-1250, yysvec+91, yyvstop+680, yycrank+-1314, yysvec+91, yyvstop+682, yycrank+-1315, yysvec+91, yyvstop+684, yycrank+-1319, yysvec+91, yyvstop+686, yycrank+-1329, yysvec+91, yyvstop+688, yycrank+-1325, yysvec+91, yyvstop+690, yycrank+-1364, 0, yyvstop+692, yycrank+-1331, yysvec+91, yyvstop+695, yycrank+-1335, yysvec+91, yyvstop+697, yycrank+-1334, yysvec+91, yyvstop+699, yycrank+-1336, yysvec+91, yyvstop+701, yycrank+-1342, yysvec+91, yyvstop+703, yycrank+-1341, yysvec+91, yyvstop+705, yycrank+-1345, yysvec+91, yyvstop+707, yycrank+-1352, yysvec+91, yyvstop+709, yycrank+-1367, 0, yyvstop+711, yycrank+-1346, yysvec+599, yyvstop+713, yycrank+-1356, yysvec+599, yyvstop+715, yycrank+-1371, 0, yyvstop+717, yycrank+-1353, yysvec+602, yyvstop+719, yycrank+-1373, yysvec+602, yyvstop+721, yycrank+-1378, 0, yyvstop+723, yycrank+1289, 0, 0, yycrank+1313, 0, 0, yycrank+1315, 0, 0, yycrank+1302, 0, 0, yycrank+1317, 0, 0, yycrank+-1381, yysvec+470, yyvstop+725, yycrank+-1379, yysvec+470, yyvstop+727, yycrank+-1397, 0, yyvstop+729, yycrank+1322, 0, 0, yycrank+-1392, 0, yyvstop+731, yycrank+-1386, yysvec+615, yyvstop+733, yycrank+-1390, yysvec+615, yyvstop+735, yycrank+-1387, yysvec+615, yyvstop+737, yycrank+1336, 0, 0, yycrank+1332, 0, 0, yycrank+-1411, 0, yyvstop+739, yycrank+-1403, yysvec+480, yyvstop+741, yycrank+-1442, 0, yyvstop+743, yycrank+-1471, 0, yyvstop+745, yycrank+-1406, yysvec+479, yyvstop+747, yycrank+-1409, yysvec+479, yyvstop+749, yycrank+-1473, 0, yyvstop+751, yycrank+-1477, 0, yyvstop+753, yycrank+-1428, yysvec+627, yyvstop+755, yycrank+-1429, yysvec+627, yyvstop+757, yycrank+-1432, 0, yyvstop+759, yycrank+-1418, yysvec+631, yyvstop+761, yycrank+-1400, yysvec+631, yyvstop+763, yycrank+1327, 0, 0, yycrank+1346, 0, 0, yycrank+-1493, 0, yyvstop+765, yycrank+-1497, 0, yyvstop+767, yycrank+-1458, yysvec+636, yyvstop+769, yycrank+-1449, yysvec+636, yyvstop+771, yycrank+1349, 0, 0, yycrank+1339, 0, 0, yycrank+1370, 0, 0, yycrank+1330, 0, 0, yycrank+1364, 0, 0, yycrank+1368, 0, 0, yycrank+1356, 0, 0, yycrank+1372, 0, 0, yycrank+1385, 0, 0, yycrank+-1478, yysvec+615, yyvstop+773, yycrank+1391, 0, 0, yycrank+1386, 0, 0, yycrank+1384, 0, 0, yycrank+1401, 0, 0, yycrank+1408, 0, 0, yycrank+1393, 0, 0, yycrank+1415, 0, 0, yycrank+-1512, 0, yyvstop+775, yycrank+-1522, 0, yyvstop+777, yycrank+-1504, yysvec+657, yyvstop+779, yycrank+-1505, yysvec+657, yyvstop+781, yycrank+1448, 0, 0, yycrank+-1509, yysvec+511, yyvstop+783, yycrank+-1527, 0, yyvstop+785, yycrank+-1537, 0, yyvstop+787, yycrank+-1519, yysvec+510, yyvstop+789, yycrank+-1524, yysvec+510, yyvstop+791, yycrank+1460, 0, 0, yycrank+1434, 0, 0, yycrank+1434, 0, 0, yycrank+1472, 0, 0, yycrank+-1533, yysvec+518, yyvstop+793, yycrank+-1535, yysvec+518, yyvstop+796, yycrank+-1539, yysvec+522, yyvstop+799, yycrank+-1552, 0, yyvstop+802, yycrank+-1572, 0, yyvstop+805, yycrank+-1538, yysvec+521, yyvstop+808, yycrank+-1544, yysvec+521, yyvstop+811, yycrank+-1586, 0, yyvstop+814, yycrank+-1597, 0, yyvstop+817, yycrank+-1547, yysvec+678, yyvstop+820, yycrank+-1550, yysvec+678, yyvstop+823, yycrank+1457, 0, 0, yycrank+1490, 0, 0, yycrank+1459, 0, 0, yycrank+-1601, 0, yyvstop+826, yycrank+-1603, 0, yyvstop+828, yycrank+-1567, yysvec+685, yyvstop+830, yycrank+-1568, yysvec+685, yyvstop+832, yycrank+1496, 0, 0, yycrank+-1557, yysvec+531, yyvstop+834, yycrank+-1558, yysvec+531, yyvstop+837, yycrank+-1590, yysvec+535, yyvstop+840, yycrank+-1617, 0, yyvstop+843, yycrank+-1619, 0, yyvstop+846, yycrank+-1570, yysvec+534, yyvstop+849, yycrank+-1598, yysvec+534, yyvstop+852, yycrank+-1633, 0, yyvstop+855, yycrank+-1637, 0, yyvstop+858, yycrank+-1614, yysvec+697, yyvstop+861, yycrank+-1621, yysvec+697, yyvstop+864, yycrank+1474, 0, 0, yycrank+1506, 0, 0, yycrank+1478, 0, 0, yycrank+-1664, 0, yyvstop+867, yycrank+-1666, 0, yyvstop+869, yycrank+-1622, yysvec+704, yyvstop+871, yycrank+-1631, yysvec+704, yyvstop+873, yycrank+1520, 0, 0, yycrank+-1611, yysvec+544, yyvstop+875, yycrank+-1582, yysvec+544, yyvstop+878, yycrank+-1653, yysvec+548, yyvstop+881, yycrank+-1680, 0, yyvstop+884, yycrank+-1686, 0, yyvstop+887, yycrank+-1645, yysvec+547, yyvstop+890, yycrank+-1646, yysvec+547, yyvstop+893, yycrank+-1696, 0, yyvstop+896, yycrank+-1706, 0, yyvstop+899, yycrank+-1661, yysvec+716, yyvstop+902, yycrank+-1678, yysvec+716, yyvstop+905, yycrank+1489, 0, 0, yycrank+-1700, 0, yyvstop+908, yycrank+-1639, yysvec+721, yyvstop+911, yycrank+-1643, yysvec+721, yyvstop+914, yycrank+-1711, 0, yyvstop+917, yycrank+-1667, yysvec+91, yyvstop+920, yycrank+-1652, yysvec+91, yyvstop+922, yycrank+-1649, yysvec+91, yyvstop+924, yycrank+-1675, yysvec+91, yyvstop+926, yycrank+-1681, yysvec+91, yyvstop+928, yycrank+-1688, yysvec+560, yyvstop+930, yycrank+-1647, yysvec+560, yyvstop+933, yycrank+-1722, 0, yyvstop+936, yycrank+-1692, yysvec+91, yyvstop+939, yycrank+-1727, 0, yyvstop+941, yycrank+-1693, yysvec+734, yyvstop+944, yycrank+-1714, yysvec+734, yyvstop+947, yycrank+-1716, yysvec+734, yyvstop+950, yycrank+-1728, yysvec+91, yyvstop+953, yycrank+-1724, yysvec+91, yyvstop+955, yycrank+-1756, 0, yyvstop+957, yycrank+-1758, 0, yyvstop+960, yycrank+-1760, 0, yyvstop+963, yycrank+-1734, yysvec+569, yyvstop+966, yycrank+-1736, yysvec+569, yyvstop+969, yycrank+-1775, 0, yyvstop+972, yycrank+-1773, yysvec+628, yyvstop+975, yycrank+-1739, yysvec+745, yyvstop+978, yycrank+-1741, yysvec+745, yyvstop+981, yycrank+-1754, 0, yyvstop+984, yycrank+-1732, yysvec+749, yyvstop+987, yycrank+-1731, yysvec+749, yyvstop+990, yycrank+-1788, 0, yyvstop+993, yycrank+-1744, yysvec+752, yyvstop+996, yycrank+-1738, yysvec+752, yyvstop+999, yycrank+-1742, yysvec+91, yyvstop+1002, yycrank+-1762, yysvec+91, yyvstop+1004, yycrank+-1799, 0, yyvstop+1006, yycrank+-1816, yysvec+637, yyvstop+1009, yycrank+-1765, yysvec+757, yyvstop+1012, yycrank+-1767, yysvec+757, yyvstop+1015, yycrank+-1763, yysvec+91, yyvstop+1018, yycrank+-1770, yysvec+91, yyvstop+1020, yycrank+-1780, yysvec+91, yyvstop+1022, yycrank+-1784, yysvec+91, yyvstop+1024, yycrank+-1785, yysvec+91, yyvstop+1026, yycrank+-1789, yysvec+91, yyvstop+1028, yycrank+-1792, yysvec+91, yyvstop+1030, yycrank+-1805, yysvec+91, yyvstop+1032, yycrank+-1809, yysvec+91, yyvstop+1034, yycrank+-1806, yysvec+734, yyvstop+1036, yycrank+-1813, yysvec+91, yyvstop+1039, yycrank+-1817, yysvec+91, yyvstop+1041, yycrank+-1818, yysvec+91, yyvstop+1043, yycrank+-1822, yysvec+91, yyvstop+1045, yycrank+-1823, yysvec+91, yyvstop+1047, yycrank+-1825, yysvec+91, yyvstop+1049, yycrank+-1827, yysvec+91, yyvstop+1051, yycrank+-1831, yysvec+599, yyvstop+1053, yycrank+-1830, yysvec+599, yyvstop+1055, yycrank+-1826, yysvec+602, yyvstop+1057, yycrank+-1834, yysvec+602, yyvstop+1059, yycrank+-1846, 0, yyvstop+1061, yycrank+-1833, yysvec+782, yyvstop+1063, yycrank+-1840, yysvec+782, yyvstop+1065, yycrank+1525, 0, 0, yycrank+1765, 0, 0, yycrank+-1850, 0, yyvstop+1067, yycrank+1780, 0, 0, yycrank+-1857, 0, yyvstop+1069, yycrank+-1861, 0, yyvstop+1071, yycrank+-1847, yysvec+790, yyvstop+1073, yycrank+-1854, yysvec+790, yyvstop+1075, yycrank+-1868, 0, yyvstop+1077, yycrank+-1862, yysvec+615, yyvstop+1079, yycrank+-1855, yysvec+615, yyvstop+1081, yycrank+-1863, yysvec+615, yyvstop+1083, yycrank+1805, 0, 0, yycrank+1806, 0, 0, yycrank+-1882, 0, yyvstop+1085, yycrank+-1886, 0, yyvstop+1087, yycrank+-1874, yysvec+799, yyvstop+1089, yycrank+-1888, yysvec+799, yyvstop+1091, yycrank+-1899, yysvec+480, yyvstop+1093, yycrank+-1902, 0, yyvstop+1095, yycrank+-1846, yysvec+804, yyvstop+1097, yycrank+-1906, yysvec+804, yyvstop+1099, yycrank+-1918, yysvec+628, yyvstop+1101, yycrank+-1953, 0, yyvstop+1103, yycrank+-1957, 0, yyvstop+1105, yycrank+-1889, yysvec+627, yyvstop+1107, yycrank+-1900, yysvec+627, yyvstop+1109, yycrank+-1875, yysvec+631, yyvstop+1111, yycrank+-1876, yysvec+631, yyvstop+1113, yycrank+-1879, 0, yyvstop+1115, yycrank+1807, 0, 0, yycrank+-1927, yysvec+637, yyvstop+1117, yycrank+-1968, 0, yyvstop+1119, yycrank+-1972, 0, yyvstop+1121, yycrank+-1938, yysvec+636, yyvstop+1123, yycrank+-1945, yysvec+636, yyvstop+1125, yycrank+-1974, 0, yyvstop+1127, yycrank+1796, 0, 0, yycrank+1817, 0, 0, yycrank+1820, 0, 0, yycrank+1812, 0, 0, yycrank+1835, 0, 0, yycrank+-1951, yysvec+615, yyvstop+1129, yycrank+1867, 0, 0, yycrank+1871, 0, 0, yycrank+1878, 0, 0, yycrank+1863, 0, 0, yycrank+1870, 0, 0, yycrank+-1977, yysvec+658, yyvstop+1131, yycrank+-1987, 0, yyvstop+1133, yycrank+-1992, 0, yyvstop+1135, yycrank+-1979, yysvec+657, yyvstop+1137, yycrank+-1984, yysvec+657, yyvstop+1139, yycrank+-2007, 0, yyvstop+1141, yycrank+-2005, yysvec+511, yyvstop+1143, yycrank+-2011, 0, yyvstop+1145, yycrank+-1962, yysvec+840, yyvstop+1147, yycrank+-1990, yysvec+840, yyvstop+1149, yycrank+1946, 0, 0, yycrank+1916, 0, 0, yycrank+-2026, 0, yyvstop+1151, yycrank+-2031, yysvec+522, yyvstop+1154, yycrank+-2040, 0, yyvstop+1157, yycrank+-1996, yysvec+847, yyvstop+1160, yycrank+-2013, yysvec+847, yyvstop+1163, yycrank+-2020, yysvec+679, yyvstop+1166, yycrank+-2056, 0, yyvstop+1169, yycrank+-2062, 0, yyvstop+1172, yycrank+-2035, yysvec+678, yyvstop+1175, yycrank+-2008, yysvec+678, yyvstop+1178, yycrank+1963, 0, 0, yycrank+1936, 0, 0, yycrank+-2037, yysvec+686, yyvstop+1181, yycrank+-2067, 0, yyvstop+1183, yycrank+-2082, 0, yyvstop+1185, yycrank+-2051, yysvec+685, yyvstop+1187, yycrank+-2038, yysvec+685, yyvstop+1189, yycrank+-2092, 0, yyvstop+1191, yycrank+-2095, yysvec+535, yyvstop+1194, yycrank+-2109, 0, yyvstop+1197, yycrank+-2064, yysvec+864, yyvstop+1200, yycrank+-2080, yysvec+864, yyvstop+1203, yycrank+-2089, yysvec+698, yyvstop+1206, yycrank+-2111, 0, yyvstop+1209, yycrank+-2122, 0, yyvstop+1212, yycrank+-2059, yysvec+697, yyvstop+1215, yycrank+-2070, yysvec+697, yyvstop+1218, yycrank+1994, 0, 0, yycrank+1965, 0, 0, yycrank+-2115, yysvec+705, yyvstop+1221, yycrank+-2136, 0, yyvstop+1223, yycrank+-2140, 0, yyvstop+1225, yycrank+-2123, yysvec+704, yyvstop+1227, yycrank+-2124, yysvec+704, yyvstop+1229, yycrank+-2142, 0, yyvstop+1231, yycrank+-2152, yysvec+548, yyvstop+1234, yycrank+-2156, 0, yyvstop+1237, yycrank+-2097, yysvec+881, yyvstop+1240, yycrank+-2131, yysvec+881, yyvstop+1243, yycrank+-2144, yysvec+717, yyvstop+1246, yycrank+-2171, 0, yyvstop+1249, yycrank+-2192, 0, yyvstop+1252, yycrank+-2149, yysvec+716, yyvstop+1255, yycrank+-2137, yysvec+716, yyvstop+1258, yycrank+-2098, yysvec+721, yyvstop+1261, yycrank+-2128, yysvec+721, yyvstop+1264, yycrank+-2185, 0, yyvstop+1267, yycrank+-2158, yysvec+891, yyvstop+1270, yycrank+-2153, yysvec+891, yyvstop+1273, yycrank+-2165, yysvec+91, yyvstop+1276, yycrank+-2166, yysvec+91, yyvstop+1278, yycrank+-2196, 0, yyvstop+1280, yycrank+-2172, yysvec+91, yyvstop+1283, yycrank+-2199, 0, yyvstop+1285, yycrank+-2203, 0, yyvstop+1288, yycrank+-2180, yysvec+899, yyvstop+1291, yycrank+-2169, yysvec+899, yyvstop+1294, yycrank+-2206, 0, yyvstop+1297, yycrank+-2188, yysvec+734, yyvstop+1300, yycrank+-2201, yysvec+734, yyvstop+1303, yycrank+-2207, yysvec+734, yyvstop+1306, yycrank+-2209, yysvec+91, yyvstop+1309, yycrank+-2210, yysvec+91, yyvstop+1311, yycrank+-2222, 0, yyvstop+1313, yycrank+-2226, yysvec+800, yyvstop+1316, yycrank+-2214, yysvec+908, yyvstop+1319, yycrank+-2216, yysvec+908, yyvstop+1322, yycrank+-2228, yysvec+804, yyvstop+1325, yycrank+-2218, yysvec+742, yyvstop+1328, yycrank+-2239, yysvec+480, yyvstop+1331, yycrank+-2273, 0, yyvstop+1334, yycrank+-2280, 0, yyvstop+1337, yycrank+-2237, yysvec+745, yyvstop+1340, yycrank+-2244, yysvec+745, yyvstop+1343, yycrank+-2212, yysvec+749, yyvstop+1346, yycrank+-2228, yysvec+749, yyvstop+1349, yycrank+-2231, yysvec+752, yyvstop+1352, yycrank+-2234, yysvec+752, yyvstop+1355, yycrank+-2284, 0, yyvstop+1358, yycrank+-2242, yysvec+91, yyvstop+1361, yycrank+-2300, 0, yyvstop+1363, yycrank+-2315, 0, yyvstop+1366, yycrank+-2256, yysvec+757, yyvstop+1369, yycrank+-2248, yysvec+757, yyvstop+1372, yycrank+-2321, 0, yyvstop+1375, yycrank+-2250, yysvec+91, yyvstop+1378, yycrank+-2245, yysvec+91, yyvstop+1380, yycrank+-2243, yysvec+91, yyvstop+1382, yycrank+-2252, yysvec+91, yyvstop+1384, yycrank+-2258, yysvec+91, yyvstop+1386, yycrank+-2260, yysvec+734, yyvstop+1388, yycrank+-2277, yysvec+91, yyvstop+1391, yycrank+-2278, yysvec+91, yyvstop+1393, yycrank+-2287, yysvec+91, yyvstop+1395, yycrank+-2288, yysvec+91, yyvstop+1397, yycrank+-2290, yysvec+91, yyvstop+1399, yycrank+-2292, yysvec+599, yyvstop+1401, yycrank+-2294, yysvec+599, yyvstop+1403, yycrank+-2295, yysvec+602, yyvstop+1405, yycrank+-2307, yysvec+602, yyvstop+1407, yycrank+-2297, yysvec+782, yyvstop+1409, yycrank+-2308, yysvec+782, yyvstop+1411, yycrank+-2331, 0, yyvstop+1413, yycrank+2005, 0, 0, yycrank+-2343, 0, yyvstop+1415, yycrank+-2364, 0, yyvstop+1417, yycrank+-2340, yysvec+949, yyvstop+1419, yycrank+-2328, yysvec+949, yyvstop+1421, yycrank+2000, 0, 0, yycrank+-2345, 0, yyvstop+1423, yycrank+-2371, 0, yyvstop+1425, yycrank+-2346, yysvec+954, yyvstop+1427, yycrank+-2347, yysvec+954, yyvstop+1429, yycrank+-2313, yysvec+790, yyvstop+1431, yycrank+-2326, yysvec+790, yyvstop+1433, yycrank+-2376, 0, yyvstop+1435, yycrank+-2329, yysvec+960, yyvstop+1437, yycrank+-2324, yysvec+960, yyvstop+1439, yycrank+-2407, 0, yyvstop+1441, yycrank+-2332, yysvec+615, yyvstop+1444, yycrank+-2327, yysvec+615, yyvstop+1446, yycrank+-2411, 0, yyvstop+1448, yycrank+-2413, 0, yyvstop+1450, yycrank+-2409, yysvec+800, yyvstop+1452, yycrank+-2423, 0, yyvstop+1454, yycrank+-2435, 0, yyvstop+1456, yycrank+-2392, yysvec+799, yyvstop+1458, yycrank+-2348, yysvec+799, yyvstop+1460, yycrank+-2440, 0, yyvstop+1462, yycrank+-2442, 0, yyvstop+1464, yycrank+-2422, yysvec+804, yyvstop+1466, yycrank+-2445, yysvec+628, yyvstop+1468, yycrank+-2452, 0, yyvstop+1470, yycrank+-2336, yysvec+977, yyvstop+1472, yycrank+-2438, yysvec+977, yyvstop+1474, yycrank+-2390, yysvec+627, yyvstop+1476, yycrank+-2447, yysvec+627, yyvstop+1478, yycrank+-2397, yysvec+631, yyvstop+1480, yycrank+-2379, yysvec+631, yyvstop+1482, yycrank+-2487, 0, yyvstop+1484, yycrank+-2428, yysvec+984, yyvstop+1486, yycrank+-2424, yysvec+984, yyvstop+1488, yycrank+-2494, 0, yyvstop+1490, yycrank+-2482, yysvec+637, yyvstop+1492, yycrank+-2497, 0, yyvstop+1494, yycrank+-2432, yysvec+989, yyvstop+1496, yycrank+-2467, yysvec+989, yyvstop+1498, yycrank+-2454, yysvec+636, yyvstop+1500, yycrank+-2464, yysvec+636, yyvstop+1502, yycrank+-2516, 0, yyvstop+1504, yycrank+-2453, yysvec+994, yyvstop+1506, yycrank+-2430, yysvec+994, yyvstop+1508, yycrank+2004, 0, 0, yycrank+2021, 0, 0, yycrank+2218, 0, 0, yycrank+2248, 0, 0, yycrank+2247, 0, 0, yycrank+2265, 0, 0, yycrank+-2504, yysvec+658, yyvstop+1510, yycrank+-2518, 0, yyvstop+1512, yycrank+-2434, yysvec+1004, yyvstop+1514, yycrank+-2499, yysvec+1004, yyvstop+1516, yycrank+-2500, yysvec+657, yyvstop+1518, yycrank+-2502, yysvec+657, yyvstop+1520, yycrank+-2532, 0, yyvstop+1522, yycrank+-2544, 0, yyvstop+1524, yycrank+-2492, yysvec+1009, yyvstop+1526, yycrank+-2510, yysvec+1009, yyvstop+1528, yycrank+-2551, 0, yyvstop+1530, yycrank+-2554, 0, yyvstop+1532, yycrank+-2526, yysvec+840, yyvstop+1534, yycrank+2292, 0, 0, yycrank+2276, 0, 0, yycrank+-2557, 0, yyvstop+1536, yycrank+-2579, 0, yyvstop+1539, yycrank+-2528, yysvec+1018, yyvstop+1542, yycrank+-2546, yysvec+1018, yyvstop+1545, yycrank+-2585, 0, yyvstop+1548, yycrank+-2601, 0, yyvstop+1551, yycrank+-2567, yysvec+847, yyvstop+1554, yycrank+-2596, yysvec+679, yyvstop+1557, yycrank+-2614, 0, yyvstop+1560, yycrank+-2503, yysvec+1026, yyvstop+1563, yycrank+-2594, yysvec+1026, yyvstop+1566, yycrank+-2552, yysvec+678, yyvstop+1569, yycrank+-2573, yysvec+678, yyvstop+1572, yycrank+2315, 0, 0, yycrank+2364, 0, 0, yycrank+-2616, yysvec+686, yyvstop+1575, yycrank+-2621, 0, yyvstop+1577, yycrank+-2545, yysvec+1034, yyvstop+1579, yycrank+-2600, yysvec+1034, yyvstop+1581, yycrank+-2598, yysvec+685, yyvstop+1583, yycrank+-2603, yysvec+685, yyvstop+1585, yycrank+-2643, 0, yyvstop+1587, yycrank+-2645, 0, yyvstop+1590, yycrank+-2609, yysvec+1039, yyvstop+1593, yycrank+-2625, yysvec+1039, yyvstop+1596, yycrank+-2650, 0, yyvstop+1599, yycrank+-2661, 0, yyvstop+1602, yycrank+-2649, yysvec+864, yyvstop+1605, yycrank+-2665, yysvec+698, yyvstop+1608, yycrank+-2666, 0, yyvstop+1611, yycrank+-2632, yysvec+1047, yyvstop+1614, yycrank+-2660, yysvec+1047, yyvstop+1617, yycrank+-2626, yysvec+697, yyvstop+1620, yycrank+-2630, yysvec+697, yyvstop+1623, yycrank+2414, 0, 0, yycrank+2415, 0, 0, yycrank+-2686, yysvec+705, yyvstop+1626, yycrank+-2690, 0, yyvstop+1628, yycrank+-2656, yysvec+1055, yyvstop+1630, yycrank+-2676, yysvec+1055, yyvstop+1632, yycrank+-2674, yysvec+704, yyvstop+1634, yycrank+-2654, yysvec+704, yyvstop+1636, yycrank+-2705, 0, yyvstop+1638, yycrank+-2715, 0, yyvstop+1641, yycrank+-2694, yysvec+1060, yyvstop+1644, yycrank+-2695, yysvec+1060, yyvstop+1647, yycrank+-2717, 0, yyvstop+1650, yycrank+-2730, 0, yyvstop+1653, yycrank+-2702, yysvec+881, yyvstop+1656, yycrank+-2742, yysvec+717, yyvstop+1659, yycrank+-2719, 0, yyvstop+1662, yycrank+-2697, yysvec+1068, yyvstop+1665, yycrank+-2713, yysvec+1068, yyvstop+1668, yycrank+-2700, yysvec+716, yyvstop+1671, yycrank+-2722, yysvec+716, yyvstop+1674, yycrank+-2514, yysvec+721, yyvstop+1677, yycrank+-2530, yysvec+721, yyvstop+1680, yycrank+-2724, yysvec+891, yyvstop+1683, yycrank+-2676, yysvec+891, yyvstop+1686, yycrank+-2744, 0, yyvstop+1689, yycrank+-2745, yysvec+91, yyvstop+1692, yycrank+-2769, 0, yyvstop+1694, yycrank+-2758, yysvec+950, yyvstop+1697, yycrank+-2748, yysvec+1079, yyvstop+1700, yycrank+-2747, yysvec+1079, yyvstop+1703, yycrank+-2558, yysvec+91, yyvstop+1706, yycrank+-2773, 0, yyvstop+1708, yycrank+-2771, yysvec+955, yyvstop+1711, yycrank+-2755, yysvec+1084, yyvstop+1714, yycrank+-2751, yysvec+1084, yyvstop+1717, yycrank+-2775, yysvec+899, yyvstop+1720, yycrank+-2774, yysvec+899, yyvstop+1723, yycrank+-2791, 0, yyvstop+1726, yycrank+-2761, yysvec+1090, yyvstop+1729, yycrank+-2776, yysvec+1090, yyvstop+1732, yycrank+-2798, 0, yyvstop+1735, yycrank+-2777, yysvec+734, yyvstop+1739, yycrank+-2778, yysvec+734, yyvstop+1742, yycrank+-2812, 0, yyvstop+1745, yycrank+-2814, 0, yyvstop+1748, yycrank+-2818, 0, yyvstop+1751, yycrank+-2844, 0, yyvstop+1754, yycrank+-2793, yysvec+908, yyvstop+1757, yycrank+-2786, yysvec+908, yyvstop+1760, yycrank+-2841, yysvec+480, yyvstop+1763, yycrank+-2846, yysvec+977, yyvstop+1766, yycrank+-2802, yysvec+916, yyvstop+1769, yycrank+-2851, yysvec+628, yyvstop+1772, yycrank+-2826, yysvec+745, yyvstop+1775, yycrank+-2819, yysvec+745, yyvstop+1778, yycrank+-2800, yysvec+749, yyvstop+1781, yycrank+-2780, yysvec+749, yyvstop+1784, yycrank+-2783, yysvec+752, yyvstop+1787, yycrank+-2799, yysvec+752, yyvstop+1790, yycrank+-2862, 0, yyvstop+1793, yycrank+-2815, yysvec+1112, yyvstop+1796, yycrank+-2816, yysvec+1112, yyvstop+1799, yycrank+-2893, 0, yyvstop+1802, yycrank+-2881, yysvec+989, yyvstop+1805, yycrank+-2879, yysvec+926, yyvstop+1808, yycrank+-2896, yysvec+637, yyvstop+1811, yycrank+-2849, yysvec+757, yyvstop+1814, yycrank+-2829, yysvec+757, yyvstop+1817, yycrank+-2898, 0, yyvstop+1820, yycrank+-2847, yysvec+1121, yyvstop+1823, yycrank+-2822, yysvec+1121, yyvstop+1826, yycrank+-2560, yysvec+91, yyvstop+1829, yycrank+-2873, yysvec+91, yyvstop+1831, yycrank+-2831, yysvec+91, yyvstop+1833, yycrank+-2827, yysvec+91, yyvstop+1835, yycrank+-2846, yysvec+91, yyvstop+1837, yycrank+-2848, yysvec+91, yyvstop+1839, yycrank+-2828, yysvec+782, yyvstop+1841, yycrank+-2854, yysvec+782, yyvstop+1843, yycrank+-2900, 0, yyvstop+1845, yycrank+-2860, yysvec+1132, yyvstop+1847, yycrank+-2882, yysvec+1132, yyvstop+1849, yycrank+-2921, 0, yyvstop+1851, yycrank+-2901, yysvec+950, yyvstop+1853, yycrank+-2935, 0, yyvstop+1855, yycrank+-2945, 0, yyvstop+1857, yycrank+-2904, yysvec+949, yyvstop+1859, yycrank+-2911, yysvec+949, yyvstop+1861, yycrank+2456, 0, 0, yycrank+-2914, yysvec+955, yyvstop+1863, yycrank+-2955, 0, yyvstop+1865, yycrank+-2962, 0, yyvstop+1867, yycrank+-2923, yysvec+954, yyvstop+1869, yycrank+-2930, yysvec+954, yyvstop+1871, yycrank+-2908, yysvec+790, yyvstop+1873, yycrank+-2896, yysvec+790, yyvstop+1875, yycrank+-2917, yysvec+960, yyvstop+1877, yycrank+-2925, yysvec+960, yyvstop+1879, yycrank+-2958, 0, yyvstop+1881, yycrank+-2931, yysvec+1151, yyvstop+1884, yycrank+-2940, yysvec+1151, yyvstop+1887, yycrank+-2974, 0, yyvstop+1890, yycrank+-2978, 0, yyvstop+1892, yycrank+-2942, yysvec+1155, yyvstop+1894, yycrank+-2943, yysvec+1155, yyvstop+1896, yycrank+-3002, 0, yyvstop+1898, yycrank+-2947, yysvec+1158, yyvstop+1900, yycrank+-2956, yysvec+1158, yyvstop+1902, yycrank+-2989, yysvec+800, yyvstop+1904, yycrank+-3009, 0, yyvstop+1906, yycrank+-2947, yysvec+1162, yyvstop+1908, yycrank+-2967, yysvec+1162, yyvstop+1910, yycrank+-2981, yysvec+799, yyvstop+1912, yycrank+-2986, yysvec+799, yyvstop+1914, yycrank+-3014, yysvec+804, yyvstop+1916, yycrank+-2991, yysvec+974, yyvstop+1918, yycrank+-3025, yysvec+480, yyvstop+1920, yycrank+-3031, 0, yyvstop+1922, yycrank+-3042, 0, yyvstop+1924, yycrank+-3021, yysvec+977, yyvstop+1926, yycrank+-2975, yysvec+984, yyvstop+1928, yycrank+-2959, yysvec+984, yyvstop+1930, yycrank+-3061, 0, yyvstop+1932, yycrank+-2987, yysvec+1175, yyvstop+1934, yycrank+-2971, yysvec+1175, yyvstop+1936, yycrank+-3073, 0, yyvstop+1938, yycrank+-3083, 0, yyvstop+1940, yycrank+-3058, yysvec+989, yyvstop+1942, yycrank+-3019, yysvec+994, yyvstop+1944, yycrank+-2997, yysvec+994, yyvstop+1946, yycrank+2474, 0, 0, yycrank+-3089, 0, yyvstop+1948, yycrank+2459, 0, 0, yycrank+2480, 0, 0, yycrank+-3093, 0, yyvstop+1950, yycrank+-3099, 0, yyvstop+1952, yycrank+-3068, yysvec+1004, yyvstop+1954, yycrank+-3032, yysvec+1010, yyvstop+1956, yycrank+-3103, 0, yyvstop+1958, yycrank+-3109, 0, yyvstop+1960, yycrank+-3050, yysvec+1009, yyvstop+1962, yycrank+-3070, yysvec+1009, yyvstop+1964, yycrank+-3113, yysvec+840, yyvstop+1966, yycrank+-3078, yysvec+1014, yyvstop+1968, yycrank+-3120, yysvec+511, yyvstop+1970, yycrank+-3127, 0, yyvstop+1972, yycrank+-3114, yysvec+1019, yyvstop+1974, yycrank+-3142, 0, yyvstop+1977, yycrank+-3148, 0, yyvstop+1980, yycrank+-3097, yysvec+1018, yyvstop+1983, yycrank+-3117, yysvec+1018, yyvstop+1986, yycrank+-3122, yysvec+847, yyvstop+1989, yycrank+-3129, yysvec+1023, yyvstop+1992, yycrank+-3132, yysvec+522, yyvstop+1995, yycrank+-3174, 0, yyvstop+1998, yycrank+-3176, 0, yyvstop+2001, yycrank+-3145, yysvec+1026, yyvstop+2004, yycrank+-3190, 0, yyvstop+2007, yycrank+-3192, 0, yyvstop+2009, yycrank+-3202, 0, yyvstop+2011, yycrank+-3161, yysvec+1034, yyvstop+2013, yycrank+-3180, yysvec+1040, yyvstop+2015, yycrank+-3205, 0, yyvstop+2018, yycrank+-3209, 0, yyvstop+2021, yycrank+-3170, yysvec+1039, yyvstop+2024, yycrank+-3124, yysvec+1039, yyvstop+2027, yycrank+-3215, yysvec+864, yyvstop+2030, yycrank+-3210, yysvec+1044, yyvstop+2033, yycrank+-3221, yysvec+535, yyvstop+2036, yycrank+-3237, 0, yyvstop+2039, yycrank+-3249, 0, yyvstop+2042, yycrank+-3231, yysvec+1047, yyvstop+2045, yycrank+-3262, 0, yyvstop+2048, yycrank+-3264, 0, yyvstop+2050, yycrank+-3279, 0, yyvstop+2052, yycrank+-3236, yysvec+1055, yyvstop+2054, yycrank+-3243, yysvec+1061, yyvstop+2056, yycrank+-3276, 0, yyvstop+2059, yycrank+-3291, 0, yyvstop+2062, yycrank+-3219, yysvec+1060, yyvstop+2065, yycrank+-3186, yysvec+1060, yyvstop+2068, yycrank+-3278, yysvec+881, yyvstop+2071, yycrank+-3281, yysvec+1065, yyvstop+2074, yycrank+-3297, yysvec+548, yyvstop+2077, yycrank+-3307, 0, yyvstop+2080, yycrank+-3309, 0, yyvstop+2083, yycrank+-3296, yysvec+1068, yyvstop+2086, yycrank+-3156, yysvec+891, yyvstop+2089, yycrank+-3153, yysvec+891, yyvstop+2092, yycrank+-3312, 0, yyvstop+2095, yycrank+-3149, yysvec+1242, yyvstop+2098, yycrank+-3027, yysvec+1242, yyvstop+2101, yycrank+-3326, 0, yyvstop+2104, yycrank+-3336, 0, yyvstop+2107, yycrank+-3340, 0, yyvstop+2110, yycrank+-3285, yysvec+1079, yyvstop+2113, yycrank+-3284, yysvec+1079, yyvstop+2116, yycrank+-3017, yysvec+91, yyvstop+2119, yycrank+-3351, 0, yyvstop+2121, yycrank+-3356, 0, yyvstop+2124, yycrank+-3323, yysvec+1084, yyvstop+2127, yycrank+-3234, yysvec+1084, yyvstop+2130, yycrank+-3297, yysvec+899, yyvstop+2133, yycrank+-3038, yysvec+899, yyvstop+2136, yycrank+-3178, yysvec+1090, yyvstop+2139, yycrank+-3188, yysvec+1090, yyvstop+2142, yycrank+-3358, 0, yyvstop+2145, yycrank+-3158, yysvec+1259, yyvstop+2149, yycrank+-3283, yysvec+1259, yyvstop+2153, yycrank+-3371, 0, yyvstop+2157, yycrank+-3381, 0, yyvstop+2160, yycrank+-3324, yysvec+1263, yyvstop+2163, yycrank+-3045, yysvec+1263, yyvstop+2166, yycrank+-3391, 0, yyvstop+2169, yycrank+-3337, yysvec+1266, yyvstop+2172, yycrank+-3238, yysvec+1266, yyvstop+2175, yycrank+-3376, yysvec+1162, yyvstop+2178, yycrank+-3364, yysvec+1099, yyvstop+2181, yycrank+-3395, yysvec+800, yyvstop+2184, yycrank+-3348, yysvec+908, yyvstop+2187, yycrank+-3352, yysvec+908, yyvstop+2190, yycrank+-3404, yysvec+628, yyvstop+2193, yycrank+-3343, yysvec+1112, yyvstop+2196, yycrank+-3265, yysvec+1112, yyvstop+2199, yycrank+-3409, 0, yyvstop+2202, yycrank+-3353, yysvec+1277, yyvstop+2205, yycrank+-3310, yysvec+1277, yyvstop+2208, yycrank+-3405, yysvec+637, yyvstop+2211, yycrank+-3354, yysvec+1121, yyvstop+2214, yycrank+-3216, yysvec+1121, yyvstop+2217, yycrank+-3397, yysvec+91, yyvstop+2220, yycrank+-3421, 0, yyvstop+2222, yycrank+-3366, yysvec+91, yyvstop+2225, yycrank+-3071, yysvec+91, yyvstop+2227, yycrank+-3368, yysvec+782, yyvstop+2229, yycrank+-3383, yysvec+782, yyvstop+2231, yycrank+-3402, yysvec+1132, yyvstop+2233, yycrank+-3036, yysvec+1132, yyvstop+2235, yycrank+-3438, 0, yyvstop+2237, yycrank+-3399, yysvec+1291, yyvstop+2239, yycrank+-3406, yysvec+1291, yyvstop+2241, yycrank+-3445, yysvec+950, yyvstop+2243, yycrank+-3448, 0, yyvstop+2245, yycrank+-2984, yysvec+1295, yyvstop+2247, yycrank+-3423, yysvec+1295, yyvstop+2249, yycrank+-3424, yysvec+949, yyvstop+2251, yycrank+-3430, yysvec+949, yyvstop+2253, yycrank+-3459, 0, yyvstop+2255, yycrank+-3454, yysvec+955, yyvstop+2257, yycrank+-3471, 0, yyvstop+2259, yycrank+-3002, yysvec+1302, yyvstop+2261, yycrank+-3441, yysvec+1302, yyvstop+2263, yycrank+-3449, yysvec+954, yyvstop+2265, yycrank+-3435, yysvec+954, yyvstop+2267, yycrank+-3417, yysvec+790, yyvstop+2269, yycrank+-3410, yysvec+790, yyvstop+2271, yycrank+-3433, yysvec+960, yyvstop+2273, yycrank+-3419, yysvec+960, yyvstop+2275, yycrank+-3423, yysvec+1151, yyvstop+2277, yycrank+-3434, yysvec+1151, yyvstop+2280, yycrank+-3452, yysvec+1155, yyvstop+2283, yycrank+-3451, yysvec+1155, yyvstop+2285, yycrank+-3455, yysvec+1158, yyvstop+2287, yycrank+-3457, yysvec+1158, yyvstop+2289, yycrank+-3499, 0, yyvstop+2291, yycrank+-3515, 0, yyvstop+2293, yycrank+-3481, yysvec+1162, yyvstop+2295, yycrank+-3465, yysvec+799, yyvstop+2297, yycrank+-3474, yysvec+799, yyvstop+2299, yycrank+-3522, yysvec+480, yyvstop+2301, yycrank+-3525, yysvec+977, yyvstop+2303, yycrank+-3497, yysvec+1171, yyvstop+2305, yycrank+-3538, yysvec+628, yyvstop+2307, yycrank+-3476, yysvec+984, yyvstop+2309, yycrank+-3479, yysvec+984, yyvstop+2311, yycrank+-3481, yysvec+1175, yyvstop+2313, yycrank+-3484, yysvec+1175, yyvstop+2315, yycrank+-3540, yysvec+989, yyvstop+2317, yycrank+-3507, yysvec+1179, yyvstop+2319, yycrank+-3542, yysvec+637, yyvstop+2321, yycrank+-3488, yysvec+994, yyvstop+2323, yycrank+-3494, yysvec+994, yyvstop+2325, yycrank+-3556, 0, yyvstop+2327, yycrank+-3567, 0, yyvstop+2329, yycrank+-3483, yysvec+1336, yyvstop+2331, yycrank+-3501, yysvec+1336, yyvstop+2333, yycrank+-3569, yysvec+1004, yyvstop+2335, yycrank+-3551, yysvec+1188, yyvstop+2337, yycrank+-3573, yysvec+658, yyvstop+2339, yycrank+-3582, yysvec+1010, yyvstop+2341, yycrank+-3587, 0, yyvstop+2343, yycrank+-3546, yysvec+1343, yyvstop+2345, yycrank+-3577, yysvec+1343, yyvstop+2347, yycrank+-3526, yysvec+1009, yyvstop+2349, yycrank+-3553, yysvec+1009, yyvstop+2351, yycrank+-3598, yysvec+511, yyvstop+2353, yycrank+-3602, 0, yyvstop+2355, yycrank+-3608, 0, yyvstop+2357, yycrank+-3554, yysvec+1349, yyvstop+2359, yycrank+-3580, yysvec+1349, yyvstop+2361, yycrank+-3613, yysvec+1019, yyvstop+2363, yycrank+-3627, 0, yyvstop+2366, yycrank+-3588, yysvec+1354, yyvstop+2369, yycrank+-3614, yysvec+1354, yyvstop+2372, yycrank+-3603, yysvec+1018, yyvstop+2375, yycrank+-3615, yysvec+1018, yyvstop+2378, yycrank+-3631, yysvec+522, yyvstop+2381, yycrank+-3629, yysvec+1026, yyvstop+2384, yycrank+-3623, yysvec+1208, yyvstop+2387, yycrank+-3656, yysvec+679, yyvstop+2390, yycrank+-3643, 0, yyvstop+2393, yycrank+-3658, 0, yyvstop+2395, yycrank+-3616, yysvec+1363, yyvstop+2397, yycrank+-3632, yysvec+1363, yyvstop+2399, yycrank+-3657, yysvec+1034, yyvstop+2401, yycrank+-3662, yysvec+1212, yyvstop+2403, yycrank+-3674, yysvec+686, yyvstop+2405, yycrank+-3679, yysvec+1040, yyvstop+2407, yycrank+-3683, 0, yyvstop+2410, yycrank+-3640, yysvec+1371, yyvstop+2413, yycrank+-3673, yysvec+1371, yyvstop+2416, yycrank+-3675, yysvec+1039, yyvstop+2419, yycrank+-3676, yysvec+1039, yyvstop+2422, yycrank+-3699, yysvec+535, yyvstop+2425, yycrank+-3693, yysvec+1047, yyvstop+2428, yycrank+-3686, yysvec+1223, yyvstop+2431, yycrank+-3709, yysvec+698, yyvstop+2434, yycrank+-3715, 0, yyvstop+2437, yycrank+-3726, 0, yyvstop+2439, yycrank+-3687, yysvec+1380, yyvstop+2441, yycrank+-3691, yysvec+1380, yyvstop+2443, yycrank+-3730, yysvec+1055, yyvstop+2445, yycrank+-3704, yysvec+1227, yyvstop+2447, yycrank+-3746, yysvec+705, yyvstop+2449, yycrank+-3748, yysvec+1061, yyvstop+2451, yycrank+-3744, 0, yyvstop+2454, yycrank+-3711, yysvec+1388, yyvstop+2457, yycrank+-3739, yysvec+1388, yyvstop+2460, yycrank+-3718, yysvec+1060, yyvstop+2463, yycrank+-3733, yysvec+1060, yyvstop+2466, yycrank+-3759, yysvec+548, yyvstop+2469, yycrank+-3760, yysvec+1068, yyvstop+2472, yycrank+-3754, yysvec+1238, yyvstop+2475, yycrank+-3766, yysvec+717, yyvstop+2478, yycrank+-3740, yysvec+891, yyvstop+2481, yycrank+-3548, yysvec+891, yyvstop+2484, yycrank+-3689, yysvec+1242, yyvstop+2487, yycrank+-3688, yysvec+1242, yyvstop+2490, yycrank+-3793, 0, yyvstop+2493, yycrank+-3705, yysvec+1401, yyvstop+2496, yycrank+-3701, yysvec+1401, yyvstop+2499, yycrank+-3762, yysvec+1295, yyvstop+2502, yycrank+-3772, yysvec+1247, yyvstop+2505, yycrank+-3795, yysvec+950, yyvstop+2508, yycrank+-3768, yysvec+1079, yyvstop+2511, yycrank+-3773, yysvec+1079, yyvstop+2514, yycrank+-3813, 0, yyvstop+2517, yycrank+-3809, yysvec+1302, yyvstop+2520, yycrank+-3779, yysvec+1252, yyvstop+2523, yycrank+-3815, yysvec+955, yyvstop+2526, yycrank+-3780, yysvec+1084, yyvstop+2529, yycrank+-3790, yysvec+1084, yyvstop+2532, yycrank+-3766, yysvec+899, yyvstop+2535, yycrank+-3775, yysvec+899, yyvstop+2538, yycrank+-3801, yysvec+1090, yyvstop+2541, yycrank+-3503, yysvec+1090, yyvstop+2544, yycrank+-3807, yysvec+1259, yyvstop+2547, yycrank+-3811, yysvec+1259, yyvstop+2551, yycrank+-3815, yysvec+1263, yyvstop+2555, yycrank+-3819, yysvec+1263, yyvstop+2558, yycrank+-3820, yysvec+1266, yyvstop+2561, yycrank+-3822, yysvec+1266, yyvstop+2564, yycrank+-3838, yysvec+800, yyvstop+2567, yycrank+-3826, yysvec+908, yyvstop+2570, yycrank+-3825, yysvec+908, yyvstop+2573, yycrank+-3823, yysvec+1112, yyvstop+2576, yycrank+-3828, yysvec+1112, yyvstop+2579, yycrank+-3830, yysvec+1277, yyvstop+2582, yycrank+-3833, yysvec+1277, yyvstop+2585, yycrank+-3841, yysvec+1121, yyvstop+2588, yycrank+-3835, yysvec+1121, yyvstop+2591, yycrank+-3843, 0, yyvstop+2594, yycrank+-3848, 0, yyvstop+2597, yycrank+-3853, yysvec+1435, yyvstop+2600, yycrank+-3840, yysvec+1435, yyvstop+2603, yycrank+-3851, yysvec+1132, yyvstop+2606, yycrank+-3844, yysvec+1132, yyvstop+2608, yycrank+-3633, yysvec+1291, yyvstop+2610, yycrank+-3845, yysvec+1291, yyvstop+2612, yycrank+-3858, 0, yyvstop+2614, yycrank+-3892, 0, yyvstop+2616, yycrank+-3856, yysvec+1295, yyvstop+2618, yycrank+-3859, yysvec+949, yyvstop+2620, yycrank+-3864, yysvec+949, yyvstop+2622, yycrank+-3885, 0, yyvstop+2624, yycrank+-3907, 0, yyvstop+2626, yycrank+-3886, yysvec+1447, yyvstop+2628, yycrank+-3880, yysvec+1447, yyvstop+2630, yycrank+-3933, 0, yyvstop+2632, yycrank+-3946, 0, yyvstop+2634, yycrank+-3891, yysvec+1302, yyvstop+2636, yycrank+-3888, yysvec+954, yyvstop+2638, yycrank+-3889, yysvec+954, yyvstop+2640, yycrank+-3866, yysvec+960, yyvstop+2642, yycrank+-3854, yysvec+960, yyvstop+2644, yycrank+-3894, yysvec+1151, yyvstop+2646, yycrank+-3856, yysvec+1151, yyvstop+2649, yycrank+-3874, yysvec+1155, yyvstop+2652, yycrank+-3867, yysvec+1155, yyvstop+2654, yycrank+-3870, yysvec+1158, yyvstop+2656, yycrank+-3897, yysvec+1158, yyvstop+2658, yycrank+-3951, yysvec+1162, yyvstop+2660, yycrank+-3939, yysvec+1318, yyvstop+2662, yycrank+-3961, yysvec+800, yyvstop+2664, yycrank+-3967, yysvec+628, yyvstop+2666, yycrank+-3887, yysvec+984, yyvstop+2668, yycrank+-3900, yysvec+984, yyvstop+2670, yycrank+-3902, yysvec+1175, yyvstop+2672, yycrank+-3869, yysvec+1175, yyvstop+2674, yycrank+-3968, yysvec+637, yyvstop+2676, yycrank+-3913, yysvec+994, yyvstop+2678, yycrank+-3905, yysvec+994, yyvstop+2680, yycrank+-3972, 0, yyvstop+2682, yycrank+-3920, yysvec+1475, yyvstop+2684, yycrank+-3957, yysvec+1475, yyvstop+2686, yycrank+-3961, yysvec+1336, yyvstop+2688, yycrank+-3968, yysvec+1336, yyvstop+2690, yycrank+-3983, yysvec+658, yyvstop+2692, yycrank+-4002, 0, yyvstop+2694, yycrank+-4008, 0, yyvstop+2696, yycrank+-3980, yysvec+1343, yyvstop+2698, yycrank+-3981, yysvec+1009, yyvstop+2700, yycrank+-3973, yysvec+1009, yyvstop+2702, yycrank+-3989, yysvec+1350, yyvstop+2704, yycrank+-4022, 0, yyvstop+2706, yycrank+-4033, 0, yyvstop+2708, yycrank+-3986, yysvec+1349, yyvstop+2710, yycrank+-3992, yysvec+1349, yyvstop+2712, yycrank+-4043, 0, yyvstop+2714, yycrank+-4049, 0, yyvstop+2717, yycrank+-4015, yysvec+1354, yyvstop+2720, yycrank+-4016, yysvec+1018, yyvstop+2723, yycrank+-4027, yysvec+1018, yyvstop+2726, yycrank+-4055, yysvec+679, yyvstop+2729, yycrank+-4050, yysvec+1364, yyvstop+2732, yycrank+-4077, 0, yyvstop+2734, yycrank+-4084, 0, yyvstop+2736, yycrank+-4037, yysvec+1363, yyvstop+2738, yycrank+-4044, yysvec+1363, yyvstop+2740, yycrank+-4066, yysvec+686, yyvstop+2742, yycrank+-4094, 0, yyvstop+2744, yycrank+-4097, 0, yyvstop+2747, yycrank+-4092, yysvec+1371, yyvstop+2750, yycrank+-4058, yysvec+1039, yyvstop+2753, yycrank+-4062, yysvec+1039, yyvstop+2756, yycrank+-4109, yysvec+698, yyvstop+2759, yycrank+-4079, yysvec+1381, yyvstop+2762, yycrank+-4110, 0, yyvstop+2764, yycrank+-4128, 0, yyvstop+2766, yycrank+-4069, yysvec+1380, yyvstop+2768, yycrank+-4104, yysvec+1380, yyvstop+2770, yycrank+-4131, yysvec+705, yyvstop+2772, yycrank+-4149, 0, yyvstop+2774, yycrank+-4153, 0, yyvstop+2777, yycrank+-4119, yysvec+1388, yyvstop+2780, yycrank+-4126, yysvec+1060, yyvstop+2783, yycrank+-4133, yysvec+1060, yyvstop+2786, yycrank+-4146, yysvec+717, yyvstop+2789, yycrank+-4090, yysvec+1242, yyvstop+2792, yycrank+-4036, yysvec+1242, yyvstop+2795, yycrank+-4105, yysvec+1401, yyvstop+2798, yycrank+-4030, yysvec+1401, yyvstop+2801, yycrank+-4168, yysvec+950, yyvstop+2804, yycrank+-4138, yysvec+1079, yyvstop+2807, yycrank+-4158, yysvec+1079, yyvstop+2810, yycrank+-4182, 0, yyvstop+2813, yycrank+-4175, yysvec+1448, yyvstop+2816, yycrank+-4162, yysvec+1528, yyvstop+2819, yycrank+-4164, yysvec+1528, yyvstop+2822, yycrank+-4186, yysvec+955, yyvstop+2825, yycrank+-4171, yysvec+1084, yyvstop+2828, yycrank+-4178, yysvec+1084, yyvstop+2831, yycrank+-3980, yysvec+1090, yyvstop+2834, yycrank+-4113, yysvec+1090, yyvstop+2837, yycrank+-3996, yysvec+1259, yyvstop+2840, yycrank+-4112, yysvec+1259, yyvstop+2844, yycrank+-3995, yysvec+1263, yyvstop+2848, yycrank+-4041, yysvec+1263, yyvstop+2851, yycrank+-4161, yysvec+1266, yyvstop+2854, yycrank+-4155, yysvec+1266, yyvstop+2857, yycrank+-4180, yysvec+1112, yyvstop+2860, yycrank+-4184, yysvec+1112, yyvstop+2863, yycrank+-4187, yysvec+1277, yyvstop+2866, yycrank+-4015, yysvec+1277, yyvstop+2869, yycrank+-4188, yysvec+1121, yyvstop+2872, yycrank+-4189, yysvec+1121, yyvstop+2875, yycrank+-4222, 0, yyvstop+2878, yycrank+-4193, yysvec+1549, yyvstop+2881, yycrank+-4194, yysvec+1549, yyvstop+2884, yycrank+-4197, yysvec+1435, yyvstop+2887, yycrank+-4196, yysvec+1435, yyvstop+2890, yycrank+-4202, yysvec+1132, yyvstop+2893, yycrank+-4204, yysvec+1132, yyvstop+2895, yycrank+-4207, yysvec+1291, yyvstop+2897, yycrank+-4211, yysvec+1291, yyvstop+2899, yycrank+-4229, yysvec+1295, yyvstop+2901, yycrank+-4216, yysvec+1443, yyvstop+2903, yycrank+-4233, yysvec+950, yyvstop+2905, yycrank+-4214, yysvec+949, yyvstop+2907, yycrank+-4217, yysvec+949, yyvstop+2909, yycrank+-4238, yysvec+1448, yyvstop+2911, yycrank+-4235, 0, yyvstop+2913, yycrank+-4242, 0, yyvstop+2915, yycrank+-4240, yysvec+1447, yyvstop+2917, yycrank+-4243, yysvec+1447, yyvstop+2919, yycrank+-4245, yysvec+1302, yyvstop+2921, yycrank+-4246, yysvec+1452, yyvstop+2923, yycrank+-4287, yysvec+955, yyvstop+2925, yycrank+-4250, yysvec+954, yyvstop+2927, yycrank+-4252, yysvec+954, yyvstop+2929, yycrank+-4227, yysvec+960, yyvstop+2931, yycrank+-4230, yysvec+960, yyvstop+2933, yycrank+-4245, yysvec+1151, yyvstop+2935, yycrank+-4247, yysvec+1151, yyvstop+2938, yycrank+-4271, yysvec+1155, yyvstop+2941, yycrank+-4218, yysvec+1155, yyvstop+2943, yycrank+-4268, yysvec+1158, yyvstop+2945, yycrank+-4249, yysvec+1158, yyvstop+2947, yycrank+-4303, yysvec+800, yyvstop+2949, yycrank+-4274, yysvec+984, yyvstop+2951, yycrank+-4281, yysvec+984, yyvstop+2953, yycrank+-4288, yysvec+1175, yyvstop+2955, yycrank+-4290, yysvec+1175, yyvstop+2957, yycrank+-4292, yysvec+994, yyvstop+2959, yycrank+-4296, yysvec+994, yyvstop+2961, yycrank+-4297, yysvec+1475, yyvstop+2963, yycrank+-4299, yysvec+1475, yyvstop+2965, yycrank+-3528, yysvec+1336, yyvstop+2967, yycrank+-4303, yysvec+1336, yyvstop+2969, yycrank+-4315, yysvec+1343, yyvstop+2971, yycrank+-4312, yysvec+1482, yyvstop+2973, yycrank+-4322, yysvec+1010, yyvstop+2975, yycrank+-4316, yysvec+1009, yyvstop+2977, yycrank+-4317, yysvec+1009, yyvstop+2979, yycrank+-4340, yysvec+1350, yyvstop+2981, yycrank+-4328, 0, yyvstop+2983, yycrank+-4278, yysvec+1598, yyvstop+2985, yycrank+-4333, yysvec+1598, yyvstop+2987, yycrank+-4329, yysvec+1349, yyvstop+2989, yycrank+-4318, yysvec+1349, yyvstop+2991, yycrank+-4331, yysvec+1354, yyvstop+2993, yycrank+-4334, yysvec+1492, yyvstop+2996, yycrank+-4373, yysvec+1019, yyvstop+2999, yycrank+-4341, yysvec+1018, yyvstop+3002, yycrank+-4337, yysvec+1018, yyvstop+3005, yycrank+-4390, yysvec+1364, yyvstop+3008, yycrank+-4392, 0, yyvstop+3010, yycrank+-4310, yysvec+1609, yyvstop+3012, yycrank+-4361, yysvec+1609, yyvstop+3014, yycrank+-4358, yysvec+1363, yyvstop+3016, yycrank+-4362, yysvec+1363, yyvstop+3018, yycrank+-4402, yysvec+1371, yyvstop+3020, yycrank+-4367, yysvec+1504, yyvstop+3023, yycrank+-4403, yysvec+1040, yyvstop+3026, yycrank+-4379, yysvec+1039, yyvstop+3029, yycrank+-4382, yysvec+1039, yyvstop+3032, yycrank+-4421, yysvec+1381, yyvstop+3035, yycrank+-4415, 0, yyvstop+3037, yycrank+-4374, yysvec+1620, yyvstop+3039, yycrank+-4408, yysvec+1620, yyvstop+3041, yycrank+-4418, yysvec+1380, yyvstop+3043, yycrank+-4422, yysvec+1380, yyvstop+3045, yycrank+-4433, yysvec+1388, yyvstop+3047, yycrank+-4423, yysvec+1516, yyvstop+3050, yycrank+-4434, yysvec+1061, yyvstop+3053, yycrank+-4430, yysvec+1060, yyvstop+3056, yycrank+-4435, yysvec+1060, yyvstop+3059, yycrank+-4421, yysvec+1242, yyvstop+3062, yycrank+-4361, yysvec+1242, yyvstop+3065, yycrank+-4436, yysvec+1401, yyvstop+3068, yycrank+-4376, yysvec+1401, yyvstop+3071, yycrank+-4437, yysvec+1079, yyvstop+3074, yycrank+-4441, yysvec+1079, yyvstop+3077, yycrank+-4443, 0, yyvstop+3080, yycrank+-4465, 0, yyvstop+3083, yycrank+-4447, yysvec+1528, yyvstop+3086, yycrank+-4449, yysvec+1528, yyvstop+3089, yycrank+-4450, yysvec+1084, yyvstop+3092, yycrank+-4461, yysvec+1084, yyvstop+3095, yycrank+-4454, yysvec+1090, yyvstop+3098, yycrank+-4451, yysvec+1090, yyvstop+3101, yycrank+-4462, yysvec+1259, yyvstop+3104, yycrank+-4468, yysvec+1259, yyvstop+3108, yycrank+-4305, yysvec+1263, yyvstop+3112, yycrank+-4469, yysvec+1263, yyvstop+3115, yycrank+-4475, yysvec+1266, yyvstop+3118, yycrank+-4479, yysvec+1266, yyvstop+3121, yycrank+-4481, yysvec+1112, yyvstop+3124, yycrank+-4482, yysvec+1112, yyvstop+3127, yycrank+-4483, yysvec+1277, yyvstop+3130, yycrank+-4485, yysvec+1277, yyvstop+3133, yycrank+-4492, yysvec+1121, yyvstop+3136, yycrank+-4493, yysvec+1121, yyvstop+3139, yycrank+-4490, yysvec+1549, yyvstop+3142, yycrank+-4494, yysvec+1549, yyvstop+3145, yycrank+-4495, yysvec+1435, yyvstop+3148, yycrank+-4497, yysvec+1435, yyvstop+3151, yycrank+-4499, yysvec+1132, yyvstop+3154, yycrank+-4500, yysvec+1132, yyvstop+3156, yycrank+-4501, yysvec+1291, yyvstop+3158, yycrank+-4503, yysvec+1291, yyvstop+3160, yycrank+-4516, yysvec+950, yyvstop+3162, yycrank+-4517, yysvec+1448, yyvstop+3164, yycrank+-4519, 0, yyvstop+3166, yycrank+-4483, yysvec+1666, yyvstop+3168, yycrank+-4505, yysvec+1666, yyvstop+3170, yycrank+-4523, yysvec+1447, yyvstop+3172, yycrank+-4524, yysvec+1447, yyvstop+3174, yycrank+-4526, yysvec+955, yyvstop+3176, yycrank+-4505, yysvec+1151, yyvstop+3178, yycrank+-4511, yysvec+1151, yyvstop+3181, yycrank+-4527, yysvec+1155, yyvstop+3184, yycrank+-4522, yysvec+1155, yyvstop+3186, yycrank+-4529, yysvec+1158, yyvstop+3188, yycrank+-4531, yysvec+1158, yyvstop+3190, yycrank+-4534, yysvec+1175, yyvstop+3192, yycrank+-4533, yysvec+1175, yyvstop+3194, yycrank+-4535, yysvec+1475, yyvstop+3196, yycrank+-4536, yysvec+1475, yyvstop+3198, yycrank+-4537, yysvec+1336, yyvstop+3200, yycrank+-4538, yysvec+1336, yyvstop+3202, yycrank+-4552, yysvec+1010, yyvstop+3204, yycrank+-4579, 0, yyvstop+3206, yycrank+-4595, 0, yyvstop+3208, yycrank+-4570, yysvec+1598, yyvstop+3210, yycrank+-4547, yysvec+1349, yyvstop+3212, yycrank+-4544, yysvec+1349, yyvstop+3214, yycrank+-4610, yysvec+1019, yyvstop+3216, yycrank+-4614, 0, yyvstop+3219, yycrank+-4626, 0, yyvstop+3221, yycrank+-4598, yysvec+1609, yyvstop+3223, yycrank+-4587, yysvec+1363, yyvstop+3225, yycrank+-4571, yysvec+1363, yyvstop+3227, yycrank+-4629, yysvec+1040, yyvstop+3229, yycrank+-4654, 0, yyvstop+3232, yycrank+-4665, 0, yyvstop+3234, yycrank+-4623, yysvec+1620, yyvstop+3236, yycrank+-4590, yysvec+1380, yyvstop+3238, yycrank+-4604, yysvec+1380, yyvstop+3240, yycrank+-4659, yysvec+1061, yyvstop+3242, yycrank+-4572, yysvec+1242, yyvstop+3245, yycrank+-4568, yysvec+1242, yyvstop+3248, yycrank+-4629, yysvec+1401, yyvstop+3251, yycrank+-4606, yysvec+1401, yyvstop+3254, yycrank+-4643, yysvec+1666, yyvstop+3257, yycrank+-4644, yysvec+1637, yyvstop+3260, yycrank+-4670, yysvec+1448, yyvstop+3263, yycrank+-4639, yysvec+1528, yyvstop+3266, yycrank+-4655, yysvec+1528, yyvstop+3269, yycrank+-4631, yysvec+1259, yyvstop+3272, yycrank+-4574, yysvec+1259, yyvstop+3276, yycrank+-4657, yysvec+1263, yyvstop+3280, yycrank+-4638, yysvec+1263, yyvstop+3283, yycrank+-4670, yysvec+1266, yyvstop+3286, yycrank+-4671, yysvec+1266, yyvstop+3289, yycrank+-4672, yysvec+1277, yyvstop+3292, yycrank+-4673, yysvec+1277, yyvstop+3295, yycrank+-4678, yysvec+1549, yyvstop+3298, yycrank+-4577, yysvec+1549, yyvstop+3301, yycrank+-4679, yysvec+1435, yyvstop+3304, yycrank+-4683, yysvec+1435, yyvstop+3307, yycrank+-4686, yysvec+1132, yyvstop+3310, yycrank+-4687, yysvec+1132, yyvstop+3312, yycrank+-4695, yysvec+1291, yyvstop+3314, yycrank+-4689, yysvec+1291, yyvstop+3316, yycrank+-4706, 0, yyvstop+3318, yycrank+-4710, 0, yyvstop+3320, yycrank+-4701, yysvec+1666, yyvstop+3322, yycrank+-4690, yysvec+1447, yyvstop+3324, yycrank+-4703, yysvec+1447, yyvstop+3326, yycrank+-4704, yysvec+1151, yyvstop+3328, yycrank+-4711, yysvec+1151, yyvstop+3331, yycrank+-4712, yysvec+1155, yyvstop+3334, yycrank+-4713, yysvec+1155, yyvstop+3336, yycrank+-4714, yysvec+1158, yyvstop+3338, yycrank+-4716, yysvec+1158, yyvstop+3340, yycrank+-4719, yysvec+1175, yyvstop+3342, yycrank+-4717, yysvec+1175, yyvstop+3344, yycrank+-4718, yysvec+1475, yyvstop+3346, yycrank+-4720, yysvec+1475, yyvstop+3348, yycrank+-4725, yysvec+1336, yyvstop+3350, yycrank+-4723, yysvec+1336, yyvstop+3352, yycrank+-4735, yysvec+1598, yyvstop+3354, yycrank+-4731, yysvec+1686, yyvstop+3356, yycrank+-4760, yysvec+1350, yyvstop+3358, yycrank+-4732, yysvec+1349, yyvstop+3360, yycrank+-4742, yysvec+1349, yyvstop+3362, yycrank+-4750, yysvec+1609, yyvstop+3364, yycrank+-4761, yysvec+1692, yyvstop+3366, yycrank+-4765, yysvec+1364, yyvstop+3368, yycrank+-4748, yysvec+1363, yyvstop+3370, yycrank+-4752, yysvec+1363, yyvstop+3372, yycrank+-4775, yysvec+1620, yyvstop+3374, yycrank+-4782, yysvec+1698, yyvstop+3376, yycrank+-4795, yysvec+1381, yyvstop+3378, yycrank+-4790, yysvec+1380, yyvstop+3380, yycrank+-4755, yysvec+1380, yyvstop+3382, yycrank+-4735, yysvec+1242, yyvstop+3384, yycrank+-4736, yysvec+1242, yyvstop+3387, yycrank+-4760, yysvec+1401, yyvstop+3390, yycrank+-4757, yysvec+1401, yyvstop+3393, yycrank+-4815, yysvec+1448, yyvstop+3396, yycrank+-4791, yysvec+1528, yyvstop+3399, yycrank+-4796, yysvec+1528, yyvstop+3402, yycrank+-4765, yysvec+1259, yyvstop+3405, yycrank+-4739, yysvec+1259, yyvstop+3409, yycrank+-4799, yysvec+1263, yyvstop+3413, yycrank+-4722, yysvec+1263, yyvstop+3416, yycrank+-4816, yysvec+1266, yyvstop+3419, yycrank+-4800, yysvec+1266, yyvstop+3422, yycrank+-4817, yysvec+1277, yyvstop+3425, yycrank+-4820, yysvec+1277, yyvstop+3428, yycrank+-4767, yysvec+1549, yyvstop+3431, yycrank+-4821, yysvec+1549, yyvstop+3434, yycrank+-4822, yysvec+1435, yyvstop+3437, yycrank+-4825, yysvec+1435, yyvstop+3440, yycrank+-3571, yysvec+1291, yyvstop+3443, yycrank+-4830, yysvec+1291, yyvstop+3445, yycrank+-4843, yysvec+1666, yyvstop+3447, yycrank+-4831, yysvec+1729, yyvstop+3449, yycrank+-4844, yysvec+1448, yyvstop+3451, yycrank+-4836, yysvec+1447, yyvstop+3453, yycrank+-4841, yysvec+1447, yyvstop+3455, yycrank+-4839, yysvec+1475, yyvstop+3457, yycrank+-4845, yysvec+1475, yyvstop+3459, yycrank+-4840, yysvec+1336, yyvstop+3461, yycrank+-4846, yysvec+1336, yyvstop+3463, yycrank+-4864, yysvec+1350, yyvstop+3465, yycrank+-4848, yysvec+1349, yyvstop+3467, yycrank+-4849, yysvec+1349, yyvstop+3469, yycrank+-4865, yysvec+1364, yyvstop+3471, yycrank+-4860, yysvec+1363, yyvstop+3473, yycrank+-4857, yysvec+1363, yyvstop+3475, yycrank+-4870, yysvec+1381, yyvstop+3477, yycrank+-4862, yysvec+1380, yyvstop+3479, yycrank+-4871, yysvec+1380, yyvstop+3481, yycrank+-4851, yysvec+1401, yyvstop+3483, yycrank+-4865, yysvec+1401, yyvstop+3486, yycrank+-4882, yysvec+1528, yyvstop+3489, yycrank+-4879, yysvec+1528, yyvstop+3492, yycrank+-4866, yysvec+1549, yyvstop+3495, yycrank+-4870, yysvec+1549, yyvstop+3498, yycrank+-4874, yysvec+1435, yyvstop+3501, yycrank+-4872, yysvec+1435, yyvstop+3504, yycrank+-4883, yysvec+1291, yyvstop+3507, yycrank+-4884, yysvec+1291, yyvstop+3509, yycrank+-4927, yysvec+1448, yyvstop+3511, yycrank+-4890, yysvec+1447, yyvstop+3513, yycrank+-4892, yysvec+1447, yyvstop+3515, yycrank+-4898, yysvec+1475, yyvstop+3517, yycrank+-4889, yysvec+1475, yyvstop+3519, yycrank+-4895, yysvec+1336, yyvstop+3521, yycrank+-4900, yysvec+1336, yyvstop+3523, yycrank+-4906, yysvec+1349, yyvstop+3525, yycrank+-4904, yysvec+1349, yyvstop+3527, yycrank+-4920, yysvec+1363, yyvstop+3529, yycrank+-4922, yysvec+1363, yyvstop+3531, yycrank+-4923, yysvec+1380, yyvstop+3533, yycrank+-4925, yysvec+1380, yyvstop+3535, yycrank+-4921, yysvec+1401, yyvstop+3537, yycrank+-4928, yysvec+1401, yyvstop+3540, yycrank+-4930, yysvec+1528, yyvstop+3543, yycrank+-4931, yysvec+1528, yyvstop+3546, yycrank+-4932, yysvec+1549, yyvstop+3549, yycrank+-4905, yysvec+1549, yyvstop+3552, yycrank+-4933, yysvec+1435, yyvstop+3555, yycrank+-4934, yysvec+1435, yyvstop+3558, yycrank+-4937, yysvec+1447, yyvstop+3561, yycrank+-4945, yysvec+1447, yyvstop+3563, yycrank+-4938, yysvec+1475, yyvstop+3565, yycrank+-4939, yysvec+1475, yyvstop+3567, yycrank+-4961, yysvec+1528, yyvstop+3569, yycrank+-4963, yysvec+1528, yyvstop+3572, yycrank+-4949, yysvec+1549, yyvstop+3575, yycrank+-4947, yysvec+1549, yyvstop+3578, yycrank+-4966, yysvec+1447, yyvstop+3581, yycrank+-4971, yysvec+1447, yyvstop+3583, yycrank+-4956, yysvec+1475, yyvstop+3585, yycrank+-4965, yysvec+1475, yyvstop+3587, yycrank+-4977, yysvec+1528, yyvstop+3589, yycrank+-4979, yysvec+1528, yyvstop+3592, yycrank+-4969, yysvec+1549, yyvstop+3595, yycrank+-4981, yysvec+1549, yyvstop+3598, 0, 0, 0}; struct yywork *yytop = yycrank+5089; struct yysvf *yybgin = yysvec+1; unsigned char yymatch[] = { 00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,011 ,012 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 011 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 0}; char yyextra[] = { 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0}; #ident "$Revision$" int yylineno =1; # define YYU(x) x # define NLSTATE yyprevious=YYNEWLINE char yytext[YYLMAX]; struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp; char yysbuf[YYLMAX]; char *yysptr = yysbuf; int *yyfnd; extern struct yysvf *yyestate; int yyprevious = YYNEWLINE; #if defined(__cplusplus) || defined(__STDC__) int yylook(void) #else yylook() #endif { register struct yysvf *yystate, **lsp; register struct yywork *yyt; struct yysvf *yyz; int yych, yyfirst; struct yywork *yyr; # ifdef LEXDEBUG int debug; # endif char *yylastch; /* start off machines */ # ifdef LEXDEBUG debug = 0; # endif yyfirst=1; if (!yymorfg) yylastch = yytext; else { yymorfg=0; yylastch = yytext+yyleng; } for(;;){ lsp = yylstate; yyestate = yystate = yybgin; if (yyprevious==YYNEWLINE) yystate++; for (;;){ # ifdef LEXDEBUG if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1); # endif yyt = yystate->yystoff; if(yyt == yycrank && !yyfirst){ /* may not be any transitions */ yyz = yystate->yyother; if(yyz == 0)break; if(yyz->yystoff == yycrank)break; } *yylastch++ = yych = input(); #ifndef LONGLINES if(yylastch > &yytext[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } #endif yyfirst=0; tryagain: # ifdef LEXDEBUG if(debug){ fprintf(yyout,"char "); allprint(yych); putchar('\n'); } # endif yyr = yyt; if ( (void *)yyt > (void *)yycrank){ yyt = yyr + yych; if (yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transitions */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; #ifndef LONGLINES if(lsp > &yylstate[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } #endif goto contin; } } # ifdef YYOPTIM else if((void *)yyt < (void *)yycrank) { /* r < yycrank */ yyt = yyr = yycrank+(yycrank-yyt); # ifdef LEXDEBUG if(debug)fprintf(yyout,"compressed state\n"); # endif yyt = yyt + yych; if(yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transitions */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; #ifndef LONGLINES if(lsp > &yylstate[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } #endif goto contin; } yyt = yyr + YYU(yymatch[yych]); # ifdef LEXDEBUG if(debug){ fprintf(yyout,"try fall back character "); allprint(YYU(yymatch[yych])); putchar('\n'); } # endif if(yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transition */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; #ifndef LONGLINES if(lsp > &yylstate[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } #endif goto contin; } } if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){ # ifdef LEXDEBUG if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1); # endif goto tryagain; } # endif else {unput(*--yylastch);break;} contin: # ifdef LEXDEBUG if(debug){ fprintf(yyout,"state %d char ",yystate-yysvec-1); allprint(yych); putchar('\n'); } # endif ; } # ifdef LEXDEBUG if(debug){ fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1); allprint(yych); putchar('\n'); } # endif while (lsp-- > yylstate){ *yylastch-- = 0; if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){ yyolsp = lsp; if(yyextra[*yyfnd]){ /* must backup */ while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){ lsp--; unput(*yylastch--); } } yyprevious = YYU(*yylastch); yylsp = lsp; yyleng = (int)(yylastch-yytext+1); yytext[yyleng] = 0; # ifdef LEXDEBUG if(debug){ fprintf(yyout,"\nmatch "); sprint(yytext); fprintf(yyout," action %d\n",*yyfnd); } # endif return(*yyfnd++); } unput(*yylastch); } if (yytext[0] == 0 /* && feof(yyin) */) { yysptr=yysbuf; return(0); } yyprevious = yytext[0] = input(); if (yyprevious>0) output(yyprevious); yylastch=yytext; # ifdef LEXDEBUG if(debug)putchar('\n'); # endif } } #if defined(__cplusplus) || defined(__STDC__) int yyback(int *p, int m) #else yyback(p, m) int *p; #endif { if (p==0) return(0); while (*p) { if (*p++ == m) return(1); } return(0); } /* the following are only used in the lex library */ #if defined(__cplusplus) || defined(__STDC__) int yyinput(void) #else yyinput() #endif { return(input()); } #if defined(__cplusplus) || defined(__STDC__) void yyoutput(int c) #else yyoutput(c) int c; #endif { output(c); } #if defined(__cplusplus) || defined(__STDC__) void yyunput(int c) #else yyunput(c) int c; #endif { unput(c); }