]> andersk Git - splint.git/commitdiff
- library fixes:
authorevans1629 <evans1629>
Mon, 8 Jul 2002 18:10:24 +0000 (18:10 +0000)
committerevans1629 <evans1629>
Mon, 8 Jul 2002 18:10:24 +0000 (18:10 +0000)
<b>getgrgid, getgrnam, getpwnam</b>
<blockquote>
These functions from grp.h in the Posix and Unix libraries should be
declared to return /*@observer@*/ references.  Reported by Enrico
Scholz.  Fixed in CVS (2002-07-08), will be in 3.0.1.7.
</blockquote>

<b>sys/resource.h</b>
<blockquote>
The sys/resource.h segment of the Unix library was not updated to
SUSv3.  The type of rlim_t, struct rlimit and struct rusage have been
updated.  Reported by Enrico Scholz.  Fixed in CVS (2002-07-08), will be
in 3.0.1.7.
</blockquote>

<b>Standard library missing snprintf</b>
<blockquote>
snprintf is in the unix library, but not the standard library.  It was
added to ISO C99, so should be in the standard library.  Reported by
Olivier L'Heureux.  Fixed in CVS (2002-07-08), will be in 3.0.1.7.
</blockquote>

- parsing support for restrict pointers

- showloadloc to control printing line number for load files

56 files changed:
lib/Makefile.am
lib/Makefile.in
lib/posix.h
lib/standard.h
lib/stdio.h
lib/unix.h
src/Headers/basic.h
src/Headers/cgrammar_tokens.h
src/Headers/forwardTypes.h
src/Headers/lclTypeSpecNode.h
src/Headers/lctype.h
src/Headers/llgrammar_gen.h
src/Headers/llgrammar_gen2.h
src/Headers/mtgrammar_tokens.h
src/Headers/qtype.h
src/Headers/qual.h
src/Headers/qualList.h
src/Headers/sort.h
src/Makefile.am
src/Makefile.in
src/abstract.c
src/cgrammar.c.der
src/cgrammar.y
src/cpplib.c
src/cscanner.l
src/ctype.c
src/fileloc.c
src/flags.c
src/flags.def
src/general.c
src/llgrammar.c.der
src/llgrammar.y
src/llmain.c
src/message.c
src/mtgrammar.c
src/mtgrammar.c.der
src/mtgrammar.y
src/mtscanner.c
src/qtype.c
src/qual.c
src/qualList.c
src/sort.c
src/usymtab_interface.c
test/Makefile.am
test/Makefile.in
test/ansireserved.expect
test/db1.expect
test/db1/Makefile
test/db2/Makefile
test/db3.expect
test/db3/Makefile
test/external.expect
test/libs.expect
test/tainted.expect
test/tainted/Makefile
test/tests2.2.expect

index 74d952721fd906781e64638fcc45d38b7335d217..39e216e84b1635f527cb7f85327fbb73297be7ae 100644 (file)
@@ -1,5 +1,9 @@
 ## Note: starting comments with ## means they don't end up in Makefile
 
+### Make phony, always remake everything.
+
+.PHONY: all standard.lcd standardstrict.lcd posix.lcd posixstrict.lcd unix.lcd unixstrict.lcd
+
 AUTOMAKE_OPTIONS = 1.5 foreign
 
 ## Put these files in $prefix/share/splint/lib
@@ -30,6 +34,8 @@ SPLINT = $(top_builddir)/src/splint$(EXEEXT)
 $(SPLINT):
        cd $(top_builddir)/src; $(MAKE)
 
+all: standard.lcd standardstrict.lcd posix.lcd posixstrict.lcd unix.lcd unixstrict.lcd
+
 standard.lcd: standard.h $(SPLINT)
        -$(SPLINT) -nof -nolib +impconj standard.h -dump standard
        @touch $@
index c7cb49316dcaa3785f55b097f210ac19dae667b7..18df940f6cfbb5c1aa9af701124fb8d8da0e25e3 100644 (file)
@@ -13,6 +13,8 @@
 
 @SET_MAKE@
 
+### Make phony, always remake everything.
+
 SHELL = @SHELL@
 
 srcdir = @srcdir@
@@ -245,9 +247,13 @@ uninstall-am: uninstall-info-am uninstall-splintlibDATA
        uninstall-splintlibDATA
 
 
+.PHONY: all standard.lcd standardstrict.lcd posix.lcd posixstrict.lcd unix.lcd unixstrict.lcd
+
 $(SPLINT):
        cd $(top_builddir)/src; $(MAKE)
 
+all: standard.lcd standardstrict.lcd posix.lcd posixstrict.lcd unix.lcd unixstrict.lcd
+
 standard.lcd: standard.h $(SPLINT)
        -$(SPLINT) -nof -nolib +impconj standard.h -dump standard
        @touch $@
index afac9e471cbbfd1b8791ce471afb0210c304736f..924efa8d2951243d3f17f95e3f03b883d2dc7014 100644 (file)
@@ -229,13 +229,13 @@ struct group {
   char **gr_mem;
 };
 
-       extern /*@null@*/ struct group *
-getgrgid (gid_t gid)
-       /*@modifies errno@*/;
+/* evans 2002-07-09: added observer annotation (reported by Enrico Scholz). */
 
-       extern /*@null@*/ struct group *
-getgrnam (const char *nm)
-       /*@modifies errno@*/;
+/*@observer@*/ /*@null@*/ struct group * getgrgid (gid_t gid)
+   /*@modifies errno@*/;
+
+/*@observer@*/ /*@null@*/ struct group *getgrnam (const char *nm)
+   /*@modifies errno@*/;
 
 /*
 ** limits.h
@@ -301,13 +301,11 @@ struct passwd {
   char *pw_shell;
 } ;
 
-       extern /*@observer@*/ /*@null@*/ struct passwd *
-       getpwnam (const char *)
-       /*@modifies errno@*/  /*@ensures maxRead(result) == 0 /\ maxSet(result) == 0 @*/;
+/*@observer@*/ /*@null@*/ struct passwd *getpwnam (const char *)
+   /*@modifies errno@*/  /*@ensures maxRead(result) == 0 /\ maxSet(result) == 0 @*/;
 
-       extern /*@observer@*/ /*@null@*/ struct passwd *
-getpwuid (uid_t uid)
-       /*@modifies errno@*/  /*@ensures maxRead(result) == 0 /\ maxSet(result) == 0 @*/;
+/*@observer@*/ /*@null@*/ struct passwd *getpwuid (uid_t uid)
+   /*@modifies errno@*/  /*@ensures maxRead(result) == 0 /\ maxSet(result) == 0 @*/;
 
 /*
 ** setjmp.h
@@ -315,13 +313,9 @@ getpwuid (uid_t uid)
 
 typedef /*@abstract@*/ /*@mutable@*/ void *sigjmp_buf;
 
-       extern /*@mayexit@*/ void
-siglongjmp (sigjmp_buf env, int val)
-       /*@*/;
+/*@mayexit@*/ void siglongjmp (sigjmp_buf env, int val)        /*@*/;
 
-       extern int
-sigsetjmp (/*@out@*/ sigjmp_buf env, int savemask)
-       /*@modifies env@*/;
+int sigsetjmp (/*@out@*/ sigjmp_buf env, int savemask) /*@modifies env@*/;
 
 /*
 ** signal.h
index 7e4f55226c27ca6290ff7a8a394d97421697a4d1..6623d8b7823dff17b5a41fb0b5461ed25be167aa 100644 (file)
@@ -520,12 +520,15 @@ int fflush (/*@null@*/ FILE *stream)
 /*@dependent@*/ /*@null@*/ FILE *freopen (char *filename, char *mode, FILE *stream) 
   /*@modifies *stream, fileSystem, errno@*/ ;
 
-extern void setbuf (FILE *stream, /*@null@*/ /*@exposed@*/ /*@out@*/ char *buf) 
-     /*@modifies fileSystem, *stream, *buf@*/ ;
+void setbuf (FILE *stream, /*@null@*/ /*@exposed@*/ /*@out@*/ char *buf) 
+     /*@modifies fileSystem, *stream, *buf@*/ 
+     /*:errorcode != 0*/ ;
+     /*:requires maxSet(buf) >= (BUFSIZ - 1):*/ ;
 
-extern int setvbuf (FILE *stream, /*@null@*/ /*@exposed@*/ /*@out@*/ char *buf, 
-                   int mode, size_t size)
-     /*@modifies fileSystem, *stream, *buf@*/ ;
+int setvbuf (FILE *stream, /*@null@*/ /*@exposed@*/ /*@out@*/ char *buf, 
+            int mode, size_t size)
+      /*@modifies fileSystem, *stream, *buf@*/
+     /*@requires maxSet(buf) >= (size - 1) @*/ ;
 
 # ifdef STRICT
 /*@printflike@*/ 
@@ -539,7 +542,7 @@ int /*@alt void@*/ fprintf (FILE *stream, char *format, ...)
 
 /*@scanflike@*/ 
 int fscanf (FILE *stream, char *format, ...)
-   /*@modifies fileSystem, *stream@*/ ;
+   /*@modifies fileSystem, *stream, errno@*/ ;
 
 # ifdef STRICT
 /*@printflike@*/ 
@@ -556,20 +559,29 @@ int /*@alt void@*/ printf (char *format, ...)
 /*@scanflike@*/
 int scanf(char *format, ...)
    /*@globals stdin@*/
-   /*@modifies fileSystem, *stdin@*/ ;
+   /*@modifies fileSystem, *stdin, errno@*/ ;
+   /*drl added errno 09-19-2001 */ ;
 
 # ifdef STRICT
 /*@printflike@*/ 
 int sprintf (/*@out@*/ char *s, char *format, ...) 
+   /*@warn bufferoverflowhigh "Buffer overflow possible with sprintf.  Recommend using snprintf instead"@*/
    /*@modifies *s@*/ ;
 # else
 /*@printflike@*/ 
 int /*@alt void@*/ sprintf (/*@out@*/ char *s, char *format, ...) 
+   /*@warn bufferoverflowhigh "Buffer overflow possible with sprintf.  Recommend using snprintf instead"@*/
    /*@modifies *s@*/ ;
 # endif
 
+/* evans 2002-07-09: snprintf added to standard.h (from unix.h) */
+/*@printflike@*/
+int snprintf (/*@out@*/ char * restrict s, size_t n, const char * restrict format, ...)
+   /*@modifies s@*/
+   /*@requires maxSet(s) >= (n - 1)@*/ ;
+
 /*@scanflike@*/ 
-int sscanf (/*@out@*/ char *s, char *format, ...) /*@*/ ;
+int sscanf (/*@out@*/ char *s, char *format, ...) /*@modifies errno@*/ ;
    /* modifies extra arguments */
 
 int vprintf (const char *format, va_list arg)
@@ -584,7 +596,7 @@ int vsprintf (/*@out@*/ char *str, const char *format, va_list ap)
      /*@modifies str@*/ ;
 
 int vsnprintf (/*@out@*/ char *str, size_t size, const char *format, va_list ap)
-     /*@requires maxSet(str) >= size@*/
+     /*@requires maxSet(str) >= (size - 1)@*/ /* drl - this was size, size-1 in stdio.h */
      /*@modifies str@*/ ;
 
 int fgetc (FILE *stream) 
@@ -606,9 +618,9 @@ int fputs (char *s, FILE *stream)
 
 /* note use of sef --- stream may be evaluated more than once */
 int getc (/*@sef@*/ FILE *stream)
-  /*@modifies fileSystem, *stream@*/ ;
+  /*@modifies fileSystem, *stream, errno@*/ ;
 
-int getchar (void) /*@globals stdin@*/ /*@modifies fileSystem, *stdin@*/ ;
+int getchar (void) /*@globals stdin@*/ /*@modifies fileSystem, *stdin, errno@*/ ;
 
 /*@null@*/ char *gets (/*@out@*/ char *s) 
    /*@warn bufferoverflowhigh
@@ -617,29 +629,36 @@ int getchar (void) /*@globals stdin@*/ /*@modifies fileSystem, *stdin@*/ ;
 
 int putc (int /*@alt char@*/ c, /*@sef@*/ FILE *stream)
    /*:errorcode EOF:*/
-   /*@modifies fileSystem, *stream;@*/ ;
+   /*@modifies fileSystem, *stream, errno;@*/ ;
 
 int putchar (int /*@alt char@*/ c)
    /*:errorcode EOF:*/
-   /*@globals stdout@*/ /*@modifies fileSystem, *stdout@*/ ; 
+   /*@globals stdout@*/ 
+   /*@modifies fileSystem, *stdout, errno@*/ ; 
 
 int puts (const char *s)
    /*:errorcode EOF:*/
    /*@globals stdout@*/
-   /*@modifies fileSystem, *stdout@*/ ; 
+   /*@modifies fileSystem, *stdout, errno@*/ ; 
 
 int ungetc (int /*@alt char@*/ c, FILE *stream)
-  /*@modifies fileSystem, *stream, errno@*/ ;
+  /*@modifies fileSystem, *stream@*/ ;
+      /*drl REMOVED errno 09-19-2001*/
 
 size_t 
   fread (/*@out@*/ void *ptr, size_t size, size_t nobj, FILE *stream)
-  /*@modifies fileSystem, *ptr, *stream, errno@*/ ;
+  /*@modifies fileSystem, *ptr, *stream, errno@*/ 
+  /*requires maxSet(ptr) >= (size - 1) @*/
+  /*@ensures maxRead(ptr) == (size - 1) @*/ ;
 
 size_t fwrite (void *ptr, size_t size, size_t nobj, FILE *stream)
-  /*@modifies fileSystem, *stream, errno@*/ ;
+  /*@modifies fileSystem, *stream, errno@*/ 
+  /*@requires maxRead(ptr) >= size @*/ ;
 
 int fgetpos (FILE *stream, /*@out@*/ fpos_t *pos)
-  /*@modifies *pos, errno@*/ ;
+   /*@modifies *pos, errno@*/
+   /*@requires maxSet(pos) >= 0@*/
+   /*@ensures maxRead(pos) >= 0 @*/;
 
 int fseek (FILE *stream, long int offset, int whence)
    /*:errorcode -1:*/
index 15f6a55f8e209fc7b2d3e48eeee6a64b723dcdb9..3b8ba176bf127199ad069f6675d847429d32bd39 100644 (file)
+/*
+** stdio.h - Unix Specification
+*/
+
+/*
+** evans 2001-12-30: added from http://www.opengroup.org/onlinepubs/007908799/xsh/stdio.h.html
+*/
+
+/*@constant unsignedintegraltype BUFSIZ@*/ 
+/*@constant unsignedintegraltype FILENAME_MAX@*/
+/*@constant unsignedintegraltype FOPEN_MAX@*/
+/*@constant lltX_bool _IOFBF@*/
+/*@constant lltX_bool _IOLBF@*/
+/*@constant lltX_bool _IONBF@*/
+/*@constant unsignedintegraltype L_ctermid@*/
+/*@constant unsignedintegraltype L_cuserid@*/
+/*@constant unsignedintegraltype L_tmpnam@*/
+/*@constant unsignedintegraltype SEEK_CUR@*/
+/*@constant unsignedintegraltype SEEK_END@*/
+/*@constant unsignedintegraltype SEEK_SET@*/
+/*@constant unsignedintegraltype TMP_MAX@*/
+
+/*@constant observer char *P_tmpdir@*/
+
+void clearerr (FILE *stream) /*@modifies *stream@*/ ;
+
+/*@dependent@*/ char *ctermid (/*@returned@*/ /*@null@*/ char *) /*@*/ ;
+   /* Result may be static pointer if parameter is NULL, otherwise is fresh. */
+
+  //     *@requires maxSet(s) >= ( L_ctermid - 1) @*/ *ensures maxRead(s) <= ( L_ctermid - 1) /\ maxRead(s) >= 0 */
+  /*DRL 9-11-2001 I've modified the definition in ansi.h to remove modifies SystemState and I've added a requires and ensures*/ ;
+  
+/*check returns*/     
+/* cuserid is in the 1988 version of POSIX but removed in 1990 */
 
-/*stuff from the unix specification*/
-
-/*things from stdio.h */
-extern void clearerr (FILE *stream) /*@modifies *stream@*/ ;
-
-extern char * ctermid (/*@returned@*/ /*@out@*/ /*@null@*/ char *s)
-     /*@modifies *s @*/ 
-     //     *@requires maxSet(s) >= ( L_ctermid - 1) @*/ *ensures maxRead(s) <= ( L_ctermid - 1) /\ maxRead(s) >= 0 */
-
-       /*DRL 9-11-001 I've modified the definition in ansi.h to remove modifies SystemState and I've added a requires and ensures*/ ;
-
-      /*check returns*/
-     
-            /* cuserid is in the 1988 version of POSIX but removed in 1990 */
-         extern char *
- cuserid (/*@null@*/ /*@out@*/ char *s)
-         /*@modifies *s@*/
+char *cuserid (/*@null@*/ /*@out@*/ /*@returned@*/ char *s)
+  /*@warn legacy "cuserid is obsolete"@*/ 
+  /*@modifies *s@*/
      // *@requires maxSet(s) >= ( L_ctermid - 1) @*/ *@ensures maxRead(s) <= ( L_ctermid - 1) /\ maxRead(s) >= 0  /\ maxRead(result) <= ( L_ctermid - 1) /\ maxRead(result) >= 0 @*/
-      ;
+     ;
 
-      extern int fclose (FILE *stream) /*@modifies *stream, errno, fileSystem;@*/ ;
+/* in standard.h: int fclose (FILE *stream) @modifies *stream, errno, fileSystem;@ */
   
- extern /*@null@*/ /*@dependent@*/ FILE *fdopen (int fd, const char *type)
+/*@null@*/ /*@dependent@*/ FILE *fdopen (int fd, const char *type)
     /*@modifies errno, fileSystem@*/;
 
- extern int feof (FILE *stream) /*@modifies errno@*/ ;
- extern int ferror (FILE *stream) /*@modifies errno@*/ ;
- extern int fflush (/*@null@*/ FILE *stream) 
-    /*@modifies *stream, errno, fileSystem;@*/ ;
-
- extern int fgetc (FILE *stream) 
-  /*@modifies fileSystem, *stream, errno@*/ ;
-
-  extern int fgetpos (FILE *stream, /*@out@*/ fpos_t *pos)
-      /*@modifies *pos, errno@*/ /*@requires maxSet(pos) >= 0@*/
-      /*@ensures maxRead(pos) >= 0 @*/;
-
-      extern /*@null@*/ char *
-   fgets (/*@returned@*/ /*@out@*/ char *s, int n, FILE *stream)
-     /*@modifies fileSystem, *s, *stream, errno@*/
-     /*@requires MaxSet(s) >= (n -1); @*/
-      /*@ensures MaxRead(s) <= (n -1) /\ MaxRead(s) >= 0; @*/ ;
-
- extern int fileno (FILE *fp) /*@modifies errno@*/;
-
- extern void flockfile (FILE *file) /*@modifies *file, fileSystem@*/ ;
-
-     extern FILE * fopen (char *filename, char *mode)  /*@modifies errno, fileSystem;@*/ ;
-
- # ifdef STRICT
- /*@printflike@*/ 
- extern int fprintf (FILE *stream, char *format, ...)
-    /*@modifies fileSystem, *stream, errno@*/ ;
- # else
- /*@printflike@*/ 
- extern int /*@alt void@*/ fprintf (FILE *stream, char *format, ...)
-    /*@modifies fileSystem, *stream, errno@*/ ;
- # endif
-
-    extern int fputc (int /*@alt char@*/ c, FILE *stream)
-  /*@modifies fileSystem, *stream, errno@*/ ;
-
- extern int fputs (char *s, FILE *stream)
-  /*@modifies fileSystem, *stream, errno@*/ ;
- extern size_t 
-   fread (/*@out@*/ void *ptr, size_t size, size_t nobj, FILE *stream)
-   /*@modifies fileSystem, *ptr, *stream, errno@*/ 
-   /*requires maxSet(ptr) >= (size - 1) @*/ /*@ensures maxRead(ptr) == (size - 1) @*/ 
-      ;
-   extern /*@null@*/ FILE *freopen (char *filename, char *mode, FILE *stream) 
-  /*@modifies *stream, fileSystem, errno@*/ ;
-
-  /*@scanflike@*/ 
- extern int fscanf (FILE *stream, char *format, ...)
-    /*@modifies fileSystem, *stream, errno@*/ ;
- extern int fseek (FILE *stream, long int offset, int whence)
-   /*@modifies fileSystem, *stream, errno@*/ ;
+/* feof, ferror fflush, fgetc, fgetpos, fgets - in standard.h */
 
-  extern int fseeko (FILE *stream, off_t offset, int whence)
-   /*@modifies fileSystem, *stream, errno@*/ ;
-  
- extern int fsetpos (FILE *stream, fpos_t *pos)
-  /*@modifies fileSystem, *stream, errno@*/ ;
-
-  extern long int ftell(FILE *stream) /*@modifies errno@*/ ;
+int fileno (/*@notnull@*/ FILE *)
+  /*:errorcode -1:*/ 
+  /*@modifies errno@*/ ;
 
-  extern off_t ftello(FILE *stream) /*@modifies errno@*/ ;
+void flockfile (/*@notnull@*/ FILE *f)
+   /*@modifies f, fileSystem@*/ ;
 
-  extern void ftrylockfile (FILE *file) /*@modifies *file, fileSystem@*/ ;
- extern void funlockfile (FILE *file) /*@modifies *file, fileSystem;@*/ ;
+/* fopen, fprintf, fputc, fread, frepoen, fscanf, etc. in standard.h */
 
- extern size_t fwrite (void *ptr, size_t size, size_t nobj, FILE *stream)
-  /*@modifies fileSystem, *stream, errno@*/
-      /*@requires maxRead(ptr) >= size @*/;
 
- extern int getc (/*@sef@*/ FILE *stream)
-      /*@modifies fileSystem, *stream, errno@*/ ; /*drl added errno */
+int fseeko (FILE *stream, off_t offset, int whence)
+   /*:errorcode -1:*/
+   /*@modifies stream, errno@*/ ;
 
- extern int getchar (void) /*@globals stdin@*/ /*@modifies fileSystem, *stdin, errno@*/ ; /*drl added errno */
+off_t ftello(FILE *stream)
+   /*:errorcode -1:*/ /*@modifies errno*/ ;
 
- extern int  getc_unlocked (/*@sef@*/ FILE *stream)
-      /*@modifies fileSystem, *stream, errno@*/ ; /*Drl added 09-18-001 */
+int ftrylockfile(FILE *stream)
+   /*:errorcode !0:*/
+   /*@modifies stream, fileSystem, errno*/ ;
 
- extern int getchar_unlocked (void) /*@globals stdin@*/ /*@modifies fileSystem, *stdin, errno@*/ ; /*Drl added 09-18-001 */
+void funlockfile (FILE *stream)
+   /*@modifies stream, fileSystem*/ ;
 
- /*@unchecked@*/ extern char *optarg;
- /*@unchecked@*/ extern int optind;
- /*@unchecked@*/ extern int optopt;
- /*@unchecked@*/ extern int opterr;
- /*@unchecked@*/ extern int optreset;
-
-extern int getopt (int argc, char * const *argv, const char *optstring)
-     /*@globals optarg, optind, optopt, opterr, optreset@*/
-     /*@modifies optarg, optind, optopt@*/
-     /*@requires maxRead(argv) >= (argc - 1) @*/
-     ;
+int getc_unlocked(FILE *stream)
+   /*@warn multithreaded "getc_unlocked is a thread unsafe version of getc"@*/
+   /*@modifies *stream, fileSystem, errno@*/ ;
 
-/*@-bufferoverflowhigh@*/
-extern /*@null@*/ char *gets (/*@out@*/ char *s) 
-     /*@warn bufferoverflowhigh
-       "Use of gets leads to a buffer overflow vulnerability.  Use fgets instead"@*/
-     /*@globals stdin@*/
-     /*@modifies fileSystem, *s, *stdin, errno@*/ ;
-     
-extern int getw (FILE *stream) 
-     /*@modifies fileSystem, *stream, errno@*/ ; /*drl added 09-18-001 */ /*legacy */ 
-
-extern int pclose (FILE *stream) /*@modifies fileSystem, *stream, errno@*/ ;
-
-extern void perror (/*@null@*/ char *s) 
-   /*@globals errno, stderr@*/ /*@modifies fileSystem, *stderr@*/ ; 
-
-extern /*@dependent@*/ /*@null@*/ FILE *popen (char *command, char *ttype)
-    /*@modifies fileSystem, errno@*/ ;
-
- # ifdef STRICT
- /*@printflike@*/ 
- extern int printf (char *format, ...) 
-    /*@globals stdout@*/
-    /*@modifies fileSystem, *stdout@*/ ;
- # else
- /*@printflike@*/ 
- extern int /*@alt void@*/ printf (char *format, ...) 
-    /*@globals stdout@*/
-    /*@modifies fileSystem, *stdout@*/ ;
- # endif
-
- extern int putc (int /*@alt char@*/ c, /*@sef@*/ FILE *stream)
-   /*@modifies fileSystem, *stream, errno;@*/
-      /*drl added errno 09-18-001 */ ;
-
-      extern int putchar (int /*@alt char@*/ c)
-      /*@globals stdout@*/ /*@modifies fileSystem, *stdout, errno@*/
-      /*drl added errno 09-18-001 */ ; 
-
-      extern int putc_unlocked (int /*@alt char@*/ c, /*@sef@*/ FILE *stream)
-   /*@modifies fileSystem, *stream, errno;@*/
-  /*Drl added 09-19-001 */ ;
-
-      extern int putchar_unlocked (int /*@alt char@*/ c)
-      /*@globals stdout@*/ /*@modifies fileSystem, *stdout, errno@*/
-    /*Drl added 09-19-001 */ ;
-
-    extern int puts (const char *s)
-   /*@globals stdout@*/ /*@modifies fileSystem, *stdout, errno@*/
-    /*drl added errno 09-19-001 */ ;
-     
-      
-   extern int putw(int w, FILE *stream)
-  /*@modifies fileSystem, *stream, errno@*/ 
-      /*Drl added 09-19-001 */ /*legacy*/ ;
-
-    extern int remove (char *filename) /*@modifies fileSystem, errno@*/ ;
-
-    extern int rename (char *old, char *new) /*@modifies fileSystem, errno@*/
-  ;
- extern void rewind (FILE *stream) /*@modifies *stream, fileSystem, errno@*/ 
-  /*drl added errno AND fileSystem 09-19-001 */ ;
-  
- /*@scanflike@*/
- extern int scanf(char *format, ...)
+int getchar_unlocked (void)
+   /*@warn multithreaded "getchar_unlocked is a thread unsafe version of getchar"@*/
    /*@globals stdin@*/
-  /*@modifies fileSystem, *stdin, errno@*/
-  /*drl added errno 09-19-001 */ ;
-
-  extern void setbuf (FILE *stream, /*@null@*/ /*@exposed@*/ /*@out@*/ char *buf) 
-    /*@modifies fileSystem, *stream, *buf@*/ 
-     // *@requires maxSet(buf) >= (BUFSIZ - 1) @*/
-     ;
-
-     extern int setvbuf (FILE *stream, /*@null@*/ /*@exposed@*/ /*@out@*/ char *buf, 
-            int mode, size_t size)
-      /*@modifies fileSystem, *stream, *buf@*/  /*@requires maxSet(buf) >= (size - 1) @*/ ;
-
- # ifdef STRICT
- /*@printflike@*/ 
- extern int snprintf (/*@out@*/ char *s,  size_t n, char *format, ...) 
-    /*@modifies *s@*/
-
-      /*@requires maxSet(s) >= (n - 1) @*/
-      ;
-     
- # else
+   /*@modifies *stdin, fileSystem@*/ ;
+
+/*@unchecked@*/ char *optarg;
+/*@unchecked@*/ int optind;
+/*@unchecked@*/ int optopt;
+/*@unchecked@*/ int opterr;
+/*@unchecked@*/ int optreset;
+
+int getopt (int argc, char * const *argv, const char *optstring)
+   /*@warn legacy@*/ 
+   /*@globals optarg, optind, optopt, opterr, optreset@*/
+   /*@modifies optarg, optind, optopt@*/
+   /*@requires maxRead(argv) >= (argc - 1) @*/
+   ;
+
+int getw (FILE *stream)
+   /*@warn legacy@*/ 
+   /*:errorcode EOF:*/
+   /*@modifies fileSystem, *stream, errno@*/ ;
 
-    /*@printflike@*/ 
- extern int /*@alt void@*/ snprintf (/*@out@*/ char *s, size_t n, char *format, ...) 
-    /*@modifies *s@*/
-     /*@requires maxSet(s) >= (n - 1) @*/
-      ;
- # endif
+int pclose(FILE *stream)
+   /*:errorcode -1:*/
+   /*@modifies fileSystem, *stream, errno@*/ ;
 
-   
- # ifdef STRICT
- /*@printflike@*/ 
- extern int sprintf (/*@out@*/ char *s, char *format, ...) 
-    /*@modifies *s@*/ ;
- # else
+/*@dependent@*/ /*@null@*/ FILE *popen (const char *command, const char *mode)
+   /*:errorcode NULL:*/
+   /*@modifies fileSystem, errno@*/ ;
 
-    /*@printflike@*/ 
- extern int /*@alt void@*/ sprintf (/*@out@*/ char *s, char *format, ...) 
-    /*@modifies *s@*/ ;
+int putc_unlocked (int, FILE *stream)
+   /*@warn multithreaded "putc_unlocked is a thread unsafe version of putc"@*/
+   /*:errorcode EOF:*/
+   /*@modifies fileSystem, *stream, errno@*/ ;
 
- # endif
+int putchar_unlocked(int)
+   /*@warn multithreaded "putchar_unlocked is a thread unsafe version of putchar"@*/
+   /*:errorcode EOF:*/
+   /*@modifies fileSystem, *stdout, errno@*/ ;
 
-    /*@scanflike@*/
-    int sscanf (/*@out@*/ char *s, char *format, ...) 
-    /* modifies extra arguments */ /*@modifies errno@*/
-  /*drl added errno 09-19-001 */ ;
+int putw(int, FILE *stream)
+   /*@warn legacy@*/ 
+   /*:errorcode EOF:*/
+   /*@modifies fileSystem, *stdout, errno@*/ ;
 
+int remove (char *filename) /*@modifies fileSystem, errno@*/ ;
+int rename (char *old, char *new) /*@modifies fileSystem, errno@*/ ;
+void rewind (FILE *stream) /*@modifies *stream, fileSystem, errno@*/ ;
+  
+/* evans 2002-07-09: snprintf moved to standard.h (its in ISO C99 now) */
 
- extern /*@null@*/ char *tempnam (char *dir, /*@null@*/ char *pfx) 
+/*@null@*/ char *tempnam (char *dir, /*@null@*/ char *pfx) 
     /*@modifies internalState, errno@*/
-      /*@ensures maxSet(result) >= 0 /\ maxRead(result) >= 0 @*/
-      /*warn that "Between the time a pathname is created and the file is opened, it is possible
-      for some other process to create a file with the same name. Applications may find tmpfile()
-      more useful. " */
-     
-      /*drl added errno 09-19-001 */
-
-      ;
+    /*@ensures maxSet(result) >= 0 /\ maxRead(result) >= 0 @*/
+    /*@warn toctou "Between the time a pathname is created and the file is opened, it is possible for some other process to create a file with the same name. Use tmpfile instead."*/
+    /*drl added errno 09-19-001 */
+    ;
 
 
- extern /*@null@*/ FILE *tmpfile (void) /*@modifies fileSystem, errno@*/
- /*drl added errno 09-19-001 */
-      ;
+/*@null@*/ FILE *tmpfile (void) 
+   /*@modifies fileSystem, errno@*/
+   /*drl added errno 09-19-001 */
+   ;
 
- extern /*@observer@*/ char *
- tmpnam (/*@out@*/ /*@null@*/ /*@returned@*/ char *s) 
+/*@observer@*/ char *tmpnam (/*@out@*/ /*@null@*/ /*@returned@*/ char *s) 
    /*@modifies *s, internalState @*/
-     //      *@requires maxSet(s) >= (L_tmpnam - 1) @*
-      /*warn Between the time a pathname is created and the file is opened, it is possible for some other
-        process to create a file with the same name. Applications may find tmpfile() more useful. */
-      ;
-     
- extern int ungetc (int /*@alt char@*/ c, FILE *stream)
-  /*@modifies fileSystem, *stream @*/
-
-      /*drl REMOVED errno 09-19-001*/
-      ;
-
-      int vfprintf (FILE *stream, char *format, va_list arg)
-    /*@modifies fileSystem, *stream, arg, errno@*/ ;
-
- int  vprintf (const char *format, va_list arg)
-    /*@globals stdout@*/
-    /*@modifies fileSystem, *stdout@*/ ;
-
- int vsnprintf (/*@out@*/ char *str, size_t size, const char *format, va_list ap)
-     /*@modifies str@*/ 
-     /*@requires maxSet(str) >= (size - 1) @*/ ;
-
-int vsprintf (/*@out@*/ char *str, const char *format, va_list ap)
-     /*@warn bufferoverflowhigh "Use vsnprintf instead"@*/
-     /*@modifies str@*/  ;
+   //      *@requires maxSet(s) >= (L_tmpnam - 1) @*
+   /*@warn toctou "Between the time a pathname is created and the file is opened, another process may create a file with the same name. Use tmpfile instead."*/
+   ;
      
-extern char  *optarg; 
-extern int    opterr; 
-extern int    optind;  /*(LEGACY)*/
-extern int    optopt;   
 
index 55090601e3009f5888ebbee06726789773a3c4cb..627bb30693d7adad22a9a73a0b923e0c1c9af1dc 100644 (file)
@@ -264,7 +264,6 @@ typedef char *addr_t;
 typedef long physadr_t;
 typedef short cnt_t;
 typedef        int chan_t;     
-typedef unsigned long rlim_t;
 typedef        int paddr_t;
 typedef        void *mid_t;
 typedef char slab_t[12];       
@@ -1168,153 +1167,11 @@ extern int shmdt (void *addr)
 extern int shmget (key_t key, int size, int flag)
      /*@modifies errno@*/ ;
 
-# if 0
-     /*
-     ** this is in stdio.h!
-     */
-
-/*
-** stdio.h
-*/
 
 /*
-** evans 2001-12-30: added from http://www.opengroup.org/onlinepubs/007908799/xsh/stdio.h.html
+** stdio.h - in separte file stdio.h
 */
 
-/*@constant unsignedintegraltype BUFSIZ@*/ 
-/*@constant unsignedintegraltype FILENAME_MAX@*/
-/*@constant unsignedintegraltype FOPEN_MAX@*/
-/*@constant bool _IOFBF@*/
-/*@constant bool _IOLBF@*/
-/*@constant bool _IONBF@*/
-/*@constant unsignedintegraltype L_ctermid@*/
-/*@constant unsignedintegraltype L_cuserid@*/
-/*@constant unsignedintegraltype L_tmpnam@*/
-/*@constant unsignedintegraltype SEEK_CUR@*/
-/*@constant unsignedintegraltype SEEK_END@*/
-/*@constant unsignedintegraltype SEEK_SET@*/
-/*@constant unsignedintegraltype TMP_MAX@*/
-
-/* EOF */
-/* NULL */
-
-/*@constant observer char *P_tmpdir@*/
-
-void clearerr (FILE *s) 
-   /*@modifies s@*/ ;
-
-/*@dependent@*/ char *ctermid (/*@returned@*/ /*@null@*/ char *) /*@*/ ;
-   /* Result may be static pointer if parameter is NULL, otherwise is fresh. */
-
-char *cuserid (/*@null@*/ /*@returned@*/ char *) 
-  /*@warn legacy "cuserid is obsolete"@*/ /*@*/ ;
-
-/* fclose in standard.h */
-
-/*@null@*/ FILE *fdopen (int, const char *)
-  /*@modifies errno, fileSystem@*/ ;
-
-/* feof, ferror fflush, fgetc, fgetpos, fgets - in standard.h */
-
-int fileno (/*@notnull@*/ FILE *)
-  /*:errorcode -1:*/ 
-  /*@modifies errno@*/ ;
-
-void flockfile (/*@notnull@*/ FILE *f)
-   /*@modifies f, fileSystem@*/ ;
-
-int fseeko (FILE *stream, off_t offset, int whence)
-   /*:errorcode -1:*/
-   /*@modifies stream, errno@*/ ;
-
-off_t ftello(FILE *stream)
-   /*:errorcode -1:*/ /*@modifies errno*/ ;
-
-int ftrylockfile(FILE *stream)
-   /*:errorcode !0:*/
-   /*@modifies stream, fileSystem, errno*/ ;
-
-void funlockfile (FILE *stream)
-   /*@modifies stream, fileSystem*/ ;
-
-int getc_unlocked(FILE *stream)
-   /*@warn multithreaded "getc_unlocked is a thread unsafe version of getc"@*/
-   /*@modifies *stream, fileSystem, errno@*/ ;
-
-int getchar_unlocked (void)
-   /*@warn multithreaded "getchar_unlocked is a thread unsafe version of getchar"@*/
-   /*@globals stdin@*/
-   /*@modifies *stdin, fileSystem@*/ ;
-
-int getopt (int, char * const[], const char)
-   /*@warn legacy@*/ ;
-
-int getw (FILE *stream)
-   /*:errorcode EOF:*/
-   /*@modifies fileSystem, *stream, errno@*/ ;
-
-int pclose(FILE *stream)
-   /*:errorcode -1:*/
-   /*@modifies *stream, errno@*/ ;
-
-/*@null@*/ FILE *popen (const char *command, const char *mode)
-   /*:errorcode NULL:*/
-   /*@modifies fileSystem, errno@*/ ;
-
-int putc_unlocked (int, FILE *stream)
-   /*@warn multithreaded "putc_unlocked is a thread unsafe version of putc"@*/
-   /*:errorcode EOF:*/
-   /*@modifies fileSystem, *stream, errno@*/ ;
-
-int putchar_unlocked(int)
-   /*@warn multithreaded "putchar_unlocked is a thread unsafe version of putchar"@*/
-   /*:errorcode EOF:*/
-   /*@modifies fileSystem, *stdout, errno@*/ ;
-
-int putw(int, FILE *stream)
-   /*:errorcode EOF:*/
-   /*@modifies fileSystem, *stdout, errno@*/ ;
-
-int remove (const char *)
-   /*@modifies fileSystem@*/ ;
-
-int rename (const char *, const char *)
-   /*@modifies fileSystem@*/ ;
-
-void rewind (FILE *stream)
-   /*@modifies *stream@*/ ;
-
-void setbuf (FILE *stream, /*@null@*/ /*@dependent@*/ /*@exposed@*/ char *buf)
-     /*@modifies stream@*/
-
-int setvbuf (FILE *stream, /*@null@*/ /*@dependent@*/ /*@exposed@*/ char *buf, int type, size_t size)
-     /*@modifies stream@*/ 
-     /*:errorcode !0:*/ ;
-     
-int snprintf (char *s, size_t n, const char *format, ...);
-
-     int      sprintf(char *, const char *, ...);
-     int      sscanf(const char *, const char *, int ...);
-     char    *tempnam(const char *, const char *);
-     FILE    *tmpfile(void);
-     char    *tmpnam(char *);
-     int      ungetc(int, FILE *);
-     int      vfprintf(FILE *, const char *, va_list);
-     int      vprintf(const char *, va_list);
-     int      vsnprintf(char *, size_t, const char *, va_list);
-     int      vsprintf(char *, const char *, va_list);
-
-
-     The following external variables are defined: 
-
-
-     extern char  *optarg;    )
-     extern int    opterr;    )
-     extern int    optind;    ) (LEGACY)
-     extern int    optopt;    )
-
-# endif
-
 /*
 ** syslog.h
 */
@@ -1397,29 +1254,20 @@ setpassent (int stayopen)
 setpwent (void)
        /*@modifies internalState@*/;
 
-/*________________________________________________________________________
- * grp.h
- */
+/*
+** grp.h
+*/
 
-       extern void
-endgrent (void)
-       /*@modifies internalState@*/;
+void endgrent (void) /*@modifies internalState@*/;
 
-       extern /*@null@*/ struct group *
-getgrent (void)
-       /*@modifies internalState@*/;
+/*@null@*/ /*@observer@*/ struct group *getgrent (void)
+   /*@modifies internalState@*/;
 
-       extern int
-setgrent (void)
-       /*@modifies internalState@*/;
+int setgrent (void) /*@modifies internalState@*/;
 
-       extern void
-setgrfile (const char *name)
-       /*@modifies internalState@*/;
+void setgrfile (const char *name) /*@modifies internalState@*/;
 
-       extern int
-setgroupent (int stayopen)
-       /*@modifies internalState@*/;
+int setgroupent (int stayopen) /*@modifies internalState@*/;
 
 /*
 ** sys/stat.h
@@ -1608,78 +1456,59 @@ putmsg (int fd, const struct strbuf *c, const struct strbuf *d, int *f)
 extern int putpmsg (int fd, const struct strbuf *c, const struct strbuf *d, int b, int *f)
    /*@modifies internalState, errno@*/;
 
-/*________________________________________________________________________
- * sys/resource.h
- */
+/*
+** sys/resource.h
+**
+** Update 2002-07-09 from
+** http://www.opengroup.org/onlinepubs/007904975/basedefs/sys/resource.h.html
+*/
 
-/*@constant int RLIMIT_CPU@*/
-/*@constant int RLIMIT_FSIZE@*/
-/*@constant int RLIMIT_DATA@*/
-/*@constant int RLIMIT_STACK@*/
-/*@constant int RLIMIT_CORE@*/
-/*@constant int RLIMIT_RSS@*/
-/*@constant int RLIMIT_MEMLOCK@*/
-/*@constant int RLIMIT_NPROC@*/
-/*@constant int RLIMIT_NOFILE@*/
-/*@constant int RLIM_NLIMITS@*/
-/*@constant int RLIM_INFINITY@*/
-/*@constant int PRIO_MIN@*/
-/*@constant int PRIO_MAX@*/
 /*@constant int PRIO_PROCESS@*/
 /*@constant int PRIO_PGRP@*/
 /*@constant int PRIO_USER@*/
+
+typedef /*@unsignedintegraltype@*/ rlim_t;
+
+/*@constant rlim_t RLIM_INFINITY@*/
+/*@constant rlim_t RLIM_SAVED_MAX@*/
+/*@constant rlim_t RLIM_SAVED_CUR@*/
+
 /*@constant int RUSAGE_SELF@*/
 /*@constant int RUSAGE_CHILDREN@*/
 
- struct rusage {
-       struct timeval ru_utime;        /* user time used */
-       struct timeval ru_stime;        /* system time used */
-       long    ru_maxrss;              /* max resident set size */
-       long    ru_ixrss;               /* integral shared memory size */
-       long    ru_idrss;               /* integral unshared data " */
-       long    ru_isrss;               /* integral unshared stack " */
-       long    ru_minflt;              /* page reclaims */
-       long    ru_majflt;              /* page faults */
-       long    ru_nswap;               /* swaps */
-       long    ru_inblock;             /* block input operations */
-       long    ru_oublock;             /* block output operations */
-       long    ru_msgsnd;              /* messages sent */
-       long    ru_msgrcv;              /* messages received */
-       long    ru_nsignals;            /* signals received */
-       long    ru_nvcsw;               /* voluntary context switches */
-       long    ru_nivcsw;              /* involuntary " */
+struct rlimit {
+  rlim_t rlim_cur;
+  rlim_t rlim_max;
 };
 
- struct rlimit {
-       long  rlim_cur;
-       long  rlim_max;
+struct rusage {
+  struct timeval ru_utime;        /* user time used */
+  struct timeval ru_stime;        /* system time used */
+  /* other members optional */
 };
 
- struct loadavg {
-       unsigned long ldavg[3];
-       long fscale;
-};
-
-       extern int
-getpriority (int which, int who)
-       /*@modifies errno@*/;
+/*@constant int RLIMIT_CORE@*/
+/*@constant int RLIMIT_CPU@*/
+/*@constant int RLIMIT_DATA@*/
+/*@constant int RLIMIT_FSIZE@*/
+/*@constant int RLIMIT_NOFILE@*/
+/*@constant int RLIMIT_STACK@*/
+/*@constant int RLIMIT_AS@*/
 
-       extern int
-getrlimit (int res, /*@out@*/ struct rlimit *rlp)
-       /*@modifies *rlp, errno@*/;
+int getpriority (int which, id_t who)
+   /*@modifies errno@*/;
 
-       extern int
-getrusage (int who, /*@out@*/ struct rusage *rusage)
-       /*@modifies *rusage, errno@*/;
+int getrlimit (int res, /*@out@*/ struct rlimit *rlp)
+   /*@modifies *rlp, errno@*/;
 
-       extern int
-setpriority (int which, int who, int prio)
-       /*@modifies errno, internalState@*/;
+int getrusage (int who, /*@out@*/ struct rusage *rusage)
+   /*@modifies *rusage, errno@*/;
 
-       extern int
-setrlimit (int resource, const struct rlimit *rlp)
-       /*@modifies errno, internalState@*/;
+int setpriority (int which, id_t who, int prio)
+   /*@modifies errno, internalState@*/;
 
+int setrlimit (int resource, const struct rlimit *rlp)
+   /*@modifies errno, internalState@*/;
 
 /*
 ** in <netdb.h>
index b6007cd5991ed983e2bbd15cc6514d50f365251a..28fdd54132ced3da44909ad5a63750b172b046f3 100644 (file)
@@ -47,6 +47,7 @@
 # include "fileLib.h"
 # include "inputStream.h"
 # include "qualList.h"
+# include "pointers.h"
 
 # ifndef NOLCL
 # include "code.h"
index 5b35185c8e3bfe14f6e6389eedb3014ad79a767b..569def26ed973c9c5a152402c12db57014aa82f2 100644 (file)
@@ -67,7 +67,7 @@ typedef union
   /*@only@*/ modifiesClause modsclause;
   /*@only@*/ warnClause warnclause;
   /*@only@*/ stateClause stateclause;
-
+  /*@only@*/ pointers pointers;
   /*@only@*/ functionConstraint fcnconstraint; 
 
   /*@only@*/ metaStateConstraint msconstraint;
@@ -209,88 +209,89 @@ typedef union
 #define        QMESSAGELIKE    363
 #define        QNOTREACHED     364
 #define        QCONST  365
-#define        QVOLATILE       366
-#define        QINLINE 367
-#define        QEXTENSION      368
-#define        QEXTERN 369
-#define        QSTATIC 370
-#define        QAUTO   371
-#define        QREGISTER       372
-#define        QOUT    373
-#define        QIN     374
-#define        QYIELD  375
-#define        QONLY   376
-#define        QTEMP   377
-#define        QSHARED 378
-#define        QREF    379
-#define        QUNIQUE 380
-#define        QCHECKED        381
-#define        QUNCHECKED      382
-#define        QCHECKEDSTRICT  383
-#define        QCHECKMOD       384
-#define        QKEEP   385
-#define        QKEPT   386
-#define        QPARTIAL        387
-#define        QSPECIAL        388
-#define        QOWNED  389
-#define        QDEPENDENT      390
-#define        QRETURNED       391
-#define        QEXPOSED        392
-#define        QNULL   393
-#define        QOBSERVER       394
-#define        QISNULL 395
-#define        QEXITS  396
-#define        QMAYEXIT        397
-#define        QNEVEREXIT      398
-#define        QTRUEEXIT       399
-#define        QFALSEEXIT      400
-#define        QLONG   401
-#define        QSIGNED 402
-#define        QUNSIGNED       403
-#define        QSHORT  404
-#define        QUNUSED 405
-#define        QSEF    406
-#define        QNOTNULL        407
-#define        QRELNULL        408
-#define        QABSTRACT       409
-#define        QCONCRETE       410
-#define        QMUTABLE        411
-#define        QIMMUTABLE      412
-#define        QTRUENULL       413
-#define        QFALSENULL      414
-#define        QEXTERNAL       415
-#define        QREFCOUNTED     416
-#define        QREFS   417
-#define        QNEWREF 418
-#define        QTEMPREF        419
-#define        QKILLREF        420
-#define        QRELDEF 421
-#define        CGCHAR  422
-#define        CBOOL   423
-#define        CINT    424
-#define        CGFLOAT 425
-#define        CDOUBLE 426
-#define        CVOID   427
-#define        QANYTYPE        428
-#define        QINTEGRALTYPE   429
-#define        QUNSIGNEDINTEGRALTYPE   430
-#define        QSIGNEDINTEGRALTYPE     431
-#define        QNULLTERMINATED 432
-#define        QSETBUFFERSIZE  433
-#define        QSETSTRINGLENGTH        434
-#define        QMAXSET 435
-#define        QMAXREAD        436
-#define        QTESTINRANGE    437
-#define        TCAND   438
-#define        IDENTIFIER      439
-#define        NEW_IDENTIFIER  440
-#define        TYPE_NAME_OR_ID 441
-#define        CANNOTATION     442
-#define        CCONSTANT       443
-#define        ITER_NAME       444
-#define        ITER_ENDNAME    445
-#define        TYPE_NAME       446
-#define        METASTATE_NAME  447
+#define        QRESTRICT       366
+#define        QVOLATILE       367
+#define        QINLINE 368
+#define        QEXTENSION      369
+#define        QEXTERN 370
+#define        QSTATIC 371
+#define        QAUTO   372
+#define        QREGISTER       373
+#define        QOUT    374
+#define        QIN     375
+#define        QYIELD  376
+#define        QONLY   377
+#define        QTEMP   378
+#define        QSHARED 379
+#define        QREF    380
+#define        QUNIQUE 381
+#define        QCHECKED        382
+#define        QUNCHECKED      383
+#define        QCHECKEDSTRICT  384
+#define        QCHECKMOD       385
+#define        QKEEP   386
+#define        QKEPT   387
+#define        QPARTIAL        388
+#define        QSPECIAL        389
+#define        QOWNED  390
+#define        QDEPENDENT      391
+#define        QRETURNED       392
+#define        QEXPOSED        393
+#define        QNULL   394
+#define        QOBSERVER       395
+#define        QISNULL 396
+#define        QEXITS  397
+#define        QMAYEXIT        398
+#define        QNEVEREXIT      399
+#define        QTRUEEXIT       400
+#define        QFALSEEXIT      401
+#define        QLONG   402
+#define        QSIGNED 403
+#define        QUNSIGNED       404
+#define        QSHORT  405
+#define        QUNUSED 406
+#define        QSEF    407
+#define        QNOTNULL        408
+#define        QRELNULL        409
+#define        QABSTRACT       410
+#define        QCONCRETE       411
+#define        QMUTABLE        412
+#define        QIMMUTABLE      413
+#define        QTRUENULL       414
+#define        QFALSENULL      415
+#define        QEXTERNAL       416
+#define        QREFCOUNTED     417
+#define        QREFS   418
+#define        QNEWREF 419
+#define        QTEMPREF        420
+#define        QKILLREF        421
+#define        QRELDEF 422
+#define        CGCHAR  423
+#define        CBOOL   424
+#define        CINT    425
+#define        CGFLOAT 426
+#define        CDOUBLE 427
+#define        CVOID   428
+#define        QANYTYPE        429
+#define        QINTEGRALTYPE   430
+#define        QUNSIGNEDINTEGRALTYPE   431
+#define        QSIGNEDINTEGRALTYPE     432
+#define        QNULLTERMINATED 433
+#define        QSETBUFFERSIZE  434
+#define        QSETSTRINGLENGTH        435
+#define        QMAXSET 436
+#define        QMAXREAD        437
+#define        QTESTINRANGE    438
+#define        TCAND   439
+#define        IDENTIFIER      440
+#define        NEW_IDENTIFIER  441
+#define        TYPE_NAME_OR_ID 442
+#define        CANNOTATION     443
+#define        CCONSTANT       444
+#define        ITER_NAME       445
+#define        ITER_ENDNAME    446
+#define        TYPE_NAME       447
+#define        METASTATE_NAME  448
 
 
 extern YYSTYPE yylval;
index 73407d6b66b309130635b1e8c73fe862c2afef9b..396363868f1909330aa5f695daf74fc4fedd6aa5 100644 (file)
@@ -24,6 +24,7 @@ abst_typedef /*@null@*/ struct s_genericTable *genericTable;
 abst_typedef /*@null@*/ struct s_annotationInfo *annotationInfo;
 abst_typedef /*@null@*/ struct s_inputStream *inputStream;
 abst_typedef /*@null@*/ struct s_stateValue *stateValue;
+abst_typedef /*@null@*/ struct s_pointers *pointers;
 abst_typedef /*@null@*/ genericTable valueTable;
 abst_typedef /*@null@*/ genericTable metaStateTable;
 abst_typedef /*@null@*/ genericTable annotationTable;
index b3e8841de900aecda0e677e1c9b67ecc7eb8f080..f0a2f99fab5bea4c0a9374b246886e2713476fa1 100644 (file)
@@ -27,7 +27,7 @@ struct s_lclTypeSpecNode {
     /*@null@*/ enumSpecNode enumspec;
     lclconj conj;
   } content;
-  int pointers;
+  pointers pointers;
 } ;
 
 /*@constant null lclTypeSpecNode lclTypeSpecNode_undefined; @*/
index f5357e7dccbf9b8eff63c244097681b1de52b76b..3288b34c296eaf0bc46fecf8ec09381ab4c96b76 100644 (file)
@@ -232,7 +232,7 @@ extern ctkind ctkind_fromInt (int p_i) /*@*/ ;
 
 extern bool ctype_matchDef (ctype p_c1, ctype p_c2) /*@*/ ;
 extern ctype ctype_undump (char **p_c);
-extern ctype ctype_adjustPointers(int p_np, ctype p_c);
+extern ctype ctype_adjustPointers (pointers p_p, ctype p_c);
 extern ctype ctype_baseArrayPtr (ctype p_c) /*@*/ ;
 extern ctype ctype_combine (ctype p_dominant, ctype p_modifier) ;
 
index 254dde526a9c3f5b8995f4fec6cbadf796a8ae7f..73040141781a57b5fb0121b34acbc473c18bd31e 100644 (file)
@@ -87,6 +87,7 @@ typedef union
   /*@only@*/ abstBodyNode abstbody;
   /*@only@*/ abstractNode abstract;
   /*@only@*/ exposedNode exposed;
+  /*@only@*/ pointers pointers;
   /*    taggedUnionNode taggedunion; */
   /*@only@*/ globalList globals;
   /*@only@*/ constDeclarationNode constdeclaration;
index 254dde526a9c3f5b8995f4fec6cbadf796a8ae7f..73040141781a57b5fb0121b34acbc473c18bd31e 100644 (file)
@@ -87,6 +87,7 @@ typedef union
   /*@only@*/ abstBodyNode abstbody;
   /*@only@*/ abstractNode abstract;
   /*@only@*/ exposedNode exposed;
+  /*@only@*/ pointers pointers;
   /*    taggedUnionNode taggedunion; */
   /*@only@*/ globalList globals;
   /*@only@*/ constDeclarationNode constdeclaration;
index 5926962ec633e5be4dd5043f9fd03ac7e0dd6960..620f9285b27723f4d5af71c217a8e0b6564e52ef 100644 (file)
@@ -71,11 +71,12 @@ typedef union {
   mtTransferAction mttransferaction;
   mtLoseReferenceList mtlosereferencelist;
   mtLoseReference mtlosereference;
-
+  pointers pointers;
   /*@only@*/ cstringList cstringlist;
   ctype ctyp;
   /*@only@*/ qtype qtyp;
-  int count;
+  qual qual;
+  qualList quals;
 } YYSTYPE;
 #define        MT_BADTOK       257
 #define        MT_END  258
@@ -121,8 +122,9 @@ typedef union {
 #define        MT_SIGNEDINTEGRALTYPE   298
 #define        MT_CONST        299
 #define        MT_VOLATILE     300
-#define        MT_STRINGLIT    301
-#define        MT_IDENT        302
+#define        MT_RESTRICT     301
+#define        MT_STRINGLIT    302
+#define        MT_IDENT        303
 
 /*
 ** Resets all flags in bison.head
index d4682dbb89be7d78cd66b6e7b8d0d1769c1d9bc2..208e332a7c1d47246f578cab6edd8143ae767840 100644 (file)
@@ -51,7 +51,7 @@ extern qtype qtype_combine (/*@returned@*/ qtype p_q1, ctype p_ct);
 extern qtype qtype_mergeAlt (/*@returned@*/ qtype p_q1, /*@only@*/ qtype p_q2);
 
 extern qtype qtype_resolve (/*@returned@*/ qtype p_q);
-extern void qtype_adjustPointers (int p_n, /*@returned@*/ qtype p_q);
+extern void qtype_adjustPointers (/*@only@*/ pointers p_n, /*@returned@*/ qtype p_q);
 extern /*@only@*/ cstring qtype_unparse (qtype p_q) /*@*/ ;
 extern qtype qtype_newBase (/*@returned@*/ qtype p_q, ctype p_ct);
 extern qtype qtype_newQbase (/*@returned@*/ qtype p_q1, qtype p_q2);
index 6d36fb2fbfa7a2b41af35f97351cb55b346b7b0d..646e8abcc2acd19237be8a121b64308c85171010 100644 (file)
@@ -19,8 +19,9 @@
 
 typedef enum { 
   QU_UNKNOWN = 0,
-  QU_CONST, QU_VOLATILE, QU_INLINE, 
-  QU_EXTERN, QU_STATIC, QU_AUTO, QU_REGISTER, 
+  QU_CONST, QU_VOLATILE, QU_RESTRICT,
+  QU_INLINE, QU_EXTERN, QU_STATIC, 
+  QU_AUTO, QU_REGISTER, 
   QU_SHORT, QU_LONG, QU_SIGNED, QU_UNSIGNED, 
   QU_OUT, QU_IN,
   QU_ONLY, QU_IMPONLY,
@@ -91,6 +92,7 @@ extern bool qual_isNeverExit (qual) /*@*/ ;
 extern bool qual_isTrueExit (qual) /*@*/ ;
 extern bool qual_isFalseExit (qual) /*@*/ ;
 extern bool qual_isConst (qual) /*@*/ ;
+extern bool qual_isRestrict (qual) /*@*/ ;
 extern bool qual_isVolatile (qual) /*@*/ ;
 extern bool qual_isInline (qual) /*@*/ ;
 extern bool qual_isExtern (qual) /*@*/ ;
@@ -178,6 +180,7 @@ extern /*@observer@*/ annotationInfo qual_getAnnotationInfo (qual) /*@*/ ;
 # define qual_isTrueExit(q)   ((q)->kind == QU_TRUEEXIT)
 # define qual_isFalseExit(q)  ((q)->kind == QU_FALSEEXIT)
 # define qual_isConst(q)      ((q)->kind == QU_CONST)
+# define qual_isRestrict(q)   ((q)->kind == QU_RESTRICT)
 # define qual_isVolatile(q)   ((q)->kind == QU_VOLATILE)
 # define qual_isInline(q)     ((q)->kind == QU_INLINE)
 # define qual_isExtern(q)     ((q)->kind == QU_EXTERN)
@@ -248,6 +251,7 @@ extern qual qual_createNeverExit (void) /*@*/ ;
 extern qual qual_createFalseExit (void) /*@*/ ;    
 extern qual qual_createTrueExit (void) /*@*/ ;    
 extern qual qual_createConst (void) /*@*/ ;      
+extern qual qual_createRestrict (void) /*@*/ ;      
 extern qual qual_createVolatile (void) /*@*/ ;   
 extern qual qual_createInline (void) /*@*/ ;     
 extern qual qual_createExtern (void) /*@*/ ;     
@@ -319,6 +323,7 @@ extern qual qual_createMessageLike (void) /*@*/ ;
 # define qual_createTrueExit()   qual_createPlain (QU_TRUEEXIT)
 # define qual_createFalseExit()  qual_createPlain (QU_FALSEEXIT)
 # define qual_createConst()      qual_createPlain (QU_CONST)
+# define qual_createRestrict()   qual_createPlain (QU_RESTRICT)
 # define qual_createVolatile()   qual_createPlain (QU_VOLATILE)
 # define qual_createInline()     qual_createPlain (QU_INLINE)
 # define qual_createExtern()     qual_createPlain (QU_EXTERN)
index 38bab620afa5d2b5d3875d0998f3149b951a023e..3a2c32d5edddca5d85e0dc9ead728ebb4cdef5e1 100644 (file)
@@ -37,6 +37,9 @@ extern bool qualList_isEmpty (/*@sef@*/ qualList p_s);
 # define qualList_isEmpty(s) (qualList_size(s) == 0)
 
 extern qualList qualList_new (void) /*@*/ ;
+
+extern qualList qualList_single (qual p_el) /*@*/ ;
+
 extern qualList qualList_add (/*@returned@*/ qualList p_s, qual p_el) 
    /*@modifies p_s@*/;
 
index 14f7a5c07cc7a331cdefec18f2048ac37748918a..728b3a7ed222ac0bf15bb66ef711758fe4286346 100644 (file)
@@ -101,7 +101,7 @@ extern sort sort_makeSyn (ltoken p_t, sort p_s, lsymbol p_n) /*@*/ ;
 extern sort sort_makeFormal (sort p_insort) /*@*/ ;
 extern sort sort_makeGlobal (sort p_insort) /*@*/ ;
 extern sort sort_makePtr (ltoken p_t, sort p_baseSort) /*@*/ ;
-extern sort sort_makePtrN (sort p_s, int p_pointers) /*@*/ ;
+extern sort sort_makePtrN (sort p_s, pointers p_p) /*@*/ ;
 extern sort sort_makeVal (sort p_sor) /*@*/ ;
 extern sort sort_makeObj (sort p_sor) /*@*/ ;
 
index b53ddab0a77fcac82e04e1c4ea14c07a8ad03fdf..cd9ece6bbbd84f2d02babfc8060886dfe10cf783 100644 (file)
@@ -40,7 +40,8 @@ CSRC = context.c uentry.c cprim.c macrocache.c qual.c qtype.c stateClause.c \
        stateClauseList.c ctype.c cvar.c clabstract.c idDecl.c clause.c \
        globalsClause.c modifiesClause.c warnClause.c functionClause.c \
        functionClauseList.c metaStateConstraint.c metaStateConstraintList.c \
-       metaStateExpression.c metaStateSpecifier.c functionConstraint.c
+       metaStateExpression.c metaStateSpecifier.c functionConstraint.c \
+       pointers.c      
 
 SPLINTSRC = exprNode.c exprChecks.c llmain.c help.c rcfiles.c
 CHECKSRC = structNames.c transferChecks.c varKinds.c nameChecks.c
index 799ecbd35674a2fbe4aa9da75d73bf714485f898..044831e97d089fb418f809fa3057ff991d64fc54 100644 (file)
@@ -121,7 +121,8 @@ CSRC = context.c uentry.c cprim.c macrocache.c qual.c qtype.c stateClause.c \
        stateClauseList.c ctype.c cvar.c clabstract.c idDecl.c clause.c \
        globalsClause.c modifiesClause.c warnClause.c functionClause.c \
        functionClauseList.c metaStateConstraint.c metaStateConstraintList.c \
-       metaStateExpression.c metaStateSpecifier.c functionConstraint.c
+       metaStateExpression.c metaStateSpecifier.c functionConstraint.c \
+       pointers.c      
 
 
 SPLINTSRC = exprNode.c exprChecks.c llmain.c help.c rcfiles.c
@@ -408,11 +409,12 @@ am_splint_OBJECTS = cgrammar.$(OBJEXT) cscanner.$(OBJEXT) \
        functionClause.$(OBJEXT) functionClauseList.$(OBJEXT) \
        metaStateConstraint.$(OBJEXT) metaStateConstraintList.$(OBJEXT) \
        metaStateExpression.$(OBJEXT) metaStateSpecifier.$(OBJEXT) \
-       functionConstraint.$(OBJEXT) structNames.$(OBJEXT) \
-       transferChecks.$(OBJEXT) varKinds.$(OBJEXT) \
-       nameChecks.$(OBJEXT) exprData.$(OBJEXT) cstring.$(OBJEXT) \
-       fileloc.$(OBJEXT) message.$(OBJEXT) inputStream.$(OBJEXT) \
-       fileTable.$(OBJEXT) cstringTable.$(OBJEXT) valueTable.$(OBJEXT) \
+       functionConstraint.$(OBJEXT) pointers.$(OBJEXT) \
+       structNames.$(OBJEXT) transferChecks.$(OBJEXT) \
+       varKinds.$(OBJEXT) nameChecks.$(OBJEXT) exprData.$(OBJEXT) \
+       cstring.$(OBJEXT) fileloc.$(OBJEXT) message.$(OBJEXT) \
+       inputStream.$(OBJEXT) fileTable.$(OBJEXT) \
+       cstringTable.$(OBJEXT) valueTable.$(OBJEXT) \
        stateValue.$(OBJEXT) llerror.$(OBJEXT) messageLog.$(OBJEXT) \
        flagMarker.$(OBJEXT) aliasTable.$(OBJEXT) ynm.$(OBJEXT) \
        sRefTable.$(OBJEXT) genericTable.$(OBJEXT) ekind.$(OBJEXT) \
@@ -544,7 +546,7 @@ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
 @AMDEP_TRUE@   $(DEPDIR)/mttok.Po $(DEPDIR)/multiVal.Po \
 @AMDEP_TRUE@   $(DEPDIR)/nameChecks.Po $(DEPDIR)/osd.Po \
 @AMDEP_TRUE@   $(DEPDIR)/pairNodeList.Po \
-@AMDEP_TRUE@   $(DEPDIR)/paramNodeList.Po \
+@AMDEP_TRUE@   $(DEPDIR)/paramNodeList.Po $(DEPDIR)/pointers.Po \
 @AMDEP_TRUE@   $(DEPDIR)/programNodeList.Po $(DEPDIR)/qtype.Po \
 @AMDEP_TRUE@   $(DEPDIR)/qual.Po $(DEPDIR)/qualList.Po \
 @AMDEP_TRUE@   $(DEPDIR)/quantifierNodeList.Po \
@@ -763,6 +765,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/osd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pairNodeList.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/paramNodeList.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pointers.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/programNodeList.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/qtype.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/qual.Po@am__quote@
index e57c603bd7f93981d8d457d8ca37f166b51b8543..301a81f67a33cce9472170ba69da218746ec4093 100644 (file)
@@ -1674,7 +1674,7 @@ makeLclTypeSpecNodeConj (/*@null@*/ lclTypeSpecNode a, /*@null@*/ lclTypeSpecNod
   lclTypeSpecNode n = (lclTypeSpecNode) dmalloc (sizeof (*n));
 
   n->kind = LTS_CONJ;
-  n->pointers = 0;
+  n->pointers = pointers_undefined;
   n->quals = qualList_new ();
   n->content.conj = (lclconj) dmalloc (sizeof (*n->content.conj));
   n->content.conj->a = a;
@@ -1689,7 +1689,7 @@ makeLclTypeSpecNodeType (/*@null@*/ CTypesNode x)
   lclTypeSpecNode n = (lclTypeSpecNode) dmalloc (sizeof (*n));
 
   n->kind = LTS_TYPE;
-  n->pointers = 0;
+  n->pointers = pointers_undefined;
   n->content.type = x;
   n->quals = qualList_new ();
   return (n);
@@ -1701,7 +1701,7 @@ makeLclTypeSpecNodeSU (/*@null@*/ strOrUnionNode x)
   lclTypeSpecNode n = (lclTypeSpecNode) dmalloc (sizeof (*n));
 
   n->kind = LTS_STRUCTUNION;
-  n->pointers = 0;
+  n->pointers = pointers_undefined;
   n->content.structorunion = x;
   n->quals = qualList_new ();
   return (n);
@@ -1714,7 +1714,7 @@ makeLclTypeSpecNodeEnum (/*@null@*/ enumSpecNode x)
 
   n->quals = qualList_new ();
   n->kind = LTS_ENUM;
-  n->pointers = 0;
+  n->pointers = pointers_undefined;
   n->content.enumspec = x;
   return (n);
 }
@@ -3235,7 +3235,7 @@ paramNode_checkQualifiers (lclTypeSpecNode t, typeExpr d)
 
   llassert (lclTypeSpecNode_isDefined (t));
 
-  if (t->pointers == 0 
+  if (pointers_isUndefined (t->pointers)
       && (d != (typeExpr)0 && d->kind != TEXPR_PTR) && d->kind != TEXPR_ARRAY)
     {
       if (t->kind == LTS_TYPE)
@@ -5179,12 +5179,10 @@ lclTypeSpecNode2sort (lclTypeSpecNode type)
          return sort_makePtrN (type->content.type->sort, type->pointers);
        case LTS_STRUCTUNION:
          llassert (type->content.structorunion != NULL);
-         return sort_makePtrN (type->content.structorunion->sort,
-                               type->pointers);
+         return sort_makePtrN (type->content.structorunion->sort, type->pointers);
        case LTS_ENUM:
          llassert (type->content.enumspec != NULL);
-         return sort_makePtrN (type->content.enumspec->sort, 
-                               type->pointers);
+         return sort_makePtrN (type->content.enumspec->sort, type->pointers);
        case LTS_CONJ:
          return (lclTypeSpecNode2sort (type->content.conj->a));
        }
index 3ed27f19572e2c5eea934f502670a10227e4ff47..4be861899be702be091292f73c53a87ff6c2151d 100644 (file)
 #define        QMESSAGELIKE    363
 #define        QNOTREACHED     364
 #define        QCONST  365
-#define        QVOLATILE       366
-#define        QINLINE 367
-#define        QEXTENSION      368
-#define        QEXTERN 369
-#define        QSTATIC 370
-#define        QAUTO   371
-#define        QREGISTER       372
-#define        QOUT    373
-#define        QIN     374
-#define        QYIELD  375
-#define        QONLY   376
-#define        QTEMP   377
-#define        QSHARED 378
-#define        QREF    379
-#define        QUNIQUE 380
-#define        QCHECKED        381
-#define        QUNCHECKED      382
-#define        QCHECKEDSTRICT  383
-#define        QCHECKMOD       384
-#define        QKEEP   385
-#define        QKEPT   386
-#define        QPARTIAL        387
-#define        QSPECIAL        388
-#define        QOWNED  389
-#define        QDEPENDENT      390
-#define        QRETURNED       391
-#define        QEXPOSED        392
-#define        QNULL   393
-#define        QOBSERVER       394
-#define        QISNULL 395
-#define        QEXITS  396
-#define        QMAYEXIT        397
-#define        QNEVEREXIT      398
-#define        QTRUEEXIT       399
-#define        QFALSEEXIT      400
-#define        QLONG   401
-#define        QSIGNED 402
-#define        QUNSIGNED       403
-#define        QSHORT  404
-#define        QUNUSED 405
-#define        QSEF    406
-#define        QNOTNULL        407
-#define        QRELNULL        408
-#define        QABSTRACT       409
-#define        QCONCRETE       410
-#define        QMUTABLE        411
-#define        QIMMUTABLE      412
-#define        QTRUENULL       413
-#define        QFALSENULL      414
-#define        QEXTERNAL       415
-#define        QREFCOUNTED     416
-#define        QREFS   417
-#define        QNEWREF 418
-#define        QTEMPREF        419
-#define        QKILLREF        420
-#define        QRELDEF 421
-#define        CGCHAR  422
-#define        CBOOL   423
-#define        CINT    424
-#define        CGFLOAT 425
-#define        CDOUBLE 426
-#define        CVOID   427
-#define        QANYTYPE        428
-#define        QINTEGRALTYPE   429
-#define        QUNSIGNEDINTEGRALTYPE   430
-#define        QSIGNEDINTEGRALTYPE     431
-#define        QNULLTERMINATED 432
-#define        QSETBUFFERSIZE  433
-#define        QSETSTRINGLENGTH        434
-#define        QMAXSET 435
-#define        QMAXREAD        436
-#define        QTESTINRANGE    437
-#define        TCAND   438
-#define        IDENTIFIER      439
-#define        NEW_IDENTIFIER  440
-#define        TYPE_NAME_OR_ID 441
-#define        CANNOTATION     442
-#define        CCONSTANT       443
-#define        ITER_NAME       444
-#define        ITER_ENDNAME    445
-#define        TYPE_NAME       446
-#define        METASTATE_NAME  447
+#define        QRESTRICT       366
+#define        QVOLATILE       367
+#define        QINLINE 368
+#define        QEXTENSION      369
+#define        QEXTERN 370
+#define        QSTATIC 371
+#define        QAUTO   372
+#define        QREGISTER       373
+#define        QOUT    374
+#define        QIN     375
+#define        QYIELD  376
+#define        QONLY   377
+#define        QTEMP   378
+#define        QSHARED 379
+#define        QREF    380
+#define        QUNIQUE 381
+#define        QCHECKED        382
+#define        QUNCHECKED      383
+#define        QCHECKEDSTRICT  384
+#define        QCHECKMOD       385
+#define        QKEEP   386
+#define        QKEPT   387
+#define        QPARTIAL        388
+#define        QSPECIAL        389
+#define        QOWNED  390
+#define        QDEPENDENT      391
+#define        QRETURNED       392
+#define        QEXPOSED        393
+#define        QNULL   394
+#define        QOBSERVER       395
+#define        QISNULL 396
+#define        QEXITS  397
+#define        QMAYEXIT        398
+#define        QNEVEREXIT      399
+#define        QTRUEEXIT       400
+#define        QFALSEEXIT      401
+#define        QLONG   402
+#define        QSIGNED 403
+#define        QUNSIGNED       404
+#define        QSHORT  405
+#define        QUNUSED 406
+#define        QSEF    407
+#define        QNOTNULL        408
+#define        QRELNULL        409
+#define        QABSTRACT       410
+#define        QCONCRETE       411
+#define        QMUTABLE        412
+#define        QIMMUTABLE      413
+#define        QTRUENULL       414
+#define        QFALSENULL      415
+#define        QEXTERNAL       416
+#define        QREFCOUNTED     417
+#define        QREFS   418
+#define        QNEWREF 419
+#define        QTEMPREF        420
+#define        QKILLREF        421
+#define        QRELDEF 422
+#define        CGCHAR  423
+#define        CBOOL   424
+#define        CINT    425
+#define        CGFLOAT 426
+#define        CDOUBLE 427
+#define        CVOID   428
+#define        QANYTYPE        429
+#define        QINTEGRALTYPE   430
+#define        QUNSIGNEDINTEGRALTYPE   431
+#define        QSIGNEDINTEGRALTYPE     432
+#define        QNULLTERMINATED 433
+#define        QSETBUFFERSIZE  434
+#define        QSETSTRINGLENGTH        435
+#define        QMAXSET 436
+#define        QMAXREAD        437
+#define        QTESTINRANGE    438
+#define        TCAND   439
+#define        IDENTIFIER      440
+#define        NEW_IDENTIFIER  441
+#define        TYPE_NAME_OR_ID 442
+#define        CANNOTATION     443
+#define        CCONSTANT       444
+#define        ITER_NAME       445
+#define        ITER_ENDNAME    446
+#define        TYPE_NAME       447
+#define        METASTATE_NAME  448
 
 
 /*
@@ -320,7 +321,7 @@ typedef union
   /*@only@*/ modifiesClause modsclause;
   /*@only@*/ warnClause warnclause;
   /*@only@*/ stateClause stateclause;
-
+  /*@only@*/ pointers pointers;
   /*@only@*/ functionConstraint fcnconstraint; 
 
   /*@only@*/ metaStateConstraint msconstraint;
@@ -367,11 +368,11 @@ typedef union
 
 
 
-#define        YYFINAL         1236
+#define        YYFINAL         1239
 #define        YYFLAG          -32768
-#define        YYNTBASE        194
+#define        YYNTBASE        195
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 447 ? yytranslate[x] : 459)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 448 ? yytranslate[x] : 460)
 
 static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -418,7 +419,7 @@ static const short yytranslate[] = {     0,
    157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
    167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
    177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-   187,   188,   189,   190,   191,   192,   193
+   187,   188,   189,   190,   191,   192,   193,   194
 };
 
 #if YYDEBUG != 0
@@ -461,257 +462,258 @@ static const short yyprhs[] = {     0,
   1055,  1057,  1059,  1061,  1063,  1065,  1067,  1069,  1072,  1075,
   1078,  1081,  1084,  1087,  1090,  1093,  1096,  1099,  1102,  1105,
   1108,  1111,  1114,  1117,  1120,  1123,  1126,  1129,  1132,  1135,
-  1138,  1141,  1144,  1148,  1150,  1155,  1157,  1161,  1164,  1167,
-  1170,  1171,  1173,  1174,  1175,  1176,  1189,  1190,  1191,  1203,
-  1210,  1217,  1218,  1219,  1230,  1231,  1232,  1243,  1249,  1255,
-  1260,  1265,  1266,  1268,  1270,  1273,  1279,  1283,  1286,  1291,
-  1293,  1297,  1302,  1309,  1310,  1319,  1324,  1326,  1330,  1333,
-  1335,  1340,  1342,  1344,  1347,  1350,  1352,  1355,  1357,  1360,
-  1362,  1364,  1366,  1369,  1371,  1374,  1377,  1381,  1383,  1387,
-  1389,  1393,  1395,  1397,  1401,  1402,  1405,  1406,  1411,  1416,
-  1418,  1420,  1423,  1425,  1427,  1430,  1431,  1433,  1439,  1442,
-  1446,  1450,  1455,  1459,  1464,  1469,  1475,  1477,  1479,  1481,
-  1483,  1485,  1487,  1489,  1491,  1493,  1495,  1497,  1499,  1502,
-  1505,  1513,  1520,  1523,  1524,  1525,  1536,  1537,  1544,  1546,
-  1548,  1550,  1552,  1555,  1557,  1559,  1561,  1563,  1565,  1567,
-  1569,  1573,  1575,  1576,  1580,  1583,  1586,  1588,  1590,  1592,
-  1594,  1596,  1598,  1600,  1602,  1604,  1606,  1610,  1612,  1614,
-  1617,  1620,  1621,  1624,  1625,  1630,  1631,  1638,  1639,  1643,
-  1644,  1650,  1654,  1657,  1661,  1662,  1663,  1664,  1665,  1666,
-  1668,  1671,  1674,  1678,  1681,  1685,  1689,  1694,  1697,  1700,
-  1704,  1708,  1713,  1715,  1718,  1720,  1723,  1725,  1729,  1731,
-  1736,  1738,  1741,  1743,  1746,  1748,  1751,  1753,  1758,  1761,
-  1762,  1768,  1769,  1776,  1781,  1786,  1787,  1788,  1799,  1801,
-  1802,  1807,  1809,  1811,  1813,  1815,  1817,  1820,  1822,  1826,
-  1828,  1833,  1837,  1842,  1849,  1855,  1861,  1864,  1867,  1869,
-  1872,  1875,  1878,  1881,  1884,  1887,  1890,  1893,  1895,  1897,
-  1902,  1904,  1908,  1912,  1916,  1918,  1922,  1926,  1928,  1932,
-  1936,  1938,  1942,  1946,  1950,  1954,  1956,  1960,  1964,  1966,
-  1970,  1972,  1976,  1978,  1982,  1984,  1988,  1990,  1994,  1996,
-  1997,  1998,  2006,  2008,  2012,  2016,  2020,  2024,  2028,  2032,
-  2036,  2040,  2044,  2048,  2052,  2054,  2055,  2057,  2060,  2068,
-  2071,  2074,  2082,  2089,  2092,  2096,  2099,  2103,  2106,  2110,
-  2114,  2118,  2122,  2125,  2129,  2130,  2132,  2133,  2135,  2137,
-  2139,  2141,  2143,  2145,  2147,  2149,  2151,  2156
+  1138,  1141,  1144,  1147,  1151,  1153,  1158,  1160,  1164,  1167,
+  1170,  1173,  1174,  1176,  1177,  1178,  1179,  1192,  1193,  1194,
+  1206,  1213,  1220,  1221,  1222,  1233,  1234,  1235,  1246,  1252,
+  1258,  1263,  1268,  1269,  1271,  1273,  1276,  1282,  1286,  1289,
+  1294,  1296,  1300,  1305,  1312,  1313,  1322,  1327,  1329,  1333,
+  1336,  1338,  1343,  1345,  1347,  1350,  1353,  1355,  1358,  1360,
+  1363,  1365,  1367,  1369,  1371,  1374,  1376,  1379,  1382,  1386,
+  1388,  1392,  1394,  1398,  1400,  1402,  1406,  1407,  1410,  1411,
+  1416,  1421,  1423,  1425,  1428,  1430,  1432,  1435,  1436,  1438,
+  1444,  1447,  1451,  1455,  1460,  1464,  1469,  1474,  1480,  1482,
+  1484,  1486,  1488,  1490,  1492,  1494,  1496,  1498,  1500,  1502,
+  1504,  1507,  1510,  1518,  1525,  1528,  1529,  1530,  1541,  1542,
+  1549,  1551,  1553,  1555,  1557,  1560,  1562,  1564,  1566,  1568,
+  1570,  1572,  1574,  1578,  1580,  1581,  1585,  1588,  1591,  1593,
+  1595,  1597,  1599,  1601,  1603,  1605,  1607,  1609,  1611,  1615,
+  1617,  1619,  1622,  1625,  1626,  1629,  1630,  1635,  1636,  1643,
+  1644,  1648,  1649,  1655,  1659,  1662,  1666,  1667,  1668,  1669,
+  1670,  1671,  1673,  1676,  1679,  1683,  1686,  1690,  1694,  1699,
+  1702,  1705,  1709,  1713,  1718,  1720,  1723,  1725,  1728,  1730,
+  1734,  1736,  1741,  1743,  1746,  1748,  1751,  1753,  1756,  1758,
+  1763,  1766,  1767,  1773,  1774,  1781,  1786,  1791,  1792,  1793,
+  1804,  1806,  1807,  1812,  1814,  1816,  1818,  1820,  1822,  1825,
+  1827,  1831,  1833,  1838,  1842,  1847,  1854,  1860,  1866,  1869,
+  1872,  1874,  1877,  1880,  1883,  1886,  1889,  1892,  1895,  1898,
+  1900,  1902,  1907,  1909,  1913,  1917,  1921,  1923,  1927,  1931,
+  1933,  1937,  1941,  1943,  1947,  1951,  1955,  1959,  1961,  1965,
+  1969,  1971,  1975,  1977,  1981,  1983,  1987,  1989,  1993,  1995,
+  1999,  2001,  2002,  2003,  2011,  2013,  2017,  2021,  2025,  2029,
+  2033,  2037,  2041,  2045,  2049,  2053,  2057,  2059,  2060,  2062,
+  2065,  2073,  2076,  2079,  2087,  2094,  2097,  2101,  2104,  2108,
+  2111,  2115,  2119,  2123,  2127,  2130,  2134,  2135,  2137,  2138,
+  2140,  2142,  2144,  2146,  2148,  2150,  2152,  2154,  2156,  2161
 };
 
 static const short yyrhs[] = {    -1,
-   195,     0,   196,     0,   195,   196,     0,   257,   454,     0,
-   197,     0,   198,     0,   208,     0,   211,     0,   295,     0,
-    18,     0,     1,     0,    77,   336,   350,   360,   350,   454,
-   303,    91,     0,    77,   336,   350,   360,   350,    23,   303,
-   308,   307,   454,    91,     0,     0,    78,   199,   200,   454,
-    91,     0,   201,     0,   336,   350,   201,     0,   205,     0,
-   364,   205,     0,   457,     0,   303,    24,   350,   360,   303,
-    25,     0,   202,    26,    27,     0,   202,    26,   303,   294,
-    27,   350,     0,     0,   202,   304,    24,    25,   203,   229,
-     0,     0,   202,   304,    24,   361,    25,   204,   229,     0,
-   457,     0,   303,    24,   350,   201,   303,    25,     0,   205,
-    26,    27,     0,   205,    26,   303,   294,    27,   350,     0,
-     0,   205,   304,    24,    25,   206,   230,     0,     0,   205,
-   304,    24,   361,    25,   207,   230,     0,     0,     0,    79,
-   457,    24,   361,    25,   209,   230,   210,   454,    91,     0,
-    92,   391,    95,     0,    93,   377,    95,     0,    94,   378,
-    95,     0,    92,    95,     0,   252,     0,   214,    23,   217,
-     0,     0,   226,   215,    22,   218,     0,     0,     5,   216,
-    22,   218,     0,   214,     0,   214,    40,   217,     0,   193,
-     0,   184,     0,    56,     0,   221,   219,   220,     0,   221,
-     0,   224,   223,   224,     0,   181,     0,   182,     0,    53,
-     0,    52,     0,    54,     0,   225,     0,   227,    24,   224,
-    25,     0,    24,   224,   228,   224,    25,     0,   226,     0,
-   189,     0,   456,     0,   186,     0,   226,    26,    27,     0,
-   226,    26,   189,    27,     0,    34,   226,     0,    24,   226,
-    25,     0,   226,    28,   457,     0,   226,    45,   457,     0,
-   222,     0,    33,     0,    32,     0,     0,   231,   229,     0,
-     0,   232,   230,     0,   233,     0,   237,     0,   236,     0,
-   314,     0,   317,     0,   243,     0,   234,     0,   238,     0,
-   236,     0,   315,     0,   319,     0,   244,     0,   234,    91,
-     0,     0,    74,   235,   245,   454,     0,    76,     0,   238,
-    91,     0,     0,    75,   239,   258,     0,   241,     0,   241,
-    40,   240,     0,   186,     0,   243,     0,     0,   244,    91,
-     0,    73,   240,   430,     0,    73,   240,     0,   246,     0,
-   245,    21,   246,     0,   247,   248,     0,     0,   249,   247,
-     0,   456,     0,   186,     0,   295,     0,    89,     0,    90,
-     0,   119,     0,   120,     0,   133,     0,    80,     0,    81,
+   196,     0,   197,     0,   196,   197,     0,   258,   455,     0,
+   198,     0,   199,     0,   209,     0,   212,     0,   296,     0,
+    18,     0,     1,     0,    77,   337,   351,   361,   351,   455,
+   304,    91,     0,    77,   337,   351,   361,   351,    23,   304,
+   309,   308,   455,    91,     0,     0,    78,   200,   201,   455,
+    91,     0,   202,     0,   337,   351,   202,     0,   206,     0,
+   365,   206,     0,   458,     0,   304,    24,   351,   361,   304,
+    25,     0,   203,    26,    27,     0,   203,    26,   304,   295,
+    27,   351,     0,     0,   203,   305,    24,    25,   204,   230,
+     0,     0,   203,   305,    24,   362,    25,   205,   230,     0,
+   458,     0,   304,    24,   351,   202,   304,    25,     0,   206,
+    26,    27,     0,   206,    26,   304,   295,    27,   351,     0,
+     0,   206,   305,    24,    25,   207,   231,     0,     0,   206,
+   305,    24,   362,    25,   208,   231,     0,     0,     0,    79,
+   458,    24,   362,    25,   210,   231,   211,   455,    91,     0,
+    92,   392,    95,     0,    93,   378,    95,     0,    94,   379,
+    95,     0,    92,    95,     0,   253,     0,   215,    23,   218,
+     0,     0,   227,   216,    22,   219,     0,     0,     5,   217,
+    22,   219,     0,   215,     0,   215,    40,   218,     0,   194,
+     0,   185,     0,    56,     0,   222,   220,   221,     0,   222,
+     0,   225,   224,   225,     0,   182,     0,   183,     0,    53,
+     0,    52,     0,    54,     0,   226,     0,   228,    24,   225,
+    25,     0,    24,   225,   229,   225,    25,     0,   227,     0,
+   190,     0,   457,     0,   187,     0,   227,    26,    27,     0,
+   227,    26,   190,    27,     0,    34,   227,     0,    24,   227,
+    25,     0,   227,    28,   458,     0,   227,    45,   458,     0,
+   223,     0,    33,     0,    32,     0,     0,   232,   230,     0,
+     0,   233,   231,     0,   234,     0,   238,     0,   237,     0,
+   315,     0,   318,     0,   244,     0,   235,     0,   239,     0,
+   237,     0,   316,     0,   320,     0,   245,     0,   235,    91,
+     0,     0,    74,   236,   246,   455,     0,    76,     0,   239,
+    91,     0,     0,    75,   240,   259,     0,   242,     0,   242,
+    40,   241,     0,   187,     0,   244,     0,     0,   245,    91,
+     0,    73,   241,   431,     0,    73,   241,     0,   247,     0,
+   246,    21,   247,     0,   248,   249,     0,     0,   250,   248,
+     0,   457,     0,   187,     0,   296,     0,    89,     0,    90,
+     0,   120,     0,   121,     0,   134,     0,    80,     0,    81,
      0,    82,     0,    83,     0,    84,     0,    85,     0,    86,
-     0,   360,     0,   336,   350,   360,     0,     0,    19,   254,
-   408,     0,     0,     0,   255,   412,   256,   401,     0,   212,
-   253,     0,   261,   454,     0,   454,     0,   456,     0,   186,
-     0,   259,    26,    27,     0,   259,    26,   260,    27,     0,
-    34,   259,     0,    24,   259,    25,     0,   259,    28,   457,
-     0,   259,    45,   457,     0,   259,     0,   430,     0,   259,
-     0,   261,    21,   259,     0,   456,     0,   186,     0,   262,
-    26,    27,     0,   262,    26,   260,    27,     0,    34,   262,
-     0,    24,   262,    25,     0,   262,    28,   457,     0,   262,
-    45,   457,     0,     0,   264,     0,   262,     0,   264,    21,
-   262,     0,   456,     0,   186,     0,   430,     0,    24,   292,
-    25,     0,   187,     0,   114,     0,     0,    24,   266,   401,
-    25,     0,   265,     0,   267,    26,   292,    27,     0,   267,
-    24,    25,     0,   267,    24,   268,    25,     0,    71,    24,
-   291,    21,   372,    25,     0,   267,   350,    28,   457,   303,
-     0,   267,   350,    45,   457,   303,     0,   267,    48,     0,
-   267,    49,     0,    24,   372,    25,    19,   413,   455,    20,
-     0,   291,     0,   268,    21,   291,     0,   267,     0,    48,
-   269,     0,    49,   269,     0,    29,   275,     0,    34,   275,
-     0,    33,   275,     0,    32,   275,     0,    31,   275,     0,
-    30,   275,     0,   272,     0,   271,     0,   270,    28,   457,
-     0,   270,    26,   292,    27,     0,   457,     0,    47,   303,
-    24,   372,   350,    21,   270,    25,   303,     0,     0,   303,
-   273,   274,     0,    42,    24,   372,    25,     0,    42,   269,
-     0,    43,    24,   372,    25,     0,    43,   269,     0,   269,
-     0,    24,   372,    25,   275,     0,   275,     0,   276,    34,
-   275,     0,   276,    35,   275,     0,   276,    36,   275,     0,
-   276,     0,   277,    33,   276,     0,   277,    32,   276,     0,
-   277,     0,   278,    50,   277,     0,   278,    51,   277,     0,
-   278,     0,   279,    37,   278,     0,   279,    38,   278,     0,
-   279,    52,   278,     0,   279,    53,   278,     0,   279,     0,
-   280,    54,   279,     0,   280,    55,   279,     0,   280,     0,
-   281,    29,   280,     0,   281,     0,   282,    39,   281,     0,
-   282,     0,   283,    40,   282,     0,   283,     0,     0,   284,
-    56,   285,   283,     0,   284,     0,     0,   286,    57,   287,
-   284,     0,   286,     0,     0,     0,   286,    41,   289,   292,
-    22,   290,   288,     0,   288,     0,   269,    23,   291,     0,
-   269,    58,   291,     0,   269,    59,   291,     0,   269,    60,
-   291,     0,   269,    61,   291,     0,   269,    62,   291,     0,
-   269,    63,   291,     0,   269,    64,   291,     0,   269,    65,
-   291,     0,   269,    66,   291,     0,   269,    67,   291,     0,
-   291,     0,   292,    21,   291,     0,     0,   292,     0,   288,
-     0,   296,     0,    72,     0,   301,     0,   336,   303,    18,
-     0,     0,   336,   350,   360,   350,   297,   303,   307,    18,
-   303,     0,     0,   336,   350,   360,   350,    23,   298,   303,
-   308,   307,    18,   303,     0,   360,   350,     0,     0,   360,
-   350,    23,   300,   303,   308,     0,     0,    46,   336,   302,
-   350,   305,   303,   242,    18,     0,    46,   336,   303,    18,
-     0,    46,   305,   303,    18,     0,     0,     0,   306,   303,
-     0,   299,     0,   305,    21,   350,   299,     0,     0,   307,
-    21,   350,   299,     0,   291,     0,    19,   312,    20,     0,
-    19,   312,    21,    20,     0,   309,   308,     0,   310,    23,
-     0,   457,    22,     0,   311,     0,   310,   311,     0,    26,
-   294,    27,     0,    28,   457,     0,   308,     0,   312,    21,
-   308,     0,   115,     0,   113,     0,   116,     0,   117,     0,
-   118,     0,   315,    91,     0,     0,   250,   350,   316,   264,
-   454,   303,     0,   319,    91,     0,   251,   350,     0,     0,
-   318,   325,   320,   263,   454,   303,     0,     0,   318,   321,
-   322,   454,   303,     0,   220,     0,   213,     0,   142,     0,
-   143,     0,   145,     0,   146,     0,   144,     0,   127,     0,
-   130,     0,   128,     0,   129,     0,   135,     0,   136,     0,
-   121,     0,   123,     0,   122,     0,   131,     0,   132,     0,
-   124,     0,   126,     0,   139,     0,   141,     0,   154,     0,
-   153,     0,   138,     0,   140,     0,   178,     0,   188,     0,
-   137,     0,   152,     0,   151,     0,   161,     0,   159,     0,
-   160,     0,   155,     0,   156,     0,   157,     0,   158,     0,
-   162,     0,   163,     0,   166,     0,   167,     0,   164,     0,
-   165,     0,   150,     0,   147,     0,   148,     0,   149,     0,
-   119,     0,   120,     0,   133,     0,   134,     0,   111,   303,
-     0,   112,   303,     0,   332,   303,     0,   325,   303,     0,
-   323,   303,     0,   326,   303,     0,   324,   303,     0,   328,
-   303,     0,   327,   303,     0,   329,   303,     0,   330,   303,
-     0,   168,   350,     0,   170,   350,     0,   169,   350,     0,
-   171,   350,     0,   172,   350,     0,   173,   350,     0,   174,
-   350,     0,   175,   350,     0,   176,   350,     0,   177,   350,
-     0,   458,   350,     0,   341,   350,     0,   355,   350,     0,
-   331,   350,     0,   303,   336,   303,     0,   338,     0,   338,
-    88,   337,    91,     0,   372,     0,   372,    21,   337,     0,
-   313,   339,     0,   333,   339,     0,   334,   339,     0,     0,
-   336,     0,     0,     0,     0,   350,    68,   457,   303,    19,
-   342,   405,   351,   406,   343,    20,   340,     0,     0,     0,
-   350,    69,   457,   303,    19,   344,   405,   351,   406,   345,
-    20,     0,   350,    68,   457,   303,    19,    20,     0,   350,
-    69,   457,   303,    19,    20,     0,     0,     0,   350,    68,
-   303,    19,   346,   405,   351,   406,   347,    20,     0,     0,
-     0,   350,    69,   303,    19,   348,   405,   351,   406,   349,
-    20,     0,   350,    68,   303,    19,    20,     0,   350,    69,
-   303,    19,    20,     0,   350,    68,   457,   350,     0,   350,
-    69,   457,   350,     0,     0,   352,     0,   211,     0,   351,
-   352,     0,   336,   350,   353,   303,    18,     0,   336,   303,
-    18,     0,   354,   350,     0,   353,    21,   354,   350,     0,
-   360,     0,    22,   303,   294,     0,   360,    22,   303,   294,
-     0,   350,    70,    19,   357,    20,   303,     0,     0,   350,
-    70,   457,    19,   356,   357,    20,   303,     0,   350,    70,
-   457,   303,     0,   358,     0,   357,    21,   358,     0,   357,
-    21,     0,   457,     0,   457,    23,   303,   294,     0,   202,
-     0,   374,     0,   364,   192,     0,   364,   359,     0,   202,
-     0,   364,   202,     0,   367,     0,   350,   365,     0,   111,
-     0,   112,     0,   362,     0,   363,   362,     0,    34,     0,
-    34,   363,     0,    34,   364,     0,    34,   363,   364,     0,
-   366,     0,   366,    21,     5,     0,   457,     0,   366,    21,
-   457,     0,     5,     0,   368,     0,   368,    21,     5,     0,
-     0,   369,   371,     0,     0,   368,    21,   370,   371,     0,
-   303,   336,   359,   303,     0,   457,     0,   335,     0,   335,
-   373,     0,   364,     0,   375,     0,   364,   375,     0,     0,
-   375,     0,   303,    24,   350,   373,    25,     0,    26,    27,
-     0,    26,   294,    27,     0,   375,    26,    27,     0,   375,
-    26,   294,    27,     0,   303,    24,    25,     0,   303,    24,
-   367,    25,     0,   375,   303,    24,    25,     0,   375,   303,
-    24,   367,    25,     0,   393,     0,   395,     0,   398,     0,
-   401,     0,   416,     0,   419,     0,   451,     0,   424,     0,
-   453,     0,   379,     0,   377,     0,   386,     0,   379,   386,
-     0,   423,   379,     0,   450,   392,    11,    24,   292,    25,
-    18,     0,   450,   392,    11,    24,   292,    25,     0,   381,
-   386,     0,     0,     0,    13,    24,   293,    18,   293,    18,
-   382,   293,   383,    25,     0,     0,   190,   403,    24,   385,
-   427,    25,     0,   191,     0,   393,     0,   395,     0,   398,
-     0,   389,   412,     0,   389,     0,   390,     0,   416,     0,
-   387,     0,   380,     0,   384,     0,   453,     0,    24,   386,
-    25,     0,     1,     0,     0,   418,   388,   386,     0,   403,
-    19,     0,   407,    20,     0,   392,     0,   411,     0,   393,
-     0,   395,     0,   398,     0,   402,     0,   417,     0,   419,
-     0,   424,     0,   452,     0,    24,   392,    25,     0,   453,
-     0,     1,     0,   457,    22,     0,   110,   376,     0,     0,
-   101,   394,     0,     0,     6,   294,   396,    22,     0,     0,
-   101,   394,     6,   294,   397,    22,     0,     0,     7,   399,
-    22,     0,     0,   101,   394,     7,   400,    22,     0,    24,
-   401,    25,     0,   403,   409,     0,   403,   410,   404,     0,
-     0,     0,     0,     0,     0,    20,     0,   110,    20,     0,
-   415,    20,     0,   415,   110,    20,     0,   412,    20,     0,
-   412,   110,    20,     0,   412,   415,    20,     0,   412,   415,
-   110,    20,     0,    19,   408,     0,    19,    20,     0,    19,
-   411,    20,     0,    19,   412,    20,     0,    19,   412,   415,
-    20,     0,   392,     0,   411,   392,     0,   295,     0,   412,
-   295,     0,   414,     0,   413,    21,   414,     0,   291,     0,
-    19,   413,   455,    20,     0,   376,     0,   415,   376,     0,
-    18,     0,   292,    18,     0,    18,     0,   292,    18,     0,
-   292,     0,     8,    24,   292,    25,     0,   418,   376,     0,
-     0,   418,   376,     9,   420,   376,     0,     0,    10,    24,
-   292,   421,    25,   376,     0,    11,    24,   292,    25,     0,
-    11,    24,   292,    25,     0,     0,     0,   190,   425,   403,
-    24,   426,   427,    25,   401,   449,   404,     0,   429,     0,
-     0,   427,   428,    21,   429,     0,   448,     0,   456,     0,
-   187,     0,   186,     0,   189,     0,   430,   189,     0,   430,
-     0,    24,   292,    25,     0,   431,     0,   267,    26,   292,
-    27,     0,   267,    24,    25,     0,   267,    24,   268,    25,
-     0,    71,    24,   291,    21,   372,    25,     0,   267,   350,
-    28,   457,   303,     0,   267,   350,    45,   457,   303,     0,
-   267,    48,     0,   267,    49,     0,   432,     0,    48,   269,
-     0,    49,   269,     0,    29,   275,     0,    34,   275,     0,
-    33,   275,     0,    32,   275,     0,    31,   275,     0,    30,
-   275,     0,   272,     0,   433,     0,    24,   372,    25,   275,
-     0,   434,     0,   276,    34,   275,     0,   276,    35,   275,
-     0,   276,    36,   275,     0,   435,     0,   277,    33,   276,
-     0,   277,    32,   276,     0,   436,     0,   278,    50,   277,
-     0,   278,    51,   277,     0,   437,     0,   279,    37,   278,
-     0,   279,    38,   278,     0,   279,    52,   278,     0,   279,
-    53,   278,     0,   438,     0,   280,    54,   279,     0,   280,
-    55,   279,     0,   439,     0,   281,    29,   280,     0,   440,
-     0,   282,    39,   281,     0,   441,     0,   283,    40,   282,
-     0,   442,     0,   284,    56,   283,     0,   443,     0,   286,
-    57,   284,     0,   444,     0,     0,     0,   286,    41,   446,
-   292,    22,   447,   288,     0,   445,     0,   269,    23,   291,
-     0,   269,    58,   291,     0,   269,    59,   291,     0,   269,
-    60,   291,     0,   269,    61,   291,     0,   269,    62,   291,
-     0,   269,    63,   291,     0,   269,    64,   291,     0,   269,
-    65,   291,     0,   269,    66,   291,     0,   269,    67,   291,
-     0,   191,     0,     0,    12,     0,   422,   376,     0,   450,
-   376,    11,    24,   292,    25,    18,     0,   381,   376,     0,
-   422,   392,     0,   450,   392,    11,    24,   292,    25,    18,
-     0,   450,   392,    11,    24,   292,    25,     0,   381,   392,
-     0,    14,   457,    18,     0,    15,    18,     0,   100,    15,
-    18,     0,    16,    18,     0,    96,    16,    18,     0,    97,
-    16,    18,     0,    98,    16,    18,     0,    99,    16,    18,
-     0,    17,    18,     0,    17,   292,    18,     0,     0,    18,
-     0,     0,    21,     0,   185,     0,   186,     0,   190,     0,
-   191,     0,   456,     0,   187,     0,   192,     0,   187,     0,
-    44,    24,   292,    25,     0,    44,    24,   372,    25,     0
+     0,   361,     0,   337,   351,   361,     0,     0,    19,   255,
+   409,     0,     0,     0,   256,   413,   257,   402,     0,   213,
+   254,     0,   262,   455,     0,   455,     0,   457,     0,   187,
+     0,   260,    26,    27,     0,   260,    26,   261,    27,     0,
+    34,   260,     0,    24,   260,    25,     0,   260,    28,   458,
+     0,   260,    45,   458,     0,   260,     0,   431,     0,   260,
+     0,   262,    21,   260,     0,   457,     0,   187,     0,   263,
+    26,    27,     0,   263,    26,   261,    27,     0,    34,   263,
+     0,    24,   263,    25,     0,   263,    28,   458,     0,   263,
+    45,   458,     0,     0,   265,     0,   263,     0,   265,    21,
+   263,     0,   457,     0,   187,     0,   431,     0,    24,   293,
+    25,     0,   188,     0,   115,     0,     0,    24,   267,   402,
+    25,     0,   266,     0,   268,    26,   293,    27,     0,   268,
+    24,    25,     0,   268,    24,   269,    25,     0,    71,    24,
+   292,    21,   373,    25,     0,   268,   351,    28,   458,   304,
+     0,   268,   351,    45,   458,   304,     0,   268,    48,     0,
+   268,    49,     0,    24,   373,    25,    19,   414,   456,    20,
+     0,   292,     0,   269,    21,   292,     0,   268,     0,    48,
+   270,     0,    49,   270,     0,    29,   276,     0,    34,   276,
+     0,    33,   276,     0,    32,   276,     0,    31,   276,     0,
+    30,   276,     0,   273,     0,   272,     0,   271,    28,   458,
+     0,   271,    26,   293,    27,     0,   458,     0,    47,   304,
+    24,   373,   351,    21,   271,    25,   304,     0,     0,   304,
+   274,   275,     0,    42,    24,   373,    25,     0,    42,   270,
+     0,    43,    24,   373,    25,     0,    43,   270,     0,   270,
+     0,    24,   373,    25,   276,     0,   276,     0,   277,    34,
+   276,     0,   277,    35,   276,     0,   277,    36,   276,     0,
+   277,     0,   278,    33,   277,     0,   278,    32,   277,     0,
+   278,     0,   279,    50,   278,     0,   279,    51,   278,     0,
+   279,     0,   280,    37,   279,     0,   280,    38,   279,     0,
+   280,    52,   279,     0,   280,    53,   279,     0,   280,     0,
+   281,    54,   280,     0,   281,    55,   280,     0,   281,     0,
+   282,    29,   281,     0,   282,     0,   283,    39,   282,     0,
+   283,     0,   284,    40,   283,     0,   284,     0,     0,   285,
+    56,   286,   284,     0,   285,     0,     0,   287,    57,   288,
+   285,     0,   287,     0,     0,     0,   287,    41,   290,   293,
+    22,   291,   289,     0,   289,     0,   270,    23,   292,     0,
+   270,    58,   292,     0,   270,    59,   292,     0,   270,    60,
+   292,     0,   270,    61,   292,     0,   270,    62,   292,     0,
+   270,    63,   292,     0,   270,    64,   292,     0,   270,    65,
+   292,     0,   270,    66,   292,     0,   270,    67,   292,     0,
+   292,     0,   293,    21,   292,     0,     0,   293,     0,   289,
+     0,   297,     0,    72,     0,   302,     0,   337,   304,    18,
+     0,     0,   337,   351,   361,   351,   298,   304,   308,    18,
+   304,     0,     0,   337,   351,   361,   351,    23,   299,   304,
+   309,   308,    18,   304,     0,   361,   351,     0,     0,   361,
+   351,    23,   301,   304,   309,     0,     0,    46,   337,   303,
+   351,   306,   304,   243,    18,     0,    46,   337,   304,    18,
+     0,    46,   306,   304,    18,     0,     0,     0,   307,   304,
+     0,   300,     0,   306,    21,   351,   300,     0,     0,   308,
+    21,   351,   300,     0,   292,     0,    19,   313,    20,     0,
+    19,   313,    21,    20,     0,   310,   309,     0,   311,    23,
+     0,   458,    22,     0,   312,     0,   311,   312,     0,    26,
+   295,    27,     0,    28,   458,     0,   309,     0,   313,    21,
+   309,     0,   116,     0,   114,     0,   117,     0,   118,     0,
+   119,     0,   316,    91,     0,     0,   251,   351,   317,   265,
+   455,   304,     0,   320,    91,     0,   252,   351,     0,     0,
+   319,   326,   321,   264,   455,   304,     0,     0,   319,   322,
+   323,   455,   304,     0,   221,     0,   214,     0,   143,     0,
+   144,     0,   146,     0,   147,     0,   145,     0,   128,     0,
+   131,     0,   129,     0,   130,     0,   136,     0,   137,     0,
+   122,     0,   124,     0,   123,     0,   132,     0,   133,     0,
+   125,     0,   127,     0,   140,     0,   142,     0,   155,     0,
+   154,     0,   139,     0,   141,     0,   179,     0,   189,     0,
+   138,     0,   153,     0,   152,     0,   162,     0,   160,     0,
+   161,     0,   156,     0,   157,     0,   158,     0,   159,     0,
+   163,     0,   164,     0,   167,     0,   168,     0,   165,     0,
+   166,     0,   151,     0,   148,     0,   149,     0,   150,     0,
+   120,     0,   121,     0,   134,     0,   135,     0,   111,   304,
+     0,   113,   304,     0,   112,   304,     0,   333,   304,     0,
+   326,   304,     0,   324,   304,     0,   327,   304,     0,   325,
+   304,     0,   329,   304,     0,   328,   304,     0,   330,   304,
+     0,   331,   304,     0,   169,   351,     0,   171,   351,     0,
+   170,   351,     0,   172,   351,     0,   173,   351,     0,   174,
+   351,     0,   175,   351,     0,   176,   351,     0,   177,   351,
+     0,   178,   351,     0,   459,   351,     0,   342,   351,     0,
+   356,   351,     0,   332,   351,     0,   304,   337,   304,     0,
+   339,     0,   339,    88,   338,    91,     0,   373,     0,   373,
+    21,   338,     0,   314,   340,     0,   334,   340,     0,   335,
+   340,     0,     0,   337,     0,     0,     0,     0,   351,    68,
+   458,   304,    19,   343,   406,   352,   407,   344,    20,   341,
+     0,     0,     0,   351,    69,   458,   304,    19,   345,   406,
+   352,   407,   346,    20,     0,   351,    68,   458,   304,    19,
+    20,     0,   351,    69,   458,   304,    19,    20,     0,     0,
+     0,   351,    68,   304,    19,   347,   406,   352,   407,   348,
+    20,     0,     0,     0,   351,    69,   304,    19,   349,   406,
+   352,   407,   350,    20,     0,   351,    68,   304,    19,    20,
+     0,   351,    69,   304,    19,    20,     0,   351,    68,   458,
+   351,     0,   351,    69,   458,   351,     0,     0,   353,     0,
+   212,     0,   352,   353,     0,   337,   351,   354,   304,    18,
+     0,   337,   304,    18,     0,   355,   351,     0,   354,    21,
+   355,   351,     0,   361,     0,    22,   304,   295,     0,   361,
+    22,   304,   295,     0,   351,    70,    19,   358,    20,   304,
+     0,     0,   351,    70,   458,    19,   357,   358,    20,   304,
+     0,   351,    70,   458,   304,     0,   359,     0,   358,    21,
+   359,     0,   358,    21,     0,   458,     0,   458,    23,   304,
+   295,     0,   203,     0,   375,     0,   365,   193,     0,   365,
+   360,     0,   203,     0,   365,   203,     0,   368,     0,   351,
+   366,     0,   111,     0,   112,     0,   113,     0,   363,     0,
+   364,   363,     0,    34,     0,    34,   364,     0,    34,   365,
+     0,    34,   364,   365,     0,   367,     0,   367,    21,     5,
+     0,   458,     0,   367,    21,   458,     0,     5,     0,   369,
+     0,   369,    21,     5,     0,     0,   370,   372,     0,     0,
+   369,    21,   371,   372,     0,   304,   337,   360,   304,     0,
+   458,     0,   336,     0,   336,   374,     0,   365,     0,   376,
+     0,   365,   376,     0,     0,   376,     0,   304,    24,   351,
+   374,    25,     0,    26,    27,     0,    26,   295,    27,     0,
+   376,    26,    27,     0,   376,    26,   295,    27,     0,   304,
+    24,    25,     0,   304,    24,   368,    25,     0,   376,   304,
+    24,    25,     0,   376,   304,    24,   368,    25,     0,   394,
+     0,   396,     0,   399,     0,   402,     0,   417,     0,   420,
+     0,   452,     0,   425,     0,   454,     0,   380,     0,   378,
+     0,   387,     0,   380,   387,     0,   424,   380,     0,   451,
+   393,    11,    24,   293,    25,    18,     0,   451,   393,    11,
+    24,   293,    25,     0,   382,   387,     0,     0,     0,    13,
+    24,   294,    18,   294,    18,   383,   294,   384,    25,     0,
+     0,   191,   404,    24,   386,   428,    25,     0,   192,     0,
+   394,     0,   396,     0,   399,     0,   390,   413,     0,   390,
+     0,   391,     0,   417,     0,   388,     0,   381,     0,   385,
+     0,   454,     0,    24,   387,    25,     0,     1,     0,     0,
+   419,   389,   387,     0,   404,    19,     0,   408,    20,     0,
+   393,     0,   412,     0,   394,     0,   396,     0,   399,     0,
+   403,     0,   418,     0,   420,     0,   425,     0,   453,     0,
+    24,   393,    25,     0,   454,     0,     1,     0,   458,    22,
+     0,   110,   377,     0,     0,   101,   395,     0,     0,     6,
+   295,   397,    22,     0,     0,   101,   395,     6,   295,   398,
+    22,     0,     0,     7,   400,    22,     0,     0,   101,   395,
+     7,   401,    22,     0,    24,   402,    25,     0,   404,   410,
+     0,   404,   411,   405,     0,     0,     0,     0,     0,     0,
+    20,     0,   110,    20,     0,   416,    20,     0,   416,   110,
+    20,     0,   413,    20,     0,   413,   110,    20,     0,   413,
+   416,    20,     0,   413,   416,   110,    20,     0,    19,   409,
+     0,    19,    20,     0,    19,   412,    20,     0,    19,   413,
+    20,     0,    19,   413,   416,    20,     0,   393,     0,   412,
+   393,     0,   296,     0,   413,   296,     0,   415,     0,   414,
+    21,   415,     0,   292,     0,    19,   414,   456,    20,     0,
+   377,     0,   416,   377,     0,    18,     0,   293,    18,     0,
+    18,     0,   293,    18,     0,   293,     0,     8,    24,   293,
+    25,     0,   419,   377,     0,     0,   419,   377,     9,   421,
+   377,     0,     0,    10,    24,   293,   422,    25,   377,     0,
+    11,    24,   293,    25,     0,    11,    24,   293,    25,     0,
+     0,     0,   191,   426,   404,    24,   427,   428,    25,   402,
+   450,   405,     0,   430,     0,     0,   428,   429,    21,   430,
+     0,   449,     0,   457,     0,   188,     0,   187,     0,   190,
+     0,   431,   190,     0,   431,     0,    24,   293,    25,     0,
+   432,     0,   268,    26,   293,    27,     0,   268,    24,    25,
+     0,   268,    24,   269,    25,     0,    71,    24,   292,    21,
+   373,    25,     0,   268,   351,    28,   458,   304,     0,   268,
+   351,    45,   458,   304,     0,   268,    48,     0,   268,    49,
+     0,   433,     0,    48,   270,     0,    49,   270,     0,    29,
+   276,     0,    34,   276,     0,    33,   276,     0,    32,   276,
+     0,    31,   276,     0,    30,   276,     0,   273,     0,   434,
+     0,    24,   373,    25,   276,     0,   435,     0,   277,    34,
+   276,     0,   277,    35,   276,     0,   277,    36,   276,     0,
+   436,     0,   278,    33,   277,     0,   278,    32,   277,     0,
+   437,     0,   279,    50,   278,     0,   279,    51,   278,     0,
+   438,     0,   280,    37,   279,     0,   280,    38,   279,     0,
+   280,    52,   279,     0,   280,    53,   279,     0,   439,     0,
+   281,    54,   280,     0,   281,    55,   280,     0,   440,     0,
+   282,    29,   281,     0,   441,     0,   283,    39,   282,     0,
+   442,     0,   284,    40,   283,     0,   443,     0,   285,    56,
+   284,     0,   444,     0,   287,    57,   285,     0,   445,     0,
+     0,     0,   287,    41,   447,   293,    22,   448,   289,     0,
+   446,     0,   270,    23,   292,     0,   270,    58,   292,     0,
+   270,    59,   292,     0,   270,    60,   292,     0,   270,    61,
+   292,     0,   270,    62,   292,     0,   270,    63,   292,     0,
+   270,    64,   292,     0,   270,    65,   292,     0,   270,    66,
+   292,     0,   270,    67,   292,     0,   192,     0,     0,    12,
+     0,   423,   377,     0,   451,   377,    11,    24,   293,    25,
+    18,     0,   382,   377,     0,   423,   393,     0,   451,   393,
+    11,    24,   293,    25,    18,     0,   451,   393,    11,    24,
+   293,    25,     0,   382,   393,     0,    14,   458,    18,     0,
+    15,    18,     0,   100,    15,    18,     0,    16,    18,     0,
+    96,    16,    18,     0,    97,    16,    18,     0,    98,    16,
+    18,     0,    99,    16,    18,     0,    17,    18,     0,    17,
+   293,    18,     0,     0,    18,     0,     0,    21,     0,   186,
+     0,   187,     0,   191,     0,   192,     0,   457,     0,   188,
+     0,   193,     0,   188,     0,    44,    24,   293,    25,     0,
+    44,    24,   373,    25,     0
 };
 
 #endif
@@ -754,40 +756,40 @@ static const short yyrline[] = { 0,
   1170,  1171,  1172,  1176,  1177,  1180,  1181,  1184,  1185,  1188,
   1189,  1190,  1191,  1194,  1195,  1196,  1197,  1198,  1199,  1202,
   1203,  1204,  1205,  1208,  1209,  1210,  1211,  1214,  1215,  1216,
-  1217,  1218,  1219,  1220,  1221,  1222,  1223,  1224,  1231,  1232,
+  1217,  1218,  1219,  1220,  1221,  1222,  1223,  1224,  1225,  1232,
   1233,  1234,  1235,  1236,  1237,  1238,  1239,  1240,  1241,  1242,
-  1243,  1244,  1247,  1251,  1252,  1256,  1257,  1261,  1262,  1263,
-  1266,  1267,  1271,  1278,  1280,  1282,  1284,  1286,  1288,  1289,
-  1291,  1293,  1295,  1297,  1298,  1299,  1302,  1303,  1305,  1307,
-  1308,  1311,  1314,  1315,  1316,  1319,  1321,  1325,  1327,  1331,
-  1332,  1333,  1337,  1339,  1339,  1341,  1344,  1346,  1348,  1351,
-  1356,  1363,  1364,  1365,  1372,  1376,  1377,  1381,  1382,  1385,
-  1386,  1389,  1390,  1393,  1394,  1395,  1396,  1399,  1400,  1403,
-  1404,  1407,  1408,  1409,  1412,  1412,  1413,  1414,  1417,  1429,
-  1445,  1446,  1449,  1450,  1451,  1454,  1455,  1458,  1460,  1461,
-  1463,  1464,  1466,  1468,  1470,  1472,  1478,  1479,  1480,  1481,
-  1482,  1483,  1484,  1485,  1486,  1490,  1493,  1496,  1497,  1501,
-  1503,  1505,  1507,  1511,  1512,  1514,  1518,  1520,  1522,  1525,
-  1526,  1527,  1528,  1529,  1530,  1531,  1532,  1533,  1534,  1535,
-  1536,  1537,  1540,  1541,  1546,  1549,  1552,  1553,  1556,  1557,
-  1558,  1559,  1560,  1561,  1562,  1563,  1564,  1565,  1566,  1569,
-  1570,  1577,  1578,  1584,  1585,  1586,  1587,  1590,  1591,  1592,
-  1593,  1596,  1597,  1601,  1604,  1607,  1610,  1613,  1616,  1619,
-  1620,  1621,  1622,  1624,  1625,  1627,  1629,  1635,  1639,  1641,
-  1643,  1645,  1649,  1650,  1653,  1654,  1657,  1658,  1661,  1662,
-  1665,  1666,  1669,  1670,  1673,  1674,  1675,  1678,  1691,  1696,
-  1697,  1701,  1702,  1705,  1710,  1713,  1714,  1715,  1723,  1724,
-  1724,  1728,  1729,  1730,  1741,  1748,  1749,  1752,  1753,  1756,
-  1757,  1758,  1759,  1760,  1762,  1763,  1764,  1765,  1768,  1769,
-  1770,  1771,  1772,  1773,  1774,  1775,  1776,  1777,  1780,  1781,
-  1784,  1785,  1786,  1787,  1790,  1791,  1792,  1795,  1796,  1797,
-  1800,  1801,  1802,  1803,  1804,  1807,  1808,  1809,  1812,  1813,
-  1816,  1817,  1821,  1822,  1825,  1826,  1829,  1830,  1833,  1834,
-  1835,  1836,  1839,  1840,  1841,  1842,  1843,  1844,  1845,  1846,
-  1847,  1848,  1849,  1850,  1853,  1854,  1857,  1860,  1862,  1864,
-  1868,  1869,  1871,  1873,  1876,  1877,  1878,  1880,  1881,  1882,
-  1883,  1884,  1885,  1886,  1889,  1890,  1893,  1894,  1897,  1900,
-  1901,  1902,  1903,  1904,  1907,  1908,  1909,  1910
+  1243,  1244,  1245,  1248,  1252,  1253,  1257,  1258,  1262,  1263,
+  1264,  1267,  1268,  1272,  1279,  1281,  1283,  1285,  1287,  1289,
+  1290,  1292,  1294,  1296,  1298,  1299,  1300,  1303,  1304,  1306,
+  1308,  1309,  1312,  1315,  1316,  1317,  1320,  1322,  1326,  1328,
+  1332,  1333,  1334,  1338,  1340,  1340,  1342,  1345,  1347,  1349,
+  1352,  1357,  1364,  1365,  1366,  1372,  1376,  1377,  1381,  1382,
+  1385,  1386,  1387,  1390,  1391,  1394,  1395,  1396,  1397,  1400,
+  1401,  1404,  1405,  1408,  1409,  1410,  1413,  1413,  1414,  1415,
+  1418,  1430,  1446,  1447,  1450,  1451,  1452,  1455,  1456,  1459,
+  1461,  1462,  1464,  1465,  1467,  1469,  1471,  1473,  1479,  1480,
+  1481,  1482,  1483,  1484,  1485,  1486,  1487,  1491,  1494,  1497,
+  1498,  1502,  1504,  1506,  1508,  1512,  1513,  1515,  1519,  1521,
+  1523,  1526,  1527,  1528,  1529,  1530,  1531,  1532,  1533,  1534,
+  1535,  1536,  1537,  1538,  1541,  1542,  1547,  1550,  1553,  1554,
+  1557,  1558,  1559,  1560,  1561,  1562,  1563,  1564,  1565,  1566,
+  1567,  1570,  1571,  1578,  1579,  1585,  1586,  1587,  1588,  1591,
+  1592,  1593,  1594,  1597,  1598,  1602,  1605,  1608,  1611,  1614,
+  1617,  1620,  1621,  1622,  1623,  1625,  1626,  1628,  1630,  1636,
+  1640,  1642,  1644,  1646,  1650,  1651,  1654,  1655,  1658,  1659,
+  1662,  1663,  1666,  1667,  1670,  1671,  1674,  1675,  1676,  1679,
+  1692,  1697,  1698,  1702,  1703,  1706,  1711,  1714,  1715,  1716,
+  1724,  1725,  1725,  1729,  1730,  1731,  1742,  1749,  1750,  1753,
+  1754,  1757,  1758,  1759,  1760,  1761,  1763,  1764,  1765,  1766,
+  1769,  1770,  1771,  1772,  1773,  1774,  1775,  1776,  1777,  1778,
+  1781,  1782,  1785,  1786,  1787,  1788,  1791,  1792,  1793,  1796,
+  1797,  1798,  1801,  1802,  1803,  1804,  1805,  1808,  1809,  1810,
+  1813,  1814,  1817,  1818,  1822,  1823,  1826,  1827,  1830,  1831,
+  1834,  1835,  1836,  1837,  1840,  1841,  1842,  1843,  1844,  1845,
+  1846,  1847,  1848,  1849,  1850,  1851,  1854,  1855,  1858,  1861,
+  1863,  1865,  1869,  1870,  1872,  1874,  1877,  1878,  1879,  1881,
+  1882,  1883,  1884,  1885,  1886,  1887,  1890,  1891,  1894,  1895,
+  1898,  1901,  1902,  1903,  1904,  1905,  1908,  1909,  1910,  1911
 };
 #endif
 
@@ -809,20 +811,20 @@ static const char * const yytname[] = {   "$","error","$undefined.","BADTOK",
 "TENDMACRO","QSWITCHBREAK","QLOOPBREAK","QINNERBREAK","QSAFEBREAK","QINNERCONTINUE",
 "QFALLTHROUGH","QLINTNOTREACHED","QLINTFALLTHROUGH","QLINTFALLTHRU","QARGSUSED",
 "QPRINTFLIKE","QLINTPRINTFLIKE","QSCANFLIKE","QMESSAGELIKE","QNOTREACHED","QCONST",
-"QVOLATILE","QINLINE","QEXTENSION","QEXTERN","QSTATIC","QAUTO","QREGISTER","QOUT",
-"QIN","QYIELD","QONLY","QTEMP","QSHARED","QREF","QUNIQUE","QCHECKED","QUNCHECKED",
-"QCHECKEDSTRICT","QCHECKMOD","QKEEP","QKEPT","QPARTIAL","QSPECIAL","QOWNED",
-"QDEPENDENT","QRETURNED","QEXPOSED","QNULL","QOBSERVER","QISNULL","QEXITS","QMAYEXIT",
-"QNEVEREXIT","QTRUEEXIT","QFALSEEXIT","QLONG","QSIGNED","QUNSIGNED","QSHORT",
-"QUNUSED","QSEF","QNOTNULL","QRELNULL","QABSTRACT","QCONCRETE","QMUTABLE","QIMMUTABLE",
-"QTRUENULL","QFALSENULL","QEXTERNAL","QREFCOUNTED","QREFS","QNEWREF","QTEMPREF",
-"QKILLREF","QRELDEF","CGCHAR","CBOOL","CINT","CGFLOAT","CDOUBLE","CVOID","QANYTYPE",
-"QINTEGRALTYPE","QUNSIGNEDINTEGRALTYPE","QSIGNEDINTEGRALTYPE","QNULLTERMINATED",
-"QSETBUFFERSIZE","QSETSTRINGLENGTH","QMAXSET","QMAXREAD","QTESTINRANGE","TCAND",
-"IDENTIFIER","NEW_IDENTIFIER","TYPE_NAME_OR_ID","CANNOTATION","CCONSTANT","ITER_NAME",
-"ITER_ENDNAME","TYPE_NAME","METASTATE_NAME","file","externalDefs","externalDef",
-"constantDecl","fcnDecl","@1","plainFcn","plainNamedDecl","namedDeclBase","@2",
-"@3","plainNamedDeclBase","@4","@5","iterDecl","@6","@7","macroDef","fcnDefHdr",
+"QRESTRICT","QVOLATILE","QINLINE","QEXTENSION","QEXTERN","QSTATIC","QAUTO","QREGISTER",
+"QOUT","QIN","QYIELD","QONLY","QTEMP","QSHARED","QREF","QUNIQUE","QCHECKED",
+"QUNCHECKED","QCHECKEDSTRICT","QCHECKMOD","QKEEP","QKEPT","QPARTIAL","QSPECIAL",
+"QOWNED","QDEPENDENT","QRETURNED","QEXPOSED","QNULL","QOBSERVER","QISNULL","QEXITS",
+"QMAYEXIT","QNEVEREXIT","QTRUEEXIT","QFALSEEXIT","QLONG","QSIGNED","QUNSIGNED",
+"QSHORT","QUNUSED","QSEF","QNOTNULL","QRELNULL","QABSTRACT","QCONCRETE","QMUTABLE",
+"QIMMUTABLE","QTRUENULL","QFALSENULL","QEXTERNAL","QREFCOUNTED","QREFS","QNEWREF",
+"QTEMPREF","QKILLREF","QRELDEF","CGCHAR","CBOOL","CINT","CGFLOAT","CDOUBLE",
+"CVOID","QANYTYPE","QINTEGRALTYPE","QUNSIGNEDINTEGRALTYPE","QSIGNEDINTEGRALTYPE",
+"QNULLTERMINATED","QSETBUFFERSIZE","QSETSTRINGLENGTH","QMAXSET","QMAXREAD","QTESTINRANGE",
+"TCAND","IDENTIFIER","NEW_IDENTIFIER","TYPE_NAME_OR_ID","CANNOTATION","CCONSTANT",
+"ITER_NAME","ITER_ENDNAME","TYPE_NAME","METASTATE_NAME","file","externalDefs",
+"externalDef","constantDecl","fcnDecl","@1","plainFcn","plainNamedDecl","namedDeclBase",
+"@2","@3","plainNamedDeclBase","@4","@5","iterDecl","@6","@7","macroDef","fcnDefHdr",
 "metaStateConstraint","metaStateSpecifier","@8","@9","metaStateExpression","metaStateName",
 "constraintSeperator","BufConstraintList","BufConstraint","bufferModifier","relationalOp",
 "BufConstraintExpr","BufConstraintTerm","BufConstraintSrefExpr","BufUnaryOp",
@@ -868,76 +870,76 @@ static const char * const yytname[] = {   "$","error","$undefined.","BADTOK",
 #endif
 
 static const short yyr1[] = {     0,
-   194,   194,   195,   195,   196,   196,   196,   196,   196,   196,
-   196,   196,   197,   197,   199,   198,   200,   200,   201,   201,
-   202,   202,   202,   202,   203,   202,   204,   202,   205,   205,
-   205,   205,   206,   205,   207,   205,   209,   210,   208,   211,
-   211,   211,   211,   212,   213,   215,   214,   216,   214,   217,
-   217,   218,   219,   219,   220,   220,   221,   222,   222,   223,
-   223,   223,   224,   224,   224,   225,   225,   226,   226,   226,
-   226,   226,   226,   226,   226,   227,   228,   228,   229,   229,
-   230,   230,   231,   231,   231,   231,   231,   231,   232,   232,
-   232,   232,   232,   232,   233,   235,   234,   236,   237,   239,
-   238,   240,   240,   241,   242,   242,   243,   244,   244,   245,
-   245,   246,   247,   247,   248,   248,   248,   249,   249,   249,
-   249,   249,   250,   250,   250,   250,   250,   251,   251,   252,
-   252,   254,   253,   255,   256,   253,   257,   258,   258,   259,
-   259,   259,   259,   259,   259,   259,   259,   260,   260,   261,
-   261,   262,   262,   262,   262,   262,   262,   262,   262,   263,
-   263,   264,   264,   265,   265,   265,   265,   265,   265,   266,
-   265,   267,   267,   267,   267,   267,   267,   267,   267,   267,
-   267,   268,   268,   269,   269,   269,   269,   269,   269,   269,
-   269,   269,   269,   269,   270,   270,   270,   271,   273,   272,
-   274,   274,   274,   274,   275,   275,   276,   276,   276,   276,
-   277,   277,   277,   278,   278,   278,   279,   279,   279,   279,
-   279,   280,   280,   280,   281,   281,   282,   282,   283,   283,
-   284,   285,   284,   286,   287,   286,   288,   289,   290,   288,
-   291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
-   291,   291,   292,   292,   293,   293,   294,   295,   295,   295,
-   296,   297,   296,   298,   296,   299,   300,   299,   302,   301,
-   301,   301,   303,   304,   305,   306,   306,   307,   307,   308,
-   308,   308,   308,   309,   309,   310,   310,   311,   311,   312,
-   312,   313,   313,   313,   313,   313,   314,   316,   315,   317,
-   318,   320,   319,   321,   319,   322,   322,   323,   323,   323,
-   323,   323,   324,   324,   324,   324,   325,   325,   325,   325,
-   325,   325,   325,   325,   325,   325,   325,   325,   325,   325,
-   325,   325,   325,   326,   326,   327,   327,   328,   328,   329,
-   329,   329,   329,   330,   330,   330,   330,   330,   330,   331,
-   331,   331,   331,   332,   332,   332,   332,   333,   333,   333,
-   333,   333,   333,   333,   333,   333,   333,   333,   334,   334,
-   334,   334,   334,   334,   334,   334,   334,   334,   334,   334,
-   334,   334,   335,   336,   336,   337,   337,   338,   338,   338,
-   339,   339,   340,   342,   343,   341,   344,   345,   341,   341,
-   341,   346,   347,   341,   348,   349,   341,   341,   341,   341,
-   341,   350,   351,   351,   351,   352,   352,   353,   353,   354,
-   354,   354,   355,   356,   355,   355,   357,   357,   357,   358,
-   358,   359,   359,   359,   359,   360,   360,   361,   361,   362,
-   362,   363,   363,   364,   364,   364,   364,   365,   365,   366,
-   366,   367,   367,   367,   369,   368,   370,   368,   371,   371,
-   372,   372,   373,   373,   373,   374,   374,   375,   375,   375,
-   375,   375,   375,   375,   375,   375,   376,   376,   376,   376,
-   376,   376,   376,   376,   376,   377,   378,   379,   379,   380,
-   380,   380,   380,   382,   383,   381,   385,   384,   384,   386,
-   386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
-   386,   386,   388,   387,   389,   390,   391,   391,   392,   392,
-   392,   392,   392,   392,   392,   392,   392,   392,   392,   393,
-   393,   394,   394,   396,   395,   397,   395,   399,   398,   400,
-   398,   401,   401,   402,   403,   404,   405,   406,   407,   408,
-   408,   408,   408,   408,   408,   408,   408,   409,   410,   410,
-   410,   410,   411,   411,   412,   412,   413,   413,   414,   414,
-   415,   415,   416,   416,   417,   417,   417,   418,   419,   420,
-   419,   421,   419,   422,   423,   425,   426,   424,   427,   428,
-   427,   429,   429,   429,   429,   430,   430,   431,   431,   432,
-   432,   432,   432,   432,   432,   432,   432,   432,   433,   433,
-   433,   433,   433,   433,   433,   433,   433,   433,   434,   434,
-   435,   435,   435,   435,   436,   436,   436,   437,   437,   437,
-   438,   438,   438,   438,   438,   439,   439,   439,   440,   440,
-   441,   441,   442,   442,   443,   443,   444,   444,   445,   446,
-   447,   445,   448,   448,   448,   448,   448,   448,   448,   448,
-   448,   448,   448,   448,   449,   449,   450,   451,   451,   451,
-   452,   452,   452,   452,   453,   453,   453,   453,   453,   453,
-   453,   453,   453,   453,   454,   454,   455,   455,   456,   457,
-   457,   457,   457,   457,   458,   458,   458,   458
+   195,   195,   196,   196,   197,   197,   197,   197,   197,   197,
+   197,   197,   198,   198,   200,   199,   201,   201,   202,   202,
+   203,   203,   203,   203,   204,   203,   205,   203,   206,   206,
+   206,   206,   207,   206,   208,   206,   210,   211,   209,   212,
+   212,   212,   212,   213,   214,   216,   215,   217,   215,   218,
+   218,   219,   220,   220,   221,   221,   222,   223,   223,   224,
+   224,   224,   225,   225,   225,   226,   226,   227,   227,   227,
+   227,   227,   227,   227,   227,   228,   229,   229,   230,   230,
+   231,   231,   232,   232,   232,   232,   232,   232,   233,   233,
+   233,   233,   233,   233,   234,   236,   235,   237,   238,   240,
+   239,   241,   241,   242,   243,   243,   244,   245,   245,   246,
+   246,   247,   248,   248,   249,   249,   249,   250,   250,   250,
+   250,   250,   251,   251,   251,   251,   251,   252,   252,   253,
+   253,   255,   254,   256,   257,   254,   258,   259,   259,   260,
+   260,   260,   260,   260,   260,   260,   260,   261,   261,   262,
+   262,   263,   263,   263,   263,   263,   263,   263,   263,   264,
+   264,   265,   265,   266,   266,   266,   266,   266,   266,   267,
+   266,   268,   268,   268,   268,   268,   268,   268,   268,   268,
+   268,   269,   269,   270,   270,   270,   270,   270,   270,   270,
+   270,   270,   270,   270,   271,   271,   271,   272,   274,   273,
+   275,   275,   275,   275,   276,   276,   277,   277,   277,   277,
+   278,   278,   278,   279,   279,   279,   280,   280,   280,   280,
+   280,   281,   281,   281,   282,   282,   283,   283,   284,   284,
+   285,   286,   285,   287,   288,   287,   289,   290,   291,   289,
+   292,   292,   292,   292,   292,   292,   292,   292,   292,   292,
+   292,   292,   293,   293,   294,   294,   295,   296,   296,   296,
+   297,   298,   297,   299,   297,   300,   301,   300,   303,   302,
+   302,   302,   304,   305,   306,   307,   307,   308,   308,   309,
+   309,   309,   309,   310,   310,   311,   311,   312,   312,   313,
+   313,   314,   314,   314,   314,   314,   315,   317,   316,   318,
+   319,   321,   320,   322,   320,   323,   323,   324,   324,   324,
+   324,   324,   325,   325,   325,   325,   326,   326,   326,   326,
+   326,   326,   326,   326,   326,   326,   326,   326,   326,   326,
+   326,   326,   326,   327,   327,   328,   328,   329,   329,   330,
+   330,   330,   330,   331,   331,   331,   331,   331,   331,   332,
+   332,   332,   332,   333,   333,   333,   333,   334,   334,   334,
+   334,   334,   334,   334,   334,   334,   334,   334,   334,   335,
+   335,   335,   335,   335,   335,   335,   335,   335,   335,   335,
+   335,   335,   335,   336,   337,   337,   338,   338,   339,   339,
+   339,   340,   340,   341,   343,   344,   342,   345,   346,   342,
+   342,   342,   347,   348,   342,   349,   350,   342,   342,   342,
+   342,   342,   351,   352,   352,   352,   353,   353,   354,   354,
+   355,   355,   355,   356,   357,   356,   356,   358,   358,   358,
+   359,   359,   360,   360,   360,   360,   361,   361,   362,   362,
+   363,   363,   363,   364,   364,   365,   365,   365,   365,   366,
+   366,   367,   367,   368,   368,   368,   370,   369,   371,   369,
+   372,   372,   373,   373,   374,   374,   374,   375,   375,   376,
+   376,   376,   376,   376,   376,   376,   376,   376,   377,   377,
+   377,   377,   377,   377,   377,   377,   377,   378,   379,   380,
+   380,   381,   381,   381,   381,   383,   384,   382,   386,   385,
+   385,   387,   387,   387,   387,   387,   387,   387,   387,   387,
+   387,   387,   387,   387,   389,   388,   390,   391,   392,   392,
+   393,   393,   393,   393,   393,   393,   393,   393,   393,   393,
+   393,   394,   394,   395,   395,   397,   396,   398,   396,   400,
+   399,   401,   399,   402,   402,   403,   404,   405,   406,   407,
+   408,   409,   409,   409,   409,   409,   409,   409,   409,   410,
+   411,   411,   411,   411,   412,   412,   413,   413,   414,   414,
+   415,   415,   416,   416,   417,   417,   418,   418,   418,   419,
+   420,   421,   420,   422,   420,   423,   424,   426,   427,   425,
+   428,   429,   428,   430,   430,   430,   430,   431,   431,   432,
+   432,   433,   433,   433,   433,   433,   433,   433,   433,   433,
+   434,   434,   434,   434,   434,   434,   434,   434,   434,   434,
+   435,   435,   436,   436,   436,   436,   437,   437,   437,   438,
+   438,   438,   439,   439,   439,   439,   439,   440,   440,   440,
+   441,   441,   442,   442,   443,   443,   444,   444,   445,   445,
+   446,   447,   448,   446,   449,   449,   449,   449,   449,   449,
+   449,   449,   449,   449,   449,   449,   450,   450,   451,   452,
+   452,   452,   453,   453,   453,   453,   454,   454,   454,   454,
+   454,   454,   454,   454,   454,   454,   455,   455,   456,   456,
+   457,   458,   458,   458,   458,   458,   459,   459,   459,   459
 };
 
 static const short yyr2[] = {     0,
@@ -979,1280 +981,1330 @@ static const short yyr2[] = {     0,
      1,     1,     1,     1,     1,     1,     1,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     3,     1,     4,     1,     3,     2,     2,     2,
-     0,     1,     0,     0,     0,    12,     0,     0,    11,     6,
-     6,     0,     0,    10,     0,     0,    10,     5,     5,     4,
-     4,     0,     1,     1,     2,     5,     3,     2,     4,     1,
-     3,     4,     6,     0,     8,     4,     1,     3,     2,     1,
-     4,     1,     1,     2,     2,     1,     2,     1,     2,     1,
-     1,     1,     2,     1,     2,     2,     3,     1,     3,     1,
-     3,     1,     1,     3,     0,     2,     0,     4,     4,     1,
-     1,     2,     1,     1,     2,     0,     1,     5,     2,     3,
-     3,     4,     3,     4,     4,     5,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
-     7,     6,     2,     0,     0,    10,     0,     6,     1,     1,
-     1,     1,     2,     1,     1,     1,     1,     1,     1,     1,
-     3,     1,     0,     3,     2,     2,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     3,     1,     1,     2,
-     2,     0,     2,     0,     4,     0,     6,     0,     3,     0,
-     5,     3,     2,     3,     0,     0,     0,     0,     0,     1,
-     2,     2,     3,     2,     3,     3,     4,     2,     2,     3,
-     3,     4,     1,     2,     1,     2,     1,     3,     1,     4,
-     1,     2,     1,     2,     1,     2,     1,     4,     2,     0,
-     5,     0,     6,     4,     4,     0,     0,    10,     1,     0,
-     4,     1,     1,     1,     1,     1,     2,     1,     3,     1,
-     4,     3,     4,     6,     5,     5,     2,     2,     1,     2,
-     2,     2,     2,     2,     2,     2,     2,     1,     1,     4,
-     1,     3,     3,     3,     1,     3,     3,     1,     3,     3,
-     1,     3,     3,     3,     3,     1,     3,     3,     1,     3,
-     1,     3,     1,     3,     1,     3,     1,     3,     1,     0,
-     0,     7,     1,     3,     3,     3,     3,     3,     3,     3,
-     3,     3,     3,     3,     1,     0,     1,     2,     7,     2,
-     2,     7,     6,     2,     3,     2,     3,     2,     3,     3,
-     3,     3,     2,     3,     0,     1,     0,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     4,     4
+     2,     2,     2,     3,     1,     4,     1,     3,     2,     2,
+     2,     0,     1,     0,     0,     0,    12,     0,     0,    11,
+     6,     6,     0,     0,    10,     0,     0,    10,     5,     5,
+     4,     4,     0,     1,     1,     2,     5,     3,     2,     4,
+     1,     3,     4,     6,     0,     8,     4,     1,     3,     2,
+     1,     4,     1,     1,     2,     2,     1,     2,     1,     2,
+     1,     1,     1,     1,     2,     1,     2,     2,     3,     1,
+     3,     1,     3,     1,     1,     3,     0,     2,     0,     4,
+     4,     1,     1,     2,     1,     1,     2,     0,     1,     5,
+     2,     3,     3,     4,     3,     4,     4,     5,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     2,     2,     7,     6,     2,     0,     0,    10,     0,     6,
+     1,     1,     1,     1,     2,     1,     1,     1,     1,     1,
+     1,     1,     3,     1,     0,     3,     2,     2,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
+     1,     2,     2,     0,     2,     0,     4,     0,     6,     0,
+     3,     0,     5,     3,     2,     3,     0,     0,     0,     0,
+     0,     1,     2,     2,     3,     2,     3,     3,     4,     2,
+     2,     3,     3,     4,     1,     2,     1,     2,     1,     3,
+     1,     4,     1,     2,     1,     2,     1,     2,     1,     4,
+     2,     0,     5,     0,     6,     4,     4,     0,     0,    10,
+     1,     0,     4,     1,     1,     1,     1,     1,     2,     1,
+     3,     1,     4,     3,     4,     6,     5,     5,     2,     2,
+     1,     2,     2,     2,     2,     2,     2,     2,     2,     1,
+     1,     4,     1,     3,     3,     3,     1,     3,     3,     1,
+     3,     3,     1,     3,     3,     3,     3,     1,     3,     3,
+     1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
+     1,     0,     0,     7,     1,     3,     3,     3,     3,     3,
+     3,     3,     3,     3,     3,     3,     1,     0,     1,     2,
+     7,     2,     2,     7,     6,     2,     3,     2,     3,     2,
+     3,     3,     3,     3,     2,     3,     0,     1,     0,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     4,     4
 };
 
 static const short yydefact[] = {     0,
-    12,    11,   444,     0,   412,   259,   412,    15,     0,     0,
-     0,     0,   273,   273,   293,   292,   294,   295,   296,   354,
-   355,   319,   321,   320,   324,   325,   313,   315,   316,   314,
-   322,   323,   356,   357,   317,   318,   334,   330,   326,   331,
-   327,   308,   309,   312,   310,   311,   351,   352,   353,   350,
-   336,   335,   329,   328,   340,   341,   342,   343,   338,   339,
-   337,   344,   345,   348,   349,   346,   347,   412,   412,   412,
-   412,   412,   412,   412,   412,   412,   412,   332,   689,   690,
-   694,   333,   691,   692,   695,     0,     3,     6,     7,   436,
-     8,     9,   134,    44,   685,    10,   258,   260,     0,   391,
-   273,   273,   273,   273,   273,   273,   273,   273,   412,   273,
-   391,   391,   412,   384,   412,     0,   412,   130,   273,   693,
-    21,   412,   440,   441,   442,   445,   446,   273,   276,   273,
-   273,   269,   412,   696,   412,   412,   694,     0,   529,   273,
-   538,     0,     0,     0,   667,     0,     0,     0,     0,   273,
-   575,     0,   273,   273,   273,   273,   273,   273,   273,   273,
-   273,     0,    43,     0,     0,     0,     0,     0,   532,   273,
-   169,   165,   168,   596,   586,   172,   184,   205,   194,   193,
-   207,   211,   214,   217,   222,   225,   227,   229,   231,   234,
-   237,   241,   253,   577,   199,     0,     0,   563,   519,   520,
-   521,   522,     0,     0,   523,   273,   524,     0,   525,   166,
-     0,   526,   528,   164,     0,   512,     0,   573,     0,   545,
-   499,     0,     0,     0,   508,     0,   509,   488,   507,   504,
-   505,   500,   501,   502,     0,     0,   506,   513,     0,     0,
-   510,   487,     0,   358,   359,   369,   371,   370,   372,   373,
-   374,   375,   376,   377,   378,     4,   273,     0,   132,   137,
-   412,   686,     5,   412,   392,   388,   362,   364,   361,   363,
-   366,   365,   367,   368,   382,   360,   389,   390,     0,   273,
-   273,   380,   273,   273,     0,   381,   437,   379,   443,   447,
-   273,   165,   168,     0,   412,   461,     0,   164,   412,     0,
-   275,   412,     0,   266,   273,   685,    17,    19,     0,   412,
-   273,    29,   455,   205,   257,   534,     0,   273,   273,   273,
-   273,     0,   676,   678,   683,     0,   545,     0,     0,     0,
-   187,   192,   191,   190,   189,   188,     0,   273,   185,   186,
-   273,     0,     0,     0,     0,     0,   532,     0,   273,   531,
-   273,   477,   478,   479,   480,     0,   481,   482,   273,   484,
-   273,   483,   485,   545,   273,   273,   179,   180,     0,   273,
+    12,    11,   446,     0,   413,   259,   413,    15,     0,     0,
+     0,     0,   273,   273,   273,   293,   292,   294,   295,   296,
+   354,   355,   319,   321,   320,   324,   325,   313,   315,   316,
+   314,   322,   323,   356,   357,   317,   318,   334,   330,   326,
+   331,   327,   308,   309,   312,   310,   311,   351,   352,   353,
+   350,   336,   335,   329,   328,   340,   341,   342,   343,   338,
+   339,   337,   344,   345,   348,   349,   346,   347,   413,   413,
+   413,   413,   413,   413,   413,   413,   413,   413,   332,   691,
+   692,   696,   333,   693,   694,   697,     0,     3,     6,     7,
+   437,     8,     9,   134,    44,   687,    10,   258,   260,     0,
+   392,   273,   273,   273,   273,   273,   273,   273,   273,   413,
+   273,   392,   392,   413,   385,   413,     0,   413,   130,   273,
+   695,    21,   413,   441,   442,   443,   444,   447,   448,   273,
+   276,   273,   273,   269,   413,   698,   413,   413,   696,     0,
+   531,   273,   540,     0,     0,     0,   669,     0,     0,     0,
+     0,   273,   577,     0,   273,   273,   273,   273,   273,   273,
+   273,   273,   273,     0,    43,     0,     0,     0,     0,     0,
+   534,   273,   169,   165,   168,   598,   588,   172,   184,   205,
+   194,   193,   207,   211,   214,   217,   222,   225,   227,   229,
+   231,   234,   237,   241,   253,   579,   199,     0,     0,   565,
+   521,   522,   523,   524,     0,     0,   525,   273,   526,     0,
+   527,   166,     0,   528,   530,   164,     0,   514,     0,   575,
+     0,   547,   501,     0,     0,     0,   510,     0,   511,   490,
+   509,   506,   507,   502,   503,   504,     0,     0,   508,   515,
+     0,     0,   512,   489,     0,   358,   360,   359,   370,   372,
+   371,   373,   374,   375,   376,   377,   378,   379,     4,   273,
+     0,   132,   137,   413,   688,     5,   413,   393,   389,   363,
+   365,   362,   364,   367,   366,   368,   369,   383,   361,   390,
+   391,     0,   273,   273,   381,   273,   273,     0,   382,   438,
+   380,   445,   449,   273,   165,   168,     0,   413,   463,     0,
+   164,   413,     0,   275,   413,     0,   266,   273,   687,    17,
+    19,     0,   413,   273,    29,   457,   205,   257,   536,     0,
+   273,   273,   273,   273,     0,   678,   680,   685,     0,   547,
+     0,     0,     0,   187,   192,   191,   190,   189,   188,     0,
+   273,   185,   186,   273,     0,     0,     0,     0,     0,   534,
+     0,   273,   533,   273,   479,   480,   481,   482,     0,   483,
+   484,   273,   486,   273,   485,   487,   547,   273,   273,   179,
+   180,     0,   273,   273,   273,   273,   273,   273,   273,   273,
    273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
+   273,   273,   273,   273,   273,   273,   273,   273,   273,   232,
+   238,   235,   578,   273,     0,   676,    40,     0,   548,   566,
+   581,   673,   599,     0,   532,   273,     0,     0,     0,   576,
+    41,   491,   495,   567,   413,   505,   517,   518,     0,     0,
+     0,    42,    23,   273,   457,   413,   413,   273,   261,   131,
+   413,     0,   387,     0,   413,     0,   413,     0,   273,     0,
+   699,   273,   273,     0,   465,   464,   466,   700,   273,   272,
+   273,   271,   267,   413,     0,   273,     0,   413,   273,    20,
+   454,     0,     0,   439,   455,   273,     0,   541,     0,   584,
+     0,   256,     0,   677,   686,   547,     0,   167,   273,   529,
+   273,     0,     0,   681,   682,   683,   684,   679,   535,   273,
+   542,     0,   672,   413,   545,   670,     0,     0,   174,     0,
+   182,     0,     0,     0,   242,   243,   244,   245,   246,   247,
+   248,   249,   250,   251,   252,   208,   209,   210,   213,   212,
+   215,   216,   218,   219,   220,   221,   223,   224,   226,   228,
+   230,   273,   273,   273,   254,   273,   273,   200,   561,   698,
+   565,     0,   413,   546,   582,     0,     0,   513,   499,   273,
+   568,   516,     0,     0,    25,     0,   552,   273,   573,   133,
+   413,   273,   547,   273,   262,   386,   273,   403,     0,   411,
+   406,     0,   412,     0,   428,   431,   425,   427,   384,   471,
+     0,   457,   467,   273,     0,   277,   273,   273,   687,    16,
+    31,   273,   457,   273,    18,   440,   450,   452,    37,   459,
+   413,   458,   462,   537,   580,     0,   586,   273,   171,   273,
+   206,   413,     0,   273,   538,     0,   544,   560,     0,   589,
+   273,   175,   173,   273,   273,   233,     0,   236,   273,   202,
+   273,   204,   562,   563,   273,   273,   273,   587,   273,   413,
+   273,   413,    79,    27,   553,   556,   273,   273,   554,   273,
+   574,   136,     0,   264,   273,   388,   409,   549,   395,   410,
+   549,   398,   273,   430,   273,     0,   472,   475,   273,     0,
+   473,     0,   457,   106,   273,   273,   273,     0,    33,     0,
+   273,     0,    81,   456,   273,   468,   273,     0,   273,   571,
+   689,   569,     0,     0,     0,   543,   273,   273,   183,   177,
+   178,   239,     0,     0,   564,   583,     0,   273,   273,   273,
+   273,   273,   273,   273,   273,   273,     0,   165,   168,   184,
+   205,   193,   211,   214,   217,   222,   225,   227,   229,   231,
+   234,     0,   592,   591,   166,   602,   611,   621,   623,   627,
+   630,   633,   638,   641,   643,   645,   647,   649,   651,   655,
+   594,   164,     0,    24,     0,    96,   100,    98,   123,   124,
+   125,   126,   127,   128,   129,    26,    79,    83,     0,    85,
+    84,     0,    88,     0,   413,   413,    86,     0,    87,   304,
+     0,    79,   557,   558,   273,   555,    22,   273,   278,   413,
+   401,   549,   413,   402,   549,   424,   429,   273,     0,     0,
+   476,   474,   477,     0,     0,   105,   273,   273,     0,   280,
+   268,   273,     0,   286,     0,   273,     0,   413,    81,    35,
+     0,   451,   453,    38,    81,    89,    91,    90,    94,    92,
+    93,   460,   433,     0,   273,   468,   434,   469,   585,   496,
+   689,   273,     0,     0,   176,   539,     0,   592,   273,   201,
+   203,   675,     0,     0,   187,   192,   191,   190,   189,   188,
+   185,   186,   273,   273,   273,   179,   180,     0,   273,   273,
    273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
-   273,   273,   273,   273,   273,   273,   232,   238,   235,   576,
-   273,     0,   674,    40,     0,   546,   564,   579,   671,   597,
-     0,   530,   273,     0,     0,     0,   574,    41,   489,   493,
-   565,   412,   503,   515,   516,     0,     0,     0,    42,    23,
-   273,   455,   412,   412,   273,   261,   131,   412,     0,   386,
-     0,   412,     0,   412,     0,   273,     0,   697,   273,   273,
-     0,   463,   462,   464,   698,   273,   272,   273,   271,   267,
-   412,     0,   273,     0,   412,   273,    20,   452,     0,     0,
-   438,   453,   273,     0,   539,     0,   582,     0,   256,     0,
-   675,   684,   545,     0,   167,   273,   527,   273,     0,     0,
-   679,   680,   681,   682,   677,   533,   273,   540,     0,   670,
-   412,   543,   668,     0,     0,   174,     0,   182,     0,     0,
-     0,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-   251,   252,   208,   209,   210,   213,   212,   215,   216,   218,
-   219,   220,   221,   223,   224,   226,   228,   230,   273,   273,
-   273,   254,   273,   273,   200,   559,   696,   563,     0,   412,
-   544,   580,     0,     0,   511,   497,   273,   566,   514,     0,
-     0,    25,     0,   550,   273,   571,   133,   412,   273,   545,
-   273,   262,   385,   273,   402,     0,   410,   405,     0,   411,
-     0,   427,   430,   424,   426,   383,   469,     0,   455,   465,
-   273,     0,   277,   273,   273,   685,    16,    31,   273,   455,
-   273,    18,   439,   448,   450,    37,   457,   412,   456,   460,
-   535,   578,     0,   584,   273,   171,   273,   206,   412,     0,
-   273,   536,     0,   542,   558,     0,   587,   273,   175,   173,
-   273,   273,   233,     0,   236,   273,   202,   273,   204,   560,
-   561,   273,   273,   273,   585,   273,   412,   273,   412,    79,
-    27,   551,   554,   273,   273,   552,   273,   572,   136,     0,
-   264,   273,   387,   408,   547,   394,   409,   547,   397,   273,
-   429,   273,     0,   470,   473,   273,     0,   471,     0,   455,
-   106,   273,   273,   273,     0,    33,     0,   273,     0,    81,
-   454,   273,   466,   273,     0,   273,   569,   687,   567,     0,
-     0,     0,   541,   273,   273,   183,   177,   178,   239,     0,
-     0,   562,   581,     0,   273,   273,   273,   273,   273,   273,
-   273,   273,   273,     0,   165,   168,   184,   205,   193,   211,
-   214,   217,   222,   225,   227,   229,   231,   234,     0,   590,
-   589,   166,   600,   609,   619,   621,   625,   628,   631,   636,
-   639,   641,   643,   645,   647,   649,   653,   592,   164,     0,
-    24,     0,    96,   100,    98,   123,   124,   125,   126,   127,
-   128,   129,    26,    79,    83,     0,    85,    84,     0,    88,
-     0,   412,   412,    86,     0,    87,   304,     0,    79,   555,
-   556,   273,   553,    22,   273,   278,   412,   400,   547,   412,
-   401,   547,   423,   428,   273,     0,     0,   474,   472,   475,
-     0,     0,   105,   273,   273,     0,   280,   268,   273,     0,
-   286,     0,   273,     0,   412,    81,    35,     0,   449,   451,
-    38,    81,    89,    91,    90,    94,    92,    93,   458,   432,
-     0,   273,   466,   433,   467,   583,   494,   687,   273,     0,
-     0,   176,   537,     0,   590,   273,   201,   203,   673,     0,
-     0,   187,   192,   191,   190,   189,   188,   185,   186,   273,
-   273,   273,   179,   180,     0,   273,   273,   273,   273,   273,
    273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
-   273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
-   273,   273,   232,   650,   235,   498,     0,   492,   104,   109,
-   102,   113,   685,    80,    95,    99,   107,   298,   301,   297,
-     0,   302,   300,    28,   557,   273,     0,   414,   412,   412,
-   413,   412,   412,   412,   431,   273,   468,   476,   270,   290,
-     0,     0,   289,   283,   284,   287,   285,   278,    13,    32,
-    34,    81,    30,   685,    82,   455,   459,   434,   435,   273,
-     0,   568,   181,     0,   197,     0,   545,   240,   672,   167,
-   273,     0,   174,     0,     0,     0,     0,   654,   655,   656,
-   657,   658,   659,   660,   661,   662,   663,   664,   208,   209,
-   210,   213,   212,   215,   216,   218,   219,   220,   221,   223,
-   224,   226,   228,   230,   646,   273,   648,   273,   491,   108,
-     0,   118,   119,   120,   121,   122,   685,   110,   412,   113,
-     0,     0,   141,   101,   150,   685,   139,   140,     0,    48,
-     0,     0,    58,    59,    69,    67,   307,     0,   306,    56,
-    76,     0,    63,    66,     0,   685,    68,   160,   278,   273,
-   412,     0,   273,   415,   403,   412,   406,   412,   425,   281,
-   273,   288,   685,    36,     0,   273,   495,   570,   273,   273,
-     0,   669,   666,   206,   273,   175,   173,   273,   273,     0,
-   591,   103,   113,    97,   116,   112,   117,   115,   114,     0,
-   144,     0,     0,     0,     0,   138,     0,     0,   153,   162,
-   685,   152,     0,     0,    66,     0,    72,     0,    54,    53,
-     0,    61,    60,    62,     0,     0,     0,     0,     0,     0,
-   273,   685,   161,     0,   263,   273,   417,   273,   273,   412,
-   420,     0,   395,     0,   398,   282,   291,     0,    39,   273,
-     0,   198,     0,   195,   665,   546,     0,   177,   178,   651,
-   111,   145,   142,   148,     0,   149,   146,   147,   151,     0,
-   156,     0,     0,     0,     0,   273,     0,    78,    77,     0,
-    73,     0,    50,    45,    46,    55,    66,    57,    70,     0,
-    74,    75,     0,     0,   305,   273,   273,   279,   273,   273,
-     0,   418,   273,   404,     0,   407,     0,    14,   496,   196,
-   588,   176,   273,   143,   157,   154,     0,   158,   159,   163,
-   299,    52,    49,     0,     0,    71,    47,    64,   303,   265,
-   421,   412,   416,   273,   393,   399,   652,   155,    65,    51,
-   419,   422,   396,     0,     0,     0
+   273,   273,   273,   273,   273,   232,   652,   235,   500,     0,
+   494,   104,   109,   102,   113,   687,    80,    95,    99,   107,
+   298,   301,   297,     0,   302,   300,    28,   559,   273,     0,
+   415,   413,   413,   414,   413,   413,   413,   432,   273,   470,
+   478,   270,   290,     0,     0,   289,   283,   284,   287,   285,
+   278,    13,    32,    34,    81,    30,   687,    82,   457,   461,
+   435,   436,   273,     0,   570,   181,     0,   197,     0,   547,
+   240,   674,   167,   273,     0,   174,     0,     0,     0,     0,
+   656,   657,   658,   659,   660,   661,   662,   663,   664,   665,
+   666,   208,   209,   210,   213,   212,   215,   216,   218,   219,
+   220,   221,   223,   224,   226,   228,   230,   648,   273,   650,
+   273,   493,   108,     0,   118,   119,   120,   121,   122,   687,
+   110,   413,   113,     0,     0,   141,   101,   150,   687,   139,
+   140,     0,    48,     0,     0,    58,    59,    69,    67,   307,
+     0,   306,    56,    76,     0,    63,    66,     0,   687,    68,
+   160,   278,   273,   413,     0,   273,   416,   404,   413,   407,
+   413,   426,   281,   273,   288,   687,    36,     0,   273,   497,
+   572,   273,   273,     0,   671,   668,   206,   273,   175,   173,
+   273,   273,     0,   593,   103,   113,    97,   116,   112,   117,
+   115,   114,     0,   144,     0,     0,     0,     0,   138,     0,
+     0,   153,   162,   687,   152,     0,     0,    66,     0,    72,
+     0,    54,    53,     0,    61,    60,    62,     0,     0,     0,
+     0,     0,     0,   273,   687,   161,     0,   263,   273,   418,
+   273,   273,   413,   421,     0,   396,     0,   399,   282,   291,
+     0,    39,   273,     0,   198,     0,   195,   667,   548,     0,
+   177,   178,   653,   111,   145,   142,   148,     0,   149,   146,
+   147,   151,     0,   156,     0,     0,     0,     0,   273,     0,
+    78,    77,     0,    73,     0,    50,    45,    46,    55,    66,
+    57,    70,     0,    74,    75,     0,     0,   305,   273,   273,
+   279,   273,   273,     0,   419,   273,   405,     0,   408,     0,
+    14,   498,   196,   590,   176,   273,   143,   157,   154,     0,
+   158,   159,   163,   299,    52,    49,     0,     0,    71,    47,
+    64,   303,   265,   422,   413,   417,   273,   394,   400,   654,
+   155,    65,    51,   420,   423,   397,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1234,
-    86,    87,    88,    89,   136,   306,   307,    90,   650,   789,
-   308,   826,   952,    91,   690,   954,   928,    93,  1037,  1173,
-  1119,  1103,  1174,  1213,  1111,  1039,  1040,  1041,  1115,  1042,
-  1043,  1177,  1045,  1170,   773,   831,   774,   832,   775,   833,
-   912,   834,   778,   835,   913,   910,   911,   812,   780,   781,
-  1017,  1018,  1019,  1086,  1020,   782,   783,    94,   260,   433,
-   261,   570,    95,  1024,  1154,  1155,  1026,  1100,  1122,  1101,
-   176,   327,   177,   507,   178,   964,   179,   180,   402,   545,
-   181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-   539,   191,   541,   192,   540,   856,   193,   222,   480,   316,
-   421,    97,   662,   795,   129,   595,    98,   302,   195,   258,
-   130,   131,   927,   818,   819,   820,   821,   941,   100,   784,
-   837,  1029,   786,   787,   838,  1048,   921,  1046,   101,   102,
-   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-   296,   422,   439,   114,   266,  1233,   115,   799,  1195,   802,
-  1197,   665,  1132,   668,  1134,   116,   930,   931,  1129,  1130,
-   117,   673,   581,   582,   842,   133,   470,   125,   126,   119,
-   603,   604,   471,   472,   473,   692,   609,   329,   807,   844,
-   454,   350,   223,   243,   224,   225,   351,   960,  1141,   227,
-   646,   228,   229,   426,   230,   231,   197,   407,   352,   348,
-   353,   474,   702,   354,   317,   623,   355,   202,   356,   551,
-   797,  1055,   236,   567,   502,   406,   204,   568,   698,   699,
-   569,   357,   205,   206,   358,   643,   613,   359,   239,   360,
-   364,   705,   740,   907,   741,   210,   743,   744,   745,   746,
-   747,   748,   749,   750,   751,   752,   753,   754,   755,   756,
-   757,  1006,  1203,   758,  1146,   361,   362,   212,   363,   263,
-   850,   298,   215,   122
+static const short yydefgoto[] = {  1237,
+    87,    88,    89,    90,   138,   309,   310,    91,   653,   792,
+   311,   829,   955,    92,   693,   957,   931,    94,  1040,  1176,
+  1122,  1106,  1177,  1216,  1114,  1042,  1043,  1044,  1118,  1045,
+  1046,  1180,  1048,  1173,   776,   834,   777,   835,   778,   836,
+   915,   837,   781,   838,   916,   913,   914,   815,   783,   784,
+  1020,  1021,  1022,  1089,  1023,   785,   786,    95,   263,   436,
+   264,   573,    96,  1027,  1157,  1158,  1029,  1103,  1125,  1104,
+   178,   330,   179,   510,   180,   967,   181,   182,   405,   548,
+   183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+   542,   193,   544,   194,   543,   859,   195,   224,   483,   319,
+   424,    98,   665,   798,   131,   598,    99,   305,   197,   261,
+   132,   133,   930,   821,   822,   823,   824,   944,   101,   787,
+   840,  1032,   789,   790,   841,  1051,   924,  1049,   102,   103,
+   104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+   299,   425,   442,   115,   269,  1236,   116,   802,  1198,   805,
+  1200,   668,  1135,   671,  1137,   117,   933,   934,  1132,  1133,
+   118,   676,   584,   585,   845,   135,   473,   127,   128,   120,
+   606,   607,   474,   475,   476,   695,   612,   332,   810,   847,
+   457,   353,   225,   245,   226,   227,   354,   963,  1144,   229,
+   649,   230,   231,   429,   232,   233,   199,   410,   355,   351,
+   356,   477,   705,   357,   320,   626,   358,   204,   359,   554,
+   800,  1058,   238,   570,   505,   409,   206,   571,   701,   702,
+   572,   360,   207,   208,   361,   646,   616,   362,   241,   363,
+   367,   708,   743,   910,   744,   212,   746,   747,   748,   749,
+   750,   751,   752,   753,   754,   755,   756,   757,   758,   759,
+   760,  1009,  1206,   761,  1149,   364,   365,   214,   366,   266,
+   853,   301,   217,   123
 };
 
-static const short yypact[] = {  2011,
--32768,-32768,    26,    33,  5183,-32768,  6373,-32768,   864,  3073,
-  3373,  3373,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+static const short yypact[] = {  2065,
+-32768,-32768,   384,    46,  5282,-32768,  6580,-32768,   798,  3278,
+  3580,  3580,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   637,-32768,-32768,-32768,-32768,  2295,-32768,-32768,-32768,
+   413,-32768,-32768,   103,-32768,    79,-32768,-32768,-32768,   109,
+  6172,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  6172,  6172,   128,    70,-32768,   891,-32768,-32768,   798,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,   384,-32768,  5564,
+-32768,   183,-32768,   128,-32768,-32768,-32768,  5282,-32768,   162,
+-32768,  5564,-32768,   201,   231,   240,-32768,   280,   798,   293,
+   303,  1612,-32768,  2681,  5564,  5564,  5564,  5564,  5564,  5564,
+-32768,  5585,  5585,   333,-32768,   357,   385,   395,   428,   448,
+   404,  4793,-32768,   527,   556,-32768,   571,-32768,   848,  1096,
+-32768,-32768,-32768,  1019,   244,    59,   471,   279,   526,   557,
+   560,   565,   139,-32768,-32768,   126,-32768,  3625,   519,   567,
+-32768,-32768,-32768,-32768,   645,  3323,-32768,  4793,-32768,  3625,
+-32768,   460,  3625,-32768,-32768,   664,   710,-32768,   719,-32768,
+  2874,   571,   715,   368,   674,  3429,-32768,  3580,-32768,-32768,
+-32768,  5900,-32768,-32768,-32768,-32768,   783,   769,-32768,-32768,
+  3580,  3625,-32768,-32768,   756,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   836,
+   917,-32768,-32768,  6444,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   258,-32768,-32768,-32768,-32768,  2204,-32768,-32768,-32768,   250,
--32768,-32768,    12,-32768,    50,-32768,-32768,-32768,    52,  5968,
+-32768,   863,   765,-32768,-32768,   798,   798,   523,-32768,   413,
+-32768,-32768,-32768,  3368,-32768,-32768,   351,  5764,   393,   843,
+-32768,-32768,   912,-32768,-32768,   958,   886,   765,    79,-32768,
+   425,   954,-32768,   798,-32768,   302,-32768,-32768,-32768,   978,
+  5564,  5564,  5564,  1885,  1000,-32768,-32768,-32768,   462,   985,
+   242,   995,  1001,-32768,-32768,-32768,-32768,-32768,-32768,  1009,
+  3368,-32768,-32768,  5564,  1020,  1025,  1028,  1030,  1039,   404,
+   451,  3519,-32768,  4793,-32768,-32768,-32768,-32768,  1040,-32768,
+-32768,  4793,-32768,  4793,-32768,-32768,-32768,  5452,  5564,-32768,
+-32768,   134,  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,
+  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,
+  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,-32768,
+-32768,-32768,-32768,  5564,   389,-32768,-32768,  2488,-32768,-32768,
+  1054,-32768,-32768,  1057,-32768,  5564,   457,  1047,  1055,-32768,
+-32768,-32768,-32768,-32768,   128,  5900,-32768,-32768,  3580,  3172,
+  1071,-32768,-32768,  5564,    87,  3731,  4876,   765,-32768,   681,
+  6580,   992,  1067,  1072,  1073,  1074,  1073,   798,  1080,   375,
+-32768,-32768,  5463,  1066,   653,-32768,   770,-32768,   765,-32768,
+   765,-32768,-32768,-32768,  1021,  1086,  1092,-32768,   765,   425,
+-32768,   798,  1097,-32768,  1103,   798,  1105,-32768,   495,  1104,
+   588,  1104,  1110,-32768,-32768,   985,  1106,-32768,  4698,-32768,
+-32768,  1107,  1109,-32768,-32768,-32768,-32768,-32768,-32768,  5564,
+-32768,  1113,-32768,  3731,-32768,-32768,  1123,  1111,-32768,   640,
+-32768,   263,   798,   798,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1019,  1019,
+   244,   244,    59,    59,    59,    59,   471,   471,   279,   526,
+   557,  5564,  5564,  5564,-32768,  5596,  5628,-32768,-32768,  3067,
+-32768,  3474,  3919,-32768,-32768,  1115,   673,-32768,-32768,   765,
+-32768,-32768,  1116,  1114,-32768,  1117,-32768,  4295,-32768,-32768,
+  4107,  4340,   985,-32768,  1122,-32768,-32768,  1126,  1128,-32768,
+  1132,  1129,-32768,   506,-32768,  1130,-32768,-32768,-32768,-32768,
+  1137,   507,   770,  5495,  1145,-32768,   183,-32768,   273,-32768,
+-32768,  5564,   234,   765,-32768,-32768,  1150,-32768,-32768,  1167,
+  6580,-32768,-32768,-32768,-32768,  1149,-32768,  1885,-32768,  5202,
+-32768,-32768,  1170,-32768,-32768,  1168,-32768,-32768,  1172,-32768,
+  5564,-32768,-32768,-32768,-32768,   560,   470,   565,  3368,-32768,
+  3368,-32768,-32768,-32768,  4446,  4793,  5564,-32768,  5684,-32768,
+  5564,-32768,   922,-32768,-32768,-32768,  4491,  4597,-32768,  4642,
+-32768,-32768,  1169,-32768,-32768,-32768,-32768,-32768,  1177,-32768,
+-32768,  1179,-32768,   798,-32768,   798,-32768,-32768,   214,  1176,
+-32768,  1180,   210,  1119,   916,-32768,-32768,  1182,-32768,  1178,
+-32768,   315,   922,-32768,   798,   419,  4793,  1186,  5202,-32768,
+  1185,-32768,  1190,  1188,  1193,-32768,  5564,  5684,-32768,-32768,
+-32768,-32768,  1192,  1195,-32768,-32768,   682,  3368,  5564,  5564,
+  5564,  5564,  5564,  5564,  5585,  5585,  1197,   713,   788,   943,
+  1121,   790,  1051,   742,   514,   745,   578,  1194,  1189,  1187,
+  1174,   170,  1200,-32768,    33,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-  5968,  5968,    65,    57,-32768,   904,-32768,-32768,   864,-32768,
--32768,-32768,-32768,-32768,-32768,    26,-32768,  5396,-32768,   161,
--32768,    65,-32768,-32768,-32768,  5183,-32768,   206,-32768,  5396,
--32768,   218,   243,   283,-32768,   321,   864,   202,   308,  1881,
--32768,  2584,  5396,  5396,  5396,  5396,  5396,  5396,-32768,  5440,
-  5440,   334,-32768,   360,   367,   379,   423,   445,   378,  4575,
--32768,   448,   468,-32768,   483,-32768,   697,   977,-32768,-32768,
--32768,   960,   384,   509,   372,   532,   485,   491,   527,   467,
-    37,-32768,-32768,   416,-32768,  3418,   478,   519,-32768,-32768,
--32768,-32768,   576,  3118,-32768,  4575,-32768,  3418,-32768,   431,
-  3418,-32768,-32768,   627,   636,-32768,   643,-32768,  2776,   483,
-   647,   470,   583,  3223,-32768,  3373,-32768,-32768,-32768,  5698,
--32768,-32768,-32768,-32768,   661,   666,-32768,-32768,  3373,  3418,
--32768,-32768,   609,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   705,   727,-32768,-32768,
-  6238,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   791,   407,
--32768,-32768,   864,   864,   143,-32768,   250,-32768,-32768,-32768,
-  4481,-32768,-32768,   383,  5563,   404,   758,-32768,-32768,   797,
--32768,-32768,   835,   822,   407,    50,-32768,   291,   757,-32768,
-   864,-32768,    46,-32768,-32768,-32768,   795,  5396,  5396,  5396,
-  1925,   873,-32768,-32768,-32768,   587,   869,    80,   875,   885,
--32768,-32768,-32768,-32768,-32768,-32768,   874,  4481,-32768,-32768,
-  5396,   920,   922,   926,   936,   972,   378,   754,  5035,-32768,
-  4575,-32768,-32768,-32768,-32768,   945,-32768,-32768,  4575,-32768,
-  4575,-32768,-32768,-32768,  5068,  5396,-32768,-32768,   199,  5396,
-  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,
-  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,
-  5396,  5396,  5396,  5396,  5396,  5396,-32768,-32768,-32768,-32768,
-  5396,   823,-32768,-32768,  2392,-32768,-32768,   995,-32768,-32768,
-  1002,-32768,  5396,   597,   999,   993,-32768,-32768,-32768,-32768,
--32768,    65,  5698,-32768,-32768,  3373,  1836,  1009,-32768,-32768,
-  5396,   398,  3523,  4658,   407,-32768,   112,  6373,   939,  1031,
-  1037,  1039,  1043,  1039,   864,  1048,   425,-32768,-32768,  1536,
-  1045,   553,-32768,   614,-32768,   407,-32768,   407,-32768,-32768,
--32768,   986,  1057,  1058,-32768,   407,   291,-32768,   864,  1062,
--32768,  1068,   864,  1074,-32768,   447,  1083,   500,  1083,  1092,
--32768,-32768,   869,  1077,-32768,  5056,-32768,-32768,  1094,  1100,
--32768,-32768,-32768,-32768,-32768,-32768,  5396,-32768,  1108,-32768,
-  3523,-32768,-32768,  1123,  1115,-32768,   526,-32768,   140,   864,
-   864,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   960,   960,   384,   384,   509,
-   509,   509,   509,   372,   372,   532,   485,   491,  5396,  5396,
-  5396,-32768,  5452,  5473,-32768,-32768,  2968,-32768,  3268,  3710,
--32768,-32768,  1117,   582,-32768,-32768,   407,-32768,-32768,  1118,
-  1119,-32768,  1120,-32768,  4084,-32768,-32768,  3897,  4128,   869,
--32768,  1121,-32768,-32768,  1127,  1130,-32768,  1132,  1131,-32768,
-   908,-32768,  1133,-32768,-32768,-32768,-32768,  1126,   482,   614,
-  5352,  1134,-32768,   161,-32768,   331,-32768,-32768,  5396,   577,
-   407,-32768,-32768,  1138,-32768,-32768,  1149,  6373,-32768,-32768,
--32768,-32768,  1142,-32768,  1925,-32768,  5104,-32768,-32768,  1136,
--32768,-32768,  1146,-32768,-32768,  1147,-32768,  5396,-32768,-32768,
--32768,-32768,   527,   946,   467,  4481,-32768,  4481,-32768,-32768,
--32768,  4233,  4575,  5396,-32768,  5484,-32768,  5396,-32768,  1150,
--32768,-32768,-32768,  4277,  4382,-32768,  4426,-32768,-32768,  1148,
--32768,-32768,-32768,-32768,-32768,  1154,-32768,-32768,  1155,-32768,
-   864,-32768,   864,-32768,-32768,   316,  1151,-32768,  1152,    56,
-  1104,  5008,-32768,-32768,  1157,-32768,  1153,-32768,   475,  1150,
--32768,   864,   765,  4575,  1163,  5104,-32768,  1161,-32768,  1167,
-  1164,  1169,-32768,  5396,  5484,-32768,-32768,-32768,-32768,  1170,
-  1171,-32768,-32768,   638,  4481,  5396,  5396,  5396,  5396,  5396,
-  5396,  5440,  5440,  1168,   654,   660,  1079,  1379,   674,   992,
-   949,   959,   748,   979,  1172,  1159,  1160,  1143,    58,  1177,
--32768,    18,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   676,   681,
--32768,  1020,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1150,-32768,  1113,-32768,-32768,  1137,-32768,
-  1162,-32768,-32768,-32768,  1165,-32768,  2922,  1166,  1150,-32768,
--32768,  4531,-32768,-32768,-32768,-32768,  6103,-32768,-32768,  6103,
--32768,-32768,-32768,-32768,  5396,  1025,  1184,-32768,-32768,-32768,
-  1187,  1196,-32768,  5008,  5396,   864,-32768,-32768,  5008,   552,
--32768,  1195,  5008,  1173,-32768,  1150,-32768,  1202,-32768,-32768,
--32768,  1150,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   250,
-  1197,-32768,   756,-32768,   614,-32768,-32768,  1161,  3324,  1217,
-   864,-32768,-32768,   690,  1214,  5396,  1136,  1136,  1222,   691,
-  1216,   709,   712,   714,   728,   763,   777,   799,   801,  5396,
-  5363,  5396,   808,   810,   329,  5396,  5396,  5396,  5396,  5396,
-  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,
-  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,  5396,
-  5396,  5396,  5396,-32768,  5396,-32768,  1231,  1236,-32768,  1066,
-  1218,   281,    66,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   723,-32768,-32768,-32768,-32768,  5008,   629,-32768,    65,  4817,
--32768,  6103,  4817,  6103,-32768,-32768,-32768,-32768,-32768,-32768,
-  1059,  1233,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1150,-32768,    50,-32768,   683,-32768,-32768,-32768,  5384,
-  1241,-32768,-32768,   782,-32768,  1244,   869,-32768,-32768,   819,
-  5056,  1246,   827,   846,   369,   864,   864,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   851,   857,
-   890,   854,   980,   121,   460,   302,   356,   411,   512,   106,
-  1038,   364,   575,   196,   527,  5396,   467,  5484,-32768,   431,
-  1020,-32768,-32768,-32768,-32768,-32768,   722,-32768,  5833,   281,
-    86,    86,-32768,-32768,    95,   821,-32768,-32768,   297,-32768,
-   803,   313,-32768,-32768,-32768,-32768,-32768,  1242,-32768,   -34,
--32768,  1084,-32768,   129,  1247,    50,-32768,   297,-32768,-32768,
--32768,  1255,   716,-32768,-32768,  4817,-32768,  4817,-32768,-32768,
-  4982,-32768,   829,-32768,  1185,   812,-32768,-32768,-32768,  5396,
-   864,-32768,  1086,   895,-32768,   897,   909,-32768,-32768,  1078,
--32768,-32768,   281,-32768,-32768,-32768,-32768,-32768,-32768,   585,
-    95,   695,   864,   864,    86,-32768,   297,   297,-32768,   487,
-   865,-32768,  1257,  1081,   600,   313,   494,    83,-32768,-32768,
-   803,-32768,-32768,-32768,   803,   -12,   864,   864,  1259,   803,
--32768,    50,  1261,   944,-32768,   407,-32768,-32768,  1263,-32768,
-  1264,  1267,-32768,  1268,-32768,-32768,-32768,  1198,-32768,   746,
-  1265,-32768,   436,-32768,-32768,-32768,  1266,   914,   924,-32768,
--32768,-32768,-32768,    95,  1269,   431,-32768,-32768,    95,   768,
-   487,   794,   864,   864,   297,-32768,  1099,-32768,-32768,   803,
--32768,   600,  1253,-32768,   494,-32768,   494,-32768,-32768,  1270,
--32768,-32768,  1099,  1274,-32768,-32768,-32768,-32768,  5396,   716,
-  1282,-32768,-32768,-32768,  1286,-32768,  1288,-32768,-32768,-32768,
--32768,   932,  5396,-32768,-32768,-32768,  1275,-32768,-32768,   487,
--32768,-32768,-32768,  1284,    83,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  5396,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1311,  1312,-32768
+-32768,   791,   793,-32768,  1044,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   922,-32768,  1141,-32768,
+-32768,  1142,-32768,  1143,-32768,-32768,-32768,  1146,-32768,  2137,
+  1147,   922,-32768,-32768,  4748,-32768,-32768,-32768,-32768,  6308,
+-32768,-32768,  6308,-32768,-32768,-32768,-32768,  5564,   800,  1211,
+-32768,-32768,-32768,  1214,  1222,-32768,   916,  5564,   798,-32768,
+-32768,   916,   777,-32768,  1219,   916,  1151,-32768,   922,-32768,
+  1218,-32768,-32768,-32768,   922,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   413,  1221,-32768,   646,-32768,   770,-32768,-32768,
+  1185,  1985,  1226,   798,-32768,-32768,   820,  1229,  5564,  1170,
+  1170,  1239,   828,  1234,   844,   845,   850,   857,   859,   867,
+   873,   874,  5564,  5484,  5564,   880,   887,   157,  5564,  5564,
+  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,
+  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,  5564,
+  5564,  5564,  5564,  5564,  5564,  5564,-32768,  5564,-32768,  1240,
+  1244,-32768,  1075,  1224,   235,   248,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   558,-32768,-32768,-32768,-32768,   916,   623,
+-32768,   128,  5036,-32768,  6308,  5036,  6308,-32768,-32768,-32768,
+-32768,-32768,-32768,   815,  1241,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   922,-32768,    79,-32768,   593,-32768,
+-32768,-32768,  5516,  1246,-32768,-32768,  1016,-32768,  1251,   985,
+-32768,-32768,   890,  4698,  1249,   898,   906,   291,   798,   798,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   918,   937,   945,   736,   947,   497,   555,   105,   533,
+   631,   714,   668,   725,    86,   638,   328,   560,  5564,   565,
+  5684,-32768,   460,  1044,-32768,-32768,-32768,-32768,-32768,   695,
+-32768,  6036,   235,    45,    45,-32768,-32768,   575,   705,-32768,
+-32768,   111,-32768,   894,   212,-32768,-32768,-32768,-32768,-32768,
+  1250,-32768,    -3,-32768,   976,-32768,   489,  1248,    79,-32768,
+   111,-32768,-32768,-32768,  1256,   656,-32768,-32768,  5036,-32768,
+  5036,-32768,-32768,  3127,-32768,   733,-32768,  1184,   600,-32768,
+-32768,-32768,  5564,   798,-32768,  1098,   952,-32768,   989,   991,
+-32768,-32768,   911,-32768,-32768,   235,-32768,-32768,-32768,-32768,
+-32768,-32768,    78,   575,   160,   798,   798,    45,-32768,   111,
+   111,-32768,   602,   809,-32768,  1266,   961,   145,   212,   603,
+   154,-32768,-32768,   894,-32768,-32768,-32768,   894,    30,   798,
+   798,  1267,   894,-32768,    79,  1270,   885,-32768,   765,-32768,
+-32768,  1271,-32768,  1272,  1276,-32768,  1277,-32768,-32768,-32768,
+  1208,-32768,   734,  1275,-32768,   295,-32768,-32768,-32768,  1278,
+   994,   996,-32768,-32768,-32768,-32768,   575,  1274,   460,-32768,
+-32768,   575,   549,   602,   532,   798,   798,   111,-32768,  1108,
+-32768,-32768,   894,-32768,   145,  1264,-32768,   603,-32768,   603,
+-32768,-32768,  1279,-32768,-32768,  1108,  1280,-32768,-32768,-32768,
+-32768,  5564,   656,  1290,-32768,-32768,-32768,  1289,-32768,  1291,
+-32768,-32768,-32768,-32768,  1002,  5564,-32768,-32768,-32768,  1283,
+-32768,-32768,   602,-32768,-32768,-32768,  1287,   154,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,  5564,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,  1314,  1315,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,  1224,-32768,-32768,-32768,-32768,  -408,  -117,-32768,-32768,
-  1003,-32768,-32768,-32768,-32768,-32768,    53,-32768,-32768,   392,
--32768,-32768,   100,   135,-32768,   208,-32768,-32768,-32768, -1007,
--32768,  -883,-32768,-32768,  -710,  -457,-32768,-32768,-32768,  -609,
--32768,  -608,-32768,  -546,-32768,   312,-32768,-32768,   644,  -657,
--32768,   241,   306,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  -896,   166,-32768, -1043,-32768,   282,
--32768,-32768,  -628,   458,  1089,-32768,-32768,  -616,-32768,-32768,
-   -84,  -338,  -321,    64,  -357,  -381,  -392,  -367,  -490,  -514,
--32768,  -614,-32768,  -115,-32768,-32768,   484,  1055,  -592,  -394,
-     6,-32768,-32768,-32768,  -442,-32768,-32768,-32768,    82,  -288,
-   876,-32768,  -908,  -717,-32768,-32768,   511,-32768,-32768,-32768,
-  -486,-32768,-32768,-32768,  -434,-32768,-32768,-32768,-32768,-32768,
-   545,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   286,   761,-32768,  1018,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   187,  -756,  -885,-32768,   146,
--32768,-32768,   664,   667,   496,     7,  -398,  1215,-32768,    -2,
--32768,-32768,  -568,-32768,-32768,-32768,   648,  -109,  1047,-32768,
-  -444,   919,  1333,-32768,  1109,-32768,  1175,-32768,-32768,-32768,
--32768,  -108,-32768,-32768,-32768,-32768,-32768,    70,  1310,  1000,
-  1395,-32768,-32768,  1412,-32768,-32768,  -323,-32768,   767,   203,
-  -554,  -858,-32768,   849,-32768,-32768,   948,  -202,   655,   507,
-  -483,    51,-32768,   117,    42,-32768,-32768,   263,-32768,   350,
--32768,-32768,   652,-32768,   351,  -596,-32768,-32768,-32768,-32768,
+-32768,  1230,-32768,-32768,-32768,-32768,  -361,   -94,-32768,-32768,
+  1004,-32768,-32768,-32768,-32768,-32768,    77,-32768,-32768,   392,
+-32768,-32768,   102,   135,-32768,   208,-32768,-32768,-32768,  -970,
+-32768,  -858,-32768,-32768,  -627,  -698,-32768,-32768,-32768,  -548,
+-32768,  -448,-32768,  -325,-32768,   309,-32768,-32768,   641,  -646,
+-32768,   238,   305,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,  -864,   161,-32768, -1005,-32768,   278,
+-32768,-32768,  -609,   458,  1093,-32768,-32768,  -607,-32768,-32768,
+   -84,  -343,  -356,  -275,  -357,  -360,  -369,  -395,  -492,  -513,
+-32768,  -587,-32768,  -117,-32768,-32768,   903,  1412,  -570,  -402,
+    28,-32768,-32768,-32768,  -456,-32768,-32768,-32768,   753,  -251,
+   870,-32768,  -886,  -732,-32768,-32768,   510,-32768,-32768,-32768,
+  -322,-32768,-32768,-32768,  -311,-32768,-32768,-32768,-32768,-32768,
+   544,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,     1,   758,-32768,   953,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   -55,  -736,  -852,-32768,   143,
+-32768,-32768,   662,   665,   494,     2,  -379,  1213,-32768,     4,
+-32768,-32768,  -549,-32768,-32768,-32768,   647,  -103,  1045,-32768,
+  -431,   862,  1331,-32768,  1112,-32768,   117,-32768,-32768,-32768,
+-32768,  -135,-32768,-32768,-32768,-32768,-32768,    20,   258,   997,
+  1165,-32768,-32768,  1458,-32768,-32768,  -317,-32768,  1139,   199,
+  -588,  -599,-32768,   851,-32768,-32768,   946,  -186,   657,   512,
+  -428,   140,-32768,   156,    39,-32768,-32768,   165,-32768,   181,
+-32768,-32768,   650,-32768,   348,  -608,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,  1493,-32768,-32768,  1543,  -290,
-   510,     0,   612,-32768
+-32768,-32768,-32768,-32768,-32768,  1518,-32768,-32768,  1639,  -273,
+   511,     0,   441,-32768
 };
 
 
-#define        YYLAST          6565
-
-
-static const short yytable[] = {   120,
-   127,   287,   537,   484,   120,    96,   118,   590,   120,   214,
-   214,   214,   536,   593,  1179,   462,  1025,   727,   297,   464,
-   677,  1109,   695,  1104,   315,   499,   635,   423,   538,   729,
-   259,   739,   836,   563,   534,   535,   561,  1044,  -598,  1063,
-   776,   777,  -598,   933,  1054,   526,   527,  1054,   633,   742,
-   468,   207,    92,  1160,  1161,   588,   128,   602,   434,     3,
-   468,   237,   237,   914,   528,   529,   642,   262,   331,   332,
-   333,   334,   335,   336,  1057,   264,   727,   398,   924,   198,
-   810,    99,  -273,   262,   655,   120,    99,  1030,   729,  1021,
-   739,    96,   118,   399,   244,   245,   940,   400,   904,  1022,
-   401,   944,   622,   779,   485,   948,  1106,  1178,   742,  1021,
-   415,   811,  1184,   800,   905,   419,  1032,   420,   120,  1022,
-  1092,  1210,  1093,   290,  1090,  1091,  -637,   238,   238,  -412,
-  -637,   738,  -412,   311,  -412,   120,   123,   124,    92,  1094,
-  1124,  -629,   388,   389,   281,  -629,   120,  1105,  1107,  1110,
-   -46,   214,   384,   385,  1116,   737,  1117,   390,   391,   499,
-   401,   445,  1214,   785,   776,   777,   630,    99,   836,   214,
-  1054,   440,  1054,  1118,   836,  1056,  1180,  1058,   464,   776,
-   777,   299,   267,   268,   269,   270,   271,   272,   273,   274,
-   738,   276,   688,   207,   279,   214,   679,  1133,  1159,  1135,
-    99,   687,   550,   214,   685,   214,   410,   214,  1049,   295,
-   214,   300,   301,   303,   737,   788,  -644,   309,   214,   323,
-  -644,   330,  1172,   214,  1175,   214,   510,   779,   489,   313,
-  -412,  -412,  -412,   295,   395,  -412,  -412,   207,   214,   214,
-   337,   318,   779,   511,   932,   207,   659,   934,   845,   207,
-    79,  1023,   207,   735,   246,   247,   248,   249,   250,   251,
-   252,   253,   254,   255,   734,   403,   319,    79,  1035,   237,
-    79,  1023,   208,  -274,   237,   257,   237,   409,   736,   120,
-   411,   207,   120,   120,   120,   113,   437,   785,   733,   237,
-   132,  -696,   135,   452,   836,   275,   523,   524,   525,   280,
-   295,   282,   785,   286,   120,   684,   320,   730,   288,   428,
-   120,   461,   735,  1010,  -274,   315,   463,   559,   419,   304,
-  1097,   305,  -632,   734,   731,   324,  -632,    79,    80,   137,
-  1098,  1175,    83,    84,   315,   238,  1106,   736,   431,   788,
-   238,   450,   238,  1137,   321,  -696,  1032,   733,   262,     3,
-   214,   386,   387,   683,   788,   238,   976,   341,   214,   209,
-   214,    99,   438,   369,   441,   443,   730,  1067,   951,  1012,
-  1013,   113,   295,   977,   955,   342,  -633,   451,   619,   727,
-  -633,   315,   343,   731,  -640,   265,    99,   677,  -640,   401,
-  1007,   729,   309,   739,   344,  1077,   265,   265,   845,  1014,
-  1015,   618,   468,   401,   214,   386,   387,   448,   388,   389,
-   935,   742,  1005,  1016,   208,   384,   385,   392,   393,   295,
-   942,   310,   562,   390,   391,   214,   214,  -273,   558,   450,
-   295,  -634,   214,   400,   120,  -634,   401,     3,   345,   558,
-     3,   571,  -696,  -696,   120,   401,   207,  -696,  -696,   485,
-   435,   530,   531,   532,   533,   120,   401,   120,   208,   346,
-   386,   387,  1200,   311,   440,   120,   208,   401,   120,  -690,
-   208,   612,   120,   208,   548,   315,   237,   237,   347,   829,
-  -630,    79,  1099,   315,  -630,   456,   468,   417,   458,  -694,
-   401,   384,   385,   738,  1064,  1156,   466,    79,  1035,   469,
-   214,   209,   208,   279,  -691,  -412,   675,  -412,  1003,   120,
-   120,   701,  1162,   394,  1163,  -412,    99,   737,  1002,  1116,
-   401,  1117,   397,   576,   614,   579,   710,   585,   711,   395,
-   586,  1164,  -635,   451,  1004,   592,  -635,    99,  1118,    99,
-  1000,  1001,   238,   238,   599,   209,   628,   309,   214,   214,
-   629,   992,   993,   209,   608,   558,   120,   209,   386,   387,
-   209,   386,   387,   647,   214,  1156,   396,   214,   214,   438,
-   994,   995,   404,   558,   945,   840,  -273,   815,   450,   816,
-   449,   468,  -412,  -412,  -412,   392,   393,  -412,  -412,   209,
-   207,    79,    80,   137,   405,  -642,    83,    84,   311,  -642,
-   120,   686,   401,   394,   482,   861,   645,   401,   557,  1152,
-  1092,   121,  1093,  -517,   417,   735,   121,   401,   469,   410,
-   138,   485,  1027,   572,  1171,  1116,   734,  1117,   577,  1094,
-   580,   862,   863,   864,   865,   866,   867,  -273,    99,   591,
-   736,   214,   214,  1073,  1118,   759,  1050,   596,  -693,  1051,
-   733,   601,   660,   214,   214,   438,   214,   412,   401,    79,
-    80,   137,   859,  1065,    83,    84,   413,   208,  -692,   730,
-   120,   592,   120,   452,  -595,   681,   682,   418,  -595,   424,
-  -594,   214,   309,  1188,  -594,   425,   731,   468,   120,   315,
-   843,   120,   120,   214,  -618,   590,  -593,   121,  -618,   315,
-  -593,   401,   438,   429,   759,   908,  -412,   675,  -412,   732,
-   401,   401,   707,   708,   966,   970,  -412,   295,  1021,   295,
-   365,  1153,   366,   449,  -412,   840,  1084,  1030,  1022,  -612,
-   121,   430,  -617,  -612,  -616,  1096,  -617,  1128,  -616,   262,
-   968,  -412,  1083,   796,   367,   368,  1031,   312,  -615,     3,
-   432,   803,  -615,   805,   209,  1121,  1032,   451,   322,   497,
-   498,  -412,  -412,  -412,   823,   824,  -412,  -412,   732,   828,
-  -463,   450,  1138,   608,   841,   676,   203,   235,   235,  -273,
-   465,   450,   455,  -614,   894,   895,   469,  -614,  -273,     3,
-   450,   214,  1205,  1162,  1221,  1163,   295,  -613,     3,   896,
-   897,  -613,   989,   990,   991,   700,  1069,  1070,   436,  1071,
-  1166,   208,  1164,   214,   457,   120,   475,  1021,   214,  -610,
-  1206,  -611,   214,  -610,   490,  -611,  1031,  1022,  -607,  1232,
-  -608,  1186,  -607,   572,  -608,   761,  1032,   450,   262,  -599,
-   843,  1095,   120,  -599,   460,     3,   262,  -602,   508,  1051,
-   120,  -602,   459,   512,   513,   514,   515,   516,   517,   518,
-   519,   520,   521,   522,   543,   544,   628,  -412,  -412,  -412,
-  1076,  -622,  -412,  -412,  -627,  -622,   926,  -623,  -627,    79,
-  1023,  -623,   262,   174,   542,  1165,  1074,   381,   382,   383,
-   481,   121,   483,   693,   442,   444,   446,   488,   209,   486,
-    79,    80,   137,  1033,  1034,    83,    84,    79,  1035,   487,
-  -624,  1036,  1028,   875,  -624,  -620,   121,  -603,   203,  -620,
-  1047,  -603,   312,   957,   841,   214,   592,   670,   671,  -601,
-    79,    80,   137,  -601,  -605,    83,    84,   491,  -605,   492,
-    79,    80,   137,   493,  -606,    83,    84,   958,  -606,    79,
-    80,   137,  -604,   494,    83,    84,  -604,   996,   997,   998,
-   999,  1187,   203,   501,  1051,  1147,   401,   709,   918,   919,
-   203,   283,   284,   285,   203,   120,   120,   203,    79,  1023,
-   890,   891,   174,  1033,  1034,   235,   416,    79,  1035,   495,
-   235,  1036,   235,   381,   382,   383,    79,    80,   137,   370,
-  -626,    83,    84,   552,  -626,   235,   203,   759,   892,   893,
-  1052,   950,   553,   381,   382,   383,   556,  1059,  1088,   560,
-  1028,  1028,   287,   555,  1087,   887,   888,   889,  1102,   573,
-  1047,  1047,   898,   899,   371,   372,   373,   374,   375,   376,
-   377,   378,   379,   380,   936,   671,   121,  1102,    79,    80,
-   137,   574,   120,    83,    84,   575,   583,  -273,  -638,  1131,
-   214,   578,  -638,  1140,   194,   120,   584,   121,   589,   121,
-   120,   732,   571,   315,   388,   389,   597,   312,  1060,  1061,
-   605,   600,   929,   598,   610,   929,   606,  1227,   607,   390,
-   391,  1028,   120,   120,  1028,   611,  1102,  1102,   401,  1150,
-   697,   616,   871,   401,   872,  1047,  -412,  1047,   315,   615,
-  1047,   706,  1168,  1169,  1047,  1053,   120,   120,   620,  1047,
-   621,   631,   632,  -412,   408,   120,   873,   874,   277,   278,
-   505,  1125,   624,   626,    99,  1112,  1113,  1114,   627,   120,
-   644,   648,  1066,   661,   651,   649,   664,   841,   666,   669,
-  1142,   667,   674,   691,   617,   672,   438,   680,   689,  1148,
-  1149,  1028,   120,   120,  1102,   817,   694,   703,   121,  1047,
-   704,   203,   794,   798,   801,   808,   762,   827,   809,   697,
-   847,   849,   294,   825,   196,   226,   226,   851,   852,   120,
-   853,   870,   235,   235,   857,   858,  1131,   901,   903,   902,
-   900,   906,  1185,   915,   326,   909,   328,    99,   937,  1189,
-  1191,   938,   312,   939,  1047,   929,   947,   929,   929,   929,
-   956,   841,   762,   763,   764,   765,   953,   916,   314,   766,
-   767,   768,   769,   770,   771,   772,   963,  1126,   967,   969,
-   971,   314,   314,   314,   314,   314,   314,  1211,   339,   340,
-   194,  1008,   917,  1009,   174,   920,   923,  1011,   194,  1062,
-  1068,  1072,   194,   949,  1108,   194,  1075,  1219,  1220,   500,
-  1120,    99,  1127,   414,  1224,  1139,  1145,   503,  1167,   504,
-  1183,  1165,   583,  1190,   583,  1193,  1194,  1196,  1198,  1199,
-  1202,  1212,  1215,   822,   194,  1204,  1216,   817,  1218,  1223,
-   830,  1228,   817,   610,   121,  1225,   817,  1226,  1229,   256,
-  1235,  1236,  1038,   467,  1230,   203,  1192,  1217,  1176,   199,
-   232,   232,  1082,  1151,   813,  1089,   196,  1207,   974,  1123,
-   946,   922,   697,   594,   663,  1222,   806,   804,   959,   839,
-   289,   929,   453,   929,   242,   447,   496,   427,  1201,   625,
-   848,   566,   549,   972,   508,   962,   855,   961,  1081,   978,
-   979,   980,   981,   982,   983,   984,   985,   986,   987,   988,
-   196,     0,   476,   477,   478,   479,     0,     0,   196,     0,
-     0,     0,   196,     0,     0,   196,     0,     0,     0,     0,
-     0,     0,   447,   226,     0,     0,     0,     0,   226,     0,
-   226,   876,     0,   447,   200,   233,   233,     0,  1231,   817,
-     0,     0,     0,   226,   196,     0,     0,     0,     0,   566,
-   509,   201,   234,   234,     0,   822,     0,   943,     0,     0,
-   822,     0,     0,     0,   822,     0,   877,   878,   879,   880,
-   881,   882,   883,   884,   885,   886,     0,     0,     0,     0,
-     0,     0,     0,     0,   121,     0,     0,     0,     0,   194,
-     0,   199,   965,     0,     0,     0,     0,   554,   566,   314,
-   314,   314,   314,   314,   314,   314,   314,   314,   314,   314,
-   314,   314,   314,   314,   314,     0,   566,   658,     0,     0,
+#define        YYLAST          6773
+
+
+static const short yytable[] = {   121,
+   114,   119,   596,   541,   121,   134,   129,   137,   121,   216,
+   216,   216,   487,   249,   250,   251,   252,   253,   254,   255,
+   256,   257,   258,   593,   318,   290,   300,    97,   540,   200,
+   638,   564,   531,   532,   502,   465,   539,   537,   538,   730,
+   745,   732,   680,   529,   530,   426,   839,   698,   209,   636,
+   591,  1028,  1112,  -600,   278,   566,  1182,  -600,   283,   467,
+   285,   742,   289,  1107,  1066,  1047,   936,   291,  1024,   130,
+   334,   335,   336,   337,   338,   339,    93,   437,  1025,   307,
+  1057,   308,   803,  1057,   943,   418,   121,   114,   119,   947,
+   422,   471,   423,   951,  1163,  1164,   265,   625,   730,   745,
+   732,   268,  1155,  1095,   779,  1096,  -642,   605,   389,   390,
+  -642,   565,   268,   268,    97,   533,   534,   535,   536,   121,
+   742,   262,  1097,   372,   645,  -634,   198,   228,   228,  -634,
+   954,   293,   267,   814,  1100,   741,   958,   121,   313,   395,
+   396,   314,   658,   403,  1101,  -273,   404,  1181,   121,   917,
+   239,   239,  1187,   216,   389,   390,   740,   284,  1033,  1093,
+  1094,   513,  1213,    93,   927,  1127,   240,   240,   502,  1174,
+  1119,   216,  1120,   333,   210,  1108,  1110,  1109,   514,   401,
+   443,  1113,   839,  1024,   979,   316,  1156,  1035,   839,  1121,
+   211,   682,   209,  1025,   741,   402,  1052,   216,  1059,   688,
+  1061,   980,  1217,   302,   780,   216,  1057,   216,  1057,   216,
+   907,   438,   216,   935,   471,   740,   937,   406,   467,  1183,
+   216,   553,   413,   690,   321,   216,   908,   216,   779,   412,
+    80,  1026,   414,  1162,   813,  1109,   209,   492,   471,   453,
+   216,   216,   691,   779,   209,  1035,   459,     3,   209,   461,
+  1175,   209,  1178,   739,   322,   662,  1067,   469,   689,   403,
+   472,   431,   404,   323,   848,   265,   488,   201,   234,   234,
+   198,  1024,  -413,  -413,  -413,   387,   388,  -413,  -413,   738,
+   209,  1025,   121,   404,   440,   121,   121,   121,   737,   633,
+   265,   736,   734,   562,   422,   686,    80,  1102,   452,   526,
+   527,   528,   455,   324,  1013,   733,   471,   121,   839,   464,
+   326,   404,   739,   121,   198,   404,   318,  1080,   210,   832,
+   327,  1203,   198,  1015,  1016,   687,   198,   782,   780,   198,
+   788,  1140,   395,   396,   211,   318,  1060,   228,   738,    80,
+  1038,   791,   228,   780,   228,    80,  1026,   737,  -646,   176,
+   736,   734,  -646,   216,  1017,  1018,   344,   228,   198,  1178,
+   239,   216,   210,   216,   733,   239,   398,   239,  1019,   560,
+   210,   404,   345,   735,   210,   451,   240,   210,   211,   472,
+   239,   240,   318,   240,   575,   420,   211,   622,   404,   580,
+   211,   583,  1070,   211,  1010,   404,   240,    80,  1038,   488,
+   346,   730,   745,   732,   621,   938,   210,   216,   599,   680,
+   347,   201,   604,  1008,   848,   945,  -273,     3,   453,  -413,
+  -413,  -413,   211,   742,  -413,  -413,     3,   551,   216,   216,
+   546,   547,   735,    80,  1026,   216,  -274,   121,   260,   574,
+   122,   452,  -273,   348,   453,   122,   209,   121,  -274,   140,
+   466,   782,     3,   561,   788,   201,   500,   501,   121,  1136,
+   121,  1138,   349,   201,   561,   791,   782,   201,   121,   788,
+   201,   121,   314,   443,   420,   121,   318,   404,   234,   485,
+   791,   488,   404,   234,   318,   234,  1159,  -413,  -413,  -413,
+   404,   712,  -413,  -413,   124,   125,   126,   741,   234,   201,
+    80,    81,   139,   216,   350,    84,    85,   391,   392,  1007,
+   -46,   471,   121,   121,  1119,   404,  1120,  -631,   740,   615,
+   704,  -631,   393,   394,   198,   673,   674,   122,   387,   388,
+  -413,   678,  -413,  1121,  1006,   713,   679,   714,   997,   998,
+  -413,   448,  1005,  1003,  1004,   228,   228,   472,  -692,   995,
+   996,   216,   216,  -635,   397,  1024,  1159,  -635,  1209,   121,
+   122,   650,  1033,   895,   896,  1025,   703,   216,   239,   239,
+   216,   216,   210,  1208,  1165,  -632,  1166,  -696,   315,  -632,
+   561,  1034,   389,   390,   240,   240,   387,   388,   211,   325,
+   209,  1035,  -693,  1167,   575,   398,   764,   471,   561,   399,
+  1095,   843,  1096,   121,    80,    81,   139,   314,   404,    84,
+    85,   696,   617,   407,   864,   739,  -413,   678,  -413,  1097,
+   400,   999,  1000,  1001,  1002,   453,  -413,  1165,  1119,  1166,
+  1120,   901,   902,     3,   865,   866,   867,   868,   869,   870,
+  1053,   738,  1030,  1054,   216,   216,  1167,  1121,   762,   413,
+   737,  -636,  1076,   736,   734,  -636,   216,   216,  -644,   216,
+   631,  -519,  -644,   408,   632,   201,   397,   733,   198,  -273,
+  -698,   453,  1191,   121,   878,   121,  -273,  1131,   453,     3,
+   389,   390,   455,  1068,   216,  -695,   234,   234,  -639,     3,
+   318,   121,  -639,   404,   121,   121,   216,   648,  -413,   846,
+   318,  -413,   404,  -413,   391,   392,   862,   762,    80,    81,
+   139,   593,   265,    84,    85,  1086,   210,    80,  1026,   393,
+   394,   176,   265,   122,  -698,  1098,   445,   447,   449,   921,
+   922,   415,   211,  -597,  -637,   735,  -694,  -597,  -637,  1036,
+  1037,   971,   416,    80,  1038,  -640,  1087,  1039,   122,  -640,
+   265,   843,   100,  1054,   315,  1099,  -629,   100,  -465,   453,
+  -629,   391,   392,   389,   390,   246,   247,   248,   421,   384,
+   385,   386,   953,   893,   894,  1124,   393,   394,  -413,  -413,
+  -413,   897,   898,  -413,  -413,    80,    81,   139,   428,  1224,
+    84,    85,  1141,  -273,   216,   594,   899,   900,     3,   948,
+   932,   427,   818,   932,   819,   992,   993,   994,  -596,   201,
+  -620,  -595,  -596,   404,  -620,  -595,   216,   911,   121,   939,
+   674,   216,  -698,  -698,  1235,   216,   265,  -698,  -698,  1168,
+  1169,    80,    81,   139,  1063,  1064,    84,    85,   961,   100,
+   404,    80,    81,   139,   969,   121,    84,    85,   404,   846,
+   432,  1189,   973,   121,   270,   271,   272,   273,   274,   275,
+   276,   277,   433,   279,  -614,  -619,   282,   458,  -614,  -619,
+  -618,   368,   100,   369,  -618,  -413,  1056,  -617,   122,  -616,
+   439,  -617,   298,  -616,   303,   304,   306,  -615,   586,  1077,
+   312,  -615,  -413,  -612,  -613,   370,   371,  -612,  -613,   122,
+  -609,   122,  1190,  1069,  -609,  1054,   298,  -610,   463,   315,
+  -601,  -610,   608,   340,  -601,  1031,   613,  1034,  -604,    80,
+    81,   139,  -604,  1050,    84,    85,   631,  1035,   216,   460,
+  1079,   404,  1153,   932,   817,   932,   932,   932,  -624,   294,
+   435,   818,  -624,   819,   155,   156,   157,   158,   159,   160,
+    80,    81,   139,   634,   635,    84,    85,  -625,   286,   287,
+   288,  -625,   161,   162,   163,  -626,   874,  -628,   875,  -626,
+  -413,  -628,  -622,   298,  1150,   462,  -622,   468,   121,   121,
+   384,   385,   386,    80,    81,   139,   164,  -413,    84,    85,
+   876,   877,  1171,  1172,   765,   766,   767,   768,  1129,   478,
+   122,   769,   770,   771,   772,   773,   774,   775,   486,  -605,
+   762,  -603,   434,  -605,  -607,  -603,  -608,   484,  -607,   489,
+  -608,  1091,  -606,  1031,  1031,   490,  -606,  1115,  1116,  1117,
+   173,  1105,   491,  1050,  1050,   100,   441,   494,   444,   446,
+  1072,  1073,   495,  1074,   315,   496,   298,   497,   290,  1090,
+  1105,   454,   384,   385,   386,   121,   498,  1134,   504,   932,
+   100,   932,   555,   216,   280,   281,   312,   556,   121,   411,
+   574,   558,  1143,   121,   318,  1036,  1037,  1195,   559,    80,
+  1038,   563,   576,  1039,   890,   891,   892,   577,  1230,   592,
+   578,  -273,   581,   298,  1031,   121,   121,  1031,   587,  1105,
+  1105,    80,   174,   175,   298,   176,    84,    85,  1050,   318,
+  1050,   600,   601,  1050,   586,   603,   586,  1050,   373,   121,
+   121,   609,  1050,   610,   404,   825,   614,   618,   121,   624,
+   619,   623,   833,   629,   630,   613,   122,   627,   647,   651,
+   652,   654,   121,   879,   664,   667,   669,   672,   205,   237,
+   237,   670,   675,   374,   375,   376,   377,   378,   379,   380,
+   381,   382,   383,   677,  1031,   121,   121,  1105,   683,  1234,
+   692,   694,  1050,   697,   202,   235,   235,   282,   880,   881,
+   882,   883,   884,   885,   886,   887,   888,   889,   620,   706,
+   100,   765,   121,   797,  1134,   707,   801,   579,   804,   582,
+   811,   588,   830,   850,   589,   852,   812,   454,   828,   595,
+   854,   100,   855,   100,   856,   503,   860,  1050,   602,   861,
+   873,   312,   903,   506,   909,   507,   905,   904,   611,   906,
+   912,   918,   919,   920,   317,   940,   923,   926,   941,   942,
+   950,   952,   956,   441,   959,   966,   493,   317,   317,   317,
+   317,   317,   317,   970,   342,   343,   972,   825,   974,   946,
+  1011,  1012,   825,  1014,   176,  1071,   825,  1065,  1075,  1078,
+   511,  1123,  1111,  1130,  1142,   515,   516,   517,   518,   519,
+   520,   521,   522,   523,   524,   525,   122,  1170,  1186,  1148,
+  1168,  1193,   205,  1196,   968,  1197,  1199,   569,  1201,  1202,
+  1207,  1215,  1205,  1218,  1221,  1219,   545,  1226,  1228,  1231,
+  1229,  1232,   100,  1238,  1239,  1041,   259,   470,   202,  1233,
+  1220,  1179,  1085,  1154,   816,  1210,   663,  1092,  1126,   441,
+   597,   977,   949,   925,   666,  1225,   205,   809,   807,   962,
+   292,   842,   244,   456,   205,   595,   499,  1204,   205,   684,
+   685,   205,   430,   552,   628,   851,   312,   858,  1084,   237,
+   419,   964,   202,   965,   237,   569,   237,     0,     0,   825,
+   202,     0,     0,     0,   202,     0,   441,   202,     0,   237,
+   205,     0,     0,     0,     0,   235,   710,   711,     0,     0,
+   235,   298,   235,   298,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   235,   202,     0,     0,     0,
+     0,     0,     0,     0,   569,     0,     0,   799,     0,  1081,
+  1082,   196,     0,     0,     0,   806,     0,   808,     0,     0,
+     0,   454,   569,   661,     0,     0,     0,     0,   826,   827,
+     0,     0,     0,   831,     0,     0,     0,   611,   844,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   211,   240,   240,   199,     0,     0,     0,     0,
-     0,     0,     0,   199,     0,     0,     0,   199,     0,   314,
-   199,     0,     0,     0,     0,     0,     0,     0,   232,     0,
-     0,     0,     0,   232,     0,   232,     0,   822,   314,     0,
-     0,     0,     0,     0,   817,     0,   200,     0,   232,   199,
-     0,     0,   213,   241,   241,     0,     0,     0,     0,   291,
-   658,   713,   587,   201,   153,   154,   155,   156,   157,   158,
-     0,     0,     0,   658,   314,     0,     0,     0,     0,   196,
-     0,     0,   159,   160,   161,   314,     0,  1078,  1079,     0,
-   200,     0,     0,     0,   634,     0,     0,     0,   200,     0,
-   226,   226,   200,   194,     0,   200,   162,   201,     0,     0,
-     0,     0,   846,   233,     0,   201,     0,     0,   233,   201,
-   233,     0,   201,     0,     0,     0,     0,   314,     0,   314,
-   234,   637,   639,   233,   200,   234,     0,   234,     0,     0,
-     0,     0,     0,     0,   211,     0,     0,     0,     0,   171,
-   234,   201,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   121,     0,     0,     0,     0,   479,
-     0,     0,   822,     0,     0,     0,     0,   121,     0,   314,
-     0,     0,  1144,     0,     0,     0,     0,   314,   211,     0,
-   447,     0,   447,     0,   213,     0,   211,     0,   714,     0,
-   211,     0,   760,   211,  1157,  1158,     0,     0,     0,     0,
-     0,   240,     0,     0,   199,     0,   240,     0,   240,     0,
-    79,   292,   293,   196,   174,     0,     0,     0,  1181,  1182,
-     0,   240,   211,     0,   728,   232,   232,   121,   213,     0,
-     0,     0,     0,     0,     0,     0,   213,     0,     0,     0,
-   213,   121,     0,   213,     0,     0,     0,     0,   854,     0,
-     0,   241,     0,     0,     0,     0,   241,     0,   241,   860,
-     0,     0,     0,     0,  1208,  1209,     0,     0,     0,     0,
-     0,   241,   213,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   728,     0,     0,     0,     0,     0,   200,
-     0,   121,     0,     0,   314,   314,   314,   314,   314,   314,
-   868,   869,     0,     0,     0,     0,   201,     0,     0,     0,
-   233,   233,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   216,   234,   234,     0,
-     0,   140,   141,   142,     0,     0,   217,   145,   146,   147,
-   148,   149,   150,   218,  -490,  -490,     0,     0,   199,   219,
-  -490,     0,     0,     0,   153,   154,   155,   156,   157,   158,
-     0,     0,     0,     0,     0,     0,     0,  -273,  -273,     0,
-     0,     0,   159,   160,   161,     0,     0,     0,     0,     0,
-     0,     0,     0,   314,     0,     0,     0,   211,   325,     0,
-     0,     0,     0,   314,   291,     0,   162,     0,     0,   153,
-   154,   155,   156,   157,   158,     0,     0,     0,   240,   240,
-     0,     0,     0,     0,     0,     0,   975,   159,   160,   161,
-  -490,   164,   165,   166,   167,   168,   169,     0,     0,     0,
-     0,     0,  -255,   200,   314,   170,     0,   213,   291,   171,
-     0,   162,     0,   153,   154,   155,   156,   157,   158,     0,
-   201,     0,     0,     0,     0,     0,     0,     0,   241,   241,
-     0,   159,   160,   161,     0,   314,   314,   314,   314,   314,
-   314,   314,   314,   314,   314,   314,   314,   314,   314,   314,
-   314,   314,     0,   314,   171,   162,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   203,   236,   236,
+   298,     0,     0,     0,     0,     0,   317,   317,   317,   317,
+   317,   317,   317,   317,   317,   317,   317,   317,   317,   317,
+   317,   317,     0,     0,     0,     0,   122,     0,     0,     0,
+     0,     0,     0,     0,   825,   508,   661,   716,     0,   122,
+     0,     0,     0,     0,  1147,     0,     0,     0,     0,   661,
+     0,     0,   700,     0,     0,     0,   317,   213,   242,   242,
+     0,     0,     0,   709,     0,     0,  1160,  1161,     0,     0,
+     0,   297,     0,     0,     0,   317,   205,     0,     0,     0,
+   929,     0,     0,     0,     0,     0,     0,     0,   849,     0,
+  1184,  1185,     0,   329,     0,   331,     0,   237,   237,   122,
+     0,     0,   202,     0,     0,     0,     0,     0,     0,     0,
+     0,   317,     0,   122,     0,     0,     0,   820,     0,     0,
+     0,     0,   317,   235,   235,     0,     0,   960,   844,     0,
+   595,   700,     0,     0,     0,     0,  1211,  1212,     0,   196,
+     0,   203,     0,     0,     0,     0,     0,   196,     0,     0,
+     0,   196,     0,     0,   196,     0,     0,     0,     0,   328,
+     0,     0,   417,   122,   317,   294,   317,     0,   640,   642,
+   155,   156,   157,   158,   159,   160,     0,     0,   215,   243,
+   243,     0,     0,   196,     0,   203,     0,     0,   161,   162,
+   163,     0,     0,   203,     0,     0,     0,   203,     0,     0,
+   203,   213,     0,     0,     0,     0,     0,     0,   236,     0,
+     0,     0,   164,   236,  1055,   236,   317,     0,     0,     0,
+   205,  1062,     0,     0,   317,     0,     0,     0,   236,   203,
+     0,     0,     0,     0,     0,   450,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   213,   202,     0,     0,   820,
+     0,     0,     0,   213,   820,     0,   173,   213,   820,     0,
+   213,     0,   479,   480,   481,   482,     0,     0,   242,     0,
+     0,   731,     0,   242,     0,   242,     0,     0,     0,     0,
+     0,     0,   450,     0,   700,     0,     0,     0,   242,   213,
+     0,     0,     0,   450,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   975,   511,     0,     0,     0,
+   512,   981,   982,   983,   984,   985,   986,   987,   988,   989,
+   990,   991,   215,     0,     0,     0,     0,    80,   295,   296,
+   731,   176,     0,     0,     0,  1128,     0,     0,   100,     0,
+     0,   317,   317,   317,   317,   317,   317,   871,   872,   196,
+     0,   844,     0,     0,  1145,     0,     0,   557,     0,     0,
+   441,   820,     0,  1151,  1152,     0,   215,     0,     0,     0,
+     0,     0,     0,     0,   215,     0,     0,     0,   215,     0,
+     0,   215,     0,     0,     0,     0,     0,     0,     0,   243,
+     0,     0,     0,     0,   243,   203,   243,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,  1188,     0,     0,   243,
+   215,   100,     0,  1192,  1194,     0,   236,   236,     0,     0,
+     0,     0,     0,     0,     0,   844,     0,     0,     0,     0,
+   317,     0,  -255,     0,     0,     0,     0,     0,   294,     0,
+   317,     0,     0,   155,   156,   157,   158,   159,   160,     0,
+     0,  1214,     0,     0,     0,   213,     0,     0,     0,     0,
+     0,   161,   162,   163,     0,     0,     0,     0,     0,     0,
+     0,  1222,  1223,     0,     0,   100,   242,   242,  1227,     0,
+     0,   317,     0,     0,   637,   164,     0,     0,     0,     0,
+     0,     0,     0,   196,     0,     0,   820,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    -1,     1,     0,     0,   479,     0,     0,     0,     0,     0,
-    79,   172,   173,     0,   174,   220,   221,     0,     2,     0,
-     0,     0,     0,     0,  -273,     0,     0,     0,   171,     0,
-     0,   211,     0,     0,     3,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     4,     0,     5,     0,     0,   314,
-  1080,     0,     0,     0,     0,    79,   292,   293,     0,   174,
-     0,     0,     0,     0,     0,     0,     0,     0,  -412,  -412,
-  -412,     0,     6,     0,     0,     0,     0,     7,     8,     9,
-     0,   213,     0,     0,     0,     0,   728,     0,     0,     0,
-     0,     0,    10,    11,    12,     0,     0,     0,     0,    79,
-   292,   293,     0,   174,     0,     0,     0,     0,     0,     0,
-     0,    13,    14,    15,  1143,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,     0,    26,    27,    28,    29,
-    30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-    40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-    50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-    60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-    70,    71,    72,    73,    74,    75,    76,    77,    78,     0,
-     0,     0,     0,     0,     0,    79,    80,    81,    82,     0,
-    83,    84,    85,    -2,     1,     0,     0,     0,     0,     0,
+     0,     0,   317,   317,   317,   317,   317,   317,   317,   317,
+   317,   317,   317,   317,   317,   317,   317,   317,   317,   173,
+   317,     0,     0,   699,  -690,     0,     0,     0,   294,   203,
+     0,     0,     0,   155,   156,   157,   158,   159,   160,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   482,
+     0,   161,   162,   163,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   215,     0,     0,     0,
+   450,     0,   450,     0,     0,   164,     0,     0,   717,     0,
+     0,     0,   763,     0,    -1,     1,   317,   243,   243,   213,
+    80,   295,   296,     0,   176,     0,     0,     0,     0,     0,
+     0,     0,     2,     0,     0,     0,     0,     0,  -273,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     3,   173,
+     0,     0,     0,   731,     0,     0,     0,     0,     4,     0,
+     5,     0,     0,     0,     0,     0,     0,     0,   857,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   863,
+     0,     0,  -413,  -413,  -413,     0,     6,     0,     0,     0,
+     0,     7,     8,     9,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    10,    11,    12,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     2,     0,     0,     0,     0,     0,  -273,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     3,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     4,     0,     5,
+    80,   295,   296,     0,   176,    13,    14,    15,    16,     0,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+   215,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,     0,     0,     0,     0,     0,     0,
+    80,    81,    82,    83,     0,    84,    85,    86,    23,    24,
+    25,    26,     0,    27,     0,     0,     0,     0,    32,    33,
+     0,     0,    36,    37,     0,    39,    40,    41,    42,     0,
+     0,     0,     0,     0,   317,     0,   978,     0,     0,     0,
+    54,    55,     0,     0,    -2,     1,     0,     0,   317,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     2,     0,     0,    79,     0,     0,  -273,   317,
+     0,     0,     0,     0,     0,    83,     0,     0,     3,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     4,     0,
+     5,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,  -412,  -412,  -412,     0,     6,     0,   314,     0,     0,
-     7,     8,     9,     0,     0,     0,     0,     0,     0,     0,
-     0,   314,     0,     0,     0,    10,    11,    12,     0,     0,
+     0,     0,  -413,  -413,  -413,     0,     6,     0,     0,     0,
+     0,     7,     8,     9,   482,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    10,    11,    12,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   314,     0,    13,    14,    15,     0,    16,    17,
-    18,    19,    20,    21,    22,    23,    24,    25,     0,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,     0,     0,     0,     0,     0,     0,    79,    80,
-    81,    82,   139,    83,    84,    85,     0,   140,   141,   142,
-     0,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-  -545,   546,     0,     0,     0,   152,     0,     0,     0,     0,
-   153,   154,   155,   156,   157,   158,     0,     0,     0,     0,
-     0,     0,     0,  -273,  -273,     4,     0,     5,   159,   160,
-   161,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  -412,
-  -412,  -412,   162,     6,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    13,    14,    15,    16,     0,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+  1083,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,     0,     0,     0,     0,     0,     0,
+    80,    81,    82,    83,  1146,    84,    85,    86,   141,     0,
+     0,     0,     0,   142,   143,   144,     0,   145,   146,   147,
+   148,   149,   150,   151,   152,   153,  -547,   549,     0,     0,
+     0,   154,     0,     0,     0,     0,   155,   156,   157,   158,
+   159,   160,     0,     0,     0,     0,     0,     0,     0,  -273,
+  -273,     4,     0,     5,   161,   162,   163,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   164,   165,   166,
-   167,   168,   169,     0,     0,     0,     0,     0,     0,     0,
-     0,   170,    13,    14,    15,   171,    16,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,     0,    26,    27,    28,
-    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-    39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-    49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-    59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-     0,     0,     0,     0,     0,     0,    79,   172,   547,    82,
-   174,   175,    84,    85,   139,     0,     0,     0,     0,   140,
-   141,   142,     0,   143,   144,   145,   146,   147,   148,   149,
-   150,   151,  -170,     0,     0,     0,     0,   152,     0,     0,
-     0,     0,   153,   154,   155,   156,   157,   158,     0,     0,
-     0,     0,     0,     0,     0,  -273,  -273,  -273,     0,     0,
-   159,   160,   161,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,  -413,  -413,  -413,   164,     6,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,  -273,  -273,  -273,   162,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   164,
-   165,   166,   167,   168,   169,     0,     0,     0,     0,     0,
-     0,     0,     0,   170,  -273,  -273,  -273,   171,  -273,  -273,
-  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,     0,  -273,
+     0,     0,     0,   166,   167,   168,   169,   170,   171,     0,
+     0,     0,     0,     0,     0,     0,     0,   172,    13,    14,
+    15,    16,   173,    17,    18,    19,    20,    21,    22,    23,
+    24,    25,    26,     0,    27,    28,    29,    30,    31,    32,
+    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+    43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+    53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+    73,    74,    75,    76,    77,    78,    79,     0,     0,     0,
+     0,     0,     0,    80,   174,   550,    83,   176,   177,    85,
+    86,   141,     0,     0,     0,     0,   142,   143,   144,     0,
+   145,   146,   147,   148,   149,   150,   151,   152,   153,  -170,
+     0,     0,     0,     0,   154,     0,     0,     0,     0,   155,
+   156,   157,   158,   159,   160,     0,     0,     0,     0,     0,
+     0,     0,  -273,  -273,  -273,     0,     0,   161,   162,   163,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,  -273,  -273,
+  -273,   164,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   166,   167,   168,   169,
+   170,   171,     0,     0,     0,     0,     0,     0,     0,     0,
+   172,  -273,  -273,  -273,  -273,   173,  -273,  -273,  -273,  -273,
+  -273,  -273,  -273,  -273,  -273,  -273,     0,  -273,  -273,  -273,
   -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
   -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
   -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
   -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
   -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
-  -273,  -273,     0,     0,     0,     0,     0,     0,    79,   172,
-   173,  -273,   174,   175,    84,  -273,   216,     0,     0,     0,
-     0,   140,   141,   142,     0,     0,   217,   145,   146,   147,
-   148,   149,   150,   218,  -170,  -549,     0,     0,     0,   219,
-     0,     0,     0,     0,   153,   154,   155,   156,   157,   158,
-     0,     0,     0,     0,     0,     0,     0,  -273,  -273,  -273,
-     0,     0,   159,   160,   161,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,  -273,  -273,  -273,   162,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    80,   174,   175,  -273,
+   176,   177,    85,  -273,   218,     0,     0,     0,     0,   142,
+   143,   144,     0,     0,   219,   147,   148,   149,   150,   151,
+   152,   220,  -170,  -551,     0,     0,     0,   221,     0,     0,
+     0,     0,   155,   156,   157,   158,   159,   160,     0,     0,
+     0,     0,     0,     0,     0,  -273,  -273,  -273,     0,     0,
+   161,   162,   163,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,  -273,  -273,  -273,   164,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   164,   165,   166,   167,   168,   169,     0,     0,     0,
-     0,     0,     0,     0,     0,   170,  -273,  -273,  -273,   171,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   166,
+   167,   168,   169,   170,   171,     0,     0,     0,     0,     0,
+     0,     0,     0,   172,  -273,  -273,  -273,  -273,   173,  -273,
+  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,     0,
   -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
-     0,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
   -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
   -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
   -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
   -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
-  -273,  -273,  -273,  -273,     0,     0,     0,     0,     0,     0,
-    79,   172,   173,  -273,   174,   220,   221,  -273,  -168,     0,
-     0,     0,     0,  -168,  -168,  -168,     0,  -168,  -168,  -168,
-  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -694,
-  -168,  -168,     0,  -168,     0,  -168,  -168,  -168,  -168,  -168,
-  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,
+  -273,  -273,  -273,     0,     0,     0,     0,     0,     0,    80,
+   174,   175,  -273,   176,   222,   223,  -273,  -168,     0,     0,
+     0,     0,  -168,  -168,  -168,     0,  -168,  -168,  -168,  -168,
+  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -696,  -168,
   -168,     0,  -168,     0,  -168,  -168,  -168,  -168,  -168,  -168,
   -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,
-  -168,  -168,  -168,  -168,  -168,     0,     0,     0,  -168,     0,
-     0,     0,    22,    23,    24,    25,     0,    26,     0,     0,
-     0,     0,    31,    32,     0,     0,    35,    36,     0,    38,
-    39,    40,    41,  -168,  -168,  -168,  -168,  -168,  -168,     0,
-     0,     0,     0,   139,    53,    54,     0,  -168,   140,   141,
-   142,  -168,   143,   144,   145,   146,   147,   148,   149,   150,
-   151,  -545,     0,     0,     0,     0,   152,     0,     0,    78,
-     0,   153,   154,   155,   156,   157,   158,     0,     0,    82,
-     0,     0,     0,     0,  -273,  -273,     0,     0,   139,   159,
-   160,   161,     0,   140,   141,   142,     0,   143,   144,   145,
-   146,   147,   148,   149,   150,   151,  -545,     0,     0,     0,
-     0,   152,     0,   162,     0,     0,   153,   154,   155,   156,
-   157,   158,  -168,  -168,  -168,     0,  -168,  -168,  -168,  -273,
-  -273,     0,     0,     0,   159,   160,   161,   163,   164,   165,
-   166,   167,   168,   169,     0,     0,     0,     0,     0,     0,
-     0,     0,   170,     0,     0,     0,   171,     0,   162,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,  -168,     0,  -168,  -168,  -168,  -168,  -168,  -168,  -168,
+  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,  -168,
+  -168,  -168,  -168,  -168,     0,     0,     0,  -168,     0,     0,
+     0,     0,     0,     0,     0,   817,  1139,     0,     0,     0,
+   294,     0,   818,     0,   819,   155,   156,   157,   158,   159,
+   160,     0,  -168,  -168,  -168,  -168,  -168,  -168,     0,     0,
+     0,     0,   218,   161,   162,   163,  -168,   142,   143,   144,
+     0,  -168,   219,   147,   148,   149,   150,   151,   152,   220,
+  -492,  -492,     0,     0,     0,   221,  -492,   164,     0,     0,
+   155,   156,   157,   158,   159,   160,     0,     0,     0,     0,
+     0,     0,     0,  -273,  -273,     0,     0,     0,   161,   162,
+   163,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,  -518,   164,   165,   166,   167,   168,   169,     0,
-     0,     0,     0,   216,     0,     0,     0,   170,   140,   141,
-   142,   171,     0,   217,   145,   146,   147,   148,   149,   150,
-   218,  -545,  -549,     0,     0,     0,   219,     0,     0,     0,
-     0,   153,   154,   155,   156,   157,   158,    79,   172,   173,
-     0,   174,   175,    84,  -273,  -273,     0,     0,   139,   159,
-   160,   161,     0,   140,   141,   142,     0,   143,   144,   145,
-   146,   147,   148,   149,   150,   151,  -545,   640,     0,     0,
-     0,   152,     0,   162,     0,     0,   153,   154,   155,   156,
-   157,   158,    79,   172,   173,     0,   174,   175,    84,  -273,
-  -273,     0,     0,     0,   159,   160,   161,  -486,   164,   165,
-   166,   167,   168,   169,     0,     0,     0,     0,     0,     0,
-     0,     0,   170,     0,     0,     0,   171,     0,   162,     0,
-     0,     0,   696,  -688,     0,     0,     0,   291,     0,     0,
-     0,     0,   153,   154,   155,   156,   157,   158,     0,     0,
-     0,     0,     0,   164,   165,   166,   167,   168,   169,     0,
-   159,   160,   161,   216,     0,     0,     0,   170,   140,   141,
-   142,   171,     0,   217,   145,   146,   147,   148,   149,   150,
-   218,  -545,  -549,     0,   162,     0,   219,     0,     0,     0,
-     0,   153,   154,   155,   156,   157,   158,    79,   172,   173,
-     0,   174,   220,   221,  -273,  -273,     0,     0,   139,   159,
-   160,   161,     0,   140,   141,   142,     0,   143,   144,   145,
-   146,   147,   148,   149,   150,   151,  -545,   171,     0,     0,
-     0,   152,     0,   162,     0,     0,   153,   154,   155,   156,
-   157,   158,    79,   172,   173,     0,   174,   175,    84,  -273,
-  -273,     0,     0,     0,   159,   160,   161,     0,   164,   165,
-   166,   167,   168,   169,     0,     0,     0,     0,     0,     0,
-     0,     0,   170,     0,     0,     0,   171,     0,   162,     0,
+     0,   173,   164,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,  -168,  -168,  -168,     0,  -168,  -168,  -168,     0,
+     0,     0,     0,     0,     0,     0,  -492,   166,   167,   168,
+   169,   170,   171,     0,     0,     0,     0,     0,   141,     0,
+     0,   172,     0,   142,   143,   144,   173,   145,   146,   147,
+   148,   149,   150,   151,   152,   153,  -547,     0,     0,     0,
+     0,   154,     0,     0,     0,     0,   155,   156,   157,   158,
+   159,   160,    80,   174,   175,     0,   176,    84,    85,  -273,
+  -273,     0,     0,   141,   161,   162,   163,     0,   142,   143,
+   144,     0,   145,   146,   147,   148,   149,   150,   151,   152,
+   153,  -547,     0,     0,     0,     0,   154,     0,   164,     0,
+     0,   155,   156,   157,   158,   159,   160,    80,   174,   175,
+     0,   176,   222,   223,  -273,  -273,     0,     0,     0,   161,
+   162,   163,   165,   166,   167,   168,   169,   170,   171,     0,
+     0,     0,     0,     0,     0,     0,  -170,   172,     0,     0,
+     0,   294,   173,   164,     0,     0,   155,   156,   157,   158,
+   159,   160,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   161,   162,   163,  -520,   166,   167,
+   168,   169,   170,   171,     0,     0,     0,     0,     0,   218,
+     0,     0,   172,     0,   142,   143,   144,   173,   164,   219,
+   147,   148,   149,   150,   151,   152,   220,  -547,  -551,     0,
+     0,     0,   221,     0,     0,     0,     0,   155,   156,   157,
+   158,   159,   160,    80,   174,   175,     0,   176,   177,    85,
+  -273,  -273,     0,     0,   141,   161,   162,   163,     0,   142,
+   143,   144,   173,   145,   146,   147,   148,   149,   150,   151,
+   152,   153,  -547,   643,     0,     0,     0,   154,     0,   164,
+     0,     0,   155,   156,   157,   158,   159,   160,    80,   174,
+   175,     0,   176,   177,    85,  -273,  -273,     0,     0,     0,
+   161,   162,   163,  -488,   166,   167,   168,   169,   170,   171,
+     0,     0,     0,     0,     0,     0,     0,  -170,   172,     0,
+     0,     0,   352,   173,   164,     0,     0,   155,   156,   157,
+   158,   159,   160,    80,   295,   296,     0,   176,     0,     0,
+     0,     0,     0,     0,     0,   161,   162,   163,     0,   166,
+   167,   168,   169,   170,   171,     0,     0,     0,     0,     0,
+   218,     0,     0,   172,     0,   142,   143,   144,   173,   164,
+   219,   147,   148,   149,   150,   151,   152,   220,  -547,  -551,
+     0,     0,     0,   221,     0,     0,     0,     0,   155,   156,
+   157,   158,   159,   160,    80,   174,   175,     0,   176,   222,
+   223,  -273,  -273,     0,     0,   141,   161,   162,   163,     0,
+   142,   143,   144,   173,   145,   146,   147,   148,   149,   150,
+   151,   152,   153,  -547,     0,     0,     0,     0,   154,     0,
+   164,     0,     0,   155,   156,   157,   158,   159,   160,    80,
+   174,   175,     0,   176,   177,    85,  -273,  -273,     0,     0,
+     0,   161,   162,   163,     0,   166,   167,   168,   169,   170,
+   171,     0,     0,     0,     0,     0,     0,     0,     0,   172,
+     0,     0,     0,     0,   173,   164,     0,     0,     0,     0,
+     0,     0,     0,     0,    80,   295,   296,     0,   176,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    79,   292,
-   293,     0,   174,   164,   165,   166,   167,   168,   169,     0,
-     0,     0,     0,     0,     0,     0,     0,   170,   140,   141,
-   142,   171,   143,   144,   145,   146,   147,   148,   149,   150,
-   218,  -545,   564,     0,     0,     0,   349,     0,     0,     0,
-     0,   153,   154,   155,   156,   157,   158,    79,   172,   173,
-     0,   174,   220,   221,  -273,  -273,     4,     0,     5,   159,
-   160,   161,     0,     0,     0,     0,     0,     0,     0,     0,
+   166,   167,   168,   169,   170,   171,     0,     0,     0,     0,
+     0,     0,     0,     0,   172,     0,   142,   143,   144,   173,
+   145,   146,   147,   148,   149,   150,   151,   152,   220,  -547,
+   567,     0,     0,     0,   352,     0,     0,     0,     0,   155,
+   156,   157,   158,   159,   160,    80,   174,   175,     0,   176,
+   222,   223,  -273,  -273,     4,     0,     5,   161,   162,   163,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   162,     6,     0,     0,     0,     0,     0,
-     0,     0,    79,   172,   173,     0,   174,   175,    84,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   164,   165,
-   166,   167,   168,   169,     0,     0,     0,     0,     0,     0,
-     0,     0,   565,    13,    14,    15,   171,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,     0,    26,    27,
-    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-    38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,     0,     0,     0,     0,     0,     0,    79,   172,   547,
-    82,   174,   175,    84,    85,   140,   141,   142,     0,   143,
-   144,   145,   146,   147,   148,   149,   150,   218,  -545,   641,
-     0,     0,     0,   349,     0,     0,     0,     0,   153,   154,
-   155,   156,   157,   158,     0,     0,     0,     0,     0,     0,
-     0,  -273,  -273,     4,     0,     5,   159,   160,   161,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   164,     6,     0,     0,     0,     0,     0,     0,     0,
+    80,   174,   175,     0,   176,   177,    85,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   166,   167,   168,   169,
+   170,   171,     0,     0,     0,     0,     0,     0,     0,     0,
+   568,    13,    14,    15,    16,   173,    17,    18,    19,    20,
+    21,    22,    23,    24,    25,    26,     0,    27,    28,    29,
+    30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+    40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+    50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+    60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+     0,     0,     0,     0,     0,     0,    80,   174,   550,    83,
+   176,   177,    85,    86,   142,   143,   144,     0,   145,   146,
+   147,   148,   149,   150,   151,   152,   220,  -547,   644,     0,
+     0,     0,   352,     0,     0,     0,     0,   155,   156,   157,
+   158,   159,   160,     0,     0,     0,     0,     0,     0,     0,
+  -273,  -273,     4,     0,     5,   161,   162,   163,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   162,     6,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   164,
+     6,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   164,   165,   166,   167,   168,
-   169,     0,     0,     0,     0,     0,     0,     0,     0,   170,
-    13,    14,    15,   171,    16,    17,    18,    19,    20,    21,
-    22,    23,    24,    25,     0,    26,    27,    28,    29,    30,
-    31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-    41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-    51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-    61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-    71,    72,    73,    74,    75,    76,    77,    78,     0,     0,
-     0,     0,     0,     0,    79,   172,   547,    82,   174,   175,
-    84,    85,   140,   141,   142,     0,   143,   144,   145,   146,
-   147,   148,   149,   150,   218,  -545,   653,     0,     0,     0,
-   349,     0,     0,     0,     0,   153,   154,   155,   156,   157,
-   158,     0,     0,     0,     0,     0,     0,     0,  -273,  -273,
-     4,     0,     5,   159,   160,   161,     0,     0,     0,     0,
+     0,     0,     0,     0,   166,   167,   168,   169,   170,   171,
+     0,     0,     0,     0,     0,     0,     0,     0,   172,    13,
+    14,    15,    16,   173,    17,    18,    19,    20,    21,    22,
+    23,    24,    25,    26,     0,    27,    28,    29,    30,    31,
+    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+    42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+    52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
+     0,     0,     0,     0,    80,   174,   550,    83,   176,   177,
+    85,    86,   142,   143,   144,     0,   145,   146,   147,   148,
+   149,   150,   151,   152,   220,  -547,   656,     0,     0,     0,
+   352,     0,     0,     0,     0,   155,   156,   157,   158,   159,
+   160,     0,     0,     0,     0,     0,     0,     0,  -273,  -273,
+     4,     0,     5,   161,   162,   163,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   162,     6,     0,
+     0,     0,     0,     0,     0,     0,     0,   164,     6,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   164,   165,   166,   167,   168,   169,     0,     0,
-     0,     0,     0,     0,     0,     0,   654,    13,    14,    15,
-   171,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    25,     0,    26,    27,    28,    29,    30,    31,    32,    33,
+     0,     0,   166,   167,   168,   169,   170,   171,     0,     0,
+     0,     0,     0,     0,     0,     0,   657,    13,    14,    15,
+    16,   173,    17,    18,    19,    20,    21,    22,    23,    24,
+    25,    26,     0,    27,    28,    29,    30,    31,    32,    33,
     34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
     44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
     54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
     64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-    74,    75,    76,    77,    78,     0,     0,     0,     0,     0,
-     0,    79,   172,   547,    82,   174,   175,    84,    85,   140,
-   141,   142,     0,   143,   144,   145,   146,   147,   148,   149,
-   150,   218,  -545,   652,     0,     0,     0,   349,     0,     0,
-     0,     0,   153,   154,   155,   156,   157,   158,     0,     0,
+    74,    75,    76,    77,    78,    79,     0,     0,     0,     0,
+     0,     0,    80,   174,   550,    83,   176,   177,    85,    86,
+   142,   143,   144,     0,   145,   146,   147,   148,   149,   150,
+   151,   152,   220,  -547,   655,     0,     0,     0,   352,     0,
+     0,     0,     0,   155,   156,   157,   158,   159,   160,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   159,   160,   161,   140,   141,   142,     0,   143,   144,   145,
-   146,   147,   148,   149,   150,   218,  -545,   656,     0,     0,
-     0,   349,     0,     0,   162,     0,   153,   154,   155,   156,
-   157,   158,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   159,   160,   161,     0,     0,   164,
-   165,   166,   167,   168,   169,     0,     0,     0,     0,     0,
-     0,     0,     0,   170,     0,     0,     0,   171,   162,     0,
+     0,   161,   162,   163,     0,   142,   143,   144,     0,   145,
+   146,   147,   148,   149,   150,   151,   152,   220,  -547,   659,
+     0,     0,     0,   352,     0,   164,     0,     0,   155,   156,
+   157,   158,   159,   160,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   161,   162,   163,     0,
+   166,   167,   168,   169,   170,   171,     0,     0,     0,     0,
+     0,     0,     0,     0,   172,     0,     0,     0,     0,   173,
+   164,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   166,   167,   168,   169,   170,
+   171,     0,     0,     0,     0,     0,     0,     0,     0,   660,
+     0,   142,   143,   144,   173,   145,   146,   147,   148,   149,
+   150,   151,   152,   220,  -547,   715,     0,     0,     0,   352,
+     0,     0,     0,     0,   155,   156,   157,   158,   159,   160,
+    80,   174,   175,     0,   176,   177,    85,     0,     0,     0,
+     0,     0,   161,   162,   163,     0,   142,   143,   144,     0,
+   145,   146,   147,   148,   149,   150,   151,   152,   220,  -547,
+   793,     0,     0,     0,   352,     0,   164,     0,     0,   155,
+   156,   157,   158,   159,   160,    80,   174,   175,     0,   176,
+   177,    85,     0,     0,     0,     0,     0,   161,   162,   163,
+     0,   166,   167,   168,   169,   170,   171,     0,     0,     0,
+     0,     0,     0,     0,     0,   172,     0,     0,     0,     0,
+   173,   164,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   164,   165,   166,   167,   168,   169,     0,
-     0,     0,     0,     0,     0,     0,     0,   657,   140,   141,
-   142,   171,   143,   144,   145,   146,   147,   148,   149,   150,
-   218,  -545,   712,     0,     0,     0,   349,     0,     0,     0,
-     0,   153,   154,   155,   156,   157,   158,     0,    79,   172,
-   173,     0,   174,   175,    84,     0,     0,     0,     0,   159,
-   160,   161,   140,   141,   142,     0,   143,   144,   145,   146,
-   147,   148,   149,   150,   218,  -545,   790,     0,     0,     0,
-   349,     0,     0,   162,     0,   153,   154,   155,   156,   157,
-   158,     0,    79,   172,   173,     0,   174,   175,    84,     0,
-     0,     0,     0,   159,   160,   161,     0,     0,   164,   165,
-   166,   167,   168,   169,     0,     0,     0,     0,     0,     0,
-     0,     0,   170,     0,     0,     0,   171,   162,     0,     0,
+     0,     0,     0,     0,     0,     0,   166,   167,   168,   169,
+   170,   171,     0,     0,     0,     0,     0,     0,     0,     0,
+   172,     0,   142,   143,   144,   173,   145,   146,   147,   148,
+   149,   150,   151,   152,   220,  -547,   794,     0,     0,     0,
+   352,     0,     0,     0,     0,   155,   156,   157,   158,   159,
+   160,    80,   174,   175,     0,   176,   177,    85,     0,     0,
+     0,     0,     0,   161,   162,   163,     0,   142,   143,   144,
+     0,   145,   146,   147,   148,   149,   150,   151,   152,   220,
+  -547,   796,     0,     0,     0,   352,     0,   164,     0,     0,
+   155,   156,   157,   158,   159,   160,    80,   174,   175,     0,
+   176,   177,    85,     0,     0,     0,     0,     0,   161,   162,
+   163,     0,   166,   167,   168,   169,   170,   171,     0,     0,
+     0,     0,     0,     0,     0,     0,   795,     0,     0,     0,
+     0,   173,   164,     0,     0,     0,   620,     0,     0,     0,
+     0,   294,     0,     0,     0,     0,   155,   156,   157,   158,
+   159,   160,     0,     0,     0,     0,     0,   166,   167,   168,
+   169,   170,   171,     0,   161,   162,   163,     0,     0,     0,
+     0,   172,     0,   142,   143,   144,   173,   145,   146,   147,
+   148,   149,   150,   151,   152,   220,  -547,   928,   164,     0,
+     0,   352,     0,     0,     0,     0,   155,   156,   157,   158,
+   159,   160,    80,   174,   175,     0,   176,   177,    85,     0,
+     0,     0,     0,     0,   161,   162,   163,     0,   142,   143,
+   144,     0,   145,   146,   147,   148,   149,   150,   151,   152,
+   220,  -547,   173,     0,     0,     0,   352,     0,   164,     0,
+     0,   155,   156,   157,   158,   159,   160,    80,   174,   175,
+     0,   176,   177,    85,     0,     0,     0,     0,     0,   161,
+   162,   163,     0,   166,   167,   168,   169,   170,   171,     0,
+     0,     0,     0,     0,     0,     0,     0,   172,     0,     0,
+     0,     0,   173,   164,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    80,   295,   296,     0,   176,   166,   167,
+   168,   169,   170,   171,  -135,     0,     0,     0,     0,  -135,
+     0,     0,   172,     0,     0,     0,     0,   173,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     4,
+     0,     5,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    80,   174,   175,     0,   176,   177,    85,
+     0,     0,     0,     0,     0,     0,     0,     6,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   164,   165,   166,   167,   168,   169,     0,     0,
-     0,     0,     0,     0,     0,     0,   170,   140,   141,   142,
-   171,   143,   144,   145,   146,   147,   148,   149,   150,   218,
-  -545,   791,     0,     0,     0,   349,     0,     0,     0,     0,
-   153,   154,   155,   156,   157,   158,     0,    79,   172,   173,
-     0,   174,   175,    84,     0,     0,     0,     0,   159,   160,
-   161,   140,   141,   142,     0,   143,   144,   145,   146,   147,
-   148,   149,   150,   218,  -545,   793,     0,     0,     0,   349,
-     0,     0,   162,     0,   153,   154,   155,   156,   157,   158,
-     0,    79,   172,   173,     0,   174,   175,    84,     0,     0,
-     0,     0,   159,   160,   161,     0,     0,   164,   165,   166,
-   167,   168,   169,     0,     0,     0,     0,     0,     0,     0,
-     0,   792,     0,     0,     0,   171,   162,     0,     0,  -170,
-     0,     0,     0,     0,   291,     0,     0,     0,     0,   153,
-   154,   155,   156,   157,   158,     0,     0,     0,     0,     0,
-     0,   164,   165,   166,   167,   168,   169,   159,   160,   161,
-     0,     0,     0,     0,     0,   170,   140,   141,   142,   171,
-   143,   144,   145,   146,   147,   148,   149,   150,   218,  -545,
-   925,   162,     0,     0,   349,     0,     0,     0,     0,   153,
-   154,   155,   156,   157,   158,     0,    79,   172,   173,     0,
-   174,   175,    84,     0,     0,     0,     0,   159,   160,   161,
-   140,   141,   142,     0,   143,   144,   145,   146,   147,   148,
-   149,   150,   218,  -545,   171,     0,     0,     0,   349,     0,
-     0,   162,     0,   153,   154,   155,   156,   157,   158,     0,
-    79,   172,   173,     0,   174,   175,    84,     0,     0,     0,
-     0,   159,   160,   161,     0,     0,   164,   165,   166,   167,
-   168,   169,     0,     0,     0,     0,     0,     0,     0,     0,
-   170,     0,     0,     0,   171,   162,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    79,   292,   293,     0,   174,
-   164,   165,   166,   167,   168,   169,  -135,     0,     0,     0,
-     0,  -135,     0,     0,   170,     0,     0,     0,   171,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    80,   174,
+   175,     0,   176,   177,    85,     0,    13,    14,    15,    16,
+     0,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,     0,    27,    28,    29,    30,    31,    32,    33,    34,
+    35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+    45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+    55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,  -550,     0,     0,     0,     0,
+     0,     0,     0,   136,    83,     0,     0,     0,    86,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     4,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     4,     0,     5,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    79,   172,   173,     0,   174,
-   175,    84,     0,     0,     0,     0,     0,     0,     0,     6,
      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,    79,
-   172,   173,     0,   174,   175,    84,     0,     0,    13,    14,
-    15,     0,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,     0,    26,    27,    28,    29,    30,    31,    32,
-    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-    43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-    53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    75,    76,    77,    78,  -548,     0,     0,     0,
-     0,     0,     0,     0,   134,    82,     0,     0,     0,    85,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     4,     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,    13,    14,    15,    16,
+     0,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,     0,    27,    28,    29,    30,    31,    32,    33,    34,
+    35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+    45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+    55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,     0,     0,     0,     0,     0,
+   699,     0,     0,   136,    83,   294,     0,     0,    86,     0,
+   155,   156,   157,   158,   159,   160,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   161,   162,
+   163,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   164,     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,    13,    14,    15,
-     0,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    25,     0,    26,    27,    28,    29,    30,    31,    32,    33,
-    34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-    44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-    54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-    74,    75,    76,    77,    78,     0,     0,     0,     0,     0,
-   814,  1136,     0,   134,    82,   291,     0,   815,    85,   816,
-   153,   154,   155,   156,   157,   158,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   814,     0,   159,   160,
-   161,   291,     0,   815,     0,   816,   153,   154,   155,   156,
-   157,   158,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   162,  -170,   159,   160,   161,     0,   349,     0,
-     0,     0,     0,   153,   154,   155,   156,   157,   158,     0,
-     0,     0,     0,     0,   617,     0,     0,     0,   162,   291,
-     0,   159,   160,   161,   153,   154,   155,   156,   157,   158,
-     0,   291,   506,     0,     0,   171,   153,   154,   155,   156,
-   157,   158,   159,   160,   161,   162,     0,     0,     0,     0,
-     0,     0,     0,     0,   159,   160,   161,     0,     0,     0,
-     0,   171,   696,     0,     0,     0,   162,   291,     0,     0,
-     0,     0,   153,   154,   155,   156,   157,   158,   162,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   171,     0,
-   159,   160,   161,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    79,   172,   173,   171,
-   174,    83,    84,     0,   162,     0,     0,     0,     0,     0,
-     0,   171,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    79,   172,   173,     0,   174,    83,    84,     0,
-     0,     0,     0,     0,     0,     0,  -273,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     3,   171,     0,    79,
-   292,   293,     0,   174,     0,     0,     4,     0,     0,     0,
+     0,     0,     0,     0,     0,  -273,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     3,   173,     0,     0,     0,
+     0,     0,     0,     0,     0,     4,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    79,   292,   293,     0,   174,     0,     0,     0,     0,     0,
-     0,     0,    79,   292,   293,     0,   174,     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,    79,   292,
-   293,     0,   174,    13,    14,    15,     0,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,     0,    26,    27,
-    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-    38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,     0,     0,     0,     0,     0,     0,    79,    80,    81,
-    82,     0,    83,    84,    85,   291,     0,     0,   678,     0,
-   153,   154,   155,   156,   157,   158,   291,   973,     0,     0,
-     0,   153,   154,   155,   156,   157,   158,     0,   159,   160,
-   161,     0,     0,     0,     0,     0,     0,   291,  -255,   159,
-   160,   161,   153,   154,   155,   156,   157,   158,     0,   291,
-     0,     0,   162,     0,   153,   154,   155,   156,   157,   158,
-   159,   160,   161,   162,     0,     0,     0,     0,     0,     0,
-     0,     0,   159,   160,   161,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   162,     0,     0,     0,     0,     0,
-     0,     0,     0,   338,     0,   171,   162,     0,   153,   154,
-   155,   156,   157,   158,     0,   636,   171,     0,     0,     0,
-   153,   154,   155,   156,   157,   158,   159,   160,   161,     0,
-     0,     0,     0,     0,     0,     0,   638,   171,   159,   160,
-   161,   153,   154,   155,   156,   157,   158,   715,     0,   171,
-   162,     0,   716,   717,   718,   719,   720,   721,     0,   159,
-   160,   161,   162,     0,     0,     0,     0,     0,     0,     0,
-   159,   722,   723,     0,     0,     0,    79,   292,   293,     0,
-   174,     0,     0,   162,     0,     0,     0,    79,   292,   293,
-     0,   174,     0,   171,   724,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   171,     0,     0,    79,   292,
-   293,     0,   174,     0,     0,     0,     0,     0,     0,     0,
-    79,   292,   293,     0,   174,     0,   171,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   171,     0,     0,
-     0,     0,     0,     0,  -199,  -199,     4,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    79,   292,   293,     0,   174,     0,
-     0,     0,     0,     0,     0,     0,    79,   292,   293,     0,
-   174,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    79,   292,   293,
-     0,   174,     0,     0,     0,     0,     0,     0,    79,   725,
-   726,     0,   174,    13,    14,    15,     0,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,     0,    26,    27,
-    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-    38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,     4,     0,     5,     0,     0,     0,     0,     0,   134,
-    82,     0,     0,     0,    85,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,  -412,  -412,  -412,     0,     6,
+     0,     0,     0,     0,     0,     0,     0,    80,   295,   296,
+     0,   176,    13,    14,    15,    16,     0,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,     0,    27,    28,
+    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+    39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+    49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+    59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+    79,     0,     0,     0,     0,     0,     0,    80,    81,    82,
+    83,     0,    84,    85,    86,   294,   509,     0,     0,     0,
+   155,   156,   157,   158,   159,   160,   294,     0,     0,   590,
+     0,   155,   156,   157,   158,   159,   160,     0,   161,   162,
+   163,     0,     0,     0,     0,     0,     0,   294,   976,   161,
+   162,   163,   155,   156,   157,   158,   159,   160,   294,     0,
+     0,   681,   164,   155,   156,   157,   158,   159,   160,     0,
+   161,   162,   163,   164,     0,     0,     0,     0,     0,   294,
+  -255,   161,   162,   163,   155,   156,   157,   158,   159,   160,
+     0,     0,     0,     0,   164,     0,     0,     0,     0,     0,
+     0,     0,   161,   162,   163,   164,   173,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   173,     0,     0,
+     0,     0,     0,     0,     0,     0,   164,   294,     0,     0,
+     0,     0,   155,   156,   157,   158,   159,   160,   173,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   341,   173,
+   161,   162,   163,   155,   156,   157,   158,   159,   160,   639,
+     0,     0,     0,     0,   155,   156,   157,   158,   159,   160,
+   173,   161,   162,   163,   164,     0,     0,    80,   295,   296,
+     0,   176,   161,   162,   163,     0,     0,     0,    80,   295,
+   296,   641,   176,     0,     0,   164,   155,   156,   157,   158,
+   159,   160,     0,     0,     0,     0,   164,     0,     0,    80,
+   295,   296,     0,   176,   161,   162,   163,     0,   173,     0,
+    80,   295,   296,     0,   176,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   164,   173,
+     0,    80,   295,   296,     0,   176,     0,   718,     0,     0,
+   173,     0,   719,   720,   721,   722,   723,   724,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   161,   725,   726,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   173,     0,     0,     0,     0,     0,     0,    80,
+   295,   296,     0,   176,   727,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    80,   295,   296,     0,   176,     0,     0,     0,     0,     0,
+     0,    80,   295,   296,     0,   176,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   173,     0,
+     0,     0,     0,     0,     0,  -199,  -199,     4,     0,     0,
+     0,     0,     0,    80,   295,   296,     0,   176,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    13,    14,
-    15,     0,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,     0,    26,    27,    28,    29,    30,    31,    32,
-    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-    43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-    53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    75,    76,    77,    78,     4,     0,     5,     0,
-     0,     0,     0,     0,   134,    82,     0,     0,     0,    85,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     6,     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,    80,
+   728,   729,     0,   176,    13,    14,    15,    16,     0,    17,
+    18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
+    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,     4,     0,     5,     0,     0,     0,     0,
+     0,   136,    83,     0,     0,     0,    86,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,  -413,  -413,  -413,
+     0,     6,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    13,    14,    15,     0,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,     0,    26,    27,
-    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-    38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,     4,     0,     0,     0,     0,     0,    79,  1085,   134,
-    82,     0,     0,     0,    85,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,  -412,  -412,  -412,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    13,    14,    15,    16,     0,    17,    18,    19,    20,    21,
+    22,    23,    24,    25,    26,     0,    27,    28,    29,    30,
+    31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+    41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+    51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+    61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,     4,
+     0,     5,     0,     0,     0,     0,     0,   136,    83,     0,
+     0,     0,    86,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     6,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    13,    14,
-    15,     0,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,     0,    26,    27,    28,    29,    30,    31,    32,
-    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-    43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-    53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    75,    76,    77,    78,     4,     0,     0,     0,
-     0,     0,     0,     0,   134,    82,     0,     0,     0,    85,
      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,    13,    14,    15,    16,
+     0,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,     0,    27,    28,    29,    30,    31,    32,    33,    34,
+    35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+    45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+    55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,     4,     0,     0,     0,     0,
+     0,    80,  1088,   136,    83,     0,     0,     0,    86,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,  -413,
+  -413,  -413,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    10,    11,    12,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    13,    14,    15,     0,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,     0,    26,    27,
-    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-    38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,     4,     0,     5,     0,     0,     0,     0,     0,   134,
-    82,     0,     0,     0,    85,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     6,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    13,    14,    15,    16,     0,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,     0,    27,    28,
+    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+    39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+    49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+    59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+    79,     4,     0,     0,     0,     0,     0,     0,     0,   136,
+    83,     0,     0,     0,    86,     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,    10,
+    11,    12,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,    13,    14,
-    15,     0,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,     0,    26,    27,    28,    29,    30,    31,    32,
+    15,    16,     0,    17,    18,    19,    20,    21,    22,    23,
+    24,    25,    26,     0,    27,    28,    29,    30,    31,    32,
     33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
     43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
     53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
     63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    75,    76,    77,    78,     4,     0,     0,     0,
-     0,     0,     0,     0,   134,    82,     0,     0,     0,    85,
+    73,    74,    75,    76,    77,    78,    79,     4,     0,     5,
+     0,     0,     0,     0,     0,   136,    83,     0,     0,     0,
+    86,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     6,     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,    13,    14,    15,    16,     0,    17,
+    18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
+    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,     4,     0,     0,     0,     0,     0,     0,
+     0,   136,    83,     0,     0,     0,    86,     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,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    13,    14,    15,     0,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,     0,    26,    27,
-    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-    38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,     0,     0,     0,     0,     0,     0,     0,     0,   134,
-    82,     0,     0,     0,    85
+    13,    14,    15,    16,     0,    17,    18,    19,    20,    21,
+    22,    23,    24,    25,    26,     0,    27,    28,    29,    30,
+    31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+    41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+    51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+    61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,     0,
+     0,     0,     0,     0,     0,     0,     0,   136,    83,     0,
+     0,     0,    86
 };
 
 static const short yycheck[] = {     0,
-     3,   119,   395,   327,     5,     0,     0,   452,     9,    10,
-    11,    12,   394,   456,    27,   306,   913,   646,   128,   308,
-   589,    56,   615,  1031,   140,   349,   541,   230,   396,   646,
-    19,   646,   690,   432,   392,   393,   431,   921,    21,   948,
-   650,   650,    25,   800,   930,   384,   385,   933,   539,   646,
-     5,    10,     0,  1097,  1098,   450,    24,   466,   261,    34,
-     5,    11,    12,   774,   386,   387,   550,    18,   153,   154,
-   155,   156,   157,   158,   933,    24,   705,    41,   789,    10,
-    25,     0,    18,    18,   568,    86,     5,     5,   705,    24,
-   705,    86,    86,    57,    13,    14,   814,    18,    41,    34,
-    21,   819,   497,   650,    25,   823,    24,  1115,   705,    24,
-   219,   680,  1120,   668,    57,   224,    34,   226,   119,    34,
-    26,  1165,    28,   126,  1021,  1022,    21,    11,    12,    18,
-    25,   646,    21,   136,    23,   136,   111,   112,    86,    45,
-  1049,    21,    37,    38,    88,    25,   147,  1031,  1032,   184,
-    22,   152,    32,    33,    26,   646,    28,    52,    53,   483,
-    21,    19,  1170,   650,   774,   774,    27,    86,   826,   170,
-  1056,   281,  1058,    45,   832,   932,   189,   934,   467,   789,
-   789,    21,   101,   102,   103,   104,   105,   106,   107,   108,
-   705,   110,   601,   152,   113,   196,   591,  1056,  1095,  1058,
-   119,   600,   405,   204,   599,   206,   189,   208,   926,   128,
-   211,   130,   131,   132,   705,   650,    21,   136,   219,    18,
-    25,   152,  1106,   224,  1108,   226,    28,   774,   338,    24,
-   185,   186,   187,   152,    39,   190,   191,   196,   239,   240,
-   159,    24,   789,    45,   799,   204,   570,   802,   693,   208,
-   185,   186,   211,   646,    68,    69,    70,    71,    72,    73,
-    74,    75,    76,    77,   646,   196,    24,   185,   186,   219,
-   185,   186,    10,    24,   224,    26,   226,   208,   646,   280,
-   211,   240,   283,   284,   285,     0,   280,   774,   646,   239,
-     5,    34,     7,   296,   952,   109,   381,   382,   383,   113,
-   219,   115,   789,   117,   305,   596,    24,   646,   122,   240,
-   311,   305,   705,   910,    24,   431,    26,   426,   427,   133,
-    24,   135,    21,   705,   646,    18,    25,   185,   186,   187,
-    34,  1215,   190,   191,   450,   219,    24,   705,   257,   774,
-   224,    26,   226,  1061,    24,    88,    34,   705,    18,    34,
-   351,    50,    51,    23,   789,   239,    28,    24,   359,    10,
-   361,   280,   281,   177,   283,   284,   705,   960,   826,    89,
-    90,    86,   291,    45,   832,    16,    21,   296,   488,  1008,
-    25,   497,    16,   705,    21,   100,   305,   956,    25,    21,
-   905,  1008,   311,  1008,    16,    27,   111,   112,   843,   119,
-   120,   486,     5,    21,   405,    50,    51,    25,    37,    38,
-   805,  1008,   903,   133,   152,    32,    33,    54,    55,   338,
-   815,   136,    25,    52,    53,   426,   427,    24,   423,    26,
-   349,    21,   433,    18,   435,    25,    21,    34,    16,   434,
-    34,   435,   185,   186,   445,    21,   405,   190,   191,    25,
-   264,   388,   389,   390,   391,   456,    21,   458,   196,    15,
-    50,    51,    27,   466,   574,   466,   204,    21,   469,    22,
-   208,    25,   473,   211,   405,   591,   426,   427,   101,     5,
-    21,   185,   186,   599,    25,   299,     5,    18,   302,    22,
-    21,    32,    33,  1008,   952,  1092,   310,   185,   186,   313,
-   501,   152,   240,   422,    22,    24,    25,    26,   901,   510,
-   511,   621,    26,    29,    28,    34,   435,  1008,   900,    26,
-    21,    28,    56,   442,    25,   444,   636,   446,   638,    39,
-   449,    45,    21,   452,   902,   454,    25,   456,    45,   458,
-   898,   899,   426,   427,   463,   196,    21,   466,   549,   550,
-    25,   890,   891,   204,   473,   550,   557,   208,    50,    51,
-   211,    50,    51,   557,   565,  1162,    40,   568,   569,   488,
-   892,   893,    95,   568,    23,   693,    24,    26,    26,    28,
-   295,     5,   185,   186,   187,    54,    55,   190,   191,   240,
-   549,   185,   186,   187,    19,    21,   190,   191,   601,    25,
-   601,    25,    21,    29,    18,   715,    25,    21,   422,    25,
-    26,     0,    28,    95,    18,  1008,     5,    21,   432,   189,
-     9,    25,   913,   437,    25,    26,  1008,    28,   442,    45,
-   444,   716,   717,   718,   719,   720,   721,    24,   557,    26,
-  1008,   642,   643,   967,    45,   646,    18,   461,    22,    21,
-  1008,   465,   571,   654,   655,   574,   657,    22,    21,   185,
-   186,   187,    25,   954,   190,   191,    24,   405,    22,  1008,
-   671,   590,   673,   676,    21,   594,   595,    95,    25,    19,
-    21,   682,   601,  1126,    25,    20,  1008,     5,   689,   805,
-   693,   692,   693,   694,    21,  1140,    21,    86,    25,   815,
-    25,    21,   621,    95,   705,    25,    24,    25,    26,   646,
-    21,    21,   631,   632,    25,    25,    34,   636,    24,   638,
-    24,    27,    26,   438,    28,   843,  1017,     5,    34,    21,
-   119,    27,    21,    25,    21,  1026,    25,    22,    25,    18,
-   856,    45,    21,   662,    48,    49,    24,   136,    21,    34,
-    24,   670,    25,   672,   405,  1046,    34,   676,   147,     6,
-     7,   185,   186,   187,   683,   684,   190,   191,   705,   688,
-    25,    26,  1063,   692,   693,   589,    10,    11,    12,    24,
-    24,    26,    25,    21,    37,    38,   600,    25,    24,    34,
-    26,   792,    25,    26,  1189,    28,   715,    21,    34,    52,
-    53,    25,   887,   888,   889,   619,    25,    26,    18,    28,
-  1101,   549,    45,   814,    18,   816,    22,    24,   819,    21,
-    27,    21,   823,    25,   341,    25,    24,    34,    21,  1224,
-    21,  1122,    25,   647,    25,   649,    34,    26,    18,    21,
-   843,    21,   843,    25,    23,    34,    18,    21,   365,    21,
-   851,    25,    18,   370,   371,   372,   373,   374,   375,   376,
-   377,   378,   379,   380,    42,    43,    21,   185,   186,   187,
-    25,    21,   190,   191,    21,    25,   795,    21,    25,   185,
-   186,    25,    18,   189,   401,    21,   971,    34,    35,    36,
-    18,   280,    24,   608,   283,   284,   285,    24,   549,    25,
-   185,   186,   187,   181,   182,   190,   191,   185,   186,    25,
-    21,   189,   913,   727,    25,    21,   305,    21,   152,    25,
-   921,    25,   311,   842,   843,   926,   845,    20,    21,    21,
-   185,   186,   187,    25,    21,   190,   191,    18,    25,    18,
-   185,   186,   187,    18,    21,   190,   191,   192,    25,   185,
-   186,   187,    21,    18,   190,   191,    25,   894,   895,   896,
-   897,    18,   196,    19,    21,  1075,    21,    22,   782,   783,
-   204,    68,    69,    70,   208,   976,   977,   211,   185,   186,
-    32,    33,   189,   181,   182,   219,   220,   185,   186,    18,
-   224,   189,   226,    34,    35,    36,   185,   186,   187,    23,
-    21,   190,   191,     9,    25,   239,   240,  1008,    50,    51,
-   929,   825,    11,    34,    35,    36,    24,   936,  1019,    11,
-  1021,  1022,  1140,    25,  1019,    34,    35,    36,  1029,    91,
-  1031,  1032,    54,    55,    58,    59,    60,    61,    62,    63,
-    64,    65,    66,    67,    20,    21,   435,  1048,   185,   186,
-   187,    21,  1053,   190,   191,    19,   445,    19,    21,  1053,
-  1061,    19,    25,  1066,    10,  1066,    19,   456,    24,   458,
-  1071,  1008,  1066,  1189,    37,    38,    91,   466,    20,    21,
-   469,    24,   797,    27,   473,   800,    25,  1203,    21,    52,
-    53,  1092,  1093,  1094,  1095,    22,  1097,  1098,    21,    22,
-   617,    25,    24,    21,    26,  1106,    28,  1108,  1224,    18,
-  1111,   628,    32,    33,  1115,   929,  1117,  1118,    25,  1120,
-    21,   510,   511,    45,   206,  1126,    48,    49,   111,   112,
-   364,  1050,    25,    11,  1053,    52,    53,    54,    24,  1140,
-    24,    24,   956,    23,    25,    27,    20,  1066,    19,    19,
-  1069,    20,    27,     5,    19,    23,  1075,    24,    21,  1078,
-  1079,  1162,  1163,  1164,  1165,   682,    25,    22,   557,  1170,
-    24,   405,    25,    20,    20,    25,    73,    25,    27,   696,
-    18,    21,   128,    27,    10,    11,    12,    21,    25,  1190,
-    22,    24,   426,   427,    25,    25,  1190,    39,    56,    40,
-    29,    25,  1121,    91,   150,   186,   152,  1126,    25,  1128,
-  1129,    25,   601,    18,  1215,   930,    22,   932,   933,   934,
-    24,  1140,    73,    74,    75,    76,    25,    91,   140,    80,
-    81,    82,    83,    84,    85,    86,    20,  1051,    25,    18,
-    25,   153,   154,   155,   156,   157,   158,  1166,   160,   161,
-   196,    21,    91,    18,   189,    91,    91,    40,   204,    27,
-    20,    18,   208,    91,    23,   211,    21,  1186,  1187,   351,
-    24,  1190,    18,   219,  1193,    91,   191,   359,    22,   361,
-    22,    21,   671,    21,   673,    22,    20,    20,    91,    25,
-    25,   193,    40,   682,   240,    27,    27,   814,    25,    18,
-   689,    27,   819,   692,   693,    20,   823,    20,    25,    86,
-     0,     0,   921,   311,  1215,   549,  1130,  1183,  1111,    10,
-    11,    12,  1011,  1083,   681,  1020,   152,  1162,   871,  1048,
-   820,   787,   849,   458,   574,  1190,   673,   671,   843,   692,
-   126,  1056,   296,  1058,    12,   291,   347,   239,  1146,   501,
-   696,   433,   405,   870,   871,   849,   705,   848,  1008,   876,
-   877,   878,   879,   880,   881,   882,   883,   884,   885,   886,
-   196,    -1,   318,   319,   320,   321,    -1,    -1,   204,    -1,
-    -1,    -1,   208,    -1,    -1,   211,    -1,    -1,    -1,    -1,
-    -1,    -1,   338,   219,    -1,    -1,    -1,    -1,   224,    -1,
-   226,    23,    -1,   349,    10,    11,    12,    -1,  1222,   926,
-    -1,    -1,    -1,   239,   240,    -1,    -1,    -1,    -1,   501,
-   366,    10,    11,    12,    -1,   814,    -1,   816,    -1,    -1,
-   819,    -1,    -1,    -1,   823,    -1,    58,    59,    60,    61,
-    62,    63,    64,    65,    66,    67,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   843,    -1,    -1,    -1,    -1,   405,
-    -1,   152,   851,    -1,    -1,    -1,    -1,   413,   550,   381,
-   382,   383,   384,   385,   386,   387,   388,   389,   390,   391,
-   392,   393,   394,   395,   396,    -1,   568,   569,    -1,    -1,
+     0,     0,   459,   399,     5,     5,     3,     7,     9,    10,
+    11,    12,   330,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,   455,   142,   120,   130,     0,   398,    10,
+   544,   434,   389,   390,   352,   309,   397,   395,   396,   649,
+   649,   649,   592,   387,   388,   232,   693,   618,    10,   542,
+   453,   916,    56,    21,   110,   435,    27,    25,   114,   311,
+   116,   649,   118,  1034,   951,   924,   803,   123,    24,    24,
+   155,   156,   157,   158,   159,   160,     0,   264,    34,   135,
+   933,   137,   671,   936,   817,   221,    87,    87,    87,   822,
+   226,     5,   228,   826,  1100,  1101,    18,   500,   708,   708,
+   708,   101,    25,    26,   653,    28,    21,   469,    50,    51,
+    25,    25,   112,   113,    87,   391,   392,   393,   394,   120,
+   708,    19,    45,   179,   553,    21,    10,    11,    12,    25,
+   829,   128,    24,   683,    24,   649,   835,   138,   138,    54,
+    55,   138,   571,    18,    34,    18,    21,  1118,   149,   777,
+    11,    12,  1123,   154,    50,    51,   649,    88,     5,  1024,
+  1025,    28,  1168,    87,   792,  1052,    11,    12,   486,    25,
+    26,   172,    28,   154,    10,  1034,  1035,    24,    45,    41,
+   284,   185,   829,    24,    28,    24,    27,    34,   835,    45,
+    10,   594,   154,    34,   708,    57,   929,   198,   935,   602,
+   937,    45,  1173,    21,   653,   206,  1059,   208,  1061,   210,
+    41,   267,   213,   802,     5,   708,   805,   198,   470,   190,
+   221,   408,   190,   603,    24,   226,    57,   228,   777,   210,
+   186,   187,   213,  1098,    25,    24,   198,   341,     5,    26,
+   241,   242,   604,   792,   206,    34,   302,    34,   210,   305,
+  1109,   213,  1111,   649,    24,   573,   955,   313,    25,    18,
+   316,   242,    21,    24,   696,    18,    25,    10,    11,    12,
+   154,    24,   186,   187,   188,    32,    33,   191,   192,   649,
+   242,    34,   283,    21,   283,   286,   287,   288,   649,    27,
+    18,   649,   649,   429,   430,    23,   186,   187,   298,   384,
+   385,   386,   299,    24,   913,   649,     5,   308,   955,   308,
+    18,    21,   708,   314,   198,    21,   434,    27,   154,     5,
+    18,    27,   206,    89,    90,   599,   210,   653,   777,   213,
+   653,  1064,    54,    55,   154,   453,   936,   221,   708,   186,
+   187,   653,   226,   792,   228,   186,   187,   708,    21,   190,
+   708,   708,    25,   354,   120,   121,    24,   241,   242,  1218,
+   221,   362,   198,   364,   708,   226,    39,   228,   134,   425,
+   206,    21,    16,   649,   210,    25,   221,   213,   198,   435,
+   241,   226,   500,   228,   440,    18,   206,   491,    21,   445,
+   210,   447,   963,   213,   908,    21,   241,   186,   187,    25,
+    16,  1011,  1011,  1011,   489,   808,   242,   408,   464,   959,
+    16,   154,   468,   906,   846,   818,    24,    34,    26,   186,
+   187,   188,   242,  1011,   191,   192,    34,   408,   429,   430,
+    42,    43,   708,   186,   187,   436,    24,   438,    26,   438,
+     0,   441,    24,    16,    26,     5,   408,   448,    24,     9,
+    26,   777,    34,   426,   777,   198,     6,     7,   459,  1059,
+   461,  1061,    15,   206,   437,   777,   792,   210,   469,   792,
+   213,   472,   469,   577,    18,   476,   594,    21,   221,    18,
+   792,    25,    21,   226,   602,   228,  1095,   186,   187,   188,
+    21,    22,   191,   192,   111,   112,   113,  1011,   241,   242,
+   186,   187,   188,   504,   101,   191,   192,    37,    38,   905,
+    22,     5,   513,   514,    26,    21,    28,    21,  1011,    25,
+   624,    25,    52,    53,   408,    20,    21,    87,    32,    33,
+    24,    25,    26,    45,   904,   639,   592,   641,   895,   896,
+    34,    19,   903,   901,   902,   429,   430,   603,    22,   893,
+   894,   552,   553,    21,    29,    24,  1165,    25,    27,   560,
+   120,   560,     5,    50,    51,    34,   622,   568,   429,   430,
+   571,   572,   408,    25,    26,    21,    28,    22,   138,    25,
+   553,    24,    50,    51,   429,   430,    32,    33,   408,   149,
+   552,    34,    22,    45,   650,    39,   652,     5,   571,    40,
+    26,   696,    28,   604,   186,   187,   188,   604,    21,   191,
+   192,   611,    25,    95,   718,  1011,    24,    25,    26,    45,
+    56,   897,   898,   899,   900,    26,    34,    26,    26,    28,
+    28,    54,    55,    34,   719,   720,   721,   722,   723,   724,
+    18,  1011,   916,    21,   645,   646,    45,    45,   649,   190,
+  1011,    21,   970,  1011,  1011,    25,   657,   658,    21,   660,
+    21,    95,    25,    19,    25,   408,    29,  1011,   552,    24,
+    34,    26,  1129,   674,   730,   676,    24,    22,    26,    34,
+    50,    51,   679,   957,   685,    22,   429,   430,    21,    34,
+   808,   692,    25,    21,   695,   696,   697,    25,    18,   696,
+   818,    21,    21,    23,    37,    38,    25,   708,   186,   187,
+   188,  1143,    18,   191,   192,    21,   552,   186,   187,    52,
+    53,   190,    18,   283,    88,    21,   286,   287,   288,   785,
+   786,    22,   552,    21,    21,  1011,    22,    25,    25,   182,
+   183,   859,    24,   186,   187,    21,  1020,   190,   308,    25,
+    18,   846,     0,    21,   314,  1029,    21,     5,    25,    26,
+    25,    37,    38,    50,    51,    13,    14,    15,    95,    34,
+    35,    36,   828,    32,    33,  1049,    52,    53,   186,   187,
+   188,    37,    38,   191,   192,   186,   187,   188,    20,  1192,
+   191,   192,  1066,    24,   795,    26,    52,    53,    34,    23,
+   800,    19,    26,   803,    28,   890,   891,   892,    21,   552,
+    21,    21,    25,    21,    25,    25,   817,    25,   819,    20,
+    21,   822,   186,   187,  1227,   826,    18,   191,   192,    21,
+  1104,   186,   187,   188,    20,    21,   191,   192,   193,    87,
+    21,   186,   187,   188,    25,   846,   191,   192,    21,   846,
+    95,  1125,    25,   854,   102,   103,   104,   105,   106,   107,
+   108,   109,    27,   111,    21,    21,   114,    25,    25,    25,
+    21,    24,   120,    26,    25,    28,   932,    21,   438,    21,
+    18,    25,   130,    25,   132,   133,   134,    21,   448,   974,
+   138,    25,    45,    21,    21,    48,    49,    25,    25,   459,
+    21,   461,    18,   959,    25,    21,   154,    21,    23,   469,
+    21,    25,   472,   161,    25,   916,   476,    24,    21,   186,
+   187,   188,    25,   924,   191,   192,    21,    34,   929,    18,
+    25,    21,    22,   933,    19,   935,   936,   937,    21,    24,
+    24,    26,    25,    28,    29,    30,    31,    32,    33,    34,
+   186,   187,   188,   513,   514,   191,   192,    21,    68,    69,
+    70,    25,    47,    48,    49,    21,    24,    21,    26,    25,
+    28,    25,    21,   221,  1078,    18,    25,    24,   979,   980,
+    34,    35,    36,   186,   187,   188,    71,    45,   191,   192,
+    48,    49,    32,    33,    73,    74,    75,    76,  1054,    22,
+   560,    80,    81,    82,    83,    84,    85,    86,    24,    21,
+  1011,    21,   260,    25,    21,    25,    21,    18,    25,    25,
+    25,  1022,    21,  1024,  1025,    25,    25,    52,    53,    54,
+   115,  1032,    24,  1034,  1035,   283,   284,    18,   286,   287,
+    25,    26,    18,    28,   604,    18,   294,    18,  1143,  1022,
+  1051,   299,    34,    35,    36,  1056,    18,  1056,    19,  1059,
+   308,  1061,     9,  1064,   112,   113,   314,    11,  1069,   208,
+  1069,    25,  1069,  1074,  1192,   182,   183,  1133,    24,   186,
+   187,    11,    91,   190,    34,    35,    36,    21,  1206,    24,
+    19,    19,    19,   341,  1095,  1096,  1097,  1098,    19,  1100,
+  1101,   186,   187,   188,   352,   190,   191,   192,  1109,  1227,
+  1111,    91,    27,  1114,   674,    24,   676,  1118,    23,  1120,
+  1121,    25,  1123,    21,    21,   685,    22,    18,  1129,    21,
+    25,    25,   692,    11,    24,   695,   696,    25,    24,    24,
+    27,    25,  1143,    23,    23,    20,    19,    19,    10,    11,
+    12,    20,    23,    58,    59,    60,    61,    62,    63,    64,
+    65,    66,    67,    27,  1165,  1166,  1167,  1168,    24,  1225,
+    21,     5,  1173,    25,    10,    11,    12,   425,    58,    59,
+    60,    61,    62,    63,    64,    65,    66,    67,    19,    22,
+   438,    73,  1193,    25,  1193,    24,    20,   445,    20,   447,
+    25,   449,    25,    18,   452,    21,    27,   455,    27,   457,
+    21,   459,    25,   461,    22,   354,    25,  1218,   466,    25,
+    24,   469,    29,   362,    25,   364,    40,    39,   476,    56,
+   187,    91,    91,    91,   142,    25,    91,    91,    25,    18,
+    22,    91,    25,   491,    24,    20,   344,   155,   156,   157,
+   158,   159,   160,    25,   162,   163,    18,   817,    25,   819,
+    21,    18,   822,    40,   190,    20,   826,    27,    18,    21,
+   368,    24,    23,    18,    91,   373,   374,   375,   376,   377,
+   378,   379,   380,   381,   382,   383,   846,    22,    22,   192,
+    21,    21,   154,    22,   854,    20,    20,   436,    91,    25,
+    27,   194,    25,    40,    25,    27,   404,    18,    20,    27,
+    20,    25,   560,     0,     0,   924,    87,   314,   154,  1218,
+  1186,  1114,  1014,  1086,   684,  1165,   574,  1023,  1051,   577,
+   461,   874,   823,   790,   577,  1193,   198,   676,   674,   846,
+   128,   695,    12,   299,   206,   593,   350,  1149,   210,   597,
+   598,   213,   241,   408,   504,   699,   604,   708,  1011,   221,
+   222,   851,   198,   852,   226,   504,   228,    -1,    -1,   929,
+   206,    -1,    -1,    -1,   210,    -1,   624,   213,    -1,   241,
+   242,    -1,    -1,    -1,    -1,   221,   634,   635,    -1,    -1,
+   226,   639,   228,   641,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   241,   242,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   553,    -1,    -1,   665,    -1,   979,
+   980,    10,    -1,    -1,    -1,   673,    -1,   675,    -1,    -1,
+    -1,   679,   571,   572,    -1,    -1,    -1,    -1,   686,   687,
+    -1,    -1,    -1,   691,    -1,    -1,    -1,   695,   696,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    10,    11,    12,   196,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   204,    -1,    -1,    -1,   208,    -1,   431,
-   211,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   219,    -1,
-    -1,    -1,    -1,   224,    -1,   226,    -1,   926,   450,    -1,
-    -1,    -1,    -1,    -1,  1061,    -1,   152,    -1,   239,   240,
-    -1,    -1,    10,    11,    12,    -1,    -1,    -1,    -1,    24,
-   642,   643,    27,   152,    29,    30,    31,    32,    33,    34,
-    -1,    -1,    -1,   655,   486,    -1,    -1,    -1,    -1,   405,
-    -1,    -1,    47,    48,    49,   497,    -1,   976,   977,    -1,
-   196,    -1,    -1,    -1,   540,    -1,    -1,    -1,   204,    -1,
-   426,   427,   208,   549,    -1,   211,    71,   196,    -1,    -1,
-    -1,    -1,   694,   219,    -1,   204,    -1,    -1,   224,   208,
-   226,    -1,   211,    -1,    -1,    -1,    -1,   539,    -1,   541,
-   219,   543,   544,   239,   240,   224,    -1,   226,    -1,    -1,
-    -1,    -1,    -1,    -1,   152,    -1,    -1,    -1,    -1,   114,
-   239,   240,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,  1053,    -1,    -1,    -1,    -1,   615,
-    -1,    -1,  1061,    -1,    -1,    -1,    -1,  1066,    -1,   591,
-    -1,    -1,  1071,    -1,    -1,    -1,    -1,   599,   196,    -1,
-   636,    -1,   638,    -1,   152,    -1,   204,    -1,   644,    -1,
-   208,    -1,   648,   211,  1093,  1094,    -1,    -1,    -1,    -1,
-    -1,   219,    -1,    -1,   405,    -1,   224,    -1,   226,    -1,
-   185,   186,   187,   549,   189,    -1,    -1,    -1,  1117,  1118,
-    -1,   239,   240,    -1,   646,   426,   427,  1126,   196,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   204,    -1,    -1,    -1,
-   208,  1140,    -1,   211,    -1,    -1,    -1,    -1,   704,    -1,
-    -1,   219,    -1,    -1,    -1,    -1,   224,    -1,   226,   715,
-    -1,    -1,    -1,    -1,  1163,  1164,    -1,    -1,    -1,    -1,
-    -1,   239,   240,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   705,    -1,    -1,    -1,    -1,    -1,   405,
-    -1,  1190,    -1,    -1,   716,   717,   718,   719,   720,   721,
-   722,   723,    -1,    -1,    -1,    -1,   405,    -1,    -1,    -1,
-   426,   427,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,     1,   426,   427,    -1,
-    -1,     6,     7,     8,    -1,    -1,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    20,    -1,    -1,   549,    24,
-    25,    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    -1,
-    -1,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   805,    -1,    -1,    -1,   405,    18,    -1,
-    -1,    -1,    -1,   815,    24,    -1,    71,    -1,    -1,    29,
-    30,    31,    32,    33,    34,    -1,    -1,    -1,   426,   427,
-    -1,    -1,    -1,    -1,    -1,    -1,   872,    47,    48,    49,
-    95,    96,    97,    98,    99,   100,   101,    -1,    -1,    -1,
-    -1,    -1,    18,   549,   856,   110,    -1,   405,    24,   114,
-    -1,    71,    -1,    29,    30,    31,    32,    33,    34,    -1,
-   549,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   426,   427,
-    -1,    47,    48,    49,    -1,   887,   888,   889,   890,   891,
-   892,   893,   894,   895,   896,   897,   898,   899,   900,   901,
-   902,   903,    -1,   905,   114,    71,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
+   718,    -1,    -1,    -1,    -1,    -1,   384,   385,   386,   387,
+   388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+   398,   399,    -1,    -1,    -1,    -1,  1056,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,  1064,   367,   645,   646,    -1,  1069,
+    -1,    -1,    -1,    -1,  1074,    -1,    -1,    -1,    -1,   658,
+    -1,    -1,   620,    -1,    -1,    -1,   434,    10,    11,    12,
+    -1,    -1,    -1,   631,    -1,    -1,  1096,  1097,    -1,    -1,
+    -1,   130,    -1,    -1,    -1,   453,   408,    -1,    -1,    -1,
+   798,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   697,    -1,
+  1120,  1121,    -1,   152,    -1,   154,    -1,   429,   430,  1129,
+    -1,    -1,   408,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   489,    -1,  1143,    -1,    -1,    -1,   685,    -1,    -1,
+    -1,    -1,   500,   429,   430,    -1,    -1,   845,   846,    -1,
+   848,   699,    -1,    -1,    -1,    -1,  1166,  1167,    -1,   198,
+    -1,   154,    -1,    -1,    -1,    -1,    -1,   206,    -1,    -1,
+    -1,   210,    -1,    -1,   213,    -1,    -1,    -1,    -1,    18,
+    -1,    -1,   221,  1193,   542,    24,   544,    -1,   546,   547,
+    29,    30,    31,    32,    33,    34,    -1,    -1,    10,    11,
+    12,    -1,    -1,   242,    -1,   198,    -1,    -1,    47,    48,
+    49,    -1,    -1,   206,    -1,    -1,    -1,   210,    -1,    -1,
+   213,   154,    -1,    -1,    -1,    -1,    -1,    -1,   221,    -1,
+    -1,    -1,    71,   226,   932,   228,   594,    -1,    -1,    -1,
+   552,   939,    -1,    -1,   602,    -1,    -1,    -1,   241,   242,
+    -1,    -1,    -1,    -1,    -1,   294,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   198,   552,    -1,    -1,   817,
+    -1,    -1,    -1,   206,   822,    -1,   115,   210,   826,    -1,
+   213,    -1,   321,   322,   323,   324,    -1,    -1,   221,    -1,
+    -1,   649,    -1,   226,    -1,   228,    -1,    -1,    -1,    -1,
+    -1,    -1,   341,    -1,   852,    -1,    -1,    -1,   241,   242,
+    -1,    -1,    -1,   352,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   873,   874,    -1,    -1,    -1,
+   369,   879,   880,   881,   882,   883,   884,   885,   886,   887,
+   888,   889,   154,    -1,    -1,    -1,    -1,   186,   187,   188,
+   708,   190,    -1,    -1,    -1,  1053,    -1,    -1,  1056,    -1,
+    -1,   719,   720,   721,   722,   723,   724,   725,   726,   408,
+    -1,  1069,    -1,    -1,  1072,    -1,    -1,   416,    -1,    -1,
+  1078,   929,    -1,  1081,  1082,    -1,   198,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   206,    -1,    -1,    -1,   210,    -1,
+    -1,   213,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   221,
+    -1,    -1,    -1,    -1,   226,   408,   228,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1124,    -1,    -1,   241,
+   242,  1129,    -1,  1131,  1132,    -1,   429,   430,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1143,    -1,    -1,    -1,    -1,
+   808,    -1,    18,    -1,    -1,    -1,    -1,    -1,    24,    -1,
+   818,    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,
+    -1,  1169,    -1,    -1,    -1,   408,    -1,    -1,    -1,    -1,
+    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,  1189,  1190,    -1,    -1,  1193,   429,   430,  1196,    -1,
+    -1,   859,    -1,    -1,   543,    71,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   552,    -1,    -1,  1064,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     0,     1,    -1,    -1,   960,    -1,    -1,    -1,    -1,    -1,
-   185,   186,   187,    -1,   189,   190,   191,    -1,    18,    -1,
-    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,   114,    -1,
-    -1,   549,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    44,    -1,    46,    -1,    -1,   971,
-  1006,    -1,    -1,    -1,    -1,   185,   186,   187,    -1,   189,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,
-    70,    -1,    72,    -1,    -1,    -1,    -1,    77,    78,    79,
-    -1,   549,    -1,    -1,    -1,    -1,  1008,    -1,    -1,    -1,
-    -1,    -1,    92,    93,    94,    -1,    -1,    -1,    -1,   185,
-   186,   187,    -1,   189,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   111,   112,   113,  1070,   115,   116,   117,   118,   119,
-   120,   121,   122,   123,   124,    -1,   126,   127,   128,   129,
-   130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-   140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-   150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,   176,   177,   178,    -1,
-    -1,    -1,    -1,    -1,    -1,   185,   186,   187,   188,    -1,
-   190,   191,   192,     0,     1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   890,   891,   892,   893,   894,   895,   896,   897,
+   898,   899,   900,   901,   902,   903,   904,   905,   906,   115,
+   908,    -1,    -1,    19,    20,    -1,    -1,    -1,    24,   552,
+    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   618,
+    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   408,    -1,    -1,    -1,
+   639,    -1,   641,    -1,    -1,    71,    -1,    -1,   647,    -1,
+    -1,    -1,   651,    -1,     0,     1,   974,   429,   430,   552,
+   186,   187,   188,    -1,   190,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    18,    -1,    -1,    -1,    -1,    -1,    24,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,   115,
+    -1,    -1,    -1,  1011,    -1,    -1,    -1,    -1,    44,    -1,
+    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   707,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   718,
+    -1,    -1,    68,    69,    70,    -1,    72,    -1,    -1,    -1,
+    -1,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    18,    -1,    -1,    -1,    -1,    -1,    24,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    -1,    46,
+   186,   187,   188,    -1,   190,   111,   112,   113,   114,    -1,
+   116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+   552,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+   136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+   146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+   156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+   176,   177,   178,   179,    -1,    -1,    -1,    -1,    -1,    -1,
+   186,   187,   188,   189,    -1,   191,   192,   193,   122,   123,
+   124,   125,    -1,   127,    -1,    -1,    -1,    -1,   132,   133,
+    -1,    -1,   136,   137,    -1,   139,   140,   141,   142,    -1,
+    -1,    -1,    -1,    -1,  1192,    -1,   875,    -1,    -1,    -1,
+   154,   155,    -1,    -1,     0,     1,    -1,    -1,  1206,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    18,    -1,    -1,   179,    -1,    -1,    24,  1227,
+    -1,    -1,    -1,    -1,    -1,   189,    -1,    -1,    34,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    -1,
+    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    68,    69,    70,    -1,    72,    -1,  1189,    -1,    -1,
-    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,  1203,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,
+    -1,    -1,    68,    69,    70,    -1,    72,    -1,    -1,    -1,
+    -1,    77,    78,    79,   963,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1224,    -1,   111,   112,   113,    -1,   115,   116,
-   117,   118,   119,   120,   121,   122,   123,   124,    -1,   126,
-   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-   147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-   157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-   177,   178,    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,
-   187,   188,     1,   190,   191,   192,    -1,     6,     7,     8,
-    -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,
-    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    42,    43,    44,    -1,    46,    47,    48,
-    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,
-    69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   111,   112,   113,   114,    -1,
+   116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+  1009,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+   136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+   146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+   156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+   176,   177,   178,   179,    -1,    -1,    -1,    -1,    -1,    -1,
+   186,   187,   188,   189,  1073,   191,   192,   193,     1,    -1,
+    -1,    -1,    -1,     6,     7,     8,    -1,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
+    43,    44,    -1,    46,    47,    48,    49,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,    97,    98,
-    99,   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-   119,   120,   121,   122,   123,   124,    -1,   126,   127,   128,
-   129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-   139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-   149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,   187,   188,
-   189,   190,   191,   192,     1,    -1,    -1,    -1,    -1,     6,
-     7,     8,    -1,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    -1,    -1,    -1,    -1,    24,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    96,    97,    98,    99,   100,   101,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,   111,   112,
+   113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+   123,   124,   125,    -1,   127,   128,   129,   130,   131,   132,
+   133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,   176,   177,   178,   179,    -1,    -1,    -1,
+    -1,    -1,    -1,   186,   187,   188,   189,   190,   191,   192,
+   193,     1,    -1,    -1,    -1,    -1,     6,     7,     8,    -1,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,
+    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    42,    43,    44,    -1,    -1,    47,    48,    49,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,
+    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    96,    97,    98,    99,
+   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+   120,   121,   122,   123,   124,   125,    -1,   127,   128,   129,
+   130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+   140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+   150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+    -1,    -1,    -1,    -1,    -1,    -1,   186,   187,   188,   189,
+   190,   191,   192,   193,     1,    -1,    -1,    -1,    -1,     6,
+     7,     8,    -1,    -1,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,
     -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    42,    43,    44,    -1,    -1,
     47,    48,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -2262,127 +2314,119 @@ static const short yycheck[] = {     0,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,
     97,    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,   119,   120,   121,   122,   123,   124,    -1,   126,
+   117,   118,   119,   120,   121,   122,   123,   124,   125,    -1,
    127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
    137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
    147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
    157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
    167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-   177,   178,    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,
-   187,   188,   189,   190,   191,   192,     1,    -1,    -1,    -1,
-    -1,     6,     7,     8,    -1,    -1,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,    24,
-    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,
-    -1,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    68,    69,    70,    71,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   177,   178,   179,    -1,    -1,    -1,    -1,    -1,    -1,   186,
+   187,   188,   189,   190,   191,   192,   193,     1,    -1,    -1,
+    -1,    -1,     6,     7,     8,    -1,    10,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+    24,    -1,    26,    -1,    28,    29,    30,    31,    32,    33,
+    34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+    -1,    45,    -1,    47,    48,    49,    50,    51,    52,    53,
+    54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+    64,    65,    66,    67,    -1,    -1,    -1,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    19,    20,    -1,    -1,    -1,
+    24,    -1,    26,    -1,    28,    29,    30,    31,    32,    33,
+    34,    -1,    96,    97,    98,    99,   100,   101,    -1,    -1,
+    -1,    -1,     1,    47,    48,    49,   110,     6,     7,     8,
+    -1,   115,    11,    12,    13,    14,    15,    16,    17,    18,
+    19,    20,    -1,    -1,    -1,    24,    25,    71,    -1,    -1,
+    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    42,    43,    -1,    -1,    -1,    47,    48,
+    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    96,    97,    98,    99,   100,   101,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,   114,
-   115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-    -1,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-   135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-   145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-   155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,   176,   177,   178,    -1,    -1,    -1,    -1,    -1,    -1,
-   185,   186,   187,   188,   189,   190,   191,   192,     1,    -1,
-    -1,    -1,    -1,     6,     7,     8,    -1,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,    24,    -1,    26,    -1,    28,    29,    30,    31,    32,
-    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-    43,    -1,    45,    -1,    47,    48,    49,    50,    51,    52,
-    53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-    63,    64,    65,    66,    67,    -1,    -1,    -1,    71,    -1,
-    -1,    -1,   121,   122,   123,   124,    -1,   126,    -1,    -1,
-    -1,    -1,   131,   132,    -1,    -1,   135,   136,    -1,   138,
-   139,   140,   141,    96,    97,    98,    99,   100,   101,    -1,
-    -1,    -1,    -1,     1,   153,   154,    -1,   110,     6,     7,
-     8,   114,    10,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    -1,    -1,    -1,    -1,    24,    -1,    -1,   178,
-    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,   188,
-    -1,    -1,    -1,    -1,    42,    43,    -1,    -1,     1,    47,
-    48,    49,    -1,     6,     7,     8,    -1,    10,    11,    12,
+    -1,   115,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   186,   187,   188,    -1,   190,   191,   192,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,    98,
+    99,   100,   101,    -1,    -1,    -1,    -1,    -1,     1,    -1,
+    -1,   110,    -1,     6,     7,     8,   115,    10,    11,    12,
     13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
-    -1,    24,    -1,    71,    -1,    -1,    29,    30,    31,    32,
-    33,    34,   185,   186,   187,    -1,   189,   190,   191,    42,
-    43,    -1,    -1,    -1,    47,    48,    49,    95,    96,    97,
-    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   110,    -1,    -1,    -1,   114,    -1,    71,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    95,    96,    97,    98,    99,   100,   101,    -1,
-    -1,    -1,    -1,     1,    -1,    -1,    -1,   110,     6,     7,
-     8,   114,    -1,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,
-    -1,    29,    30,    31,    32,    33,    34,   185,   186,   187,
-    -1,   189,   190,   191,    42,    43,    -1,    -1,     1,    47,
-    48,    49,    -1,     6,     7,     8,    -1,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
-    -1,    24,    -1,    71,    -1,    -1,    29,    30,    31,    32,
-    33,    34,   185,   186,   187,    -1,   189,   190,   191,    42,
-    43,    -1,    -1,    -1,    47,    48,    49,    95,    96,    97,
-    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   110,    -1,    -1,    -1,   114,    -1,    71,    -1,
-    -1,    -1,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,
-    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
-    -1,    -1,    -1,    96,    97,    98,    99,   100,   101,    -1,
-    47,    48,    49,     1,    -1,    -1,    -1,   110,     6,     7,
-     8,   114,    -1,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    20,    -1,    71,    -1,    24,    -1,    -1,    -1,
-    -1,    29,    30,    31,    32,    33,    34,   185,   186,   187,
-    -1,   189,   190,   191,    42,    43,    -1,    -1,     1,    47,
-    48,    49,    -1,     6,     7,     8,    -1,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,   114,    -1,    -1,
-    -1,    24,    -1,    71,    -1,    -1,    29,    30,    31,    32,
-    33,    34,   185,   186,   187,    -1,   189,   190,   191,    42,
-    43,    -1,    -1,    -1,    47,    48,    49,    -1,    96,    97,
-    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   110,    -1,    -1,    -1,   114,    -1,    71,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,
-   187,    -1,   189,    96,    97,    98,    99,   100,   101,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,     6,     7,
-     8,   114,    10,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,
-    -1,    29,    30,    31,    32,    33,    34,   185,   186,   187,
-    -1,   189,   190,   191,    42,    43,    44,    -1,    46,    47,
-    48,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    71,    72,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   185,   186,   187,    -1,   189,   190,   191,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,    97,
-    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   110,   111,   112,   113,   114,   115,   116,   117,
-   118,   119,   120,   121,   122,   123,   124,    -1,   126,   127,
-   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-   178,    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,   187,
-   188,   189,   190,   191,   192,     6,     7,     8,    -1,    10,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,   186,   187,   188,    -1,   190,   191,   192,    42,
+    43,    -1,    -1,     1,    47,    48,    49,    -1,     6,     7,
+     8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+    18,    19,    -1,    -1,    -1,    -1,    24,    -1,    71,    -1,
+    -1,    29,    30,    31,    32,    33,    34,   186,   187,   188,
+    -1,   190,   191,   192,    42,    43,    -1,    -1,    -1,    47,
+    48,    49,    95,    96,    97,    98,    99,   100,   101,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    19,   110,    -1,    -1,
+    -1,    24,   115,    71,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    47,    48,    49,    95,    96,    97,
+    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,     1,
+    -1,    -1,   110,    -1,     6,     7,     8,   115,    71,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
+    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,
+    32,    33,    34,   186,   187,   188,    -1,   190,   191,   192,
+    42,    43,    -1,    -1,     1,    47,    48,    49,    -1,     6,
+     7,     8,   115,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,    71,
+    -1,    -1,    29,    30,    31,    32,    33,    34,   186,   187,
+   188,    -1,   190,   191,   192,    42,    43,    -1,    -1,    -1,
+    47,    48,    49,    95,    96,    97,    98,    99,   100,   101,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,   110,    -1,
+    -1,    -1,    24,   115,    71,    -1,    -1,    29,    30,    31,
+    32,    33,    34,   186,   187,   188,    -1,   190,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    47,    48,    49,    -1,    96,
+    97,    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,
+     1,    -1,    -1,   110,    -1,     6,     7,     8,   115,    71,
     11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,
-    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    42,    43,    44,    -1,    46,    47,    48,    49,    -1,
+    31,    32,    33,    34,   186,   187,   188,    -1,   190,   191,
+   192,    42,    43,    -1,    -1,     1,    47,    48,    49,    -1,
+     6,     7,     8,   115,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    -1,    -1,    -1,    -1,    24,    -1,
+    71,    -1,    -1,    29,    30,    31,    32,    33,    34,   186,
+   187,   188,    -1,   190,   191,   192,    42,    43,    -1,    -1,
+    -1,    47,    48,    49,    -1,    96,    97,    98,    99,   100,
+   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
+    -1,    -1,    -1,    -1,   115,    71,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   186,   187,   188,    -1,   190,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    96,    97,    98,    99,   100,   101,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   110,    -1,     6,     7,     8,   115,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,
+    30,    31,    32,    33,    34,   186,   187,   188,    -1,   190,
+   191,   192,    42,    43,    44,    -1,    46,    47,    48,    49,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    96,    97,    98,    99,   100,
-   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-   111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-   121,   122,   123,   124,    -1,   126,   127,   128,   129,   130,
-   131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-   151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,   176,   177,   178,    -1,    -1,
-    -1,    -1,    -1,    -1,   185,   186,   187,   188,   189,   190,
-   191,   192,     6,     7,     8,    -1,    10,    11,    12,    13,
+    -1,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   186,   187,   188,    -1,   190,   191,   192,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    96,    97,    98,    99,
+   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+   120,   121,   122,   123,   124,   125,    -1,   127,   128,   129,
+   130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+   140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+   150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+    -1,    -1,    -1,    -1,    -1,    -1,   186,   187,   188,   189,
+   190,   191,   192,   193,     6,     7,     8,    -1,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
+    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,
+    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    42,    43,    44,    -1,    46,    47,    48,    49,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,
+    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    96,    97,    98,    99,   100,   101,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,   111,
+   112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+   122,   123,   124,   125,    -1,   127,   128,   129,   130,   131,
+   132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+   142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+   152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+   162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,   176,   177,   178,   179,    -1,    -1,
+    -1,    -1,    -1,    -1,   186,   187,   188,   189,   190,   191,
+   192,   193,     6,     7,     8,    -1,    10,    11,    12,    13,
     14,    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,
     24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,
     34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
@@ -2394,261 +2438,261 @@ static const short yycheck[] = {     0,
     -1,    -1,    96,    97,    98,    99,   100,   101,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,
    114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-   124,    -1,   126,   127,   128,   129,   130,   131,   132,   133,
+   124,   125,    -1,   127,   128,   129,   130,   131,   132,   133,
    134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
    144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
    154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
    164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,   176,   177,   178,    -1,    -1,    -1,    -1,    -1,
-    -1,   185,   186,   187,   188,   189,   190,   191,   192,     6,
-     7,     8,    -1,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,
-    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    47,    48,    49,     6,     7,     8,    -1,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
-    -1,    24,    -1,    -1,    71,    -1,    29,    30,    31,    32,
-    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    47,    48,    49,    -1,    -1,    96,
-    97,    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   110,    -1,    -1,    -1,   114,    71,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    96,    97,    98,    99,   100,   101,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,     6,     7,
-     8,   114,    10,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,
-    -1,    29,    30,    31,    32,    33,    34,    -1,   185,   186,
-   187,    -1,   189,   190,   191,    -1,    -1,    -1,    -1,    47,
-    48,    49,     6,     7,     8,    -1,    10,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,
-    24,    -1,    -1,    71,    -1,    29,    30,    31,    32,    33,
-    34,    -1,   185,   186,   187,    -1,   189,   190,   191,    -1,
-    -1,    -1,    -1,    47,    48,    49,    -1,    -1,    96,    97,
-    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   110,    -1,    -1,    -1,   114,    71,    -1,    -1,
+   174,   175,   176,   177,   178,   179,    -1,    -1,    -1,    -1,
+    -1,    -1,   186,   187,   188,   189,   190,   191,   192,   193,
+     6,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,
+    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    47,    48,    49,    -1,     6,     7,     8,    -1,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+    -1,    -1,    -1,    24,    -1,    71,    -1,    -1,    29,    30,
+    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    47,    48,    49,    -1,
+    96,    97,    98,    99,   100,   101,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,   115,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    96,    97,    98,    99,   100,   101,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   110,     6,     7,     8,
-   114,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,
-    29,    30,    31,    32,    33,    34,    -1,   185,   186,   187,
-    -1,   189,   190,   191,    -1,    -1,    -1,    -1,    47,    48,
-    49,     6,     7,     8,    -1,    10,    11,    12,    13,    14,
+    -1,    -1,    -1,    -1,    -1,    96,    97,    98,    99,   100,
+   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
+    -1,     6,     7,     8,   115,    10,    11,    12,    13,    14,
     15,    16,    17,    18,    19,    20,    -1,    -1,    -1,    24,
-    -1,    -1,    71,    -1,    29,    30,    31,    32,    33,    34,
-    -1,   185,   186,   187,    -1,   189,   190,   191,    -1,    -1,
-    -1,    -1,    47,    48,    49,    -1,    -1,    96,    97,    98,
-    99,   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   110,    -1,    -1,    -1,   114,    71,    -1,    -1,    19,
-    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,
-    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    -1,    96,    97,    98,    99,   100,   101,    47,    48,    49,
-    -1,    -1,    -1,    -1,    -1,   110,     6,     7,     8,   114,
+    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,
+   186,   187,   188,    -1,   190,   191,   192,    -1,    -1,    -1,
+    -1,    -1,    47,    48,    49,    -1,     6,     7,     8,    -1,
     10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-    20,    71,    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,
-    30,    31,    32,    33,    34,    -1,   185,   186,   187,    -1,
-   189,   190,   191,    -1,    -1,    -1,    -1,    47,    48,    49,
-     6,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,   114,    -1,    -1,    -1,    24,    -1,
-    -1,    71,    -1,    29,    30,    31,    32,    33,    34,    -1,
-   185,   186,   187,    -1,   189,   190,   191,    -1,    -1,    -1,
-    -1,    47,    48,    49,    -1,    -1,    96,    97,    98,    99,
-   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   110,    -1,    -1,    -1,   114,    71,    -1,    -1,    -1,    -1,
+    20,    -1,    -1,    -1,    24,    -1,    71,    -1,    -1,    29,
+    30,    31,    32,    33,    34,   186,   187,   188,    -1,   190,
+   191,   192,    -1,    -1,    -1,    -1,    -1,    47,    48,    49,
+    -1,    96,    97,    98,    99,   100,   101,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,
+   115,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   185,   186,   187,    -1,   189,
-    96,    97,    98,    99,   100,   101,    19,    -1,    -1,    -1,
-    -1,    24,    -1,    -1,   110,    -1,    -1,    -1,   114,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    96,    97,    98,    99,
+   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   110,    -1,     6,     7,     8,   115,    10,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,
+    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,
+    34,   186,   187,   188,    -1,   190,   191,   192,    -1,    -1,
+    -1,    -1,    -1,    47,    48,    49,    -1,     6,     7,     8,
+    -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+    19,    20,    -1,    -1,    -1,    24,    -1,    71,    -1,    -1,
+    29,    30,    31,    32,    33,    34,   186,   187,   188,    -1,
+   190,   191,   192,    -1,    -1,    -1,    -1,    -1,    47,    48,
+    49,    -1,    96,    97,    98,    99,   100,   101,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,
+    -1,   115,    71,    -1,    -1,    -1,    19,    -1,    -1,    -1,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,    -1,    -1,    -1,    -1,    96,    97,    98,
+    99,   100,   101,    -1,    47,    48,    49,    -1,    -1,    -1,
+    -1,   110,    -1,     6,     7,     8,   115,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    71,    -1,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,   186,   187,   188,    -1,   190,   191,   192,    -1,
+    -1,    -1,    -1,    -1,    47,    48,    49,    -1,     6,     7,
+     8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+    18,    19,   115,    -1,    -1,    -1,    24,    -1,    71,    -1,
+    -1,    29,    30,    31,    32,    33,    34,   186,   187,   188,
+    -1,   190,   191,   192,    -1,    -1,    -1,    -1,    -1,    47,
+    48,    49,    -1,    96,    97,    98,    99,   100,   101,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,
+    -1,    -1,   115,    71,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    44,    -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   185,   186,   187,    -1,   189,
-   190,   191,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+    -1,    -1,    -1,   186,   187,   188,    -1,   190,    96,    97,
+    98,    99,   100,   101,    19,    -1,    -1,    -1,    -1,    24,
+    -1,    -1,   110,    -1,    -1,    -1,    -1,   115,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,
+    -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   186,   187,   188,    -1,   190,   191,   192,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,
-   186,   187,    -1,   189,   190,   191,    -1,    -1,   111,   112,
-   113,    -1,   115,   116,   117,   118,   119,   120,   121,   122,
-   123,   124,    -1,   126,   127,   128,   129,   130,   131,   132,
-   133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,   176,   177,   178,    20,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   187,   188,    -1,    -1,    -1,   192,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   186,   187,
+   188,    -1,   190,   191,   192,    -1,   111,   112,   113,   114,
+    -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+   125,    -1,   127,   128,   129,   130,   131,   132,   133,   134,
+   135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+   145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+   155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,   176,   177,   178,   179,    20,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   188,   189,    -1,    -1,    -1,   193,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,   113,
-    -1,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-   124,    -1,   126,   127,   128,   129,   130,   131,   132,   133,
-   134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-   154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,   176,   177,   178,    -1,    -1,    -1,    -1,    -1,
-    19,    20,    -1,   187,   188,    24,    -1,    26,   192,    28,
+    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,   113,   114,
+    -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+   125,    -1,   127,   128,   129,   130,   131,   132,   133,   134,
+   135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+   145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+   155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,   176,   177,   178,   179,    -1,    -1,    -1,    -1,    -1,
+    19,    -1,    -1,   188,   189,    24,    -1,    -1,   193,    -1,
     29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    19,    -1,    47,    48,
-    49,    24,    -1,    26,    -1,    28,    29,    30,    31,    32,
-    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    71,    19,    47,    48,    49,    -1,    24,    -1,
-    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,
-    -1,    -1,    -1,    -1,    19,    -1,    -1,    -1,    71,    24,
-    -1,    47,    48,    49,    29,    30,    31,    32,    33,    34,
-    -1,    24,    25,    -1,    -1,   114,    29,    30,    31,    32,
-    33,    34,    47,    48,    49,    71,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    47,    48,    49,    -1,    -1,    -1,
-    -1,   114,    19,    -1,    -1,    -1,    71,    24,    -1,    -1,
-    -1,    -1,    29,    30,    31,    32,    33,    34,    71,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
-    47,    48,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,   187,   114,
-   189,   190,   191,    -1,    71,    -1,    -1,    -1,    -1,    -1,
-    -1,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   185,   186,   187,    -1,   189,   190,   191,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    34,   114,    -1,   185,
-   186,   187,    -1,   189,    -1,    -1,    44,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   185,   186,   187,    -1,   189,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   185,   186,   187,    -1,   189,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    47,    48,
+    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,
-   187,    -1,   189,   111,   112,   113,    -1,   115,   116,   117,
-   118,   119,   120,   121,   122,   123,   124,    -1,   126,   127,
-   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-   178,    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,   187,
-   188,    -1,   190,   191,   192,    24,    -1,    -1,    27,    -1,
-    29,    30,    31,    32,    33,    34,    24,    25,    -1,    -1,
-    -1,    29,    30,    31,    32,    33,    34,    -1,    47,    48,
-    49,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    47,
-    48,    49,    29,    30,    31,    32,    33,    34,    -1,    24,
-    -1,    -1,    71,    -1,    29,    30,    31,    32,    33,    34,
-    47,    48,    49,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    47,    48,    49,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    24,    -1,   114,    71,    -1,    29,    30,
-    31,    32,    33,    34,    -1,    24,   114,    -1,    -1,    -1,
-    29,    30,    31,    32,    33,    34,    47,    48,    49,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    24,   114,    47,    48,
-    49,    29,    30,    31,    32,    33,    34,    24,    -1,   114,
-    71,    -1,    29,    30,    31,    32,    33,    34,    -1,    47,
-    48,    49,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    47,    48,    49,    -1,    -1,    -1,   185,   186,   187,    -1,
-   189,    -1,    -1,    71,    -1,    -1,    -1,   185,   186,   187,
-    -1,   189,    -1,   114,    71,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,   185,   186,
-   187,    -1,   189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   185,   186,   187,    -1,   189,    -1,   114,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,
-    -1,    -1,    -1,    -1,    42,    43,    44,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   185,   186,   187,    -1,   189,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,   187,    -1,
-   189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,   187,
-    -1,   189,    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,
-   187,    -1,   189,   111,   112,   113,    -1,   115,   116,   117,
-   118,   119,   120,   121,   122,   123,   124,    -1,   126,   127,
-   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-   178,    44,    -1,    46,    -1,    -1,    -1,    -1,    -1,   187,
-   188,    -1,    -1,    -1,   192,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    68,    69,    70,    -1,    72,
+    -1,    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    34,   115,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,
-   113,    -1,   115,   116,   117,   118,   119,   120,   121,   122,
-   123,   124,    -1,   126,   127,   128,   129,   130,   131,   132,
-   133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,   176,   177,   178,    44,    -1,    46,    -1,
-    -1,    -1,    -1,    -1,   187,   188,    -1,    -1,    -1,   192,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   186,   187,   188,
+    -1,   190,   111,   112,   113,   114,    -1,   116,   117,   118,
+   119,   120,   121,   122,   123,   124,   125,    -1,   127,   128,
+   129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+   139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+   149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+   169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+   179,    -1,    -1,    -1,    -1,    -1,    -1,   186,   187,   188,
+   189,    -1,   191,   192,   193,    24,    25,    -1,    -1,    -1,
+    29,    30,    31,    32,    33,    34,    24,    -1,    -1,    27,
+    -1,    29,    30,    31,    32,    33,    34,    -1,    47,    48,
+    49,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    47,
+    48,    49,    29,    30,    31,    32,    33,    34,    24,    -1,
+    -1,    27,    71,    29,    30,    31,    32,    33,    34,    -1,
+    47,    48,    49,    71,    -1,    -1,    -1,    -1,    -1,    24,
+    25,    47,    48,    49,    29,    30,    31,    32,    33,    34,
+    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    47,    48,    49,    71,   115,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   115,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    24,    -1,    -1,
+    -1,    -1,    29,    30,    31,    32,    33,    34,   115,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,   115,
+    47,    48,    49,    29,    30,    31,    32,    33,    34,    24,
+    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,
+   115,    47,    48,    49,    71,    -1,    -1,   186,   187,   188,
+    -1,   190,    47,    48,    49,    -1,    -1,    -1,   186,   187,
+   188,    24,   190,    -1,    -1,    71,    29,    30,    31,    32,
+    33,    34,    -1,    -1,    -1,    -1,    71,    -1,    -1,   186,
+   187,   188,    -1,   190,    47,    48,    49,    -1,   115,    -1,
+   186,   187,   188,    -1,   190,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,   115,
+    -1,   186,   187,   188,    -1,   190,    -1,    24,    -1,    -1,
+   115,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    47,    48,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,    -1,   186,
+   187,   188,    -1,   190,    71,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   111,   112,   113,    -1,   115,   116,   117,
-   118,   119,   120,   121,   122,   123,   124,    -1,   126,   127,
-   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-   178,    44,    -1,    -1,    -1,    -1,    -1,   185,   186,   187,
-   188,    -1,    -1,    -1,   192,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    68,    69,    70,    -1,    -1,
+   186,   187,   188,    -1,   190,    -1,    -1,    -1,    -1,    -1,
+    -1,   186,   187,   188,    -1,   190,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   115,    -1,
+    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    -1,    -1,
+    -1,    -1,    -1,   186,   187,   188,    -1,   190,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,
-   113,    -1,   115,   116,   117,   118,   119,   120,   121,   122,
-   123,   124,    -1,   126,   127,   128,   129,   130,   131,   132,
-   133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,   176,   177,   178,    44,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   187,   188,    -1,    -1,    -1,   192,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   186,
+   187,   188,    -1,   190,   111,   112,   113,   114,    -1,   116,
+   117,   118,   119,   120,   121,   122,   123,   124,   125,    -1,
+   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+   137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+   147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+   157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+   177,   178,   179,    44,    -1,    46,    -1,    -1,    -1,    -1,
+    -1,   188,   189,    -1,    -1,    -1,   193,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,
+    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   111,   112,   113,    -1,   115,   116,   117,
-   118,   119,   120,   121,   122,   123,   124,    -1,   126,   127,
-   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-   178,    44,    -1,    46,    -1,    -1,    -1,    -1,    -1,   187,
-   188,    -1,    -1,    -1,   192,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+   111,   112,   113,   114,    -1,   116,   117,   118,   119,   120,
+   121,   122,   123,   124,   125,    -1,   127,   128,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+   151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,   176,   177,   178,   179,    44,
+    -1,    46,    -1,    -1,    -1,    -1,    -1,   188,   189,    -1,
+    -1,    -1,   193,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,   113,   114,
+    -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+   125,    -1,   127,   128,   129,   130,   131,   132,   133,   134,
+   135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+   145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+   155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,   176,   177,   178,   179,    44,    -1,    -1,    -1,    -1,
+    -1,   186,   187,   188,   189,    -1,    -1,    -1,   193,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,
+    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   111,   112,   113,   114,    -1,   116,   117,   118,
+   119,   120,   121,   122,   123,   124,   125,    -1,   127,   128,
+   129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+   139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+   149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+   169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+   179,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   188,
+   189,    -1,    -1,    -1,   193,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,
+    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,
-   113,    -1,   115,   116,   117,   118,   119,   120,   121,   122,
-   123,   124,    -1,   126,   127,   128,   129,   130,   131,   132,
+   113,   114,    -1,   116,   117,   118,   119,   120,   121,   122,
+   123,   124,   125,    -1,   127,   128,   129,   130,   131,   132,
    133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
    143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
    153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
    163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,   176,   177,   178,    44,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   187,   188,    -1,    -1,    -1,   192,
+   173,   174,   175,   176,   177,   178,   179,    44,    -1,    46,
+    -1,    -1,    -1,    -1,    -1,   188,   189,    -1,    -1,    -1,
+   193,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   111,   112,   113,   114,    -1,   116,
+   117,   118,   119,   120,   121,   122,   123,   124,   125,    -1,
+   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+   137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+   147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+   157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+   177,   178,   179,    44,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   188,   189,    -1,    -1,    -1,   193,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   111,   112,   113,    -1,   115,   116,   117,
-   118,   119,   120,   121,   122,   123,   124,    -1,   126,   127,
-   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-   178,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   187,
-   188,    -1,    -1,    -1,   192
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   111,   112,   113,   114,    -1,   116,   117,   118,   119,   120,
+   121,   122,   123,   124,   125,    -1,   127,   128,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+   151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,   176,   177,   178,   179,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   188,   189,    -1,
+    -1,    -1,   193
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 
@@ -3249,7 +3293,7 @@ case 18:
 { yyval.ntyp = idDecl_fixBase (yyvsp[0].ntyp, yyvsp[-2].qtyp); ;
     break;}
 case 20:
-{ yyval.ntyp = yyvsp[0].ntyp; qtype_adjustPointers (yyvsp[-1].count, idDecl_getTyp (yyval.ntyp)); ;
+{ yyval.ntyp = yyvsp[0].ntyp; qtype_adjustPointers (yyvsp[-1].pointers, idDecl_getTyp (yyval.ntyp)); ;
     break;}
 case 21:
 { yyval.ntyp = idDecl_create (yyvsp[0].cname, qtype_unknown ()); ;
@@ -4322,7 +4366,7 @@ case 359:
 { yyval.typequal = qual_createVolatile (); ;
     break;}
 case 360:
-{ yyval.typequal = yyvsp[-1].typequal; ;
+{ yyval.typequal = qual_createRestrict (); ;
     break;}
 case 361:
 { yyval.typequal = yyvsp[-1].typequal; ;
@@ -4348,240 +4392,245 @@ case 367:
 case 368:
 { yyval.typequal = yyvsp[-1].typequal; ;
     break;}
-case 375:
-{ yyval.ctyp = ctype_makeAnytype (); ;
+case 369:
+{ yyval.typequal = yyvsp[-1].typequal; ;
     break;}
 case 376:
-{ yyval.ctyp = ctype_anyintegral; ;
+{ yyval.ctyp = ctype_makeAnytype (); ;
     break;}
 case 377:
-{ yyval.ctyp = ctype_unsignedintegral; ;
+{ yyval.ctyp = ctype_anyintegral; ;
     break;}
 case 378:
+{ yyval.ctyp = ctype_unsignedintegral; ;
+    break;}
+case 379:
 { yyval.ctyp = ctype_signedintegral; ;
     break;}
-case 382:
+case 383:
 { yyval.ctyp = ctype_fromQual (yyvsp[-1].typequal); ;
     break;}
-case 383:
+case 384:
 { yyval.qtyp = qtype_resolve (yyvsp[-1].qtyp); ;
     break;}
-case 384:
+case 385:
 { yyval.qtyp = yyvsp[0].qtyp; ;
     break;}
-case 385:
+case 386:
 { yyval.qtyp = qtype_mergeAlt (yyvsp[-3].qtyp, yyvsp[-1].qtyp); ;
     break;}
-case 387:
-{ yyval.qtyp = qtype_mergeAlt (yyvsp[-2].qtyp, yyvsp[0].qtyp); ;
-    break;}
 case 388:
-{ yyval.qtyp = qtype_addQual (yyvsp[0].qtyp, yyvsp[-1].typequal); ;
+{ yyval.qtyp = qtype_mergeAlt (yyvsp[-2].qtyp, yyvsp[0].qtyp); ;
     break;}
 case 389:
 { yyval.qtyp = qtype_addQual (yyvsp[0].qtyp, yyvsp[-1].typequal); ;
     break;}
 case 390:
-{ yyval.qtyp = qtype_combine (yyvsp[0].qtyp, yyvsp[-1].ctyp); ;
+{ yyval.qtyp = qtype_addQual (yyvsp[0].qtyp, yyvsp[-1].typequal); ;
     break;}
 case 391:
-{ yyval.qtyp = qtype_unknown (); ;
+{ yyval.qtyp = qtype_combine (yyvsp[0].qtyp, yyvsp[-1].ctyp); ;
     break;}
 case 392:
-{ yyval.qtyp = yyvsp[0].qtyp; ;
+{ yyval.qtyp = qtype_unknown (); ;
     break;}
 case 393:
-{ yyval.conL = constraintList_undefined; ;
+{ yyval.qtyp = yyvsp[0].qtyp; ;
     break;}
 case 394:
-{ sRef_setGlobalScopeSafe (); ;
+{ yyval.conL = constraintList_undefined; ;
     break;}
 case 395:
-{ sRef_clearGlobalScopeSafe (); ;
+{ sRef_setGlobalScopeSafe (); ;
     break;}
 case 396:
-{ ctype ct; ct = declareStruct (yyvsp[-9].cname, yyvsp[-4].flist); /* setGlobalStructInfo(ct, $12);*/ yyval.ctyp = ct; ;
+{ sRef_clearGlobalScopeSafe (); ;
     break;}
 case 397:
-{ sRef_setGlobalScopeSafe (); ;
+{ ctype ct; ct = declareStruct (yyvsp[-9].cname, yyvsp[-4].flist); /* setGlobalStructInfo(ct, $12);*/ yyval.ctyp = ct; ;
     break;}
 case 398:
-{ sRef_clearGlobalScopeSafe (); ;
+{ sRef_setGlobalScopeSafe (); ;
     break;}
 case 399:
-{ yyval.ctyp = declareUnion (yyvsp[-8].cname, yyvsp[-3].flist); ;
+{ sRef_clearGlobalScopeSafe (); ;
     break;}
 case 400:
-{ yyval.ctyp = declareStruct (yyvsp[-3].cname, uentryList_new ()); ;
+{ yyval.ctyp = declareUnion (yyvsp[-8].cname, yyvsp[-3].flist); ;
     break;}
 case 401:
-{ yyval.ctyp = declareUnion (yyvsp[-3].cname, uentryList_new ()); ;
+{ yyval.ctyp = declareStruct (yyvsp[-3].cname, uentryList_new ()); ;
     break;}
 case 402:
-{ sRef_setGlobalScopeSafe (); ;
+{ yyval.ctyp = declareUnion (yyvsp[-3].cname, uentryList_new ()); ;
     break;}
 case 403:
-{ sRef_clearGlobalScopeSafe (); ;
+{ sRef_setGlobalScopeSafe (); ;
     break;}
 case 404:
-{ yyval.ctyp = declareUnnamedStruct (yyvsp[-3].flist); ;
+{ sRef_clearGlobalScopeSafe (); ;
     break;}
 case 405:
-{ sRef_setGlobalScopeSafe (); ;
+{ yyval.ctyp = declareUnnamedStruct (yyvsp[-3].flist); ;
     break;}
 case 406:
-{ sRef_clearGlobalScopeSafe (); ;
+{ sRef_setGlobalScopeSafe (); ;
     break;}
 case 407:
-{ yyval.ctyp = declareUnnamedUnion (yyvsp[-3].flist); ;
+{ sRef_clearGlobalScopeSafe (); ;
     break;}
 case 408:
-{ yyval.ctyp = ctype_createUnnamedStruct (uentryList_new ()); ;
+{ yyval.ctyp = declareUnnamedUnion (yyvsp[-3].flist); ;
     break;}
 case 409:
-{ yyval.ctyp = ctype_createUnnamedUnion (uentryList_new ()); ;
+{ yyval.ctyp = ctype_createUnnamedStruct (uentryList_new ()); ;
     break;}
 case 410:
-{ yyval.ctyp = handleStruct (yyvsp[-1].cname); ;
+{ yyval.ctyp = ctype_createUnnamedUnion (uentryList_new ()); ;
     break;}
 case 411:
-{ yyval.ctyp = handleUnion (yyvsp[-1].cname); ;
+{ yyval.ctyp = handleStruct (yyvsp[-1].cname); ;
     break;}
 case 412:
+{ yyval.ctyp = handleUnion (yyvsp[-1].cname); ;
+    break;}
+case 413:
 { g_expectingTypeName = FALSE; ;
     break;}
-case 414:
+case 415:
 { yyval.flist = uentryList_undefined; /* bogus! */ ;
     break;}
-case 415:
+case 416:
 { yyval.flist = uentryList_mergeFields (yyvsp[-1].flist, yyvsp[0].flist); ;
     break;}
-case 416:
+case 417:
 { yyval.flist = fixUentryList (yyvsp[-2].ntyplist, yyvsp[-4].qtyp); ;
     break;}
-case 417:
+case 418:
 { yyval.flist = fixUnnamedDecl (yyvsp[-2].qtyp); ;
     break;}
-case 418:
+case 419:
 { yyval.ntyplist = idDeclList_singleton (yyvsp[-1].ntyp); ;
     break;}
-case 419:
+case 420:
 { yyval.ntyplist = idDeclList_add (yyvsp[-3].ntyplist, yyvsp[-1].ntyp); ;
     break;}
-case 420:
+case 421:
 { yyval.ntyp = yyvsp[0].ntyp; ;
     break;}
-case 421:
+case 422:
 { yyval.ntyp = idDecl_undefined; ;
     break;}
-case 422:
+case 423:
 { yyval.ntyp = yyvsp[-3].ntyp; ;
     break;}
-case 423:
+case 424:
 { yyval.ctyp = declareUnnamedEnum (yyvsp[-2].enumnamelist); ;
     break;}
-case 424:
+case 425:
 { context_pushLoc (); ;
     break;}
-case 425:
+case 426:
 { context_popLoc (); yyval.ctyp = declareEnum (yyvsp[-5].cname, yyvsp[-2].enumnamelist); ;
     break;}
-case 426:
+case 427:
 { yyval.ctyp = handleEnum (yyvsp[-1].cname); ;
     break;}
-case 427:
+case 428:
 { yyval.enumnamelist = enumNameList_single (yyvsp[0].cname); ;
     break;}
-case 428:
+case 429:
 { yyval.enumnamelist = enumNameList_push (yyvsp[-2].enumnamelist, yyvsp[0].cname); ;
     break;}
-case 430:
+case 431:
 { uentry ue = uentry_makeEnumConstant (yyvsp[0].cname, ctype_unknown);
      usymtab_supGlobalEntry (ue);
      yyval.cname = yyvsp[0].cname;
    ;
     break;}
-case 431:
+case 432:
 { uentry ue = uentry_makeEnumInitializedConstant (yyvsp[-3].cname, ctype_unknown, yyvsp[0].expr);
      usymtab_supGlobalEntry (ue);
      yyval.cname = yyvsp[-3].cname; 
    ;
     break;}
-case 433:
+case 434:
 { yyval.ntyp = idDecl_create (cstring_undefined, qtype_create (yyvsp[0].ctyp)); ;
     break;}
-case 434:
+case 435:
 { 
      qtype qt = qtype_unknown ();
-
-     qtype_adjustPointers (yyvsp[-1].count, qt);
+     qtype_adjustPointers (yyvsp[-1].pointers, qt);
      yyval.ntyp = idDecl_create (cstring_copy (LastIdentifier ()), qt);
    ;
     break;}
-case 435:
-{ yyval.ntyp = yyvsp[0].ntyp; qtype_adjustPointers (yyvsp[-1].count, idDecl_getTyp (yyval.ntyp)); ;
-    break;}
-case 437:
-{ yyval.ntyp = yyvsp[0].ntyp; qtype_adjustPointers (yyvsp[-1].count, idDecl_getTyp (yyval.ntyp)); ;
+case 436:
+{ yyval.ntyp = yyvsp[0].ntyp; qtype_adjustPointers (yyvsp[-1].pointers, idDecl_getTyp (yyval.ntyp)); ;
     break;}
 case 438:
-{ yyval.entrylist = handleParamTypeList (yyvsp[0].entrylist); ;
+{ yyval.ntyp = yyvsp[0].ntyp; qtype_adjustPointers (yyvsp[-1].pointers, idDecl_getTyp (yyval.ntyp)); ;
     break;}
 case 439:
-{ yyval.entrylist = handleParamIdList (yyvsp[0].entrylist); ;
+{ yyval.entrylist = handleParamTypeList (yyvsp[0].entrylist); ;
     break;}
 case 440:
-{ /* ignored for now */; ;
+{ yyval.entrylist = handleParamIdList (yyvsp[0].entrylist); ;
     break;}
 case 441:
-{ ; ;
+{ yyval.typequal = qual_createConst (); ;
     break;}
 case 442:
-{ ; ;
+{ yyval.typequal = qual_createRestrict (); ;
     break;}
 case 443:
-{ ; ;
+{ yyval.typequal = qual_createVolatile (); ;
     break;}
 case 444:
-{ yyval.count = 1; ;
+{ yyval.tquallist = qualList_single (yyvsp[0].typequal); ;
     break;}
 case 445:
-{ yyval.count = 1; ;
+{ yyval.tquallist = qualList_add (yyvsp[-1].tquallist, yyvsp[0].typequal); ;
     break;}
 case 446:
-{ yyval.count = 1 + yyvsp[0].count; ;
+{ yyval.pointers = pointers_create (yyvsp[0].tok); ;
     break;}
 case 447:
-{ yyval.count = 1 + yyvsp[0].count; ;
+{ yyval.pointers = pointers_createMods (yyvsp[-1].tok, yyvsp[0].tquallist); ;
+    break;}
+case 448:
+{ yyval.pointers = pointers_extend (pointers_create (yyvsp[-1].tok), yyvsp[0].pointers); ;
     break;}
 case 449:
+{ yyval.pointers = pointers_extend (pointers_createMods (yyvsp[-2].tok, yyvsp[-1].tquallist), yyvsp[0].pointers); ;
+    break;}
+case 451:
 { yyval.entrylist = uentryList_add (yyvsp[-2].entrylist, uentry_makeElipsisMarker ()); ;
     break;}
-case 450:
+case 452:
 { yyval.entrylist = uentryList_single (uentry_makeVariableLoc (yyvsp[0].cname, ctype_int)); ;
     break;}
-case 451:
+case 453:
 { yyval.entrylist = uentryList_add (yyvsp[-2].entrylist, uentry_makeVariableLoc (yyvsp[0].cname, ctype_int)); ;
     break;}
-case 452:
+case 454:
 { yyval.entrylist = uentryList_single (uentry_makeElipsisMarker ()); ;
     break;}
-case 454:
+case 456:
 { yyval.entrylist = uentryList_add (yyvsp[-2].entrylist, uentry_makeElipsisMarker ()); ;
     break;}
-case 455:
+case 457:
 { storeLoc (); ;
     break;}
-case 456:
+case 458:
 { yyval.entrylist = uentryList_single (yyvsp[0].oentry); ;
     break;}
-case 457:
+case 459:
 { storeLoc (); ;
     break;}
-case 458:
+case 460:
 { yyval.entrylist = uentryList_add (yyvsp[-3].entrylist, yyvsp[0].oentry); ;
     break;}
-case 459:
+case 461:
 { 
      if (isFlipOldStyle ()) 
        { 
@@ -4594,7 +4643,7 @@ case 459:
      yyval.oentry = makeCurrentParam (idDecl_fixParamBase (yyvsp[-1].ntyp, yyvsp[-2].qtyp)); 
    ;
     break;}
-case 460:
+case 462:
 { 
      idDecl tparam = idDecl_create (yyvsp[0].cname, qtype_unknown ());
 
@@ -4609,182 +4658,176 @@ case 460:
      idDecl_free (tparam);
    ;
     break;}
-case 462:
+case 464:
 { yyval.qtyp = qtype_newBase (yyvsp[-1].qtyp, yyvsp[0].ctyp); ;
     break;}
-case 463:
-{ yyval.ctyp = ctype_adjustPointers (yyvsp[0].count, ctype_unknown); ;
-    break;}
 case 465:
-{ yyval.ctyp = ctype_adjustPointers (yyvsp[-1].count, yyvsp[0].ctyp); ;
+{ yyval.ctyp = ctype_adjustPointers (yyvsp[0].pointers, ctype_unknown); ;
     break;}
-case 466:
-{ yyval.ctyp = ctype_unknown; ;
+case 467:
+{ yyval.ctyp = ctype_adjustPointers (yyvsp[-1].pointers, yyvsp[0].ctyp); ;
     break;}
 case 468:
+{ yyval.ctyp = ctype_unknown; ;
+    break;}
+case 470:
 { yyval.ctyp = ctype_expectFunction (yyvsp[-1].ctyp); ;
     break;}
-case 469:
+case 471:
 { yyval.ctyp = ctype_makeArray (ctype_unknown); ;
     break;}
-case 470:
+case 472:
 { yyval.ctyp = ctype_makeFixedArray (ctype_unknown, exprNode_getLongValue (yyvsp[-1].expr)); ;
     break;}
-case 471:
+case 473:
 { yyval.ctyp = ctype_makeInnerArray (yyvsp[-2].ctyp); ;
     break;}
-case 472:
+case 474:
 { yyval.ctyp = ctype_makeInnerFixedArray (yyvsp[-3].ctyp, exprNode_getLongValue (yyvsp[-1].expr)); ;
     break;}
-case 473:
+case 475:
 { yyval.ctyp = ctype_makeFunction (ctype_unknown, uentryList_makeMissingParams ()); ;
     break;}
-case 474:
+case 476:
 { yyval.ctyp = ctype_makeParamsFunction (ctype_unknown, yyvsp[-1].entrylist); ;
     break;}
-case 475:
+case 477:
 { yyval.ctyp = ctype_makeFunction (yyvsp[-3].ctyp, uentryList_makeMissingParams ()); ;
     break;}
-case 476:
+case 478:
 { yyval.ctyp = ctype_makeParamsFunction (yyvsp[-4].ctyp, yyvsp[-1].entrylist); ;
     break;}
-case 486:
+case 488:
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 489:
+case 491:
 { yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 490:
+case 492:
 { yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 491:
+case 493:
 { yyval.expr = exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr); ;
     break;}
-case 492:
+case 494:
 { yyval.expr = exprNode_doWhile (yyvsp[-4].expr, yyvsp[-1].expr); ;
     break;}
-case 493:
+case 495:
 { yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 494:
+case 496:
 { context_setProtectVars (); ;
     break;}
-case 495:
+case 497:
 { context_sizeofReleaseVars (); ;
     break;}
-case 496:
+case 498:
 { yyval.expr = exprNode_forPred (yyvsp[-7].expr, yyvsp[-5].expr, yyvsp[-2].expr); 
      context_enterForClause (yyvsp[-5].expr); ;
     break;}
-case 497:
+case 499:
 { setProcessingIterVars (yyvsp[-2].entry); ;
     break;}
-case 498:
+case 500:
 { yyval.expr = exprNode_iterStart (yyvsp[-5].entry, yyvsp[-1].exprlist); ;
     break;}
-case 499:
+case 501:
 { yyval.expr = exprNode_createId (yyvsp[0].entry); ;
     break;}
-case 503:
+case 505:
 { yyval.expr = yyvsp[-1].expr; DPRINTF (("def stmt: %s", exprNode_unparse (yyval.expr))); ;
     break;}
-case 511:
+case 513:
 { yyval.expr = yyvsp[-1].expr; ;
     break;}
-case 512:
+case 514:
 { yyval.expr = exprNode_makeError (); ;
     break;}
-case 513:
+case 515:
 { exprNode_checkIfPred (yyvsp[0].expr); ;
     break;}
-case 514:
+case 516:
 { /* don't: context_exitTrueClause ($1, $2); */
      yyval.expr = exprNode_if (yyvsp[-2].expr, yyvsp[0].expr); 
    ;
     break;}
-case 515:
+case 517:
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
-case 516:
+case 518:
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
-case 527:
-{ yyval.expr = exprNode_addParens (yyvsp[-2].tok, yyvsp[-1].expr); ;
-    break;}
 case 529:
-{ yyval.expr = exprNode_makeError (); ;
-    break;}
-case 530:
-{ yyval.expr = exprNode_labelMarker (yyvsp[-1].cname); ;
+{ yyval.expr = exprNode_addParens (yyvsp[-2].tok, yyvsp[-1].expr); ;
     break;}
 case 531:
-{ yyval.expr = exprNode_notReached (yyvsp[0].expr); ;
+{ yyval.expr = exprNode_makeError (); ;
     break;}
 case 532:
-{ ; ;
+{ yyval.expr = exprNode_labelMarker (yyvsp[-1].cname); ;
     break;}
 case 533:
-{ ; ;
+{ yyval.expr = exprNode_notReached (yyvsp[0].expr); ;
     break;}
 case 534:
-{ context_enterCaseClause (yyvsp[0].expr); ;
+{ ; ;
     break;}
 case 535:
-{ yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, FALSE); ;
+{ ; ;
     break;}
 case 536:
 { context_enterCaseClause (yyvsp[0].expr); ;
     break;}
 case 537:
-{ yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, TRUE); ;
+{ yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, FALSE); ;
     break;}
 case 538:
-{ context_enterCaseClause (exprNode_undefined); ;
+{ context_enterCaseClause (yyvsp[0].expr); ;
     break;}
 case 539:
-{ yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, FALSE); ;
+{ yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, TRUE); ;
     break;}
 case 540:
 { context_enterCaseClause (exprNode_undefined); ;
     break;}
 case 541:
-{ yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, TRUE); ;
+{ yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, FALSE); ;
     break;}
 case 542:
-{ yyval.expr = yyvsp[-1].expr; ;
+{ context_enterCaseClause (exprNode_undefined); ;
     break;}
 case 543:
-{ yyval.expr = yyvsp[0].expr; context_exitInner (yyvsp[0].expr); ;
+{ yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, TRUE); ;
     break;}
 case 544:
 { yyval.expr = yyvsp[-1].expr; ;
     break;}
 case 545:
-{ context_enterInnerContext (); ;
+{ yyval.expr = yyvsp[0].expr; context_exitInner (yyvsp[0].expr); ;
     break;}
 case 546:
-{ context_exitInnerPlain (); ;
+{ yyval.expr = yyvsp[-1].expr; ;
     break;}
 case 547:
-{ context_enterStructInnerContext (); ;
+{ context_enterInnerContext (); ;
     break;}
 case 548:
-{ context_exitStructInnerContext (); ;
+{ context_exitInnerPlain (); ;
     break;}
 case 549:
-{ context_exitInnerSafe (); ;
+{ context_enterStructInnerContext (); ;
     break;}
 case 550:
-{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
+{ context_exitStructInnerContext (); ;
     break;}
 case 551:
-{ yyval.expr = exprNode_notReached (exprNode_createTok (yyvsp[0].tok)); ;
+{ context_exitInnerSafe (); ;
     break;}
 case 552:
-{ yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
+{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
 case 553:
-{ yyval.expr = exprNode_notReached (exprNode_updateLocation (yyvsp[-2].expr, lltok_getLoc (yyvsp[0].tok))); ;
+{ yyval.expr = exprNode_notReached (exprNode_createTok (yyvsp[0].tok)); ;
     break;}
 case 554:
 { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
@@ -4793,33 +4836,33 @@ case 555:
 { yyval.expr = exprNode_notReached (exprNode_updateLocation (yyvsp[-2].expr, lltok_getLoc (yyvsp[0].tok))); ;
     break;}
 case 556:
-{ yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ;
+{ yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
     break;}
 case 557:
+{ yyval.expr = exprNode_notReached (exprNode_updateLocation (yyvsp[-2].expr, lltok_getLoc (yyvsp[0].tok))); ;
+    break;}
+case 558:
+{ yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ;
+    break;}
+case 559:
 { yyval.expr = exprNode_notReached (exprNode_updateLocation (exprNode_concat (yyvsp[-3].expr, yyvsp[-2].expr), 
                                                        lltok_getLoc (yyvsp[-1].tok))); 
    ;
     break;}
-case 558:
+case 560:
 { yyval.expr = exprNode_makeBlock (yyvsp[0].expr); ;
     break;}
-case 559:
+case 561:
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
-case 560:
+case 562:
 { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
     break;}
-case 561:
+case 563:
 { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
     break;}
-case 562:
-{ yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ;
-    break;}
 case 564:
-{ yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
-    break;}
-case 565:
-{ yyval.expr = yyvsp[0].expr; ;
+{ yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ;
     break;}
 case 566:
 { yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
@@ -4828,25 +4871,25 @@ case 567:
 { yyval.expr = yyvsp[0].expr; ;
     break;}
 case 568:
-{ yyval.expr = exprNode_concat (yyvsp[-2].expr, yyvsp[0].expr); ;
+{ yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 569:
 { yyval.expr = yyvsp[0].expr; ;
     break;}
 case 570:
-{ yyval.expr = yyvsp[-2].expr; ;
+{ yyval.expr = exprNode_concat (yyvsp[-2].expr, yyvsp[0].expr); ;
     break;}
 case 571:
 { yyval.expr = yyvsp[0].expr; ;
     break;}
 case 572:
-{ yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
+{ yyval.expr = yyvsp[-2].expr; ;
     break;}
 case 573:
-{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
+{ yyval.expr = yyvsp[0].expr; ;
     break;}
 case 574:
-{ yyval.expr = exprNode_statement (yyvsp[-1].expr, yyvsp[0].tok); ;
+{ yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 575:
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
@@ -4855,70 +4898,76 @@ case 576:
 { yyval.expr = exprNode_statement (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
 case 577:
-{ yyval.expr = exprNode_checkExpr (yyvsp[0].expr); ;
+{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
 case 578:
+{ yyval.expr = exprNode_statement (yyvsp[-1].expr, yyvsp[0].tok); ;
+    break;}
+case 579:
+{ yyval.expr = exprNode_checkExpr (yyvsp[0].expr); ;
+    break;}
+case 580:
 { 
      exprNode_produceGuards (yyvsp[-1].expr); context_enterTrueClause (yyvsp[-1].expr); 
      exprNode_checkIfPred (yyvsp[-1].expr);
      yyval.expr = yyvsp[-1].expr;
    ;
     break;}
-case 579:
+case 581:
 { 
      context_exitTrueClause (yyvsp[-1].expr, yyvsp[0].expr);
      yyval.expr = exprNode_if (yyvsp[-1].expr, yyvsp[0].expr); 
    ;
     break;}
-case 580:
+case 582:
 { context_enterFalseClause (yyvsp[-2].expr); ;
     break;}
-case 581:
+case 583:
 {
      context_exitClause (yyvsp[-4].expr, yyvsp[-3].expr, yyvsp[0].expr);
      yyval.expr = exprNode_ifelse (yyvsp[-4].expr, yyvsp[-3].expr, yyvsp[0].expr); 
    ;
     break;}
-case 582:
+case 584:
 { context_enterSwitch (yyvsp[0].expr); ;
     break;}
-case 583:
+case 585:
 { yyval.expr = exprNode_switch (yyvsp[-3].expr, yyvsp[0].expr); ;
     break;}
-case 584:
+case 586:
 { yyval.expr = exprNode_whilePred (yyvsp[-1].expr); context_enterWhileClause (yyvsp[-1].expr); ;
     break;}
-case 585:
+case 587:
 { yyval.expr = exprNode_whilePred(yyvsp[-1].expr); ;
     break;}
-case 586:
+case 588:
 { context_enterIterClause (); ;
     break;}
-case 587:
+case 589:
 { setProcessingIterVars (yyvsp[-3].entry); ;
     break;}
-case 588:
+case 590:
 { 
      yyval.expr = exprNode_iter (yyvsp[-9].entry, yyvsp[-4].exprlist, yyvsp[-2].expr, yyvsp[-1].entry); 
 
    ;
     break;}
-case 589:
+case 591:
 { yyval.exprlist = exprNodeList_singleton (yyvsp[0].expr); ;
     break;}
-case 590:
+case 592:
 { nextIterParam (); ;
     break;}
-case 591:
+case 593:
 { yyval.exprlist = exprNodeList_push (yyvsp[-3].exprlist, yyvsp[0].expr); ;
     break;}
-case 592:
+case 594:
 { yyval.expr = exprNode_iterExpr (yyvsp[0].expr); ;
     break;}
-case 593:
+case 595:
 { yyval.expr = exprNode_iterId (yyvsp[0].entry); ;
     break;}
-case 594:
+case 596:
 { uentry ue = coerceIterId (yyvsp[0].cname);
 
                      if (uentry_isValid (ue)) 
@@ -4931,44 +4980,38 @@ case 594:
                        }
                    ;
     break;}
-case 595:
+case 597:
 { yyval.expr = exprNode_iterNewId (yyvsp[0].cname); ;
     break;}
-case 597:
+case 599:
 { yyval.expr = exprNode_combineLiterals (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 599:
+case 601:
 { yyval.expr = exprNode_addParens (yyvsp[-2].tok, yyvsp[-1].expr); ;
     break;}
-case 601:
+case 603:
 { yyval.expr = exprNode_arrayFetch (yyvsp[-3].expr, yyvsp[-1].expr); ;
     break;}
-case 602:
+case 604:
 { yyval.expr = exprNode_functionCall (yyvsp[-2].expr, exprNodeList_new ()); ;
     break;}
-case 603:
+case 605:
 { yyval.expr = exprNode_functionCall (yyvsp[-3].expr, yyvsp[-1].exprlist); ;
     break;}
-case 604:
+case 606:
 { yyval.expr = exprNode_vaArg (yyvsp[-5].tok, yyvsp[-3].expr, yyvsp[-1].qtyp); ;
     break;}
-case 605:
+case 607:
 { yyval.expr = exprNode_fieldAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ;
     break;}
-case 606:
+case 608:
 { yyval.expr = exprNode_arrowAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ;
     break;}
-case 607:
-{ yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ;
-    break;}
-case 608:
+case 609:
 { yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
 case 610:
-{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
-    break;}
-case 611:
-{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
+{ yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
 case 612:
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
@@ -4989,48 +5032,51 @@ case 617:
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 618:
-{ yyval.expr = yyvsp[0].expr; ;
+{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
+    break;}
+case 619:
+{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 620:
-{ yyval.expr = exprNode_cast (yyvsp[-3].tok, yyvsp[0].expr, yyvsp[-2].qtyp); ;
+{ yyval.expr = yyvsp[0].expr; ;
     break;}
 case 622:
-{ yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
+{ yyval.expr = exprNode_cast (yyvsp[-3].tok, yyvsp[0].expr, yyvsp[-2].qtyp); ;
     break;}
-case 623:
+case 624:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 624:
+case 625:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 626:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 627:
+case 628:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 629:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 630:
+case 631:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 632:
-{ yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
-    break;}
-case 633:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 634:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 635:
+{ yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
+    break;}
+case 636:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 637:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 638:
+case 639:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 640:
@@ -5049,19 +5095,16 @@ case 648:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 650:
+{ yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
+    break;}
+case 652:
 { context_enterTrueClause (yyvsp[-1].expr); ;
     break;}
-case 651:
+case 653:
 { context_enterFalseClause (yyvsp[-4].expr); ;
     break;}
-case 652:
-{ yyval.expr = exprNode_cond (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); ;
-    break;}
 case 654:
-{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
-    break;}
-case 655:
-{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
+{ yyval.expr = exprNode_cond (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); ;
     break;}
 case 656:
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
@@ -5091,90 +5134,96 @@ case 664:
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 665:
-{ yyval.entry = yyvsp[0].entry; ;
+{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 666:
-{ yyval.entry = uentry_undefined; ;
+{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 667:
-{ context_enterDoWhileClause (); yyval.tok = yyvsp[0].tok; ;
+{ yyval.entry = yyvsp[0].entry; ;
     break;}
 case 668:
-{ yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ;
+{ yyval.entry = uentry_undefined; ;
     break;}
 case 669:
-{ yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ;
+{ context_enterDoWhileClause (); yyval.tok = yyvsp[0].tok; ;
     break;}
 case 670:
-{ yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ;
+{ yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 671:
-{ yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ;
+{ yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ;
     break;}
 case 672:
-{ yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ;
+{ yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 673:
-{ yyval.expr = exprNode_doWhile (yyvsp[-4].expr, yyvsp[-1].expr); ;
+{ yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 674:
-{ yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ;
+{ yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ;
     break;}
 case 675:
-{ yyval.expr = exprNode_goto (yyvsp[-1].cname); ;
+{ yyval.expr = exprNode_doWhile (yyvsp[-4].expr, yyvsp[-1].expr); ;
     break;}
 case 676:
-{ yyval.expr = exprNode_continue (yyvsp[-1].tok, BADTOK); ;
+{ yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 677:
-{ yyval.expr = exprNode_continue (yyvsp[-2].tok, QINNERCONTINUE); ;
+{ yyval.expr = exprNode_goto (yyvsp[-1].cname); ;
     break;}
 case 678:
-{ yyval.expr = exprNode_break (yyvsp[-1].tok, BADTOK); ;
+{ yyval.expr = exprNode_continue (yyvsp[-1].tok, BADTOK); ;
     break;}
 case 679:
-{ yyval.expr = exprNode_break (yyvsp[-1].tok, QSWITCHBREAK); ;
+{ yyval.expr = exprNode_continue (yyvsp[-2].tok, QINNERCONTINUE); ;
     break;}
 case 680:
-{ yyval.expr = exprNode_break (yyvsp[-1].tok, QLOOPBREAK); ;
+{ yyval.expr = exprNode_break (yyvsp[-1].tok, BADTOK); ;
     break;}
 case 681:
-{ yyval.expr = exprNode_break (yyvsp[-1].tok, QINNERBREAK); ;
+{ yyval.expr = exprNode_break (yyvsp[-1].tok, QSWITCHBREAK); ;
     break;}
 case 682:
-{ yyval.expr = exprNode_break (yyvsp[-1].tok, QSAFEBREAK); ;
+{ yyval.expr = exprNode_break (yyvsp[-1].tok, QLOOPBREAK); ;
     break;}
 case 683:
-{ yyval.expr = exprNode_nullReturn (yyvsp[-1].tok); ;
+{ yyval.expr = exprNode_break (yyvsp[-1].tok, QINNERBREAK); ;
     break;}
 case 684:
-{ yyval.expr = exprNode_return (yyvsp[-1].expr); ;
+{ yyval.expr = exprNode_break (yyvsp[-1].tok, QSAFEBREAK); ;
+    break;}
+case 685:
+{ yyval.expr = exprNode_nullReturn (yyvsp[-1].tok); ;
     break;}
 case 686:
-{ ; ;
+{ yyval.expr = exprNode_return (yyvsp[-1].expr); ;
     break;}
 case 688:
 { ; ;
     break;}
-case 691:
+case 690:
+{ ; ;
+    break;}
+case 693:
 { yyval.cname = uentry_getName (yyvsp[0].entry); ;
     break;}
-case 692:
+case 694:
 { yyval.cname = uentry_getName (yyvsp[0].entry); ;
     break;}
-case 693:
+case 695:
 { yyval.cname = uentry_getName (yyvsp[0].entry); ;
     break;}
-case 694:
+case 696:
 { yyval.cname = yyvsp[0].cname; ;
     break;}
-case 696:
+case 698:
 { yyval.ctyp = ctype_unknown; ;
     break;}
-case 697:
+case 699:
 { yyval.ctyp = exprNode_getType (yyvsp[-1].expr); exprNode_free (yyvsp[-1].expr); ;
     break;}
-case 698:
+case 700:
 { yyval.ctyp = qtype_getType (yyvsp[-1].qtyp); ;
     break;}
 }
index 039d318ee462ef77088b2980eb074143be476d93..4a08b45a6a67832750e8596b6b4c274248ae08b9 100644 (file)
@@ -94,7 +94,7 @@ extern void yyerror (char *);
   /*@only@*/ modifiesClause modsclause;
   /*@only@*/ warnClause warnclause;
   /*@only@*/ stateClause stateclause;
-
+  /*@only@*/ pointers pointers;
   /*@only@*/ functionConstraint fcnconstraint; 
 
   /*@only@*/ metaStateConstraint msconstraint;
@@ -183,7 +183,7 @@ extern void yyerror (char *);
 %token <tok> QNOTREACHED
 
 /* type qualifiers: */
-%token <tok> QCONST QVOLATILE QINLINE QEXTENSION QEXTERN QSTATIC QAUTO QREGISTER
+%token <tok> QCONST QRESTRICT QVOLATILE QINLINE QEXTENSION QEXTERN QSTATIC QAUTO QREGISTER
 %token <tok> QOUT QIN QYIELD QONLY QTEMP QSHARED QREF QUNIQUE
 %token <tok> QCHECKED QUNCHECKED QCHECKEDSTRICT QCHECKMOD
 %token <tok> QKEEP QKEPT QPARTIAL QSPECIAL QOWNED QDEPENDENT
@@ -237,7 +237,7 @@ extern void yyerror (char *);
 %token <msinfo> METASTATE_NAME 
 %type <msinfo> metaStateName
 %type <cname> enumerator newId  /*@-varuse@*/ /* yacc declares yytranslate here */
-%type <count> pointers /*@=varuse@*/
+%type <pointers> pointers /*@=varuse@*/
 
 %type <tok> doHeader stateTag conditionTag startConditionClause
 %type <typequal> exitsQualifier checkQualifier stateQualifier 
@@ -312,8 +312,8 @@ extern void yyerror (char *);
 
 %type <expr> designator designatorList designation
 
-%type <typequal> storageSpecifier typeQualifier typeModifier globQual
-%type <tquallist> optGlobQuals
+%type <typequal> storageSpecifier typeQualifier typeModifier globQual innerMods
+%type <tquallist> optGlobQuals innerModsList
 %type <qtyp> completeType completeTypeSpecifier optCompleteType
 %type <qtyp> completeTypeSpecifierAux altType typeExpression 
 
@@ -961,8 +961,8 @@ initializer
 
 instanceDecl
  : completeTypeSpecifier IsType TSEMI 
-   { $$ = exprNode_makeError (); }
-    /*
+   { $$ = exprNode_makeError (); } 
+     /*
      ** This causes r/r conflicts with function definitions.
      ** Instead we need to snarf one first. (gack)
      **
@@ -1213,6 +1213,7 @@ definedQualifier
 typeQualifier
  : QCONST IsType       { $$ = qual_createConst (); }
  | QVOLATILE IsType    { $$ = qual_createVolatile (); }
+ | QRESTRICT IsType    { $$ = qual_createRestrict (); }
  | definedQualifier IsType { $$ = $1; } 
  | stateQualifier IsType { $$ = $1; } 
  | exitsQualifier IsType { $$ = $1; }
@@ -1365,7 +1366,6 @@ optNamedDecl
  | pointers TYPE_NAME    
    { 
      qtype qt = qtype_unknown ();
-
      qtype_adjustPointers ($1, qt);
      $$ = idDecl_create (cstring_copy (LastIdentifier ()), qt);
    }
@@ -1382,18 +1382,19 @@ genericParamList
  | NotType paramIdList { $$ = handleParamIdList ($2); }  
 
 innerMods
- : QCONST    { /* ignored for now */; }
- | QVOLATILE { ; }
+ : QCONST    { $$ = qual_createConst (); }
+ | QRESTRICT { $$ = qual_createRestrict (); }
+ | QVOLATILE { $$ = qual_createVolatile (); }
 
 innerModsList
- : innerMods { ; }
- | innerModsList innerMods { ; }
+ : innerMods { $$ = qualList_single ($1); }
+ | innerModsList innerMods { $$ = qualList_add ($1, $2); }
 
 pointers
- : TMULT { $$ = 1; }
- | TMULT innerModsList { $$ = 1; }
- | TMULT pointers { $$ = 1 + $2; }
- | TMULT innerModsList pointers { $$ = 1 + $3; }
+ : TMULT { $$ = pointers_create ($1); }
+ | TMULT innerModsList { $$ = pointers_createMods ($1, $2); }
+ | TMULT pointers { $$ = pointers_extend (pointers_create ($1), $2); } 
+ | TMULT innerModsList pointers { $$ = pointers_extend (pointers_createMods ($1, $2), $3); }
 
 paramIdList
  : idList 
index 0e562d00e2da4bd42944126ea4039e2a107cffc8..7534384a22d2cdd01440c391b13faa538458a9fd 100644 (file)
@@ -110,6 +110,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 /*@+boolint@*/
 /*@+charint@*/
 
+/* Warnings for using sprintf - suppress them all for now... */
+/*@-bufferoverflowhigh@*/
+
 #define NO_SHORTNAMES
 
 # ifdef open
@@ -8450,3 +8453,5 @@ void cppBuffer_forward (cppBuffer *buf, int n)
   llassert (buf->cur != NULL);
   buf->cur += n;
 }
+
+/*@=bufferoverflowhigh@*/
index b1e7d78a136d26faf26d5174c3fcf47fe39b898d..1a8e618a50db271bf45852a896f3ef8fb8391de3 100644 (file)
@@ -269,6 +269,7 @@ static void setTokLengthT (size_t len)
 
 "volatile"     { setTokLength (8); RETURN_TOK (QVOLATILE); }
 "const"                { setTokLength (5); RETURN_TOK (QCONST); }
+"restrict"     { setTokLength (8); RETURN_TOK (QRESTRICT); }
 
                         /* some systems expect this! [gack!] */ 
 "__const"      { setTokLength (7); RETURN_TOK (QCONST); }
index d246bf763fa419ea8f064924986492f371f74466..7fc16c481bef2841d0c72adcb6db297c3b9fac9f 100644 (file)
@@ -1998,13 +1998,14 @@ ctype_getBaseType (ctype c)
 }
 
 ctype
-ctype_adjustPointers (int np, ctype c)
+ctype_adjustPointers (pointers p, ctype c)
 {
-  
+  int np = pointers_depth (p);
+
   if (ctype_isFunction (c))
     {
       c = ctype_makeParamsFunction
-        (ctype_adjustPointers (np, ctype_getReturnType (c)),
+        (ctype_adjustPointers (p, ctype_getReturnType (c)),
         uentryList_copy (ctype_argsFunction (c)));
     }
   else
index bce4b0cb2120e45d296b9d96578bab0b590504fa..151d7dddee9e27caa561c865c62208c6049f32bd 100644 (file)
@@ -702,6 +702,12 @@ fileloc_unparse (fileloc f)
            if (f->kind == FL_LIB)
              {
                fname = message ("load file %q", fileloc_outputFilename (f));
+
+               if (!context_getFlag (FLG_SHOWLOADLOC))
+                 {
+                   res = fname;
+                   break;
+                 }
              }
            else
              {
@@ -738,6 +744,7 @@ fileloc_unparse (fileloc f)
                else
                  {
                    res = fname;
+                   /*@-branchstate@*/ /* spurious warnings reporteded because of break above */
                  }
              }
            else if (fileloc_linenoDefined (f))
@@ -767,7 +774,8 @@ fileloc_unparse (fileloc f)
     {
       res = cstring_makeLiteral ("< Location unknown >");
     }
-
+  /*@=branchstate@*/ /*@i2523 this is a spurious warning because of the break */
+  
   in_funparse = FALSE;
   return res;
 }
index 1931cba95ed7b17ff7e387246e4e002bca6ac8c0..9f97ef1a67cb29c456996b48889dcfcf4890d9f3 100644 (file)
@@ -300,7 +300,7 @@ summarizeErrors ()
              hadOne = TRUE;
            }
 
-         sprintf (buf, "%s%7d   %9d", cstring_toCharsSafe (fs), nrep, nsup);
+         (void) snprintf (buf, 128, "%s%7d   %9d", cstring_toCharsSafe (fs), nrep, nsup);
 
          sumrep += nrep;
          sumsup += nsup;
@@ -316,7 +316,7 @@ summarizeErrors ()
 
       llmsglit ("                          ========  =========");
 
-      sprintf (buf, "%s%7d   %9d", cstring_toCharsSafe (ts), sumrep, sumsup);
+      (void) snprintf (buf, 128, "%s%7d   %9d", cstring_toCharsSafe (ts), sumrep, sumsup);
       cstring_free (ts);
       llmsgplain (cstring_copy (cstring_fromChars (buf)));
     }
index f8a08086bed8ff0c5f577c60fb54700ffb3bde46..4fde87fb83276fa417bc1e23910d2b08e9cfbc6c 100644 (file)
@@ -3270,6 +3270,13 @@ static flaglist flags =
     "show column number where error is found",
     NULL, 0, 0
   },
+  {
+    FK_FORMAT, FK_DISPLAY, plainFlag,
+    "showloadloc",
+    FLG_SHOWLOADLOC,
+    "show location information for load files",
+    NULL, 0, 0
+  },
   {
     FK_FORMAT, FK_DISPLAY, plainFlag,
     "parenfileformat",
index e621870367708b932b91aafda998c3f3a047b3fd..5a2e090a6daa7668ee502557655eeb5ecc2c500a 100644 (file)
@@ -192,8 +192,8 @@ char *FormatInt (int i)
 {
   char temp[255]; /* assume the integer has at most 254 digits */
   char *outs;
-
-  sprintf (temp, "%i", i);
+  int sres = snprintf (temp, 255, "%i", i);
+  check (sres >= 0 && sres <= 255);
   outs = (char *) dmalloc (sizeof (*outs) * (1 + strlen (temp)));
   strcpy (outs, temp);
 
index 773c237ce1d2a914bf87761d262043be6c50c94c..7f761c336c3547175bac98fb31fc6dec7e016c6f 100644 (file)
@@ -276,6 +276,7 @@ typedef union
   /*@only@*/ abstBodyNode abstbody;
   /*@only@*/ abstractNode abstract;
   /*@only@*/ exposedNode exposed;
+  /*@only@*/ pointers pointers;
   /*    taggedUnionNode taggedunion; */
   /*@only@*/ globalList globals;
   /*@only@*/ constDeclarationNode constdeclaration;
@@ -544,48 +545,48 @@ static const short yyrhs[] = {    -1,
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   380,   381,   384,   385,   388,   389,   392,   393,   394,   397,
-   398,   401,   402,   403,   406,   412,   416,   418,   420,   422,
-   424,   426,   430,   434,   435,   438,   440,   444,   445,   448,
-   449,   452,   454,   456,   458,   462,   466,   468,   470,   474,
-   475,   478,   479,   480,   483,   484,   491,   493,   504,   506,
-   509,   513,   513,   514,   515,   515,   517,   518,   519,   520,
-   521,   521,   522,   525,   526,   527,   528,   530,   546,   548,
-   552,   553,   555,   558,   559,   562,   566,   568,   572,   574,
-   576,   578,   582,   583,   586,   588,   590,   593,   595,   598,
-   600,   603,   604,   605,   609,   610,   612,   614,   617,   619,
-   623,   624,   627,   629,   633,   634,   635,   638,   639,   642,
-   646,   647,   650,   651,   654,   655,   657,   660,   661,   664,
-   665,   668,   669,   670,   671,   674,   675,   678,   679,   680,
-   681,   682,   685,   686,   689,   690,   693,   694,   697,   698,
-   699,   702,   703,   706,   707,   708,   711,   712,   715,   720,
-   726,   734,   736,   738,   740,   744,   745,   748,   749,   750,
-   751,   752,   753,   754,   756,   760,   761,   762,   763,   766,
-   767,   770,   771,   774,   774,   783,   784,   788,   789,   792,
-   793,   796,   797,   798,   799,   800,   801,   802,   803,   804,
-   805,   813,   814,   819,   821,   827,   828,   829,   830,   831,
-   832,   833,   834,   835,   836,   837,   838,   839,   840,   841,
-   842,   843,   844,   845,   846,   847,   848,   849,   850,   851,
-   852,   853,   854,   855,   856,   857,   858,   859,   860,   861,
-   862,   865,   867,   869,   871,   873,   882,   883,   888,   889,
-   892,   894,   896,   898,   900,   902,   906,   907,   910,   911,
-   916,   919,   921,   925,   926,   929,   931,   935,   936,   946,
-   947,   950,   951,   952,   953,   954,   955,   958,   959,   960,
-   961,   962,   963,   972,   973,   974,   975,   976,   982,   983,
-   984,   994,   995,   996,  1001,  1002,  1005,  1006,  1007,  1008,
-  1009,  1010,  1011,  1012,  1015,  1016,  1019,  1021,  1023,  1025,
-  1027,  1030,  1032,  1034,  1036,  1038,  1040,  1048,  1050,  1052,
-  1055,  1058,  1061,  1066,  1067,  1070,  1071,  1074,  1075,  1076,
-  1079,  1080,  1083,  1084,  1087,  1088,  1091,  1094,  1095,  1098,
-  1099,  1102,  1105,  1111,  1113,  1114,  1117,  1118,  1123,  1125,
-  1129,  1130,  1131,  1134,  1135,  1138,  1139,  1142,  1143,  1146,
-  1147,  1150,  1151,  1152,  1153,  1154,  1155,  1156,  1159,  1160,
-  1163,  1166,  1168,  1172,  1176,  1177,  1180,  1181,  1184,  1186,
-  1188,  1190,  1191,  1193,  1195,  1197,  1200,  1202,  1206,  1207,
-  1210,  1211,  1212,  1213,  1216,  1217,  1218,  1219,  1220,  1221,
-  1226,  1232,  1242,  1243,  1244,  1245,  1248,  1250,  1254,  1258,
-  1261,  1262,  1265,  1266,  1269,  1270,  1273,  1274,  1275,  1276,
-  1277,  1278,  1279
+   382,   383,   386,   387,   390,   391,   394,   395,   396,   399,
+   400,   403,   404,   405,   408,   414,   418,   420,   422,   424,
+   426,   428,   432,   436,   437,   440,   442,   446,   447,   450,
+   451,   454,   456,   458,   460,   464,   468,   470,   472,   476,
+   477,   480,   481,   482,   485,   486,   493,   495,   506,   508,
+   511,   515,   515,   516,   517,   517,   519,   520,   521,   522,
+   523,   523,   524,   527,   528,   529,   530,   532,   548,   550,
+   554,   555,   557,   560,   561,   564,   568,   570,   574,   576,
+   578,   580,   584,   585,   588,   590,   592,   595,   597,   600,
+   602,   605,   606,   607,   611,   612,   614,   616,   619,   621,
+   625,   626,   629,   631,   635,   636,   637,   640,   641,   644,
+   648,   649,   652,   653,   656,   657,   659,   662,   663,   666,
+   667,   670,   671,   672,   673,   676,   677,   680,   681,   682,
+   683,   684,   687,   688,   691,   692,   695,   696,   699,   700,
+   701,   704,   705,   708,   709,   710,   713,   714,   717,   722,
+   728,   736,   738,   740,   742,   746,   747,   750,   751,   752,
+   753,   754,   755,   756,   758,   762,   763,   764,   765,   768,
+   769,   772,   773,   776,   776,   785,   786,   790,   791,   794,
+   795,   798,   799,   800,   801,   802,   803,   804,   805,   806,
+   807,   815,   816,   821,   823,   829,   830,   831,   832,   833,
+   834,   835,   836,   837,   838,   839,   840,   841,   842,   843,
+   844,   845,   846,   847,   848,   849,   850,   851,   852,   853,
+   854,   855,   856,   857,   858,   859,   860,   861,   862,   863,
+   864,   867,   869,   871,   873,   875,   884,   885,   890,   891,
+   894,   896,   898,   900,   902,   904,   908,   909,   912,   913,
+   918,   921,   923,   927,   928,   931,   933,   937,   938,   948,
+   949,   952,   953,   954,   955,   956,   957,   960,   961,   962,
+   963,   964,   965,   974,   975,   976,   977,   978,   984,   985,
+   986,   996,   997,   998,  1003,  1004,  1007,  1008,  1009,  1010,
+  1011,  1012,  1013,  1014,  1017,  1018,  1021,  1023,  1025,  1027,
+  1029,  1032,  1034,  1036,  1038,  1040,  1042,  1050,  1052,  1054,
+  1057,  1060,  1063,  1068,  1069,  1072,  1073,  1076,  1077,  1078,
+  1081,  1082,  1085,  1086,  1089,  1090,  1093,  1096,  1097,  1100,
+  1101,  1104,  1107,  1113,  1115,  1116,  1119,  1120,  1125,  1127,
+  1131,  1132,  1133,  1136,  1137,  1140,  1141,  1144,  1145,  1148,
+  1149,  1152,  1153,  1154,  1155,  1156,  1157,  1158,  1161,  1162,
+  1165,  1168,  1170,  1174,  1178,  1179,  1182,  1183,  1186,  1188,
+  1190,  1192,  1193,  1195,  1197,  1199,  1202,  1204,  1208,  1209,
+  1212,  1213,  1214,  1215,  1218,  1219,  1220,  1221,  1222,  1223,
+  1228,  1234,  1244,  1245,  1246,  1247,  1250,  1252,  1256,  1260,
+  1263,  1264,  1267,  1268,  1271,  1272,  1275,  1276,  1277,  1278,
+  1279,  1280,  1281
 };
 #endif
 
@@ -2835,13 +2836,13 @@ case 236:
     break;}
 case 238:
 { llassert (lclTypeSpecNode_isDefined (yyvsp[-1].lcltypespec));
-     yyvsp[-1].lcltypespec->pointers = yyvsp[0].count; yyval.lcltypespec = yyvsp[-1].lcltypespec; ;
+     yyvsp[-1].lcltypespec->pointers = yyvsp[0].pointers; yyval.lcltypespec = yyvsp[-1].lcltypespec; ;
     break;}
 case 239:
-{ yyval.count = 1; ;
+{ yyval.pointers = pointers_createLt (yyvsp[0].ltok); ;
     break;}
 case 240:
-{ yyval.count = yyvsp[-1].count + 1; ;
+{ yyval.pointers = pointers_extend (yyvsp[-1].pointers, pointers_createLt (yyvsp[0].ltok)); ;
     break;}
 case 241:
 { (void) checkAndEnterTag (TAG_FWDSTRUCT, ltoken_copy (yyvsp[0].ltok)); ;
index 24039b079722d51f493c1fa30829ac2c36ae6d73..09ce6ba25f08c77d14dc209fde54e3fd9460f75e 100644 (file)
@@ -105,6 +105,7 @@ bool g_inTypeDef = FALSE;
   /*@only@*/ abstBodyNode abstbody;
   /*@only@*/ abstractNode abstract;
   /*@only@*/ exposedNode exposed;
+  /*@only@*/ pointers pointers;
   /*    taggedUnionNode taggedunion; */
   /*@only@*/ globalList globals;
   /*@only@*/ constDeclarationNode constdeclaration;
@@ -318,7 +319,8 @@ bool g_inTypeDef = FALSE;
 %type <opform> opForm
 %type <signature> signature
 %type <typname> typeName
-%type <count> middle placeList pointers 
+%type <count> middle placeList 
+%type <pointers> pointers 
 %type <abstDecl> optAbstDeclarator 
 %type <lcltypespec> lclTypeSpec lclType sortSpec
 %type <ltokenList> enumeratorList postfixOps
@@ -885,8 +887,8 @@ lclType
      $1->pointers = $2; $$ = $1; }
 
 pointers   
- : LLT_MULOP          { $$ = 1; }
- | pointers LLT_MULOP { $$ = $1 + 1; } 
+ : LLT_MULOP          { $$ = pointers_createLt ($1); }
+ | pointers LLT_MULOP { $$ = pointers_extend ($1, pointers_createLt ($2)); }
 
 structOrUnionSpec  
  : LLT_STRUCT optTagId 
index b0fb00eabaf405201af18c0e7dafb42f8a4de62a..5d4c546404ccdb12c410af7ecd8d38d97642a385 100644 (file)
@@ -1124,24 +1124,24 @@ int main (int argc, char *argv[])
          
          if (anylcl)
            {
-             sprintf (msg, 
-                      "Time distribution (percent): initialize %.2f / lcl %.2f / "
-                      "pre-process %.2f / c check %.2f / finalize %.2f \n", 
-                      (100.0 * (double) (libtime - before) / ttime),
-                      (100.0 * (double) (lcltime - libtime) / ttime),
-                      (100.0 * (double) (pptime - lcltime) / ttime),
-                      (100.0 * (double) (cptime - pptime) / ttime),
-                      (100.0 * (double) (rstime - cptime) / ttime));
+             (void) snprintf (msg, 256,
+                       "Time distribution (percent): initialize %.2f / lcl %.2f / "
+                       "pre-process %.2f / c check %.2f / finalize %.2f \n", 
+                       (100.0 * (double) (libtime - before) / ttime),
+                       (100.0 * (double) (lcltime - libtime) / ttime),
+                       (100.0 * (double) (pptime - lcltime) / ttime),
+                       (100.0 * (double) (cptime - pptime) / ttime),
+                       (100.0 * (double) (rstime - cptime) / ttime));
            }
          else
            {
-             sprintf (msg, 
-                      "Time distribution (percent): initialize %.2f / "
-                      "pre-process %.2f / c check %.2f / finalize %.2f \n", 
-                      (100.0 * (double) (libtime - before) / ttime),
-                      (100.0 * (double) (pptime - libtime) / ttime),
-                      (100.0 * (double) (cptime - pptime) / ttime),
-                      (100.0 * (double) (rstime - cptime) / ttime));
+             (void) snprintf (msg, 256,
+                       "Time distribution (percent): initialize %.2f / "
+                       "pre-process %.2f / c check %.2f / finalize %.2f \n", 
+                       (100.0 * (double) (libtime - before) / ttime),
+                       (100.0 * (double) (pptime - libtime) / ttime),
+                       (100.0 * (double) (cptime - pptime) / ttime),
+                       (100.0 * (double) (rstime - cptime) / ttime));
            }
          
          llgenindentmsgnoloc (cstring_fromCharsO (msg));
index 87a5cf5385ea2943fa78bc7f33b0db1e47123ff9..41757a5d070f666bab31005f000fa483a4ce7a62 100644 (file)
@@ -42,7 +42,7 @@ typedef enum
 
 /* char *s, anytype v */
 /*@notfunction@*/
-# define GETPRINTF(s,v) (sprintf (strbuf, s, v), mstring_copy (strbuf))
+# define GETPRINTF(s,v) (snprintf (strbuf, 64, s, v), mstring_copy (strbuf))
 
 /*
 ** returns control code indicated by *c, and
index ad56cf6129a753b589623c07b06693af880e66d3..8c80b9a2c5c96dc54e523c2f537a0e525fbcfa22 100644 (file)
 #define        MT_SIGNEDINTEGRALTYPE   298
 #define        MT_CONST        299
 #define        MT_VOLATILE     300
-#define        MT_STRINGLIT    301
-#define        MT_IDENT        302
+#define        MT_RESTRICT     301
+#define        MT_STRINGLIT    302
+#define        MT_IDENT        303
 
 
 
@@ -160,11 +161,12 @@ typedef union {
   mtTransferAction mttransferaction;
   mtLoseReferenceList mtlosereferencelist;
   mtLoseReference mtlosereference;
-
+  pointers pointers;
   /*@only@*/ cstringList cstringlist;
   ctype ctyp;
   /*@only@*/ qtype qtyp;
-  int count;
+  qual qual;
+  qualList quals;
 } YYSTYPE;
 #ifndef YYDEBUG
 #define YYDEBUG 1
@@ -180,11 +182,11 @@ typedef union {
 
 
 
-#define        YYFINAL         135
+#define        YYFINAL         136
 #define        YYFLAG          -32768
-#define        YYNTBASE        49
+#define        YYNTBASE        50
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 302 ? yytranslate[x] : 92)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 303 ? yytranslate[x] : 93)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -217,7 +219,7 @@ static const char yytranslate[] = {     0,
     17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
     37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48
+    47,    48,    49
 };
 
 #if YYDEBUG != 0
@@ -226,56 +228,56 @@ static const short yyprhs[] = {     0,
     25,    27,    29,    31,    33,    35,    37,    39,    42,    43,
     45,    48,    51,    54,    57,    60,    63,    64,    66,    68,
     71,    73,    77,    80,    81,    83,    85,    87,    90,    92,
-    95,    98,   102,   104,   106,   108,   111,   115,   118,   122,
+    95,    98,   102,   104,   106,   108,   110,   113,   117,   120,
    124,   126,   128,   130,   132,   134,   136,   138,   140,   142,
-   144,   147,   149,   153,   156,   159,   163,   168,   171,   173,
-   176,   181,   184,   186,   189,   195,   197,   199,   202,   205,
-   208,   211,   213,   216,   220,   222,   225,   231,   233,   235,
-   237,   240
+   144,   146,   149,   151,   155,   158,   161,   165,   170,   173,
+   175,   178,   183,   186,   188,   191,   197,   199,   201,   204,
+   207,   210,   213,   215,   218,   222,   224,   227,   233,   235,
+   237,   239,   242
 };
 
 static const short yyrhs[] = {    -1,
-    50,     0,     5,    51,     4,     0,     6,     5,    51,     4,
-     0,    48,    52,     0,     0,    53,    52,     0,    54,     0,
-    69,     0,    72,     0,    71,     0,    74,     0,    77,     0,
-    83,     0,    81,     0,    82,     0,    84,     0,     7,    56,
-     0,     0,    56,     0,    12,    57,     0,    11,    57,     0,
-    13,    57,     0,    14,    57,     0,    15,    57,     0,    16,
-    57,     0,     0,    58,     0,    59,     0,    59,    62,     0,
-    60,     0,    59,    28,    58,     0,    67,    61,     0,     0,
-    59,     0,    63,     0,    66,     0,    63,    66,     0,    27,
-     0,    27,    65,     0,    27,    63,     0,    27,    65,    63,
-     0,    45,     0,    46,     0,    64,     0,    65,    64,     0,
-    29,    62,    30,     0,    31,    32,     0,    66,    31,    32,
-     0,    36,     0,    37,     0,    38,     0,    39,     0,    40,
-     0,    41,     0,    42,     0,    43,     0,    44,     0,    68,
-     0,    48,     0,     8,    70,     0,    48,     0,    48,    35,
-    70,     0,    10,    91,     0,     9,    73,     0,    56,    18,
-    91,     0,    56,    18,    91,    73,     0,    17,    75,     0,
-    76,     0,    76,    75,     0,    48,    55,    18,    91,     0,
-    19,    78,     0,    79,     0,    79,    78,     0,    80,    26,
-    80,    18,    89,     0,    91,     0,    27,     0,    21,    87,
-     0,    22,    87,     0,    20,    87,     0,    23,    85,     0,
-    86,     0,    86,    85,     0,    91,    18,    90,     0,    88,
-     0,    88,    87,     0,    91,    24,    91,    18,    89,     0,
-    91,     0,    90,     0,    25,     0,    25,    47,     0,    48,
-     0
+    51,     0,     5,    52,     4,     0,     6,     5,    52,     4,
+     0,    49,    53,     0,     0,    54,    53,     0,    55,     0,
+    70,     0,    73,     0,    72,     0,    75,     0,    78,     0,
+    84,     0,    82,     0,    83,     0,    85,     0,     7,    57,
+     0,     0,    57,     0,    12,    58,     0,    11,    58,     0,
+    13,    58,     0,    14,    58,     0,    15,    58,     0,    16,
+    58,     0,     0,    59,     0,    60,     0,    60,    63,     0,
+    61,     0,    60,    28,    59,     0,    68,    62,     0,     0,
+    60,     0,    64,     0,    67,     0,    64,    67,     0,    27,
+     0,    27,    66,     0,    27,    64,     0,    27,    66,    64,
+     0,    45,     0,    46,     0,    47,     0,    65,     0,    66,
+    65,     0,    29,    63,    30,     0,    31,    32,     0,    67,
+    31,    32,     0,    36,     0,    37,     0,    38,     0,    39,
+     0,    40,     0,    41,     0,    42,     0,    43,     0,    44,
+     0,    69,     0,    49,     0,     8,    71,     0,    49,     0,
+    49,    35,    71,     0,    10,    92,     0,     9,    74,     0,
+    57,    18,    92,     0,    57,    18,    92,    74,     0,    17,
+    76,     0,    77,     0,    77,    76,     0,    49,    56,    18,
+    92,     0,    19,    79,     0,    80,     0,    80,    79,     0,
+    81,    26,    81,    18,    90,     0,    92,     0,    27,     0,
+    21,    88,     0,    22,    88,     0,    20,    88,     0,    23,
+    86,     0,    87,     0,    87,    86,     0,    92,    18,    91,
+     0,    89,     0,    89,    88,     0,    92,    24,    92,    18,
+    90,     0,    92,     0,    91,     0,    25,     0,    25,    48,
+     0,    49,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   158,   159,   162,   164,   168,   172,   173,   177,   178,   179,
-   180,   181,   182,   183,   184,   185,   186,   189,   193,   194,
-   197,   198,   199,   200,   201,   202,   209,   210,   213,   214,
-   217,   218,   222,   225,   226,   230,   231,   232,   235,   236,
-   237,   238,   241,   242,   245,   246,   249,   250,   251,   258,
-   259,   260,   261,   262,   263,   264,   265,   266,   267,   273,
-   276,   279,   280,   284,   287,   290,   292,   296,   299,   300,
-   304,   308,   311,   312,   315,   319,   320,   323,   326,   329,
-   332,   335,   336,   339,   342,   343,   346,   350,   351,   354,
-   355,   358
+   160,   161,   164,   166,   170,   174,   175,   179,   180,   181,
+   182,   183,   184,   185,   186,   187,   188,   191,   195,   196,
+   199,   200,   201,   202,   203,   204,   211,   212,   215,   216,
+   219,   220,   224,   227,   228,   232,   233,   234,   237,   238,
+   239,   240,   243,   244,   245,   248,   249,   252,   253,   254,
+   261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+   276,   279,   282,   283,   287,   290,   293,   295,   299,   302,
+   303,   307,   311,   314,   315,   318,   322,   323,   326,   329,
+   332,   335,   338,   339,   342,   345,   346,   349,   353,   354,
+   357,   358,   361
 };
 #endif
 
@@ -289,12 +291,12 @@ static const char * const yytname[] = {   "$","error","$undefined.","MT_BADTOK",
 "MT_LOSEREFERENCE","MT_AS","MT_ERROR","MT_PLUS","MT_STAR","MT_BAR","MT_LPAREN",
 "MT_RPAREN","MT_LBRACKET","MT_RBRACKET","MT_LBRACE","MT_RBRACE","MT_COMMA","MT_CHAR",
 "MT_INT","MT_FLOAT","MT_DOUBLE","MT_VOID","MT_ANYTYPE","MT_INTEGRALTYPE","MT_UNSIGNEDINTEGRALTYPE",
-"MT_SIGNEDINTEGRALTYPE","MT_CONST","MT_VOLATILE","MT_STRINGLIT","MT_IDENT","file",
-"mtsDeclaration","declarationNode","declarationPieces","declarationPiece","contextDeclaration",
-"optContextSelection","contextSelection","optType","typeExpression","completeType",
-"completeTypeAux","optCompleteType","abstractDecl","pointers","innerMods","innerModsList",
-"abstractDeclBase","typeSpecifier","typeName","valuesDeclaration","valuesList",
-"defaultNode","defaultsDeclaration","defaultDeclarationList","annotationsDeclaration",
+"MT_SIGNEDINTEGRALTYPE","MT_CONST","MT_VOLATILE","MT_RESTRICT","MT_STRINGLIT",
+"MT_IDENT","file","mtsDeclaration","declarationNode","declarationPieces","declarationPiece",
+"contextDeclaration","optContextSelection","contextSelection","optType","typeExpression",
+"completeType","completeTypeAux","optCompleteType","abstractDecl","pointers",
+"innerMods","innerModsList","abstractDeclBase","typeSpecifier","typeName","valuesDeclaration",
+"valuesList","defaultNode","defaultsDeclaration","defaultDeclarationList","annotationsDeclaration",
 "annotationsDeclarationList","annotationDeclaration","mergeDeclaration","mergeClauses",
 "mergeClause","mergeItem","preconditionsDeclaration","postconditionsDeclaration",
 "transfersDeclaration","loseReferenceDeclaration","lostClauses","lostClause",
@@ -303,16 +305,16 @@ static const char * const yytname[] = {   "$","error","$undefined.","MT_BADTOK",
 #endif
 
 static const short yyr1[] = {     0,
-    49,    49,    50,    50,    51,    52,    52,    53,    53,    53,
-    53,    53,    53,    53,    53,    53,    53,    54,    55,    55,
-    56,    56,    56,    56,    56,    56,    57,    57,    58,    58,
-    59,    59,    60,    61,    61,    62,    62,    62,    63,    63,
-    63,    63,    64,    64,    65,    65,    66,    66,    66,    67,
-    67,    67,    67,    67,    67,    67,    67,    67,    67,    68,
-    69,    70,    70,    71,    72,    73,    73,    74,    75,    75,
-    76,    77,    78,    78,    79,    80,    80,    81,    82,    83,
-    84,    85,    85,    86,    87,    87,    88,    89,    89,    90,
-    90,    91
+    50,    50,    51,    51,    52,    53,    53,    54,    54,    54,
+    54,    54,    54,    54,    54,    54,    54,    55,    56,    56,
+    57,    57,    57,    57,    57,    57,    58,    58,    59,    59,
+    60,    60,    61,    62,    62,    63,    63,    63,    64,    64,
+    64,    64,    65,    65,    65,    66,    66,    67,    67,    67,
+    68,    68,    68,    68,    68,    68,    68,    68,    68,    68,
+    69,    70,    71,    71,    72,    73,    74,    74,    75,    76,
+    76,    77,    78,    79,    79,    80,    81,    81,    82,    83,
+    84,    85,    86,    86,    87,    88,    88,    89,    90,    90,
+    91,    91,    92
 };
 
 static const short yyr2[] = {     0,
@@ -320,96 +322,96 @@ static const short yyr2[] = {     0,
      1,     1,     1,     1,     1,     1,     1,     2,     0,     1,
      2,     2,     2,     2,     2,     2,     0,     1,     1,     2,
      1,     3,     2,     0,     1,     1,     1,     2,     1,     2,
-     2,     3,     1,     1,     1,     2,     3,     2,     3,     1,
+     2,     3,     1,     1,     1,     1,     2,     3,     2,     3,
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     2,     1,     3,     2,     2,     3,     4,     2,     1,     2,
-     4,     2,     1,     2,     5,     1,     1,     2,     2,     2,
-     2,     1,     2,     3,     1,     2,     5,     1,     1,     1,
-     2,     1
+     1,     2,     1,     3,     2,     2,     3,     4,     2,     1,
+     2,     4,     2,     1,     2,     5,     1,     1,     2,     2,
+     2,     2,     1,     2,     3,     1,     2,     5,     1,     1,
+     1,     2,     1
 };
 
 static const short yydefact[] = {     1,
      0,     0,     2,     6,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     5,     6,     8,     9,
     11,    10,    12,    13,    15,    16,    14,    17,     3,     0,
-    27,    27,    27,    27,    27,    27,    18,    62,    61,     0,
-    65,    92,    64,    19,    68,    69,    77,    72,    73,     0,
-    76,    80,    85,     0,    78,    79,    81,    82,     0,     7,
-     4,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-    60,    22,    28,    29,    31,    34,    59,    21,    23,    24,
-    25,    26,     0,     0,     0,    20,    70,    74,     0,    86,
-     0,    83,     0,    39,     0,     0,     0,    30,    36,    37,
-    35,    33,    63,    66,     0,     0,     0,    90,    84,    43,
-    44,    41,    45,    40,    32,     0,    48,    38,     0,    67,
-    71,     0,     0,    91,    42,    46,    47,    49,    75,    89,
-    88,    87,     0,     0,     0
+    27,    27,    27,    27,    27,    27,    18,    63,    62,     0,
+    66,    93,    65,    19,    69,    70,    78,    73,    74,     0,
+    77,    81,    86,     0,    79,    80,    82,    83,     0,     7,
+     4,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+    61,    22,    28,    29,    31,    34,    60,    21,    23,    24,
+    25,    26,     0,     0,     0,    20,    71,    75,     0,    87,
+     0,    84,     0,    39,     0,     0,     0,    30,    36,    37,
+    35,    33,    64,    67,     0,     0,     0,    91,    85,    43,
+    44,    45,    41,    46,    40,    32,     0,    49,    38,     0,
+    68,    72,     0,     0,    92,    42,    47,    48,    50,    76,
+    90,    89,    88,     0,     0,     0
 };
 
-static const short yydefgoto[] = {   133,
+static const short yydefgoto[] = {   134,
      3,     5,    17,    18,    19,    85,    40,    72,    73,    74,
-    75,   102,    98,    99,   113,   114,   100,    76,    77,    20,
+    75,   102,    98,    99,   114,   115,   100,    76,    77,    20,
     39,    21,    22,    41,    23,    45,    46,    24,    48,    49,
-    50,    25,    26,    27,    28,    57,    58,    52,    53,   129,
-   130,    54
+    50,    25,    26,    27,    28,    57,    58,    52,    53,   130,
+   131,    54
 };
 
-static const short yypact[] = {     4,
-   -37,    35,-32768,    36,    37,   -37,    21,     2,    21,    17,
-    18,   -19,    17,    17,    17,    17,-32768,    36,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    63,
-   -23,   -23,   -23,   -23,   -23,   -23,-32768,    33,-32768,    51,
--32768,-32768,-32768,    21,-32768,    18,-32768,-32768,   -19,    44,
--32768,-32768,    17,    47,-32768,-32768,-32768,    17,    54,-32768,
+static const short yypact[] = {    21,
+   -29,    30,-32768,     2,    33,   -29,    52,    -9,    52,    -8,
+    -3,   -19,    -8,    -8,    -8,    -8,-32768,     2,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    54,
+    13,    13,    13,    13,    13,    13,-32768,    24,-32768,    43,
+-32768,-32768,-32768,    52,-32768,    -3,-32768,-32768,   -19,    34,
+-32768,-32768,    -8,    46,-32768,-32768,-32768,    -8,    57,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,    -5,-32768,   -23,-32768,-32768,-32768,-32768,
--32768,-32768,     2,    17,    55,-32768,-32768,-32768,   -19,-32768,
-    17,-32768,    50,   -15,   -23,    20,    45,-32768,    23,    49,
-    48,-32768,-32768,    21,    17,    60,    64,    38,-32768,-32768,
--32768,-32768,-32768,   -15,-32768,    53,-32768,    49,    52,-32768,
--32768,   -20,   -20,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,    86,    87,-32768
+-32768,-32768,-32768,    16,-32768,    13,-32768,-32768,-32768,-32768,
+-32768,-32768,    -9,    -8,    58,-32768,-32768,-32768,   -19,-32768,
+    -8,-32768,    47,   -14,    13,    42,    45,-32768,     5,    49,
+    50,-32768,-32768,    52,    -8,    64,    65,    36,-32768,-32768,
+-32768,-32768,-32768,-32768,   -14,-32768,    55,-32768,    49,    56,
+-32768,-32768,   -20,   -20,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,    86,    87,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,    82,    71,-32768,-32768,-32768,    -6,    28,    -4,    14,
--32768,-32768,    -3,   -87,   -22,-32768,    -2,-32768,-32768,-32768,
-    11,-32768,-32768,    -8,-32768,    56,-32768,-32768,    57,-32768,
-     9,-32768,-32768,-32768,-32768,    41,-32768,   -11,-32768,   -18,
-     7,   -10
+-32768,    83,    72,-32768,-32768,-32768,    -6,   -18,    -4,    17,
+-32768,-32768,    -2,   -87,   -23,-32768,    -1,-32768,-32768,-32768,
+    14,-32768,-32768,    -5,-32768,    59,-32768,-32768,    51,-32768,
+     7,-32768,-32768,-32768,-32768,    44,-32768,   -11,-32768,   -21,
+     8,   -10
 };
 
 
-#define        YYLAST          113
+#define        YYLAST          114
 
 
 static const short yytable[] = {    43,
-    37,    51,    55,    56,   108,    59,   112,    47,     1,     2,
-     4,    94,    62,    63,    64,    65,    66,    67,    68,    69,
-    70,    94,    95,    96,    71,    97,   125,    42,    42,   110,
-   111,    31,    32,    33,    34,    35,    36,    86,    51,     6,
-    29,    90,     7,     8,     9,    10,    94,    59,    96,    38,
-    97,    96,    11,    97,    12,    13,    14,    15,    16,    78,
-    79,    80,    81,    82,    42,    44,    61,    83,    84,    89,
-    91,    93,   105,   104,   108,    95,   117,   122,    51,   119,
-   107,   123,   127,   128,   124,   134,   135,    30,    60,   101,
-   115,   126,   116,   103,   121,   120,   118,   106,    92,   109,
-     0,    87,     0,     0,   132,    88,     0,     0,     0,     0,
-     0,   131,   131
+    37,    51,    55,    56,   108,    59,   113,    47,     7,     8,
+     9,    10,    94,    78,    79,    80,    81,    82,    11,     4,
+    12,    13,    14,    15,    16,     1,     2,   126,    42,    42,
+   110,   111,   112,    96,     6,    97,    29,    86,    51,    38,
+    42,    90,    94,    95,    96,    44,    97,    59,    62,    63,
+    64,    65,    66,    67,    68,    69,    70,    61,    83,    89,
+    84,    71,    31,    32,    33,    34,    35,    36,    94,    91,
+    96,   108,    97,   104,    93,   105,   118,    95,    51,   120,
+   107,   123,   124,   125,   128,   135,   136,   129,    30,    60,
+   116,   127,   101,   117,   122,   106,   103,   119,   121,    88,
+   109,    92,   133,     0,    87,     0,     0,     0,     0,     0,
+     0,     0,   132,   132
 };
 
 static const short yycheck[] = {    10,
-     7,    12,    14,    15,    25,    16,    94,    27,     5,     6,
-    48,    27,    36,    37,    38,    39,    40,    41,    42,    43,
-    44,    27,    28,    29,    48,    31,   114,    48,    48,    45,
-    46,    11,    12,    13,    14,    15,    16,    44,    49,     5,
-     4,    53,     7,     8,     9,    10,    27,    58,    29,    48,
-    31,    29,    17,    31,    19,    20,    21,    22,    23,    32,
-    33,    34,    35,    36,    48,    48,     4,    35,    18,    26,
-    24,    18,    18,    84,    25,    28,    32,    18,    89,    31,
-    91,    18,    30,    32,    47,     0,     0,     6,    18,    76,
-    95,   114,    96,    83,   105,   104,    99,    89,    58,    93,
-    -1,    46,    -1,    -1,   123,    49,    -1,    -1,    -1,    -1,
-    -1,   122,   123
+     7,    12,    14,    15,    25,    16,    94,    27,     7,     8,
+     9,    10,    27,    32,    33,    34,    35,    36,    17,    49,
+    19,    20,    21,    22,    23,     5,     6,   115,    49,    49,
+    45,    46,    47,    29,     5,    31,     4,    44,    49,    49,
+    49,    53,    27,    28,    29,    49,    31,    58,    36,    37,
+    38,    39,    40,    41,    42,    43,    44,     4,    35,    26,
+    18,    49,    11,    12,    13,    14,    15,    16,    27,    24,
+    29,    25,    31,    84,    18,    18,    32,    28,    89,    31,
+    91,    18,    18,    48,    30,     0,     0,    32,     6,    18,
+    95,   115,    76,    96,   105,    89,    83,    99,   104,    49,
+    93,    58,   124,    -1,    46,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   123,   124
 };
 #define YYPURE 1
 
@@ -1056,127 +1058,127 @@ case 35:
 { yyval.qtyp = yyvsp[0].qtyp; ;
     break;}
 case 36:
-{ yyval.ctyp = ctype_adjustPointers (yyvsp[0].count, ctype_unknown); ;
+{ yyval.ctyp = ctype_adjustPointers (yyvsp[0].pointers, ctype_unknown); ;
     break;}
 case 38:
-{ yyval.ctyp = ctype_adjustPointers (yyvsp[-1].count, yyvsp[0].ctyp); ;
+{ yyval.ctyp = ctype_adjustPointers (yyvsp[-1].pointers, yyvsp[0].ctyp); ;
     break;}
 case 39:
-{ yyval.count = 1; ;
+{ yyval.pointers = pointers_createMt (yyvsp[0].tok); ;
     break;}
 case 40:
-{ yyval.count = 1; ;
+{ yyval.pointers = pointers_createModsMt (yyvsp[-1].tok, yyvsp[0].quals); ;
     break;}
 case 41:
-{ yyval.count = 1 + yyvsp[0].count; ;
+{ yyval.pointers = pointers_extend (pointers_createMt (yyvsp[-1].tok), yyvsp[0].pointers); ;
     break;}
 case 42:
-{ yyval.count = 1 + yyvsp[0].count; ;
+{ yyval.pointers = pointers_extend (pointers_createModsMt (yyvsp[-2].tok, yyvsp[-1].quals), yyvsp[0].pointers); ;
     break;}
 case 43:
-{ /* ignored for now */; ;
+{ yyval.qual = qual_createConst (); ;
     break;}
 case 44:
-{ ; ;
+{ yyval.qual = qual_createVolatile (); ;
     break;}
 case 45:
-{ ; ;
+{ yyval.qual = qual_createRestrict (); ;
     break;}
 case 46:
-{ ; ;
+{ yyval.quals = qualList_single (yyvsp[0].qual); ;
     break;}
 case 47:
-{ yyval.ctyp = ctype_expectFunction (yyvsp[-1].ctyp); ;
+{ yyval.quals = qualList_add (yyvsp[-1].quals, yyvsp[0].qual); ;
     break;}
 case 48:
-{ yyval.ctyp = ctype_makeArray (ctype_unknown); ;
+{ yyval.ctyp = ctype_expectFunction (yyvsp[-1].ctyp); ;
     break;}
 case 49:
-{ yyval.ctyp = ctype_makeArray (yyvsp[-2].ctyp); ;
+{ yyval.ctyp = ctype_makeArray (ctype_unknown); ;
     break;}
 case 50:
-{ yyval.ctyp = ctype_char; ;
+{ yyval.ctyp = ctype_makeArray (yyvsp[-2].ctyp); ;
     break;}
 case 51:
-{ yyval.ctyp = ctype_int; ;
+{ yyval.ctyp = ctype_char; ;
     break;}
 case 52:
-{ yyval.ctyp = ctype_float; ;
+{ yyval.ctyp = ctype_int; ;
     break;}
 case 53:
-{ yyval.ctyp = ctype_double; ;
+{ yyval.ctyp = ctype_float; ;
     break;}
 case 54:
-{ yyval.ctyp = ctype_void; ;
+{ yyval.ctyp = ctype_double; ;
     break;}
 case 55:
-{ yyval.ctyp = ctype_unknown; ;
+{ yyval.ctyp = ctype_void; ;
     break;}
 case 56:
-{ yyval.ctyp = ctype_anyintegral; ;
+{ yyval.ctyp = ctype_unknown; ;
     break;}
 case 57:
-{ yyval.ctyp = ctype_unsignedintegral; ;
+{ yyval.ctyp = ctype_anyintegral; ;
     break;}
 case 58:
-{ yyval.ctyp = ctype_signedintegral; ;
+{ yyval.ctyp = ctype_unsignedintegral; ;
     break;}
-case 60:
-{ yyval.ctyp = mtscanner_lookupType (yyvsp[0].tok); ;
+case 59:
+{ yyval.ctyp = ctype_signedintegral; ;
     break;}
 case 61:
-{ yyval.mtvalues = mtValuesNode_create (yyvsp[0].cstringlist); ;
+{ yyval.ctyp = mtscanner_lookupType (yyvsp[0].tok); ;
     break;}
 case 62:
-{ yyval.cstringlist = cstringList_single (mttok_getText (yyvsp[0].tok)); ;
+{ yyval.mtvalues = mtValuesNode_create (yyvsp[0].cstringlist); ;
     break;}
 case 63:
-{ yyval.cstringlist = cstringList_prepend (yyvsp[0].cstringlist, mttok_getText (yyvsp[-2].tok)); ;
+{ yyval.cstringlist = cstringList_single (mttok_getText (yyvsp[0].tok)); ;
     break;}
 case 64:
-{ yyval.tok = yyvsp[0].tok; ;
+{ yyval.cstringlist = cstringList_prepend (yyvsp[0].cstringlist, mttok_getText (yyvsp[-2].tok)); ;
     break;}
 case 65:
-{ yyval.mtdefaults = mtDefaultsNode_create (yyvsp[-1].tok, yyvsp[0].mtdeflist); ;
+{ yyval.tok = yyvsp[0].tok; ;
     break;}
 case 66:
-{ yyval.mtdeflist = mtDefaultsDeclList_single (mtDefaultsDecl_create (yyvsp[-2].mtcontext, yyvsp[0].tok)); ;
+{ yyval.mtdefaults = mtDefaultsNode_create (yyvsp[-1].tok, yyvsp[0].mtdeflist); ;
     break;}
 case 67:
-{ yyval.mtdeflist = mtDefaultsDeclList_prepend (yyvsp[0].mtdeflist, mtDefaultsDecl_create (yyvsp[-3].mtcontext, yyvsp[-1].tok)); ;
+{ yyval.mtdeflist = mtDefaultsDeclList_single (mtDefaultsDecl_create (yyvsp[-2].mtcontext, yyvsp[0].tok)); ;
     break;}
 case 68:
-{ yyval.mtannotations = mtAnnotationsNode_create (yyvsp[0].mtannotlist); ;
+{ yyval.mtdeflist = mtDefaultsDeclList_prepend (yyvsp[0].mtdeflist, mtDefaultsDecl_create (yyvsp[-3].mtcontext, yyvsp[-1].tok)); ;
     break;}
 case 69:
-{ yyval.mtannotlist = mtAnnotationList_single (yyvsp[0].mtannotdecl); ;
+{ yyval.mtannotations = mtAnnotationsNode_create (yyvsp[0].mtannotlist); ;
     break;}
 case 70:
-{ yyval.mtannotlist = mtAnnotationList_prepend (yyvsp[0].mtannotlist, yyvsp[-1].mtannotdecl); ;
+{ yyval.mtannotlist = mtAnnotationList_single (yyvsp[0].mtannotdecl); ;
     break;}
 case 71:
-{ yyval.mtannotdecl = mtAnnotationDecl_create (yyvsp[-3].tok, yyvsp[-2].mtcontext, yyvsp[0].tok); ;
+{ yyval.mtannotlist = mtAnnotationList_prepend (yyvsp[0].mtannotlist, yyvsp[-1].mtannotdecl); ;
     break;}
 case 72:
-{ yyval.mtmerge = mtMergeNode_create (yyvsp[0].mtmergeclauselist); ;
+{ yyval.mtannotdecl = mtAnnotationDecl_create (yyvsp[-3].tok, yyvsp[-2].mtcontext, yyvsp[0].tok); ;
     break;}
 case 73:
-{ yyval.mtmergeclauselist = mtMergeClauseList_single (yyvsp[0].mtmergeclause); ;
+{ yyval.mtmerge = mtMergeNode_create (yyvsp[0].mtmergeclauselist); ;
     break;}
 case 74:
-{ yyval.mtmergeclauselist = mtMergeClauseList_prepend (yyvsp[0].mtmergeclauselist, yyvsp[-1].mtmergeclause); ;
+{ yyval.mtmergeclauselist = mtMergeClauseList_single (yyvsp[0].mtmergeclause); ;
     break;}
 case 75:
-{ yyval.mtmergeclause = mtMergeClause_create (yyvsp[-4].mtmergeitem, yyvsp[-2].mtmergeitem, yyvsp[0].mttransferaction); ;
+{ yyval.mtmergeclauselist = mtMergeClauseList_prepend (yyvsp[0].mtmergeclauselist, yyvsp[-1].mtmergeclause); ;
     break;}
 case 76:
-{ yyval.mtmergeitem = mtMergeItem_createValue (yyvsp[0].tok); ;
+{ yyval.mtmergeclause = mtMergeClause_create (yyvsp[-4].mtmergeitem, yyvsp[-2].mtmergeitem, yyvsp[0].mttransferaction); ;
     break;}
 case 77:
-{ yyval.mtmergeitem = mtMergeItem_createStar (yyvsp[0].tok); ;
+{ yyval.mtmergeitem = mtMergeItem_createValue (yyvsp[0].tok); ;
     break;}
 case 78:
-{ yyval.mttransferclauselist = yyvsp[0].mttransferclauselist; ;
+{ yyval.mtmergeitem = mtMergeItem_createStar (yyvsp[0].tok); ;
     break;}
 case 79:
 { yyval.mttransferclauselist = yyvsp[0].mttransferclauselist; ;
@@ -1185,36 +1187,39 @@ case 80:
 { yyval.mttransferclauselist = yyvsp[0].mttransferclauselist; ;
     break;}
 case 81:
-{ yyval.mtlosereferencelist = yyvsp[0].mtlosereferencelist; ;
+{ yyval.mttransferclauselist = yyvsp[0].mttransferclauselist; ;
     break;}
 case 82:
-{ yyval.mtlosereferencelist = mtLoseReferenceList_single (yyvsp[0].mtlosereference); ;
+{ yyval.mtlosereferencelist = yyvsp[0].mtlosereferencelist; ;
     break;}
 case 83:
-{ yyval.mtlosereferencelist = mtLoseReferenceList_prepend (yyvsp[0].mtlosereferencelist, yyvsp[-1].mtlosereference); ;
+{ yyval.mtlosereferencelist = mtLoseReferenceList_single (yyvsp[0].mtlosereference); ;
     break;}
 case 84:
-{ yyval.mtlosereference = mtLoseReference_create (yyvsp[-2].tok, yyvsp[0].mttransferaction); ;
+{ yyval.mtlosereferencelist = mtLoseReferenceList_prepend (yyvsp[0].mtlosereferencelist, yyvsp[-1].mtlosereference); ;
     break;}
 case 85:
-{ yyval.mttransferclauselist = mtTransferClauseList_single (yyvsp[0].mttransferclause); ;
+{ yyval.mtlosereference = mtLoseReference_create (yyvsp[-2].tok, yyvsp[0].mttransferaction); ;
     break;}
 case 86:
-{ yyval.mttransferclauselist = mtTransferClauseList_prepend (yyvsp[0].mttransferclauselist, yyvsp[-1].mttransferclause); ;
+{ yyval.mttransferclauselist = mtTransferClauseList_single (yyvsp[0].mttransferclause); ;
     break;}
 case 87:
-{ yyval.mttransferclause = mtTransferClause_create (yyvsp[-4].tok, yyvsp[-2].tok, yyvsp[0].mttransferaction); ;
+{ yyval.mttransferclauselist = mtTransferClauseList_prepend (yyvsp[0].mttransferclauselist, yyvsp[-1].mttransferclause); ;
     break;}
 case 88:
-{ yyval.mttransferaction = mtTransferAction_createValue (yyvsp[0].tok); ;
+{ yyval.mttransferclause = mtTransferClause_create (yyvsp[-4].tok, yyvsp[-2].tok, yyvsp[0].mttransferaction); ;
     break;}
 case 89:
-{ yyval.mttransferaction = yyvsp[0].mttransferaction; ;
+{ yyval.mttransferaction = mtTransferAction_createValue (yyvsp[0].tok); ;
     break;}
 case 90:
-{ yyval.mttransferaction = mtTransferAction_createError (yyvsp[0].tok); ;
+{ yyval.mttransferaction = yyvsp[0].mttransferaction; ;
     break;}
 case 91:
+{ yyval.mttransferaction = mtTransferAction_createError (yyvsp[0].tok); ;
+    break;}
+case 92:
 { yyval.mttransferaction = mtTransferAction_createErrorMessage (yyvsp[0].tok); ;
     break;}
 }
index ad56cf6129a753b589623c07b06693af880e66d3..8c80b9a2c5c96dc54e523c2f537a0e525fbcfa22 100644 (file)
 #define        MT_SIGNEDINTEGRALTYPE   298
 #define        MT_CONST        299
 #define        MT_VOLATILE     300
-#define        MT_STRINGLIT    301
-#define        MT_IDENT        302
+#define        MT_RESTRICT     301
+#define        MT_STRINGLIT    302
+#define        MT_IDENT        303
 
 
 
@@ -160,11 +161,12 @@ typedef union {
   mtTransferAction mttransferaction;
   mtLoseReferenceList mtlosereferencelist;
   mtLoseReference mtlosereference;
-
+  pointers pointers;
   /*@only@*/ cstringList cstringlist;
   ctype ctyp;
   /*@only@*/ qtype qtyp;
-  int count;
+  qual qual;
+  qualList quals;
 } YYSTYPE;
 #ifndef YYDEBUG
 #define YYDEBUG 1
@@ -180,11 +182,11 @@ typedef union {
 
 
 
-#define        YYFINAL         135
+#define        YYFINAL         136
 #define        YYFLAG          -32768
-#define        YYNTBASE        49
+#define        YYNTBASE        50
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 302 ? yytranslate[x] : 92)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 303 ? yytranslate[x] : 93)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -217,7 +219,7 @@ static const char yytranslate[] = {     0,
     17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
     37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48
+    47,    48,    49
 };
 
 #if YYDEBUG != 0
@@ -226,56 +228,56 @@ static const short yyprhs[] = {     0,
     25,    27,    29,    31,    33,    35,    37,    39,    42,    43,
     45,    48,    51,    54,    57,    60,    63,    64,    66,    68,
     71,    73,    77,    80,    81,    83,    85,    87,    90,    92,
-    95,    98,   102,   104,   106,   108,   111,   115,   118,   122,
+    95,    98,   102,   104,   106,   108,   110,   113,   117,   120,
    124,   126,   128,   130,   132,   134,   136,   138,   140,   142,
-   144,   147,   149,   153,   156,   159,   163,   168,   171,   173,
-   176,   181,   184,   186,   189,   195,   197,   199,   202,   205,
-   208,   211,   213,   216,   220,   222,   225,   231,   233,   235,
-   237,   240
+   144,   146,   149,   151,   155,   158,   161,   165,   170,   173,
+   175,   178,   183,   186,   188,   191,   197,   199,   201,   204,
+   207,   210,   213,   215,   218,   222,   224,   227,   233,   235,
+   237,   239,   242
 };
 
 static const short yyrhs[] = {    -1,
-    50,     0,     5,    51,     4,     0,     6,     5,    51,     4,
-     0,    48,    52,     0,     0,    53,    52,     0,    54,     0,
-    69,     0,    72,     0,    71,     0,    74,     0,    77,     0,
-    83,     0,    81,     0,    82,     0,    84,     0,     7,    56,
-     0,     0,    56,     0,    12,    57,     0,    11,    57,     0,
-    13,    57,     0,    14,    57,     0,    15,    57,     0,    16,
-    57,     0,     0,    58,     0,    59,     0,    59,    62,     0,
-    60,     0,    59,    28,    58,     0,    67,    61,     0,     0,
-    59,     0,    63,     0,    66,     0,    63,    66,     0,    27,
-     0,    27,    65,     0,    27,    63,     0,    27,    65,    63,
-     0,    45,     0,    46,     0,    64,     0,    65,    64,     0,
-    29,    62,    30,     0,    31,    32,     0,    66,    31,    32,
-     0,    36,     0,    37,     0,    38,     0,    39,     0,    40,
-     0,    41,     0,    42,     0,    43,     0,    44,     0,    68,
-     0,    48,     0,     8,    70,     0,    48,     0,    48,    35,
-    70,     0,    10,    91,     0,     9,    73,     0,    56,    18,
-    91,     0,    56,    18,    91,    73,     0,    17,    75,     0,
-    76,     0,    76,    75,     0,    48,    55,    18,    91,     0,
-    19,    78,     0,    79,     0,    79,    78,     0,    80,    26,
-    80,    18,    89,     0,    91,     0,    27,     0,    21,    87,
-     0,    22,    87,     0,    20,    87,     0,    23,    85,     0,
-    86,     0,    86,    85,     0,    91,    18,    90,     0,    88,
-     0,    88,    87,     0,    91,    24,    91,    18,    89,     0,
-    91,     0,    90,     0,    25,     0,    25,    47,     0,    48,
-     0
+    51,     0,     5,    52,     4,     0,     6,     5,    52,     4,
+     0,    49,    53,     0,     0,    54,    53,     0,    55,     0,
+    70,     0,    73,     0,    72,     0,    75,     0,    78,     0,
+    84,     0,    82,     0,    83,     0,    85,     0,     7,    57,
+     0,     0,    57,     0,    12,    58,     0,    11,    58,     0,
+    13,    58,     0,    14,    58,     0,    15,    58,     0,    16,
+    58,     0,     0,    59,     0,    60,     0,    60,    63,     0,
+    61,     0,    60,    28,    59,     0,    68,    62,     0,     0,
+    60,     0,    64,     0,    67,     0,    64,    67,     0,    27,
+     0,    27,    66,     0,    27,    64,     0,    27,    66,    64,
+     0,    45,     0,    46,     0,    47,     0,    65,     0,    66,
+    65,     0,    29,    63,    30,     0,    31,    32,     0,    67,
+    31,    32,     0,    36,     0,    37,     0,    38,     0,    39,
+     0,    40,     0,    41,     0,    42,     0,    43,     0,    44,
+     0,    69,     0,    49,     0,     8,    71,     0,    49,     0,
+    49,    35,    71,     0,    10,    92,     0,     9,    74,     0,
+    57,    18,    92,     0,    57,    18,    92,    74,     0,    17,
+    76,     0,    77,     0,    77,    76,     0,    49,    56,    18,
+    92,     0,    19,    79,     0,    80,     0,    80,    79,     0,
+    81,    26,    81,    18,    90,     0,    92,     0,    27,     0,
+    21,    88,     0,    22,    88,     0,    20,    88,     0,    23,
+    86,     0,    87,     0,    87,    86,     0,    92,    18,    91,
+     0,    89,     0,    89,    88,     0,    92,    24,    92,    18,
+    90,     0,    92,     0,    91,     0,    25,     0,    25,    48,
+     0,    49,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   158,   159,   162,   164,   168,   172,   173,   177,   178,   179,
-   180,   181,   182,   183,   184,   185,   186,   189,   193,   194,
-   197,   198,   199,   200,   201,   202,   209,   210,   213,   214,
-   217,   218,   222,   225,   226,   230,   231,   232,   235,   236,
-   237,   238,   241,   242,   245,   246,   249,   250,   251,   258,
-   259,   260,   261,   262,   263,   264,   265,   266,   267,   273,
-   276,   279,   280,   284,   287,   290,   292,   296,   299,   300,
-   304,   308,   311,   312,   315,   319,   320,   323,   326,   329,
-   332,   335,   336,   339,   342,   343,   346,   350,   351,   354,
-   355,   358
+   160,   161,   164,   166,   170,   174,   175,   179,   180,   181,
+   182,   183,   184,   185,   186,   187,   188,   191,   195,   196,
+   199,   200,   201,   202,   203,   204,   211,   212,   215,   216,
+   219,   220,   224,   227,   228,   232,   233,   234,   237,   238,
+   239,   240,   243,   244,   245,   248,   249,   252,   253,   254,
+   261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+   276,   279,   282,   283,   287,   290,   293,   295,   299,   302,
+   303,   307,   311,   314,   315,   318,   322,   323,   326,   329,
+   332,   335,   338,   339,   342,   345,   346,   349,   353,   354,
+   357,   358,   361
 };
 #endif
 
@@ -289,12 +291,12 @@ static const char * const yytname[] = {   "$","error","$undefined.","MT_BADTOK",
 "MT_LOSEREFERENCE","MT_AS","MT_ERROR","MT_PLUS","MT_STAR","MT_BAR","MT_LPAREN",
 "MT_RPAREN","MT_LBRACKET","MT_RBRACKET","MT_LBRACE","MT_RBRACE","MT_COMMA","MT_CHAR",
 "MT_INT","MT_FLOAT","MT_DOUBLE","MT_VOID","MT_ANYTYPE","MT_INTEGRALTYPE","MT_UNSIGNEDINTEGRALTYPE",
-"MT_SIGNEDINTEGRALTYPE","MT_CONST","MT_VOLATILE","MT_STRINGLIT","MT_IDENT","file",
-"mtsDeclaration","declarationNode","declarationPieces","declarationPiece","contextDeclaration",
-"optContextSelection","contextSelection","optType","typeExpression","completeType",
-"completeTypeAux","optCompleteType","abstractDecl","pointers","innerMods","innerModsList",
-"abstractDeclBase","typeSpecifier","typeName","valuesDeclaration","valuesList",
-"defaultNode","defaultsDeclaration","defaultDeclarationList","annotationsDeclaration",
+"MT_SIGNEDINTEGRALTYPE","MT_CONST","MT_VOLATILE","MT_RESTRICT","MT_STRINGLIT",
+"MT_IDENT","file","mtsDeclaration","declarationNode","declarationPieces","declarationPiece",
+"contextDeclaration","optContextSelection","contextSelection","optType","typeExpression",
+"completeType","completeTypeAux","optCompleteType","abstractDecl","pointers",
+"innerMods","innerModsList","abstractDeclBase","typeSpecifier","typeName","valuesDeclaration",
+"valuesList","defaultNode","defaultsDeclaration","defaultDeclarationList","annotationsDeclaration",
 "annotationsDeclarationList","annotationDeclaration","mergeDeclaration","mergeClauses",
 "mergeClause","mergeItem","preconditionsDeclaration","postconditionsDeclaration",
 "transfersDeclaration","loseReferenceDeclaration","lostClauses","lostClause",
@@ -303,16 +305,16 @@ static const char * const yytname[] = {   "$","error","$undefined.","MT_BADTOK",
 #endif
 
 static const short yyr1[] = {     0,
-    49,    49,    50,    50,    51,    52,    52,    53,    53,    53,
-    53,    53,    53,    53,    53,    53,    53,    54,    55,    55,
-    56,    56,    56,    56,    56,    56,    57,    57,    58,    58,
-    59,    59,    60,    61,    61,    62,    62,    62,    63,    63,
-    63,    63,    64,    64,    65,    65,    66,    66,    66,    67,
-    67,    67,    67,    67,    67,    67,    67,    67,    67,    68,
-    69,    70,    70,    71,    72,    73,    73,    74,    75,    75,
-    76,    77,    78,    78,    79,    80,    80,    81,    82,    83,
-    84,    85,    85,    86,    87,    87,    88,    89,    89,    90,
-    90,    91
+    50,    50,    51,    51,    52,    53,    53,    54,    54,    54,
+    54,    54,    54,    54,    54,    54,    54,    55,    56,    56,
+    57,    57,    57,    57,    57,    57,    58,    58,    59,    59,
+    60,    60,    61,    62,    62,    63,    63,    63,    64,    64,
+    64,    64,    65,    65,    65,    66,    66,    67,    67,    67,
+    68,    68,    68,    68,    68,    68,    68,    68,    68,    68,
+    69,    70,    71,    71,    72,    73,    74,    74,    75,    76,
+    76,    77,    78,    79,    79,    80,    81,    81,    82,    83,
+    84,    85,    86,    86,    87,    88,    88,    89,    90,    90,
+    91,    91,    92
 };
 
 static const short yyr2[] = {     0,
@@ -320,96 +322,96 @@ static const short yyr2[] = {     0,
      1,     1,     1,     1,     1,     1,     1,     2,     0,     1,
      2,     2,     2,     2,     2,     2,     0,     1,     1,     2,
      1,     3,     2,     0,     1,     1,     1,     2,     1,     2,
-     2,     3,     1,     1,     1,     2,     3,     2,     3,     1,
+     2,     3,     1,     1,     1,     1,     2,     3,     2,     3,
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     2,     1,     3,     2,     2,     3,     4,     2,     1,     2,
-     4,     2,     1,     2,     5,     1,     1,     2,     2,     2,
-     2,     1,     2,     3,     1,     2,     5,     1,     1,     1,
-     2,     1
+     1,     2,     1,     3,     2,     2,     3,     4,     2,     1,
+     2,     4,     2,     1,     2,     5,     1,     1,     2,     2,
+     2,     2,     1,     2,     3,     1,     2,     5,     1,     1,
+     1,     2,     1
 };
 
 static const short yydefact[] = {     1,
      0,     0,     2,     6,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     5,     6,     8,     9,
     11,    10,    12,    13,    15,    16,    14,    17,     3,     0,
-    27,    27,    27,    27,    27,    27,    18,    62,    61,     0,
-    65,    92,    64,    19,    68,    69,    77,    72,    73,     0,
-    76,    80,    85,     0,    78,    79,    81,    82,     0,     7,
-     4,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-    60,    22,    28,    29,    31,    34,    59,    21,    23,    24,
-    25,    26,     0,     0,     0,    20,    70,    74,     0,    86,
-     0,    83,     0,    39,     0,     0,     0,    30,    36,    37,
-    35,    33,    63,    66,     0,     0,     0,    90,    84,    43,
-    44,    41,    45,    40,    32,     0,    48,    38,     0,    67,
-    71,     0,     0,    91,    42,    46,    47,    49,    75,    89,
-    88,    87,     0,     0,     0
+    27,    27,    27,    27,    27,    27,    18,    63,    62,     0,
+    66,    93,    65,    19,    69,    70,    78,    73,    74,     0,
+    77,    81,    86,     0,    79,    80,    82,    83,     0,     7,
+     4,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+    61,    22,    28,    29,    31,    34,    60,    21,    23,    24,
+    25,    26,     0,     0,     0,    20,    71,    75,     0,    87,
+     0,    84,     0,    39,     0,     0,     0,    30,    36,    37,
+    35,    33,    64,    67,     0,     0,     0,    91,    85,    43,
+    44,    45,    41,    46,    40,    32,     0,    49,    38,     0,
+    68,    72,     0,     0,    92,    42,    47,    48,    50,    76,
+    90,    89,    88,     0,     0,     0
 };
 
-static const short yydefgoto[] = {   133,
+static const short yydefgoto[] = {   134,
      3,     5,    17,    18,    19,    85,    40,    72,    73,    74,
-    75,   102,    98,    99,   113,   114,   100,    76,    77,    20,
+    75,   102,    98,    99,   114,   115,   100,    76,    77,    20,
     39,    21,    22,    41,    23,    45,    46,    24,    48,    49,
-    50,    25,    26,    27,    28,    57,    58,    52,    53,   129,
-   130,    54
+    50,    25,    26,    27,    28,    57,    58,    52,    53,   130,
+   131,    54
 };
 
-static const short yypact[] = {     4,
-   -37,    35,-32768,    36,    37,   -37,    21,     2,    21,    17,
-    18,   -19,    17,    17,    17,    17,-32768,    36,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    63,
-   -23,   -23,   -23,   -23,   -23,   -23,-32768,    33,-32768,    51,
--32768,-32768,-32768,    21,-32768,    18,-32768,-32768,   -19,    44,
--32768,-32768,    17,    47,-32768,-32768,-32768,    17,    54,-32768,
+static const short yypact[] = {    21,
+   -29,    30,-32768,     2,    33,   -29,    52,    -9,    52,    -8,
+    -3,   -19,    -8,    -8,    -8,    -8,-32768,     2,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    54,
+    13,    13,    13,    13,    13,    13,-32768,    24,-32768,    43,
+-32768,-32768,-32768,    52,-32768,    -3,-32768,-32768,   -19,    34,
+-32768,-32768,    -8,    46,-32768,-32768,-32768,    -8,    57,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,    -5,-32768,   -23,-32768,-32768,-32768,-32768,
--32768,-32768,     2,    17,    55,-32768,-32768,-32768,   -19,-32768,
-    17,-32768,    50,   -15,   -23,    20,    45,-32768,    23,    49,
-    48,-32768,-32768,    21,    17,    60,    64,    38,-32768,-32768,
--32768,-32768,-32768,   -15,-32768,    53,-32768,    49,    52,-32768,
--32768,   -20,   -20,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,    86,    87,-32768
+-32768,-32768,-32768,    16,-32768,    13,-32768,-32768,-32768,-32768,
+-32768,-32768,    -9,    -8,    58,-32768,-32768,-32768,   -19,-32768,
+    -8,-32768,    47,   -14,    13,    42,    45,-32768,     5,    49,
+    50,-32768,-32768,    52,    -8,    64,    65,    36,-32768,-32768,
+-32768,-32768,-32768,-32768,   -14,-32768,    55,-32768,    49,    56,
+-32768,-32768,   -20,   -20,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,    86,    87,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,    82,    71,-32768,-32768,-32768,    -6,    28,    -4,    14,
--32768,-32768,    -3,   -87,   -22,-32768,    -2,-32768,-32768,-32768,
-    11,-32768,-32768,    -8,-32768,    56,-32768,-32768,    57,-32768,
-     9,-32768,-32768,-32768,-32768,    41,-32768,   -11,-32768,   -18,
-     7,   -10
+-32768,    83,    72,-32768,-32768,-32768,    -6,   -18,    -4,    17,
+-32768,-32768,    -2,   -87,   -23,-32768,    -1,-32768,-32768,-32768,
+    14,-32768,-32768,    -5,-32768,    59,-32768,-32768,    51,-32768,
+     7,-32768,-32768,-32768,-32768,    44,-32768,   -11,-32768,   -21,
+     8,   -10
 };
 
 
-#define        YYLAST          113
+#define        YYLAST          114
 
 
 static const short yytable[] = {    43,
-    37,    51,    55,    56,   108,    59,   112,    47,     1,     2,
-     4,    94,    62,    63,    64,    65,    66,    67,    68,    69,
-    70,    94,    95,    96,    71,    97,   125,    42,    42,   110,
-   111,    31,    32,    33,    34,    35,    36,    86,    51,     6,
-    29,    90,     7,     8,     9,    10,    94,    59,    96,    38,
-    97,    96,    11,    97,    12,    13,    14,    15,    16,    78,
-    79,    80,    81,    82,    42,    44,    61,    83,    84,    89,
-    91,    93,   105,   104,   108,    95,   117,   122,    51,   119,
-   107,   123,   127,   128,   124,   134,   135,    30,    60,   101,
-   115,   126,   116,   103,   121,   120,   118,   106,    92,   109,
-     0,    87,     0,     0,   132,    88,     0,     0,     0,     0,
-     0,   131,   131
+    37,    51,    55,    56,   108,    59,   113,    47,     7,     8,
+     9,    10,    94,    78,    79,    80,    81,    82,    11,     4,
+    12,    13,    14,    15,    16,     1,     2,   126,    42,    42,
+   110,   111,   112,    96,     6,    97,    29,    86,    51,    38,
+    42,    90,    94,    95,    96,    44,    97,    59,    62,    63,
+    64,    65,    66,    67,    68,    69,    70,    61,    83,    89,
+    84,    71,    31,    32,    33,    34,    35,    36,    94,    91,
+    96,   108,    97,   104,    93,   105,   118,    95,    51,   120,
+   107,   123,   124,   125,   128,   135,   136,   129,    30,    60,
+   116,   127,   101,   117,   122,   106,   103,   119,   121,    88,
+   109,    92,   133,     0,    87,     0,     0,     0,     0,     0,
+     0,     0,   132,   132
 };
 
 static const short yycheck[] = {    10,
-     7,    12,    14,    15,    25,    16,    94,    27,     5,     6,
-    48,    27,    36,    37,    38,    39,    40,    41,    42,    43,
-    44,    27,    28,    29,    48,    31,   114,    48,    48,    45,
-    46,    11,    12,    13,    14,    15,    16,    44,    49,     5,
-     4,    53,     7,     8,     9,    10,    27,    58,    29,    48,
-    31,    29,    17,    31,    19,    20,    21,    22,    23,    32,
-    33,    34,    35,    36,    48,    48,     4,    35,    18,    26,
-    24,    18,    18,    84,    25,    28,    32,    18,    89,    31,
-    91,    18,    30,    32,    47,     0,     0,     6,    18,    76,
-    95,   114,    96,    83,   105,   104,    99,    89,    58,    93,
-    -1,    46,    -1,    -1,   123,    49,    -1,    -1,    -1,    -1,
-    -1,   122,   123
+     7,    12,    14,    15,    25,    16,    94,    27,     7,     8,
+     9,    10,    27,    32,    33,    34,    35,    36,    17,    49,
+    19,    20,    21,    22,    23,     5,     6,   115,    49,    49,
+    45,    46,    47,    29,     5,    31,     4,    44,    49,    49,
+    49,    53,    27,    28,    29,    49,    31,    58,    36,    37,
+    38,    39,    40,    41,    42,    43,    44,     4,    35,    26,
+    18,    49,    11,    12,    13,    14,    15,    16,    27,    24,
+    29,    25,    31,    84,    18,    18,    32,    28,    89,    31,
+    91,    18,    18,    48,    30,     0,     0,    32,     6,    18,
+    95,   115,    76,    96,   105,    89,    83,    99,   104,    49,
+    93,    58,   124,    -1,    46,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   123,   124
 };
 #define YYPURE 1
 
@@ -1056,127 +1058,127 @@ case 35:
 { yyval.qtyp = yyvsp[0].qtyp; ;
     break;}
 case 36:
-{ yyval.ctyp = ctype_adjustPointers (yyvsp[0].count, ctype_unknown); ;
+{ yyval.ctyp = ctype_adjustPointers (yyvsp[0].pointers, ctype_unknown); ;
     break;}
 case 38:
-{ yyval.ctyp = ctype_adjustPointers (yyvsp[-1].count, yyvsp[0].ctyp); ;
+{ yyval.ctyp = ctype_adjustPointers (yyvsp[-1].pointers, yyvsp[0].ctyp); ;
     break;}
 case 39:
-{ yyval.count = 1; ;
+{ yyval.pointers = pointers_createMt (yyvsp[0].tok); ;
     break;}
 case 40:
-{ yyval.count = 1; ;
+{ yyval.pointers = pointers_createModsMt (yyvsp[-1].tok, yyvsp[0].quals); ;
     break;}
 case 41:
-{ yyval.count = 1 + yyvsp[0].count; ;
+{ yyval.pointers = pointers_extend (pointers_createMt (yyvsp[-1].tok), yyvsp[0].pointers); ;
     break;}
 case 42:
-{ yyval.count = 1 + yyvsp[0].count; ;
+{ yyval.pointers = pointers_extend (pointers_createModsMt (yyvsp[-2].tok, yyvsp[-1].quals), yyvsp[0].pointers); ;
     break;}
 case 43:
-{ /* ignored for now */; ;
+{ yyval.qual = qual_createConst (); ;
     break;}
 case 44:
-{ ; ;
+{ yyval.qual = qual_createVolatile (); ;
     break;}
 case 45:
-{ ; ;
+{ yyval.qual = qual_createRestrict (); ;
     break;}
 case 46:
-{ ; ;
+{ yyval.quals = qualList_single (yyvsp[0].qual); ;
     break;}
 case 47:
-{ yyval.ctyp = ctype_expectFunction (yyvsp[-1].ctyp); ;
+{ yyval.quals = qualList_add (yyvsp[-1].quals, yyvsp[0].qual); ;
     break;}
 case 48:
-{ yyval.ctyp = ctype_makeArray (ctype_unknown); ;
+{ yyval.ctyp = ctype_expectFunction (yyvsp[-1].ctyp); ;
     break;}
 case 49:
-{ yyval.ctyp = ctype_makeArray (yyvsp[-2].ctyp); ;
+{ yyval.ctyp = ctype_makeArray (ctype_unknown); ;
     break;}
 case 50:
-{ yyval.ctyp = ctype_char; ;
+{ yyval.ctyp = ctype_makeArray (yyvsp[-2].ctyp); ;
     break;}
 case 51:
-{ yyval.ctyp = ctype_int; ;
+{ yyval.ctyp = ctype_char; ;
     break;}
 case 52:
-{ yyval.ctyp = ctype_float; ;
+{ yyval.ctyp = ctype_int; ;
     break;}
 case 53:
-{ yyval.ctyp = ctype_double; ;
+{ yyval.ctyp = ctype_float; ;
     break;}
 case 54:
-{ yyval.ctyp = ctype_void; ;
+{ yyval.ctyp = ctype_double; ;
     break;}
 case 55:
-{ yyval.ctyp = ctype_unknown; ;
+{ yyval.ctyp = ctype_void; ;
     break;}
 case 56:
-{ yyval.ctyp = ctype_anyintegral; ;
+{ yyval.ctyp = ctype_unknown; ;
     break;}
 case 57:
-{ yyval.ctyp = ctype_unsignedintegral; ;
+{ yyval.ctyp = ctype_anyintegral; ;
     break;}
 case 58:
-{ yyval.ctyp = ctype_signedintegral; ;
+{ yyval.ctyp = ctype_unsignedintegral; ;
     break;}
-case 60:
-{ yyval.ctyp = mtscanner_lookupType (yyvsp[0].tok); ;
+case 59:
+{ yyval.ctyp = ctype_signedintegral; ;
     break;}
 case 61:
-{ yyval.mtvalues = mtValuesNode_create (yyvsp[0].cstringlist); ;
+{ yyval.ctyp = mtscanner_lookupType (yyvsp[0].tok); ;
     break;}
 case 62:
-{ yyval.cstringlist = cstringList_single (mttok_getText (yyvsp[0].tok)); ;
+{ yyval.mtvalues = mtValuesNode_create (yyvsp[0].cstringlist); ;
     break;}
 case 63:
-{ yyval.cstringlist = cstringList_prepend (yyvsp[0].cstringlist, mttok_getText (yyvsp[-2].tok)); ;
+{ yyval.cstringlist = cstringList_single (mttok_getText (yyvsp[0].tok)); ;
     break;}
 case 64:
-{ yyval.tok = yyvsp[0].tok; ;
+{ yyval.cstringlist = cstringList_prepend (yyvsp[0].cstringlist, mttok_getText (yyvsp[-2].tok)); ;
     break;}
 case 65:
-{ yyval.mtdefaults = mtDefaultsNode_create (yyvsp[-1].tok, yyvsp[0].mtdeflist); ;
+{ yyval.tok = yyvsp[0].tok; ;
     break;}
 case 66:
-{ yyval.mtdeflist = mtDefaultsDeclList_single (mtDefaultsDecl_create (yyvsp[-2].mtcontext, yyvsp[0].tok)); ;
+{ yyval.mtdefaults = mtDefaultsNode_create (yyvsp[-1].tok, yyvsp[0].mtdeflist); ;
     break;}
 case 67:
-{ yyval.mtdeflist = mtDefaultsDeclList_prepend (yyvsp[0].mtdeflist, mtDefaultsDecl_create (yyvsp[-3].mtcontext, yyvsp[-1].tok)); ;
+{ yyval.mtdeflist = mtDefaultsDeclList_single (mtDefaultsDecl_create (yyvsp[-2].mtcontext, yyvsp[0].tok)); ;
     break;}
 case 68:
-{ yyval.mtannotations = mtAnnotationsNode_create (yyvsp[0].mtannotlist); ;
+{ yyval.mtdeflist = mtDefaultsDeclList_prepend (yyvsp[0].mtdeflist, mtDefaultsDecl_create (yyvsp[-3].mtcontext, yyvsp[-1].tok)); ;
     break;}
 case 69:
-{ yyval.mtannotlist = mtAnnotationList_single (yyvsp[0].mtannotdecl); ;
+{ yyval.mtannotations = mtAnnotationsNode_create (yyvsp[0].mtannotlist); ;
     break;}
 case 70:
-{ yyval.mtannotlist = mtAnnotationList_prepend (yyvsp[0].mtannotlist, yyvsp[-1].mtannotdecl); ;
+{ yyval.mtannotlist = mtAnnotationList_single (yyvsp[0].mtannotdecl); ;
     break;}
 case 71:
-{ yyval.mtannotdecl = mtAnnotationDecl_create (yyvsp[-3].tok, yyvsp[-2].mtcontext, yyvsp[0].tok); ;
+{ yyval.mtannotlist = mtAnnotationList_prepend (yyvsp[0].mtannotlist, yyvsp[-1].mtannotdecl); ;
     break;}
 case 72:
-{ yyval.mtmerge = mtMergeNode_create (yyvsp[0].mtmergeclauselist); ;
+{ yyval.mtannotdecl = mtAnnotationDecl_create (yyvsp[-3].tok, yyvsp[-2].mtcontext, yyvsp[0].tok); ;
     break;}
 case 73:
-{ yyval.mtmergeclauselist = mtMergeClauseList_single (yyvsp[0].mtmergeclause); ;
+{ yyval.mtmerge = mtMergeNode_create (yyvsp[0].mtmergeclauselist); ;
     break;}
 case 74:
-{ yyval.mtmergeclauselist = mtMergeClauseList_prepend (yyvsp[0].mtmergeclauselist, yyvsp[-1].mtmergeclause); ;
+{ yyval.mtmergeclauselist = mtMergeClauseList_single (yyvsp[0].mtmergeclause); ;
     break;}
 case 75:
-{ yyval.mtmergeclause = mtMergeClause_create (yyvsp[-4].mtmergeitem, yyvsp[-2].mtmergeitem, yyvsp[0].mttransferaction); ;
+{ yyval.mtmergeclauselist = mtMergeClauseList_prepend (yyvsp[0].mtmergeclauselist, yyvsp[-1].mtmergeclause); ;
     break;}
 case 76:
-{ yyval.mtmergeitem = mtMergeItem_createValue (yyvsp[0].tok); ;
+{ yyval.mtmergeclause = mtMergeClause_create (yyvsp[-4].mtmergeitem, yyvsp[-2].mtmergeitem, yyvsp[0].mttransferaction); ;
     break;}
 case 77:
-{ yyval.mtmergeitem = mtMergeItem_createStar (yyvsp[0].tok); ;
+{ yyval.mtmergeitem = mtMergeItem_createValue (yyvsp[0].tok); ;
     break;}
 case 78:
-{ yyval.mttransferclauselist = yyvsp[0].mttransferclauselist; ;
+{ yyval.mtmergeitem = mtMergeItem_createStar (yyvsp[0].tok); ;
     break;}
 case 79:
 { yyval.mttransferclauselist = yyvsp[0].mttransferclauselist; ;
@@ -1185,36 +1187,39 @@ case 80:
 { yyval.mttransferclauselist = yyvsp[0].mttransferclauselist; ;
     break;}
 case 81:
-{ yyval.mtlosereferencelist = yyvsp[0].mtlosereferencelist; ;
+{ yyval.mttransferclauselist = yyvsp[0].mttransferclauselist; ;
     break;}
 case 82:
-{ yyval.mtlosereferencelist = mtLoseReferenceList_single (yyvsp[0].mtlosereference); ;
+{ yyval.mtlosereferencelist = yyvsp[0].mtlosereferencelist; ;
     break;}
 case 83:
-{ yyval.mtlosereferencelist = mtLoseReferenceList_prepend (yyvsp[0].mtlosereferencelist, yyvsp[-1].mtlosereference); ;
+{ yyval.mtlosereferencelist = mtLoseReferenceList_single (yyvsp[0].mtlosereference); ;
     break;}
 case 84:
-{ yyval.mtlosereference = mtLoseReference_create (yyvsp[-2].tok, yyvsp[0].mttransferaction); ;
+{ yyval.mtlosereferencelist = mtLoseReferenceList_prepend (yyvsp[0].mtlosereferencelist, yyvsp[-1].mtlosereference); ;
     break;}
 case 85:
-{ yyval.mttransferclauselist = mtTransferClauseList_single (yyvsp[0].mttransferclause); ;
+{ yyval.mtlosereference = mtLoseReference_create (yyvsp[-2].tok, yyvsp[0].mttransferaction); ;
     break;}
 case 86:
-{ yyval.mttransferclauselist = mtTransferClauseList_prepend (yyvsp[0].mttransferclauselist, yyvsp[-1].mttransferclause); ;
+{ yyval.mttransferclauselist = mtTransferClauseList_single (yyvsp[0].mttransferclause); ;
     break;}
 case 87:
-{ yyval.mttransferclause = mtTransferClause_create (yyvsp[-4].tok, yyvsp[-2].tok, yyvsp[0].mttransferaction); ;
+{ yyval.mttransferclauselist = mtTransferClauseList_prepend (yyvsp[0].mttransferclauselist, yyvsp[-1].mttransferclause); ;
     break;}
 case 88:
-{ yyval.mttransferaction = mtTransferAction_createValue (yyvsp[0].tok); ;
+{ yyval.mttransferclause = mtTransferClause_create (yyvsp[-4].tok, yyvsp[-2].tok, yyvsp[0].mttransferaction); ;
     break;}
 case 89:
-{ yyval.mttransferaction = yyvsp[0].mttransferaction; ;
+{ yyval.mttransferaction = mtTransferAction_createValue (yyvsp[0].tok); ;
     break;}
 case 90:
-{ yyval.mttransferaction = mtTransferAction_createError (yyvsp[0].tok); ;
+{ yyval.mttransferaction = yyvsp[0].mttransferaction; ;
     break;}
 case 91:
+{ yyval.mttransferaction = mtTransferAction_createError (yyvsp[0].tok); ;
+    break;}
+case 92:
 { yyval.mttransferaction = mtTransferAction_createErrorMessage (yyvsp[0].tok); ;
     break;}
 }
index 4ccf1f9a9f258f7c757ef381f187fc797aea2dd4..11f91fbb7cd6e32030e4ceadcda7b9d692528851 100644 (file)
@@ -80,11 +80,12 @@ static void yyprint (/*FILE *p_file, int p_type, YYSTYPE p_value */);
   mtTransferAction mttransferaction;
   mtLoseReferenceList mtlosereferencelist;
   mtLoseReference mtlosereference;
-
+  pointers pointers;
   /*@only@*/ cstringList cstringlist;
   ctype ctyp;
   /*@only@*/ qtype qtyp;
-  int count;
+  qual qual;
+  qualList quals;
 }
 
 /* Don't forget to enter all tokens in mtscanner.c */
@@ -117,11 +118,11 @@ static void yyprint (/*FILE *p_file, int p_type, YYSTYPE p_value */);
 
 %token <tok> MT_CHAR MT_INT MT_FLOAT MT_DOUBLE MT_VOID  MT_ANYTYPE MT_INTEGRALTYPE MT_UNSIGNEDINTEGRALTYPE
 %token <tok> MT_SIGNEDINTEGRALTYPE 
-%token <tok> MT_CONST MT_VOLATILE
+%token <tok> MT_CONST MT_VOLATILE MT_RESTRICT
 %token <tok> MT_STRINGLIT
 %token <tok> MT_IDENT
 
-%type <count> pointers
+%type <pointers> pointers
 %type <ctyp> optType typeSpecifier typeName abstractDecl abstractDeclBase 
 %type <qtyp> typeExpression
 %type <qtyp> completeType completeTypeAux optCompleteType
@@ -148,7 +149,8 @@ static void yyprint (/*FILE *p_file, int p_type, YYSTYPE p_value */);
 %type <mtdecl> declarationNode
 %type <mtpieces> declarationPieces
 %type <tok> valueChoice
-
+%type <quals> innerModsList
+%type <qual> innerMods
 
 %start file
 
@@ -232,18 +234,19 @@ abstractDecl
  | pointers abstractDeclBase { $$ = ctype_adjustPointers ($1, $2); }
 
 pointers
- : MT_STAR { $$ = 1; }
- | MT_STAR innerModsList { $$ = 1; }
- | MT_STAR pointers { $$ = 1 + $2; }
- | MT_STAR innerModsList pointers { $$ = 1 + $3; }
+ : MT_STAR { $$ = pointers_createMt ($1); }
+ | MT_STAR innerModsList { $$ = pointers_createModsMt ($1, $2); }
+ | MT_STAR pointers { $$ = pointers_extend (pointers_createMt ($1), $2); }
+ | MT_STAR innerModsList pointers { $$ = pointers_extend (pointers_createModsMt ($1, $2), $3); }
 
 innerMods
- : MT_CONST    { /* ignored for now */; }
- | MT_VOLATILE { ; }
+ : MT_CONST    { $$ = qual_createConst (); }
+ | MT_VOLATILE { $$ = qual_createVolatile (); }
+ | MT_RESTRICT { $$ = qual_createRestrict (); }
 
 innerModsList
- : innerMods { ; }
- | innerModsList innerMods { ; }
+ : innerMods { $$ = qualList_single ($1); }
+ | innerModsList innerMods { $$ = qualList_add ($1, $2); }
 
 abstractDeclBase
  : MT_LPAREN abstractDecl MT_RPAREN { $$ = ctype_expectFunction ($2); }
index 5ab2c3e322351ecb6be7b0d82062cfffecf37c2f..51af450596b66ea6f078c5b831fb683ad4c21535 100644 (file)
@@ -84,6 +84,7 @@ static void mtscanner_initMod (void)
   cstringTable_insert (tokenTable, cstring_makeLiteral ("signedintegraltype"), MT_SIGNEDINTEGRALTYPE);
   cstringTable_insert (tokenTable, cstring_makeLiteral ("const"), MT_CONST);
   cstringTable_insert (tokenTable, cstring_makeLiteral ("volatile"), MT_VOLATILE);
+  cstringTable_insert (tokenTable, cstring_makeLiteral ("restrict"), MT_RESTRICT);
 
   /*
   ** Punctuation
index 389f0dc1b0b20505c9d60fb1b89b3df617bd0258..19df7734c5cba921ed0bf78cb3bbf25f3397ee12 100644 (file)
@@ -210,12 +210,15 @@ qtype qtype_newQbase (qtype q1, qtype q2)
   return q1;
 }
 
-void qtype_adjustPointers (int n, qtype q)
+void qtype_adjustPointers (pointers n, qtype q)
 {
   if (qtype_isDefined (q))
     {
+      DPRINTF (("Pointers: %s %s", pointers_unparse (n), qtype_unparse (q)));
       q->type = ctype_adjustPointers (n, q->type);
     }
+
+  pointers_free (n);
 }
 
 # ifndef NOLCL
index 91359cbd8617fafbb1abbb40a4c9991741fe0c53..08af30e14b583481e2203fb471a6ca8c585fb874 100644 (file)
@@ -86,80 +86,84 @@ qual qual_fromInt (int q)
 
 cstring qual_unparse (qual q)
 {
-  if (q->kind == QU_USERANNOT) {
-    return (annotationInfo_unparse (q->info));
-  } else {
-    switch (q->kind)
-      {
-      case QU_UNKNOWN:    return cstring_makeLiteralTemp ("unknown");
-      case QU_ABSTRACT:   return cstring_makeLiteralTemp ("abstract");
-      case QU_CONCRETE:   return cstring_makeLiteralTemp ("concrete");
-      case QU_MUTABLE:    return cstring_makeLiteralTemp ("mutable");
-      case QU_IMMUTABLE:  return cstring_makeLiteralTemp ("immutable");
-      case QU_SHORT:      return cstring_makeLiteralTemp ("short");
-      case QU_LONG:       return cstring_makeLiteralTemp ("long");
-      case QU_SIGNED:     return cstring_makeLiteralTemp ("signed");
-      case QU_UNSIGNED:   return cstring_makeLiteralTemp ("unsigned");
-      case QU_CONST:      return cstring_makeLiteralTemp ("const");
-      case QU_VOLATILE:   return cstring_makeLiteralTemp ("volatile");
-      case QU_INLINE:     return cstring_makeLiteralTemp ("inline");
-      case QU_EXTERN:     return cstring_makeLiteralTemp ("extern");
-      case QU_STATIC:     return cstring_makeLiteralTemp ("static");
-      case QU_AUTO:       return cstring_makeLiteralTemp ("auto");
-      case QU_REGISTER:   return cstring_makeLiteralTemp ("register");
-      case QU_OUT:        return cstring_makeLiteralTemp ("out");
-      case QU_IN:         return cstring_makeLiteralTemp ("in");
-      case QU_RELDEF:     return cstring_makeLiteralTemp ("reldef");
-      case QU_ONLY:       return cstring_makeLiteralTemp ("only");
-      case QU_IMPONLY:    return cstring_makeLiteralTemp ("only");
-      case QU_PARTIAL:    return cstring_makeLiteralTemp ("partial");
-      case QU_SPECIAL:    return cstring_makeLiteralTemp ("special");
-      case QU_KEEP:       return cstring_makeLiteralTemp ("keep");
-      case QU_KEPT:       return cstring_makeLiteralTemp ("kept");
-      case QU_YIELD:      return cstring_makeLiteralTemp ("yield");
-      case QU_TEMP:       return cstring_makeLiteralTemp ("temp");
-      case QU_SHARED:     return cstring_makeLiteralTemp ("shared");
-      case QU_UNIQUE:     return cstring_makeLiteralTemp ("unique");
-      case QU_UNCHECKED:  return cstring_makeLiteralTemp ("unchecked");
-      case QU_CHECKED:    return cstring_makeLiteralTemp ("checked");
-      case QU_CHECKMOD:   return cstring_makeLiteralTemp ("checkmod");
-      case QU_CHECKEDSTRICT: return cstring_makeLiteralTemp ("checkedstrict");
-      case QU_TRUENULL:   return cstring_makeLiteralTemp ("truenull");
-      case QU_FALSENULL:  return cstring_makeLiteralTemp ("falsenull");
-      case QU_NULL:       return cstring_makeLiteralTemp ("null");
-      case QU_ISNULL:     return cstring_makeLiteralTemp ("isnull");
-      case QU_RELNULL:    return cstring_makeLiteralTemp ("relnull");
-      case QU_NOTNULL:    return cstring_makeLiteralTemp ("notnull");
-      case QU_NULLTERMINATED: return cstring_makeLiteralTemp ("nullterminated");
-      case QU_RETURNED:   return cstring_makeLiteralTemp ("returned");
-      case QU_EXPOSED:    return cstring_makeLiteralTemp ("exposed");
-      case QU_EXITS:      return cstring_makeLiteralTemp ("noreturn");
-      case QU_MAYEXIT:    return cstring_makeLiteralTemp ("maynotreturn");
-      case QU_UNUSED:     return cstring_makeLiteralTemp ("unused");
-      case QU_EXTERNAL:   return cstring_makeLiteralTemp ("external");
-      case QU_SEF:        return cstring_makeLiteralTemp ("sef");
-      case QU_OBSERVER:   return cstring_makeLiteralTemp ("observer");
-      case QU_REFCOUNTED: return cstring_makeLiteralTemp ("refcounted"); 
-      case QU_REFS:       return cstring_makeLiteralTemp ("refs"); 
-      case QU_NEWREF:     return cstring_makeLiteralTemp ("newref"); 
-      case QU_KILLREF:    return cstring_makeLiteralTemp ("killref"); 
-      case QU_TEMPREF:    return cstring_makeLiteralTemp ("tempref"); 
-      case QU_OWNED:      return cstring_makeLiteralTemp ("owned");
-      case QU_DEPENDENT:  return cstring_makeLiteralTemp ("dependent");
-      case QU_NEVEREXIT:  return cstring_makeLiteralTemp ("alwaysreturns");
-      case QU_TRUEEXIT:   return cstring_makeLiteralTemp ("noreturnwhentrue");
-      case QU_FALSEEXIT:  return cstring_makeLiteralTemp ("noreturnwhenfalse");
-      case QU_UNDEF:      return cstring_makeLiteralTemp ("undef");
-      case QU_KILLED:     return cstring_makeLiteralTemp ("killed");
-      case QU_PRINTFLIKE: return cstring_makeLiteralTemp ("printflike");
-      case QU_SCANFLIKE:  return cstring_makeLiteralTemp ("scanflike");
-      case QU_MESSAGELIKE:return cstring_makeLiteralTemp ("messagelike");
-      case QU_SETBUFFERSIZE: return cstring_makeLiteralTemp("<qsetbuffersize>");
-      case QU_LAST:       return cstring_makeLiteralTemp ("< last >");
-      case QU_USERANNOT:  return cstring_makeLiteralTemp ("<user>");
-      }
-  }
-
+  if (q->kind == QU_USERANNOT) 
+    {
+      return (annotationInfo_unparse (q->info));
+    } 
+  else 
+    {
+      switch (q->kind)
+       {
+       case QU_UNKNOWN:    return cstring_makeLiteralTemp ("unknown");
+       case QU_ABSTRACT:   return cstring_makeLiteralTemp ("abstract");
+       case QU_CONCRETE:   return cstring_makeLiteralTemp ("concrete");
+       case QU_MUTABLE:    return cstring_makeLiteralTemp ("mutable");
+       case QU_IMMUTABLE:  return cstring_makeLiteralTemp ("immutable");
+       case QU_SHORT:      return cstring_makeLiteralTemp ("short");
+       case QU_LONG:       return cstring_makeLiteralTemp ("long");
+       case QU_SIGNED:     return cstring_makeLiteralTemp ("signed");
+       case QU_UNSIGNED:   return cstring_makeLiteralTemp ("unsigned");
+       case QU_CONST:      return cstring_makeLiteralTemp ("const");
+       case QU_RESTRICT:   return cstring_makeLiteralTemp ("restrict");
+       case QU_VOLATILE:   return cstring_makeLiteralTemp ("volatile");
+       case QU_INLINE:     return cstring_makeLiteralTemp ("inline");
+       case QU_EXTERN:     return cstring_makeLiteralTemp ("extern");
+       case QU_STATIC:     return cstring_makeLiteralTemp ("static");
+       case QU_AUTO:       return cstring_makeLiteralTemp ("auto");
+       case QU_REGISTER:   return cstring_makeLiteralTemp ("register");
+       case QU_OUT:        return cstring_makeLiteralTemp ("out");
+       case QU_IN:         return cstring_makeLiteralTemp ("in");
+       case QU_RELDEF:     return cstring_makeLiteralTemp ("reldef");
+       case QU_ONLY:       return cstring_makeLiteralTemp ("only");
+       case QU_IMPONLY:    return cstring_makeLiteralTemp ("only");
+       case QU_PARTIAL:    return cstring_makeLiteralTemp ("partial");
+       case QU_SPECIAL:    return cstring_makeLiteralTemp ("special");
+       case QU_KEEP:       return cstring_makeLiteralTemp ("keep");
+       case QU_KEPT:       return cstring_makeLiteralTemp ("kept");
+       case QU_YIELD:      return cstring_makeLiteralTemp ("yield");
+       case QU_TEMP:       return cstring_makeLiteralTemp ("temp");
+       case QU_SHARED:     return cstring_makeLiteralTemp ("shared");
+       case QU_UNIQUE:     return cstring_makeLiteralTemp ("unique");
+       case QU_UNCHECKED:  return cstring_makeLiteralTemp ("unchecked");
+       case QU_CHECKED:    return cstring_makeLiteralTemp ("checked");
+       case QU_CHECKMOD:   return cstring_makeLiteralTemp ("checkmod");
+       case QU_CHECKEDSTRICT: return cstring_makeLiteralTemp ("checkedstrict");
+       case QU_TRUENULL:   return cstring_makeLiteralTemp ("truenull");
+       case QU_FALSENULL:  return cstring_makeLiteralTemp ("falsenull");
+       case QU_NULL:       return cstring_makeLiteralTemp ("null");
+       case QU_ISNULL:     return cstring_makeLiteralTemp ("isnull");
+       case QU_RELNULL:    return cstring_makeLiteralTemp ("relnull");
+       case QU_NOTNULL:    return cstring_makeLiteralTemp ("notnull");
+       case QU_NULLTERMINATED: return cstring_makeLiteralTemp ("nullterminated");
+       case QU_RETURNED:   return cstring_makeLiteralTemp ("returned");
+       case QU_EXPOSED:    return cstring_makeLiteralTemp ("exposed");
+       case QU_EXITS:      return cstring_makeLiteralTemp ("noreturn");
+       case QU_MAYEXIT:    return cstring_makeLiteralTemp ("maynotreturn");
+       case QU_UNUSED:     return cstring_makeLiteralTemp ("unused");
+       case QU_EXTERNAL:   return cstring_makeLiteralTemp ("external");
+       case QU_SEF:        return cstring_makeLiteralTemp ("sef");
+       case QU_OBSERVER:   return cstring_makeLiteralTemp ("observer");
+       case QU_REFCOUNTED: return cstring_makeLiteralTemp ("refcounted"); 
+       case QU_REFS:       return cstring_makeLiteralTemp ("refs"); 
+       case QU_NEWREF:     return cstring_makeLiteralTemp ("newref"); 
+       case QU_KILLREF:    return cstring_makeLiteralTemp ("killref"); 
+       case QU_TEMPREF:    return cstring_makeLiteralTemp ("tempref"); 
+       case QU_OWNED:      return cstring_makeLiteralTemp ("owned");
+       case QU_DEPENDENT:  return cstring_makeLiteralTemp ("dependent");
+       case QU_NEVEREXIT:  return cstring_makeLiteralTemp ("alwaysreturns");
+       case QU_TRUEEXIT:   return cstring_makeLiteralTemp ("noreturnwhentrue");
+       case QU_FALSEEXIT:  return cstring_makeLiteralTemp ("noreturnwhenfalse");
+       case QU_UNDEF:      return cstring_makeLiteralTemp ("undef");
+       case QU_KILLED:     return cstring_makeLiteralTemp ("killed");
+       case QU_PRINTFLIKE: return cstring_makeLiteralTemp ("printflike");
+       case QU_SCANFLIKE:  return cstring_makeLiteralTemp ("scanflike");
+       case QU_MESSAGELIKE:return cstring_makeLiteralTemp ("messagelike");
+       case QU_SETBUFFERSIZE: return cstring_makeLiteralTemp("<qsetbuffersize>");
+       case QU_LAST:       return cstring_makeLiteralTemp ("< last >");
+       case QU_USERANNOT:  return cstring_makeLiteralTemp ("<user>");
+       }
+    }
+  
   BADEXIT;
 }
 
index 5a8c62501dce7579da36a738e1d4bb9ed0401c62..39182b6c6f1e3d7e65c0e33198911d597775c98d 100644 (file)
@@ -74,6 +74,13 @@ qualList_grow (/*@notnull@*/ qualList s)
   sfree (oldelements);
 }
 
+qualList qualList_single (qual el)
+{
+  /*@-unqualifiedtrans@*/ /* must be only */
+  return (qualList_add (qualList_undefined, el));
+  /*@=unqualifiedtrans@*/
+}
+
 qualList qualList_add (qualList s, qual el)
 {
   if (qualList_isUndefined (s))
index bee27a78e9b7f57ab870cc198bf5599773b52c9b..cb8193c95003b0ba71243a91fe764e1af1a40259 100644 (file)
@@ -677,18 +677,16 @@ sort_makePtr (ltoken t, sort baseSort)
 }
 
 sort
-sort_makePtrN (sort s, int pointers)
+sort_makePtrN (sort s, pointers p)
 {
-  llassert (pointers >= 0);
-
-  if (pointers == 0)
+  if (pointers_isUndefined (p))
     {
       return s;
     }
   else
     {
       return sort_makePtrN (sort_makePtr (ltoken_undefined, s), 
-                           pointers - 1);
+                           pointers_getRest (p));
     }
 }
 
index d300f85521bfd8ea87b34803c2c6a488f7ff52be..62bc37d9743544ea57e4e95c64f73acc2dc89a64 100644 (file)
@@ -553,7 +553,7 @@ static /*@only@*/ qtype
       
       result = qtype_addQualList (result, n->quals);
 
-      if (n->pointers > 0)
+      if (pointers_isDefined (n->pointers))
        {
          qtype_adjustPointers (n->pointers, result);
        }
index 41892ecb6b4cb06f13efa1c82923884caae2bfba..a96678f86c5c3be2a29167c0d8253f8f5127ed2d 100644 (file)
@@ -493,13 +493,14 @@ keep:
 ### libs
 ### 2001-05-22: 2 new errors found (fixed spec of signal)
 ### 2001-05-30: 3 new errors found (formatconst)
+### 2002-07-08: 2 new errors found (getc modifies errno)
 
 .PHONY: libs
 libs:
        -$(SPLINTR) libs.c +longunsignedunsignedintegral -expect 18
        -$(SPLINTR) libs.c -expect 22
        -$(SPLINTR) libs.c +globunspec +modunspec -expect 25
-       -$(SPLINTR) libs.c +strictlib +globunspec +modunspec -expect 42
+       -$(SPLINTR) libs.c +strictlib +globunspec +modunspec -expect 44
 
 .PHONY: lintcomments
 lintcomments:
index 6f793f4174afdc8d760933f9c391dc15d4f319c8..de41dde1597e40358e9e1bfca515f5f717dd8baa 100644 (file)
@@ -1317,13 +1317,14 @@ keep:
 ### libs
 ### 2001-05-22: 2 new errors found (fixed spec of signal)
 ### 2001-05-30: 3 new errors found (formatconst)
+### 2002-07-08: 2 new errors found (getc modifies errno)
 
 .PHONY: libs
 libs:
        -$(SPLINTR) libs.c +longunsignedunsignedintegral -expect 18
        -$(SPLINTR) libs.c -expect 22
        -$(SPLINTR) libs.c +globunspec +modunspec -expect 25
-       -$(SPLINTR) libs.c +strictlib +globunspec +modunspec -expect 42
+       -$(SPLINTR) libs.c +strictlib +globunspec +modunspec -expect 44
 
 .PHONY: lintcomments
 lintcomments:
index 33a2767924ffc97ea531f9db09836cf4708c48f0..283e89ad626091a5e4090b39a630ac50370221bc 100644 (file)
@@ -54,11 +54,11 @@ ansireserved.c:9: Name EVANS is reserved for future library extensions. Macros
     (ISO99:7.26.3)
 ansireserved.c:1:5: Name decimal_point is reserved for the standard library
 ansireserved.c:2:5: Function srand inconsistently declared as variable: int
-   load file standard.lcd:1154:1: Specification of srand as function:
+   load file standard.lcd: Specification of srand as function:
    [function (unsigned int) returns void]
 ansireserved.c:2:5: Name srand is reserved for the standard library
 ansireserved.c:3:5: Function labs inconsistently declared as variable: int
-   load file standard.lcd:1176:1: Specification of labs as function:
+   load file standard.lcd: Specification of labs as function:
    [function (long int) returns long int]
 ansireserved.c:3:5: Name labs is reserved for the standard library
 ansireserved.c:4:5: Name _x is in the implementation name space (any identifier
index dafec7b68517017b35e765a79abbe53384b3ae4e..cf203e4283b12faaab832859bec9701aa2dcc23f 100644 (file)
@@ -2,6 +2,9 @@
 employee.c: (in function employee_equal)
 employee.c:25: Function strncmp expects arg 3 to be size_t gets int:
                   maxEmployeeName
+employee.c: (in function employee_sprint)
+employee.c:33: Buffer overflow possible with sprintf.  Recommend using snprintf
+                  instead: sprintf
 empset.c: (in function empset_insert)
 empset.c:28: Variable er declared but not used
 empset.c: (in function empset_disjointUnion)
@@ -34,9 +37,17 @@ dbase.c: (in function query)
 dbase.c:210: Variable er declared but not used
 dbase.c:211: Variable e declared but not used
 drive.c: (in function main)
+drive.c:47: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
+drive.c:63: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
+drive.c:81: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
+drive.c:118: Buffer overflow possible with sprintf.  Recommend using snprintf
+                instead: sprintf
 drive.c:123: Return value (type db_status) ignored: hire(e)
 
-Finished checking --- 16 code warnings, as expected
+Finished checking --- 21 code warnings, as expected
 
 employee.h:2: Name EMPLOYEE_H is reserved for future library extensions. Macros
     beginning with E and a digit or uppercase letter may be added to <errno.h>.
@@ -83,6 +94,8 @@ employee.c:31: Read-only string literal storage used as initial value for
                   unqualified storage: jobs[1] = "non-manager"
 employee.c:31: Read-only string literal storage used as initial value for
                   unqualified storage: jobs[2] = "?"
+employee.c:33: Buffer overflow possible with sprintf.  Recommend using snprintf
+                  instead: sprintf
 employee.c:34: Array fetch using non-integer, gender: gender[e.gen]
 employee.c:34: Array fetch using non-integer, job: jobs[e.j]
 employee.h: (in macro employee_initMod)
@@ -541,10 +554,16 @@ dbase.c:272: Incompatible types for <= (int, enum { mMGRS, fMGRS, mNON, fNON })
 drive.c: (in function main)
 drive.c:22: Statement has no effect: employee_initMod()
 drive.c:23: Statement has no effect: empset_initMod()
+drive.c:47: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
 drive.c:48: Return value (type bool) ignored: employee_setName...
 drive.c:49: Return value (type bool) ignored: empset_insert(em...
+drive.c:63: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
 drive.c:64: Return value (type bool) ignored: employee_setName...
 drive.c:65: Return value (type bool) ignored: empset_delete(em...
+drive.c:81: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
 drive.c:82: Return value (type bool) ignored: employee_setName...
 drive.c:83: Return value (type bool) ignored: empset_insert(em...
 drive.c:107: Return value (type bool) ignored: empset_delete(em...
@@ -553,6 +572,8 @@ drive.c:116: Body of else clause of if statement is not a block:
                 e.gen = FEMALE;
 drive.c:117: Body of if clause of if statement is not a block: e.j = NONMGR;
 drive.c:117: Body of else clause of if statement is not a block: e.j = MGR;
+drive.c:118: Buffer overflow possible with sprintf.  Recommend using snprintf
+                instead: sprintf
 drive.c:119: Return value (type bool) ignored: employee_setName...
 drive.c:123: Return value (type db_status) ignored: hire(e)
 drive.c:127: Assignment of db_status to int: j = hire(e)
@@ -653,7 +674,8 @@ type                         1           0
 enumindex                   24           0
 enumint                     15           0
 matchanyintegral             2           0
+bufferoverflowhigh           5           0
                           ========  =========
-Total                      333          73
+Total                      338          73
 
-Finished checking --- 333 code warnings, as expected
+Finished checking --- 338 code warnings, as expected
index 62d52dff4fca8724cd06da3127adc18f5109c148..17a67568799d4b0cb42e4e6ba73f1f91db018492 100644 (file)
@@ -26,8 +26,10 @@ test:
 ###
 
 check: $(LCSFILES)
-       -$(SPLINT) -showcol -weak $(MODULES) -expect 16
-       -$(SPLINT) -showcol +strict -modfilesystem +showsummary $(MODULES) -expect 333
+       -$(SPLINT) -showcol -weak $(MODULES) -expect 21
+       -$(SPLINT) -showcol +strict -modfilesystem +showsummary $(MODULES) -expect 338
+
+# evans 2002-07-09: 5 bufferoverflowhigh warnings for using sprintf
 
 ### The following rules generate .lh and .lcs files from .lcl files.  They also
 ### ensure that .h files appear to be updated whenever the corresponding .lh
index ba21024cce964eb63031b01cd2e91c69ff60dbb6..a21ec6c3b38174636c78a351f007c584bc48383a 100644 (file)
@@ -22,9 +22,11 @@ test:
        $(MAKE) -e check
 
 check: $(LCSFILES)
-       -$(SPLINT) -exportlocal -showcol -allimponly -macrovarprefixexclude $(MODULES) -expect 15
-       -$(SPLINT) -exportlocal -showcol +allimponly $(MODULES) -expect 25
-       -$(SPLINT) -exportlocal -showcol -memchecks -macrovarprefixexclude $(MODULES)
+       -$(SPLINT) -exportlocal -showcol -allimponly -macrovarprefixexclude $(MODULES) -bufferoverflowhigh -expect 15
+       -$(SPLINT) -exportlocal -showcol +allimponly $(MODULES) -bufferoverflowhigh -expect 25
+       -$(SPLINT) -exportlocal -showcol -memchecks -macrovarprefixexclude -bufferoverflowhigh $(MODULES)
+
+# evans 2002-07-09: added bufferoverflowhigh flags to suppress sprintf warnings
 
 ### The following rules generate .lh and .lcs files from .lcl files.  They also
 ### ensure that .h files appear to be updated whenever the corresponding .lh
index c5f196275afd17a45b932930952751e57a13e0bf..e75ef50ab895d13c24631dca6139dea2f17fa101 100644 (file)
@@ -1,4 +1,16 @@
 
+employee.c: (in function employee_sprint)
+employee.c:38: Buffer overflow possible with sprintf.  Recommend using snprintf
+                  instead: sprintf
+drive.c: (in function main)
+drive.c:50: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
+drive.c:66: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
+drive.c:84: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
+drive.c:138: Buffer overflow possible with sprintf.  Recommend using snprintf
+                instead: sprintf
 
 Error Type                Reported  Suppressed
 ===================       ========  =========
@@ -9,11 +21,15 @@ formalarray                  0          24
 modfilesys                   0          25
 redecl                       0           7
 exporttype                   0           3
+bufferoverflowhigh           5           0
                           ========  =========
-Total                        0          64
+Total                        5          64
 
-Finished checking --- no warnings
+Finished checking --- 5 code warnings, as expected
 
+employee.c: (in function employee_sprint)
+employee.c:38: Buffer overflow possible with sprintf.  Recommend using snprintf
+                  instead: sprintf
 eref.c: (in function eref_alloc)
 eref.c:36: Called procedure printf may access global stdout
 eref.c:36: Undocumented modification of *stdout possible from call to printf:
@@ -65,14 +81,20 @@ drive.c:41: Called procedure printf may access global stdout
 drive.c:41: Undocumented modification of *stdout possible from call to printf:
                printf("Size should be 0.\n")
 drive.c:41: Return value (type int) ignored: printf("Size sho...
+drive.c:50: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
 drive.c:57: Called procedure printf may access global stdout
 drive.c:57: Undocumented modification of *stdout possible from call to printf:
                printf("Size should be 500.\n")
 drive.c:57: Return value (type int) ignored: printf("Size sho...
+drive.c:66: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
 drive.c:73: Called procedure printf may access global stdout
 drive.c:73: Undocumented modification of *stdout possible from call to printf:
                printf("Size should be 250.\n")
 drive.c:73: Return value (type int) ignored: printf("Size sho...
+drive.c:84: Buffer overflow possible with sprintf.  Recommend using snprintf
+               instead: sprintf
 drive.c:93: Called procedure printf may access global stdout
 drive.c:93: Undocumented modification of *stdout possible from call to printf:
                printf("Size should be 350.\n")
@@ -89,6 +111,8 @@ drive.c:109: Called procedure printf may access global stdout
 drive.c:109: Undocumented modification of *stdout possible from call to printf:
                 printf("%s\n", &(na[0]))
 drive.c:109: Return value (type int) ignored: printf("%s\n", &...
+drive.c:138: Buffer overflow possible with sprintf.  Recommend using snprintf
+                instead: sprintf
 drive.c:151: Called procedure printf may access global stdout
 drive.c:151: Undocumented modification of *stdout possible from call to printf:
     printf("Should print true: %s\n", bool_unparse(status == DBS_DUPLERR))
@@ -139,7 +163,8 @@ globs                       26           0
 retvalint                   25           0
 redecl                       0           7
 exporttype                   0           3
+bufferoverflowhigh           5           0
                           ========  =========
-Total                       77          64
+Total                       82          64
 
-Finished checking --- 77 code warnings, as expected
+Finished checking --- 82 code warnings, as expected
index 48118f81c5f61b78d25afcd973f0dc9546493b5e..123f9cd40ca1c3e871018ef7ad4de48410d5931f 100644 (file)
@@ -23,8 +23,10 @@ test:
 ### Note there is a .splint file used for checking!
 
 check: $(LCSFILES)
-       -$(SPLINTF) -showcol $(MODULES) +strict -modfilesystem +showsummary -exportconstant -exportlocal -protoparamprefix p_
-       -$(SPLINTF) -showcol $(MODULES) +strict -modfilesystem +showsummary -exportconstant -exportlocal -protoparamprefix p_ +strictlib -expect 77
+       -$(SPLINTF) -showcol $(MODULES) +strict -modfilesystem +showsummary -exportconstant -exportlocal -protoparamprefix p_ -expect 5
+       -$(SPLINTF) -showcol $(MODULES) +strict -modfilesystem +showsummary -exportconstant -exportlocal -protoparamprefix p_ +strictlib -expect 82
+
+# evans 2002-07-09: 5 new sprintf warnings
 
 
 ### The following rules generate .lh and .lcs files from .lcl files.  They also
index ecdcf741787bcb7589abcecaffc77ad7dded42f9..0e27f8c1ec22e5b07409e268d6e35b52970b4bf7 100644 (file)
@@ -42,11 +42,11 @@ external.c:5:5: External identifier small2 is not distinguishable from small1
    external.c:4:5: Declaration of small1
 external.c:7:5: External identifier longfunction1 is not distinguishable from
     LONG_MAX in the first 3 characters because alphabetical case is ignored
-   load file standard.lcd:951:1: Specification of LONG_MAX
+   load file standard.lcd: Specification of LONG_MAX
    One or more additional indistinguishable external names not reported
 external.c:8:5: External identifier longfunction2 is not distinguishable from
     LONG_MAX in the first 3 characters because alphabetical case is ignored
-   load file standard.lcd:951:1: Specification of LONG_MAX
+   load file standard.lcd: Specification of LONG_MAX
    One or more additional indistinguishable external names not reported
 
 Finished checking --- 4 code warnings, as expected
index 449517e2dde7120bb2f7bf58a0101a1d5ba3a903..2d0a75ca26f57214397baebe9ea5f1e372a47401 100644 (file)
@@ -154,8 +154,11 @@ libs.c:33:7: Undocumented modification of *f possible from call to fgetc:
 libs.c:33:7: Undocumented modification of errno possible from call to fgetc:
                 fgetc(f)
 libs.c:33:3: Assignment of int to char: c = fgetc(f)
+libs.c:34:7: Called procedure getc may access global errno
 libs.c:34:7: Undocumented modification of *f possible from call to getc:
                 getc(f)
+libs.c:34:7: Undocumented modification of errno possible from call to getc:
+                getc(f)
 libs.c:34:3: Assignment of int to char: c = getc(f)
 libs.c: (in function main)
 libs.c:46:44: Function bsearch expects arg 4 to be size_t gets [function (int,
@@ -193,4 +196,4 @@ libs.c:55:3: Undocumented modification of errno possible from call to signal:
 libs.c:55:3: Return value (type [function (int) returns void]) ignored:
                 signal(SIGHUP, l...
 
-Finished checking --- 42 code warnings, as expected
+Finished checking --- 44 code warnings, as expected
index 14a6358fdc364155f53a0911de63f677d86917b1..3b43d1f54ef82c3c47936ddc0e06d2bd2c723db3 100644 (file)
@@ -99,13 +99,19 @@ taintedimplicit.c:17:18: Invalid transfer from tainted [result of taintme] to
 Finished checking --- 1 code warning, as expected
 
 sprintf.c: (in function sp)
+sprintf.c:7:3: Buffer overflow possible with sprintf.  Recommend using snprintf
+                  instead: sprintf
+sprintf.c:10:3: Buffer overflow possible with sprintf.  Recommend using
+                   snprintf instead: sprintf
 sprintf.c:11:18: Invalid transfer from tainted s to untainted (Possibly tainted
                     storage used as untainted.): system(..., s, ...)
    sprintf.c:10:37: s becomes tainted
    tainted.xh:26:55: s1 becomes untainted
+sprintf.c:13:3: Buffer overflow possible with sprintf.  Recommend using
+                   snprintf instead: sprintf
 sprintf.c:14:18: Invalid transfer from tainted s to untainted (Possibly tainted
                     storage used as untainted.): system(..., s, ...)
    sprintf.c:13:61: s becomes tainted
    tainted.xh:26:55: s1 becomes untainted
 
-Finished checking --- 2 code warnings, as expected
+Finished checking --- 5 code warnings, as expected
index b0cb3797852bd82f6183ccde17ff3af5f4b29a6a..8ae5ab18955848f725d6f11a660be5a5078a3cad 100644 (file)
@@ -13,4 +13,6 @@ tainted:
        -${SPLINT} -mts tainted tainted5.c -mustfree -exportlocal
        -${SPLINT} -mts tainted taintedmerge.c -mustfree -exportlocal -expect 3
        -${SPLINT} -mts tainted taintedimplicit.c -mustfree -exportlocal -expect 1
-       -${SPLINT} -mts tainted sprintf.c -expect 2
+       -${SPLINT} -mts tainted sprintf.c -expect 5
+       
+# evans 2002-07-09: 3 more warnings for sprintf because of sprintf
index e56aa8896d0c224df3a51039e797006b74e53664..70d2a03c1fd0c99d1514182283c634c7614521d5 100644 (file)
@@ -27,9 +27,9 @@ Finished checking --- 2 code warnings, as expected
 
 decl.c:3:21: Structure struct tm declared with fields { int x; }, specified
                 with fields { int tm_sec; int tm_min; int tm_hour;, ... }
-   load file standard.lcd:1218:1: Specification of struct tm
+   load file standard.lcd: Specification of struct tm
    decl.c:3:17: Field tm_sec in specified corresponds to x in declaration
-   load file standard.lcd:803:1: Specification of tm_sec
+   load file standard.lcd: Specification of tm_sec
 
 Finished checking --- 1 code warning, as expected
 
This page took 0.571069 seconds and 5 git commands to generate.