diff --git a/MANIFEST b/MANIFEST index d2d32e9a0..f3993d9bb 100644 --- a/MANIFEST +++ b/MANIFEST @@ -471,6 +471,7 @@ plugins/sudoers/digestname.c plugins/sudoers/editor.c plugins/sudoers/env.c plugins/sudoers/env_pattern.c +plugins/sudoers/exptilde.c plugins/sudoers/file.c plugins/sudoers/filedigest.c plugins/sudoers/find_path.c diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in index a2e926bd1..c82ae74fc 100644 --- a/doc/sudoers.man.in +++ b/doc/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "August 27, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "August 28, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -1163,6 +1163,10 @@ Date_Spec ::= ('NOTBEFORE=timestamp' | 'NOTAFTER=timestamp') Timeout_Spec ::= 'TIMEOUT=timeout' +Chdir_Spec ::= 'CWD=directory' + +Chroot_Spec ::= 'CHROOT=directory' + Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' | @@ -1502,6 +1506,54 @@ timeout values: \fR1d2d3h\fR. .PP This setting is only supported by version 1.8.20 or higher. +.SS "Chdir_Spec" +The working directory that the command will be run in can be specified +using the +\fRCWD\fR +setting. +The +\fIdirectory\fR +must be a fully-qualified path name beginning with a +\(oq/\(cq +or +\(oq~\(cq +character. +By default, commands are run from the invoking user's current working +directory, unless the +\fB\-i\fR +option is given. +Path names of the form +\fR~user/path/name\fR +are interpreted as being relative to the named user's home directory. +If the user name is omitted, the path will be relative to the runas +user's home directory. +.PP +This setting is only supported by version 1.9.3 or higher. +.SS "Chroot_Spec" +The root directory that the command will be run in can be specified +using the +\fRCHROOT\fR +setting. +The +\fIdirectory\fR +must be a fully-qualified path name beginning with a +\(oq/\(cq +or +\(oq~\(cq +character. +This setting can be used to run the command in a +chroot(2) +\(lqsandbox\(rq +similar to the +chroot(@mansectsu@) +utility. +Path names of the form +\fR~user/path/name\fR +are interpreted as being relative to the named user's home directory. +If the user name is omitted, the path will be relative to the runas +user's home directory. +.PP +This setting is only supported by version 1.9.3 or higher. .SS "Tag_Spec" A command may have zero or more tags associated with it. The following tag values are supported: @@ -4399,6 +4451,26 @@ In either case, the contents of are processed before the contents of \fIenv_file\fR. .TP 14n +runchroot +If set, +\fBsudo\fR +will use this value for the root directory when running a command. +See the +\fIChroot_Spec\fR +section for more details. +.sp +This setting is only supported by version 1.9.3 or higher. +.TP 14n +runcwd +If set, +\fBsudo\fR +will use this value for the working directory when running a command. +See the +\fIChdir_Spec\fR +section for more details. +.sp +This setting is only supported by version 1.9.3 or higher. +.TP 14n secure_path If set, \fBsudo\fR diff --git a/doc/sudoers.mdoc.in b/doc/sudoers.mdoc.in index f46179e69..95a4d04b2 100644 --- a/doc/sudoers.mdoc.in +++ b/doc/sudoers.mdoc.in @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd August 27, 2020 +.Dd August 28, 2020 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -1096,12 +1096,12 @@ Cmnd_Spec ::= Runas_Spec? Option_Spec* Tag_Spec* Cmnd Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')' .ie \n(SL \{\ -.ie \n(PS Option_Spec ::= (SELinux_Spec | Solaris_Priv_Spec | Date_Spec | Timeout_Spec) -.el Option_Spec ::= (SELinux_Spec | Date_Spec | Timeout_Spec) +.ie \n(PS Option_Spec ::= (SELinux_Spec | Solaris_Priv_Spec | Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) +.el Option_Spec ::= (SELinux_Spec | Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) .\} .el \{\ -.ie \n(PS Option_Spec ::= (Solaris_Priv_Spec | Date_Spec | Timeout_Spec) -.el Option_Spec ::= (Date_Spec | Timeout_Spec) +.ie \n(PS Option_Spec ::= (Solaris_Priv_Spec | Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) +.el Option_Spec ::= (Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) .\} .if \n(SL \{\ @@ -1116,6 +1116,10 @@ Date_Spec ::= ('NOTBEFORE=timestamp' | 'NOTAFTER=timestamp') Timeout_Spec ::= 'TIMEOUT=timeout' +Chdir_Spec ::= 'CWD=directory' + +Chroot_Spec ::= 'CHROOT=directory' + Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' | @@ -1422,6 +1426,54 @@ timeout values: .Li 1d2d3h . .Pp This setting is only supported by version 1.8.20 or higher. +.Ss Chdir_Spec +The working directory that the command will be run in can be specified +using the +.Li CWD +setting. +The +.Fa directory +must be a fully-qualified path name beginning with a +.Sq / +or +.Sq ~ +character. +By default, commands are run from the invoking user's current working +directory, unless the +.Fl i +option is given. +Path names of the form +.Li ~user/path/name +are interpreted as being relative to the named user's home directory. +If the user name is omitted, the path will be relative to the runas +user's home directory. +.Pp +This setting is only supported by version 1.9.3 or higher. +.Ss Chroot_Spec +The root directory that the command will be run in can be specified +using the +.Li CHROOT +setting. +The +.Fa directory +must be a fully-qualified path name beginning with a +.Sq / +or +.Sq ~ +character. +This setting can be used to run the command in a +.Xr chroot 2 +.Dq sandbox +similar to the +.Xr chroot @mansectsu@ +utility. +Path names of the form +.Li ~user/path/name +are interpreted as being relative to the named user's home directory. +If the user name is omitted, the path will be relative to the runas +user's home directory. +.Pp +This setting is only supported by version 1.9.3 or higher. .Ss Tag_Spec A command may have zero or more tags associated with it. The following tag values are supported: @@ -4110,6 +4162,24 @@ In either case, the contents of .Em restricted_env_file are processed before the contents of .Em env_file . +.It runchroot +If set, +.Nm sudo +will use this value for the root directory when running a command. +See the +.Sx Chroot_Spec +section for more details. +.Pp +This setting is only supported by version 1.9.3 or higher. +.It runcwd +If set, +.Nm sudo +will use this value for the working directory when running a command. +See the +.Sx Chdir_Spec +section for more details. +.Pp +This setting is only supported by version 1.9.3 or higher. .It secure_path If set, .Nm sudo diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index ce514a71d..3f6944121 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -159,11 +159,11 @@ TEST_PROGS = check_addr check_base64 check_digest check_env_pattern check_fill \ AUTH_OBJS = sudo_auth.lo @AUTH_OBJS@ LIBPARSESUDOERS_OBJS = alias.lo audit.lo base64.lo defaults.lo digestname.lo \ - filedigest.lo gentime.lo gmtoff.lo gram.lo hexchar.lo \ - match.lo match_addr.lo match_command.lo match_digest.lo \ - pwutil.lo pwutil_impl.lo rcstr.lo redblack.lo \ - strlist.lo sudoers_debug.lo timeout.lo timestr.lo \ - toke.lo toke_util.lo + exptilde.lo filedigest.lo gentime.lo gmtoff.lo gram.lo \ + hexchar.lo match.lo match_addr.lo match_command.lo \ + match_digest.lo pwutil.lo pwutil_impl.lo rcstr.lo \ + redblack.lo strlist.lo sudoers_debug.lo timeout.lo \ + timestr.lo toke.lo toke_util.lo LIBPARSESUDOERS_IOBJS = $(LIBPARSESUDOERS_OBJS:.lo=.i) passwd.i @@ -1217,6 +1217,28 @@ env_pattern.i: $(srcdir)/env_pattern.c $(devdir)/def_data.h \ $(CC) -E -o $@ $(CPPFLAGS) $< env_pattern.plog: env_pattern.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/env_pattern.c --i-file $< --output-file $@ +exptilde.lo: $(srcdir)/exptilde.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/pwutil.h $(srcdir)/sudo_nss.h \ + $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/exptilde.c +exptilde.i: $(srcdir)/exptilde.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/pwutil.h $(srcdir)/sudo_nss.h \ + $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -E -o $@ $(CPPFLAGS) $< +exptilde.plog: exptilde.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/exptilde.c --i-file $< --output-file $@ file.lo: $(srcdir)/file.c $(devdir)/def_data.h $(devdir)/gram.h \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ diff --git a/plugins/sudoers/def_data.c b/plugins/sudoers/def_data.c index 4fec7c6fc..d8f30b8fb 100644 --- a/plugins/sudoers/def_data.c +++ b/plugins/sudoers/def_data.c @@ -551,6 +551,14 @@ struct sudo_defs_types sudo_defs_table[] = { "pam_rhost", T_FLAG, N_("Set the pam remote host to the local host name"), NULL, + }, { + "runcwd", T_STR|T_BOOL|T_PATH|T_TILDE, + N_("Working directory to change to before executing the command: %s"), + NULL, + }, { + "runchroot", T_STR|T_BOOL|T_PATH|T_TILDE, + N_("Root directory to change to before executing the command: %s"), + NULL, }, { NULL, 0, NULL } diff --git a/plugins/sudoers/def_data.h b/plugins/sudoers/def_data.h index f1dcdce5a..c4f189402 100644 --- a/plugins/sudoers/def_data.h +++ b/plugins/sudoers/def_data.h @@ -256,6 +256,10 @@ #define def_pam_ruser (sudo_defs_table[I_PAM_RUSER].sd_un.flag) #define I_PAM_RHOST 127 #define def_pam_rhost (sudo_defs_table[I_PAM_RHOST].sd_un.flag) +#define I_RUNCWD 128 +#define def_runcwd (sudo_defs_table[I_RUNCWD].sd_un.str) +#define I_RUNCHROOT 129 +#define def_runchroot (sudo_defs_table[I_RUNCHROOT].sd_un.str) enum def_tuple { never, diff --git a/plugins/sudoers/def_data.in b/plugins/sudoers/def_data.in index da156da26..918c2bd93 100644 --- a/plugins/sudoers/def_data.in +++ b/plugins/sudoers/def_data.in @@ -399,3 +399,9 @@ pam_ruser pam_rhost T_FLAG "Set the pam remote host to the local host name" +runcwd + T_STR|T_BOOL|T_PATH|T_TILDE + "Working directory to change to before executing the command: %s" +runchroot + T_STR|T_BOOL|T_PATH|T_TILDE + "Root directory to change to before executing the command: %s" diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index a72b3de22..0dbdff5ac 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -249,7 +249,8 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, rc = store_syslogpri(val, &def->sd_un); break; case T_STR: - if (ISSET(def->type, T_PATH) && val != NULL && *val != '/') { + if (ISSET(def->type, T_PATH) && val != NULL && *val != '/' && + (!ISSET(def->type, T_TILDE) || *val != '~')) { if (!quiet) { if (lineno > 0) { sudo_warnx(U_("%s:%d: values for \"%s\" must start with a '/'"), diff --git a/plugins/sudoers/defaults.h b/plugins/sudoers/defaults.h index 404aeb814..c31516113 100644 --- a/plugins/sudoers/defaults.h +++ b/plugins/sudoers/defaults.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1999-2005, 2008-2018 + * Copyright (c) 1999-2005, 2008-2020 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -111,6 +111,8 @@ struct early_default { #define T_BOOL 0x100 #undef T_PATH #define T_PATH 0x200 +#undef T_TILDE +#define T_TILDE 0x400 /* * Argument to update_defaults() diff --git a/plugins/sudoers/exptilde.c b/plugins/sudoers/exptilde.c new file mode 100644 index 000000000..c9658e4d7 --- /dev/null +++ b/plugins/sudoers/exptilde.c @@ -0,0 +1,100 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include + +#include +#include +#include +#include +#include + +#include "sudoers.h" +#include "pwutil.h" + +/* + * Expand leading tilde in *path, which must be dynamically allocated. + * Replaces path with the expanded version as needed, freeing the old one. + * Returns true on success, false on failure. + */ +bool +expand_tilde(char **path, const char *user) +{ + char *npath, *opath = *path; + char *slash = NULL; + struct passwd *pw; + int len; + debug_decl(expand_tilde, SUDOERS_DEBUG_UTIL); + + switch (*opath++) { + case '/': + /* A fully-qualified path, nothing to do. */ + debug_return_bool(true); + case '~': + /* See below. */ + break; + default: + /* Not a fully-qualified path or one that starts with a tilde. */ + debug_return_bool(false); + } + + switch (*opath) { + case '\0': + /* format: ~ */ + break; + case '/': + /* format: ~/foo */ + opath++; + break; + default: + /* format: ~user/foo */ + user = opath; + slash = strchr(opath, '/'); + if (slash != NULL) { + *slash = '\0'; + opath = slash + 1; + } else { + opath = NULL; + } + } + pw = sudo_getpwnam(user); + if (slash != NULL) + *slash = '/'; + if (pw == NULL) { + /* Unknown user. */ + sudo_warnx(U_("unknown user: %s"), user); + debug_return_bool(false); + } + + len = asprintf(&npath, "%s%s%s", pw->pw_dir, opath ? "/" : "", + opath ? opath : ""); + sudo_pw_delref(pw); + if (len == -1) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } + + free(*path); + *path = npath; + debug_return_bool(true); +} diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 55558e2d7..a722832c2 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -170,34 +170,37 @@ typedef union { #define RUNASALIAS 290 #define ERROR 291 #define NOMATCH 292 -#define TYPE 293 -#define ROLE 294 -#define PRIVS 295 -#define LIMITPRIVS 296 -#define CMND_TIMEOUT 297 -#define NOTBEFORE 298 -#define NOTAFTER 299 -#define MYSELF 300 -#define SHA224_TOK 301 -#define SHA256_TOK 302 -#define SHA384_TOK 303 -#define SHA512_TOK 304 +#define CHROOT 293 +#define CWD 294 +#define TYPE 295 +#define ROLE 296 +#define PRIVS 297 +#define LIMITPRIVS 298 +#define CMND_TIMEOUT 299 +#define NOTBEFORE 300 +#define NOTAFTER 301 +#define MYSELF 302 +#define SHA224_TOK 303 +#define SHA256_TOK 304 +#define SHA384_TOK 305 +#define SHA512_TOK 306 #define YYERRCODE 256 const short sudoerslhs[] = { -1, - 0, 0, 35, 35, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 31, 31, - 32, 32, 4, 4, 3, 3, 3, 3, 3, 21, + 0, 0, 37, 37, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 33, 33, + 34, 34, 4, 4, 3, 3, 3, 3, 3, 21, 21, 21, 20, 11, 11, 9, 9, 9, 9, 9, - 2, 2, 1, 33, 33, 33, 33, 34, 34, 7, - 7, 6, 6, 28, 29, 30, 24, 25, 26, 27, - 18, 18, 19, 19, 19, 19, 19, 23, 23, 23, - 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, + 2, 2, 1, 35, 35, 35, 35, 36, 36, 7, + 7, 6, 6, 24, 25, 30, 31, 32, 26, 27, + 28, 29, 18, 18, 19, 19, 19, 19, 19, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 5, 5, 5, 39, 39, 42, 10, 10, 40, 40, - 43, 8, 8, 41, 41, 44, 38, 38, 45, 14, - 14, 12, 12, 13, 13, 13, 13, 13, 17, 17, - 15, 15, 16, 16, 16, 37, 37, + 22, 22, 22, 22, 5, 5, 5, 41, 41, 44, + 10, 10, 42, 42, 45, 8, 8, 43, 43, 46, + 40, 40, 47, 14, 14, 12, 12, 13, 13, 13, + 13, 13, 17, 17, 15, 15, 16, 16, 16, 39, + 39, }; const short sudoerslen[] = { 2, @@ -207,77 +210,80 @@ const short sudoerslen[] = 3, 4, 3, 1, 2, 1, 1, 1, 1, 1, 1, 3, 4, 3, 3, 3, 3, 1, 3, 1, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, - 0, 3, 0, 1, 3, 2, 1, 0, 2, 2, - 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, + 3, 3, 0, 3, 0, 1, 3, 2, 1, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 3, 3, 1, 3, 1, 3, - 3, 1, 3, 1, 3, 3, 1, 3, 3, 1, - 3, 1, 2, 1, 1, 1, 1, 1, 1, 3, - 1, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 1, 1, 1, 1, 3, 3, + 1, 3, 1, 3, 3, 1, 3, 1, 3, 3, + 1, 3, 3, 1, 3, 1, 2, 1, 1, 1, + 1, 1, 1, 3, 1, 2, 1, 1, 1, 1, + 1, }; const short sudoersdefred[] = { 0, - 0, 114, 116, 117, 118, 0, 0, 0, 0, 0, - 0, 0, 115, 0, 0, 0, 0, 0, 5, 0, - 110, 112, 0, 7, 8, 0, 3, 127, 126, 6, + 0, 118, 120, 121, 122, 0, 0, 0, 0, 0, + 0, 0, 119, 0, 0, 0, 0, 0, 5, 0, + 114, 116, 0, 7, 8, 0, 3, 131, 130, 6, 0, 0, 0, 0, 23, 0, 36, 39, 38, 40, - 37, 0, 34, 0, 97, 0, 0, 93, 92, 91, - 0, 0, 0, 0, 0, 52, 50, 102, 0, 48, - 0, 0, 0, 94, 0, 0, 99, 0, 0, 107, - 0, 0, 104, 113, 0, 0, 30, 0, 4, 0, + 37, 0, 34, 0, 101, 0, 0, 97, 96, 95, + 0, 0, 0, 0, 0, 52, 50, 106, 0, 48, + 0, 0, 0, 98, 0, 0, 103, 0, 0, 111, + 0, 0, 108, 117, 0, 0, 30, 0, 4, 0, 19, 0, 21, 0, 0, 0, 26, 0, 14, 35, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 11, 0, 0, 12, 0, - 0, 10, 0, 0, 13, 111, 0, 0, 9, 20, - 22, 27, 28, 29, 24, 98, 17, 15, 16, 44, - 45, 46, 47, 103, 18, 49, 0, 95, 0, 100, - 0, 108, 0, 105, 0, 41, 0, 68, 0, 31, - 0, 0, 0, 0, 0, 32, 123, 125, 124, 0, - 119, 121, 0, 0, 62, 42, 0, 0, 0, 0, - 0, 0, 0, 0, 72, 73, 74, 75, 71, 69, - 70, 122, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 89, 90, 87, 88, 43, 120, 58, 57, 59, - 60, 54, 55, 56, + 0, 10, 0, 0, 13, 115, 0, 0, 9, 20, + 22, 27, 28, 29, 24, 102, 17, 15, 16, 44, + 45, 46, 47, 107, 18, 49, 0, 99, 0, 104, + 0, 112, 0, 109, 0, 41, 0, 70, 0, 31, + 0, 0, 0, 0, 0, 32, 127, 129, 128, 0, + 123, 125, 0, 0, 64, 42, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 71, 72, 76, 77, + 78, 79, 75, 73, 74, 126, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 93, 94, 91, + 92, 43, 124, 55, 54, 60, 59, 61, 62, 56, + 57, 58, }; const short sudoersdgoto[] = { 20, 146, 147, 35, 36, 56, 57, 58, 59, 43, 76, 45, 21, 22, 23, 161, 162, 163, 148, 153, 77, - 78, 174, 155, 175, 176, 177, 178, 179, 180, 181, - 24, 25, 60, 61, 26, 27, 30, 69, 63, 66, - 72, 64, 67, 73, 70, + 78, 176, 155, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 24, 25, 60, 61, 26, 27, 30, 69, + 63, 66, 72, 64, 67, 73, 70, }; const short sudoerssindex[] = { -10, - 58, 0, 0, 0, 0, -243, -235, -29, 105, 109, - 109, -32, 0, -229, -226, -211, -181, -145, 0, 0, + 48, 0, 0, 0, 0, -245, -233, -29, 38, 95, + 95, -32, 0, -205, -197, -195, -191, -144, 0, 0, 0, 0, -22, 0, 0, -10, 0, 0, 0, 0, - 6, 7, 76, -179, 0, 59, 0, 0, 0, 0, - 0, -196, 0, -31, 0, -30, -30, 0, 0, 0, - -205, 25, 31, 40, 43, 0, 0, 0, -25, 0, - 116, 45, 21, 0, 46, 24, 0, 49, 27, 0, - 53, 33, 0, 0, 109, 12, 0, 35, 0, 58, - 0, 58, 0, -159, -148, -143, 0, -29, 0, 0, - 105, 59, 59, 59, 0, -142, -141, -139, -129, -32, - 59, -156, 0, 105, -229, 0, -32, -226, 0, 109, - -211, 0, 109, -181, 0, 0, 96, 78, 0, 0, + 6, 7, 32, -189, 0, 50, 0, 0, 0, 0, + 0, -138, 0, -31, 0, -30, -30, 0, 0, 0, + -220, 15, 22, 27, 43, 0, 0, 0, -25, 0, + 69, 35, 21, 0, 49, 24, 0, 55, 25, 0, + 60, 26, 0, 0, 95, 8, 0, 29, 0, 48, + 0, 48, 0, -157, -156, -155, 0, -29, 0, 0, + 38, 50, 50, 50, 0, -153, -140, -135, -134, -32, + 50, -168, 0, 38, -205, 0, -32, -197, 0, 95, + -195, 0, 95, -191, 0, 0, 86, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 106, 0, 107, 0, - 108, 0, 108, 0, -18, 0, 110, 0, 58, 0, - -21, 26, 99, 96, -165, 0, 0, 0, 0, -208, - 0, 0, 111, -21, 0, 0, 92, 95, 97, 98, - 100, 101, 102, 42, 0, 0, 0, 0, 0, 0, - 0, 0, -21, 111, -106, -99, -98, -97, -96, -95, - -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 88, 0, 96, 0, + 97, 0, 97, 0, -18, 0, 99, 0, 48, 0, + -21, 42, 98, 86, -143, 0, 0, 0, 0, -214, + 0, 0, 103, -21, 0, 0, 100, 101, 102, 104, + 105, 106, 107, 108, 109, 59, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -21, 103, -114, -104, + -103, -99, -92, -91, -90, -89, -88, 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,}; const short sudoersrindex[] = - { 170, + { 176, 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, 171, 0, 0, 0, 0, - 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, + 0, 0, 54, 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, @@ -287,117 +293,116 @@ const short sudoersrindex[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 38, 0, - 39, 0, 41, 0, 131, 0, 44, 0, 0, 0, - 132, 133, 0, 9, 75, 0, 0, 0, 0, 0, - 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 33, 0, 41, 0, + 45, 0, 46, 0, 137, 0, 47, 0, 0, 0, + 138, 139, 0, 9, 94, 0, 0, 0, 0, 0, + 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 141, 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,}; const short sudoersgindex[] = { 0, - 23, 0, 90, 80, 128, 119, -82, 74, 140, -4, - 93, 112, 165, -1, 2, 28, 22, 0, 0, 71, + 30, 0, 110, 87, 132, 124, -95, 79, 145, 11, + 111, 113, 171, -1, 3, 31, 28, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 88, 0, 0, 166, -6, 0, 0, 0, - 0, 86, 85, 81, 83, + 0, 0, 0, 0, 92, 0, 0, 169, -4, 0, + 0, 0, 0, 91, 89, 85, 90, }; -#define YYTABLESIZE 402 +#define YYTABLESIZE 400 const short sudoerstable[] = { 19, - 51, 34, 34, 34, 44, 28, 28, 34, 46, 47, - 42, 160, 91, 75, 18, 29, 29, 134, 100, 31, - 28, 75, 18, 28, 81, 83, 28, 32, 62, 89, - 29, 65, 28, 29, 28, 96, 29, 101, 109, 151, - 106, 61, 29, 33, 29, 96, 68, 101, 109, 157, - 106, 48, 49, 33, 158, 91, 106, 28, 28, 109, - 25, 37, 112, 38, 39, 115, 40, 29, 29, 75, - 25, 119, 117, 120, 51, 121, 71, 159, 105, 87, - 50, 108, 96, 164, 111, 127, 128, 129, 97, 41, - 114, 206, 118, 96, 135, 101, 109, 98, 106, 137, - 99, 33, 88, 122, 25, 104, 107, 76, 141, 110, - 42, 143, 2, 113, 123, 3, 4, 5, 85, 124, - 86, 130, 131, 92, 132, 93, 94, 167, 168, 169, - 170, 171, 172, 173, 133, 145, 84, 42, 101, 165, - 13, 18, 156, 152, 52, 53, 54, 55, 51, 91, - 100, 75, 185, 154, 183, 186, 208, 187, 188, 102, - 189, 190, 191, 209, 210, 211, 212, 213, 214, 1, - 2, 63, 67, 64, 66, 65, 166, 125, 95, 103, - 139, 90, 74, 126, 207, 184, 116, 182, 150, 136, - 138, 79, 140, 142, 144, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 34, 34, 34, 134, 28, 28, 34, 46, 47, + 42, 160, 91, 75, 18, 29, 29, 31, 100, 44, + 28, 75, 18, 28, 28, 28, 81, 83, 28, 32, + 29, 89, 100, 29, 29, 29, 48, 49, 29, 151, + 105, 63, 100, 157, 113, 110, 33, 28, 158, 28, + 105, 91, 62, 25, 113, 110, 33, 29, 106, 29, + 65, 109, 68, 25, 112, 50, 71, 115, 117, 87, + 42, 159, 96, 119, 85, 120, 86, 121, 105, 97, + 212, 108, 111, 114, 98, 75, 118, 127, 128, 129, + 100, 51, 84, 88, 42, 104, 135, 25, 105, 164, + 99, 51, 113, 110, 33, 122, 123, 124, 141, 107, + 130, 143, 102, 2, 137, 110, 3, 4, 5, 37, + 113, 38, 39, 131, 40, 145, 80, 18, 132, 133, + 92, 91, 93, 94, 52, 53, 54, 55, 165, 100, + 75, 13, 154, 152, 156, 101, 187, 41, 214, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 215, 216, + 189, 190, 191, 217, 192, 193, 194, 195, 196, 197, + 218, 219, 220, 221, 222, 1, 2, 65, 69, 66, + 68, 67, 95, 166, 103, 139, 90, 116, 74, 213, + 186, 188, 150, 136, 79, 138, 140, 125, 144, 0, + 142, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 33, 33, 33, 0, 0, 0, 33, 0, 37, 157, 38, 39, 2, 40, 158, 3, 4, 5, 1, 0, 2, 0, 0, 3, 4, 5, 50, 6, 7, 8, 9, 10, 11, - 12, 80, 82, 41, 159, 61, 61, 13, 52, 53, - 54, 55, 0, 0, 0, 13, 14, 15, 16, 17, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 0, 0, 0, 48, 49, - 0, 61, 61, 61, 61, 61, 61, 61, 0, 61, - 61, 61, 61, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 50, 0, 0, - 0, 76, 76, 149, 0, 37, 0, 38, 39, 0, - 40, 0, 52, 53, 54, 55, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 0, 37, 41, 38, 39, 2, 40, 0, 3, - 4, 5, 48, 49, 0, 76, 76, 76, 76, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 41, 0, 0, 0, 13, 0, 0, 0, 0, 0, - 0, 50, + 12, 80, 82, 41, 159, 63, 63, 13, 0, 0, + 52, 53, 54, 55, 0, 13, 14, 15, 16, 17, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 37, 0, 38, 39, 0, + 40, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 0, 63, 63, 63, 63, 48, 49, 149, 0, 37, + 0, 38, 39, 41, 40, 48, 49, 0, 0, 0, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 50, 0, 0, 41, 0, 0, + 80, 80, 2, 0, 50, 3, 4, 5, 0, 0, + 0, 52, 53, 54, 55, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, }; const short sudoerscheck[] = { 10, - 33, 33, 33, 33, 9, 0, 0, 33, 10, 11, - 33, 33, 44, 44, 33, 10, 10, 100, 44, 263, - 0, 44, 33, 0, 31, 32, 0, 263, 258, 36, - 10, 258, 0, 10, 0, 0, 10, 0, 0, 58, - 0, 33, 10, 0, 10, 10, 258, 10, 10, 258, - 10, 257, 258, 10, 263, 44, 63, 0, 0, 66, - 0, 258, 69, 260, 261, 72, 263, 10, 10, 44, - 10, 78, 61, 80, 33, 82, 258, 286, 58, 259, - 286, 58, 58, 58, 58, 92, 93, 94, 58, 286, - 58, 174, 58, 58, 101, 58, 58, 58, 58, 104, - 58, 58, 44, 263, 44, 61, 61, 33, 110, 61, - 33, 113, 258, 61, 263, 261, 262, 263, 43, 263, - 45, 264, 264, 44, 264, 46, 47, 293, 294, 295, - 296, 297, 298, 299, 264, 40, 61, 33, 59, 41, - 286, 33, 149, 145, 301, 302, 303, 304, 33, 44, - 44, 44, 61, 44, 44, 61, 263, 61, 61, 44, - 61, 61, 61, 263, 263, 263, 263, 263, 263, 0, - 0, 41, 41, 41, 41, 41, 154, 88, 51, 61, - 107, 42, 18, 91, 183, 164, 75, 160, 118, 102, - 105, 26, 108, 111, 114, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, 33, 33, 33, 100, 0, 0, 33, 10, 11, + 33, 33, 44, 44, 33, 10, 10, 263, 44, 9, + 0, 44, 33, 0, 0, 0, 31, 32, 0, 263, + 10, 36, 0, 10, 10, 10, 257, 258, 10, 58, + 0, 33, 10, 258, 0, 0, 0, 0, 263, 0, + 10, 44, 258, 0, 10, 10, 10, 10, 63, 10, + 258, 66, 258, 10, 69, 286, 258, 72, 61, 259, + 33, 286, 58, 78, 43, 80, 45, 82, 58, 58, + 176, 58, 58, 58, 58, 44, 58, 92, 93, 94, + 58, 33, 61, 44, 33, 61, 101, 44, 58, 58, + 58, 33, 58, 58, 58, 263, 263, 263, 110, 61, + 264, 113, 44, 258, 104, 61, 261, 262, 263, 258, + 61, 260, 261, 264, 263, 40, 33, 33, 264, 264, + 44, 44, 46, 47, 303, 304, 305, 306, 41, 44, + 44, 286, 44, 145, 149, 59, 44, 286, 263, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 263, 263, + 61, 61, 61, 263, 61, 61, 61, 61, 61, 61, + 263, 263, 263, 263, 263, 0, 0, 41, 41, 41, + 41, 41, 51, 154, 61, 107, 42, 75, 18, 187, + 160, 164, 118, 102, 26, 105, 108, 88, 114, -1, + 111, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, -1, 259, 259, 259, -1, -1, -1, 259, -1, 258, 258, 260, 261, 258, 263, 263, 261, 262, 263, 256, -1, 258, -1, -1, 261, 262, 263, 286, 265, 266, 267, 268, 269, 270, - 271, 256, 256, 286, 286, 257, 258, 286, 301, 302, - 303, 304, -1, -1, -1, 286, 287, 288, 289, 290, + 271, 256, 256, 286, 286, 257, 258, 286, -1, -1, + 303, 304, 305, 306, -1, 286, 287, 288, 289, 290, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, -1, -1, -1, 257, 258, - -1, 293, 294, 295, 296, 297, 298, 299, -1, 301, - 302, 303, 304, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, -1, -1, - -1, 257, 258, 256, -1, 258, -1, 260, 261, -1, - 263, -1, 301, 302, 303, 304, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, -1, 258, 286, 260, 261, 258, 263, -1, 261, - 262, 263, 257, 258, -1, 301, 302, 303, 304, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 286, -1, -1, -1, 286, -1, -1, -1, -1, -1, - -1, 286, + 282, 283, 284, 285, 286, 258, -1, 260, 261, -1, + 263, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, 303, 304, 305, 306, 257, 258, 256, -1, 258, + -1, 260, 261, 286, 263, 257, 258, -1, -1, -1, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, -1, -1, 286, -1, -1, + 257, 258, 258, -1, 286, 261, 262, 263, -1, -1, + -1, 303, 304, 305, 306, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 303, 304, 305, 306, }; #define YYFINAL 20 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 304 +#define YYMAXTOKEN 306 #if YYDEBUG const char * const sudoersname[] = { @@ -413,9 +418,9 @@ const char * const sudoersname[] = "DEFAULTS_RUNAS","DEFAULTS_CMND","NOPASSWD","PASSWD","NOEXEC","EXEC","SETENV", "NOSETENV","LOG_INPUT","NOLOG_INPUT","LOG_OUTPUT","NOLOG_OUTPUT","MAIL", "NOMAIL","FOLLOWLNK","NOFOLLOWLNK","ALL","HOSTALIAS","CMNDALIAS","USERALIAS", -"RUNASALIAS","ERROR","NOMATCH","TYPE","ROLE","PRIVS","LIMITPRIVS", -"CMND_TIMEOUT","NOTBEFORE","NOTAFTER","MYSELF","SHA224_TOK","SHA256_TOK", -"SHA384_TOK","SHA512_TOK", +"RUNASALIAS","ERROR","NOMATCH","CHROOT","CWD","TYPE","ROLE","PRIVS", +"LIMITPRIVS","CMND_TIMEOUT","NOTBEFORE","NOTAFTER","MYSELF","SHA224_TOK", +"SHA256_TOK","SHA384_TOK","SHA512_TOK", }; const char * const sudoersrule[] = {"$accept : file", @@ -472,6 +477,8 @@ const char * const sudoersrule[] = "digcmnd : digestlist opcmnd", "opcmnd : cmnd", "opcmnd : '!' cmnd", +"chdirspec : CWD '=' WORD", +"chrootspec : CHROOT '=' WORD", "timeoutspec : CMND_TIMEOUT '=' WORD", "notbeforespec : NOTBEFORE '=' WORD", "notafterspec : NOTAFTER '=' WORD", @@ -487,6 +494,8 @@ const char * const sudoersrule[] = "runaslist : ':' grouplist", "runaslist : ':'", "options :", +"options : options chdirspec", +"options : options chrootspec", "options : options notbeforespec", "options : options notafterspec", "options : options timeoutspec", @@ -574,7 +583,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 974 "gram.y" +#line 1004 "gram.y" void sudoerserror(const char *s) { @@ -864,6 +873,7 @@ free_privilege(struct privilege *priv) struct member_list *prev_binding = NULL; struct cmndspec *cs; struct defaults *def; + char *runcwd = NULL, *runchroot = NULL; #ifdef HAVE_SELINUX char *role = NULL, *type = NULL; #endif /* HAVE_SELINUX */ @@ -876,6 +886,15 @@ free_privilege(struct privilege *priv) free_members(&priv->hostlist); while ((cs = TAILQ_FIRST(&priv->cmndlist)) != NULL) { TAILQ_REMOVE(&priv->cmndlist, cs, entries); + /* Only free the first instance of runcwd/runchroot. */ + if (cs->runcwd != runcwd) { + runcwd = cs->runcwd; + free(cs->runcwd); + } + if (cs->runchroot != runchroot) { + runcwd = cs->runchroot; + free(cs->runchroot); + } #ifdef HAVE_SELINUX /* Only free the first instance of a role/type. */ if (cs->role != role) { @@ -1047,7 +1066,7 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1037 "gram.c" +#line 1056 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { @@ -1238,25 +1257,25 @@ yyreduce: switch (yyn) { case 1: -#line 182 "gram.y" +#line 186 "gram.y" { ; /* empty file */ } break; case 5: -#line 192 "gram.y" +#line 196 "gram.y" { ; /* blank line */ } break; case 6: -#line 195 "gram.y" +#line 199 "gram.y" { yyerrok; } break; case 7: -#line 198 "gram.y" +#line 202 "gram.y" { if (!push_include(yyvsp[0].string, false)) { free(yyvsp[0].string); @@ -1266,7 +1285,7 @@ case 7: } break; case 8: -#line 205 "gram.y" +#line 209 "gram.y" { if (!push_include(yyvsp[0].string, true)) { free(yyvsp[0].string); @@ -1276,7 +1295,7 @@ case 8: } break; case 9: -#line 212 "gram.y" +#line 216 "gram.y" { if (!add_userspec(yyvsp[-2].member, yyvsp[-1].privilege)) { sudoerserror(N_("unable to allocate memory")); @@ -1285,99 +1304,99 @@ case 9: } break; case 10: -#line 218 "gram.y" +#line 222 "gram.y" { ; } break; case 11: -#line 221 "gram.y" +#line 225 "gram.y" { ; } break; case 12: -#line 224 "gram.y" +#line 228 "gram.y" { ; } break; case 13: -#line 227 "gram.y" +#line 231 "gram.y" { ; } break; case 14: -#line 230 "gram.y" +#line 234 "gram.y" { if (!add_defaults(DEFAULTS, NULL, yyvsp[-1].defaults)) YYERROR; } break; case 15: -#line 234 "gram.y" +#line 238 "gram.y" { if (!add_defaults(DEFAULTS_USER, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 16: -#line 238 "gram.y" +#line 242 "gram.y" { if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 17: -#line 242 "gram.y" +#line 246 "gram.y" { if (!add_defaults(DEFAULTS_HOST, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 18: -#line 246 "gram.y" +#line 250 "gram.y" { if (!add_defaults(DEFAULTS_CMND, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 19: -#line 252 "gram.y" +#line 256 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 20: -#line 255 "gram.y" +#line 259 "gram.y" { yyerrok; yyval.string = yyvsp[-2].string; } break; case 21: -#line 261 "gram.y" +#line 265 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 22: -#line 264 "gram.y" +#line 268 "gram.y" { yyerrok; yyval.string = yyvsp[-2].string; } break; case 24: -#line 271 "gram.y" +#line 275 "gram.y" { HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); yyval.defaults = yyvsp[-2].defaults; } break; case 25: -#line 277 "gram.y" +#line 281 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, true); if (yyval.defaults == NULL) { @@ -1387,7 +1406,7 @@ case 25: } break; case 26: -#line 284 "gram.y" +#line 288 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, false); if (yyval.defaults == NULL) { @@ -1397,7 +1416,7 @@ case 26: } break; case 27: -#line 291 "gram.y" +#line 295 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); if (yyval.defaults == NULL) { @@ -1407,7 +1426,7 @@ case 27: } break; case 28: -#line 298 "gram.y" +#line 302 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); if (yyval.defaults == NULL) { @@ -1417,7 +1436,7 @@ case 28: } break; case 29: -#line 305 "gram.y" +#line 309 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); if (yyval.defaults == NULL) { @@ -1427,21 +1446,21 @@ case 29: } break; case 31: -#line 315 "gram.y" +#line 319 "gram.y" { HLTQ_CONCAT(yyvsp[-2].privilege, yyvsp[0].privilege, entries); yyval.privilege = yyvsp[-2].privilege; } break; case 32: -#line 319 "gram.y" +#line 323 "gram.y" { yyerrok; yyval.privilege = yyvsp[-3].privilege; } break; case 33: -#line 325 "gram.y" +#line 329 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1456,21 +1475,21 @@ case 33: } break; case 34: -#line 339 "gram.y" +#line 343 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 35: -#line 343 "gram.y" +#line 347 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 36: -#line 349 "gram.y" +#line 353 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -1480,7 +1499,7 @@ case 36: } break; case 37: -#line 356 "gram.y" +#line 360 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -1490,7 +1509,7 @@ case 37: } break; case 38: -#line 363 "gram.y" +#line 367 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -1500,7 +1519,7 @@ case 38: } break; case 39: -#line 370 "gram.y" +#line 374 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); if (yyval.member == NULL) { @@ -1510,7 +1529,7 @@ case 39: } break; case 40: -#line 377 "gram.y" +#line 381 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -1520,11 +1539,17 @@ case 40: } break; case 42: -#line 387 "gram.y" +#line 391 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); HLTQ_CONCAT(yyvsp[-2].cmndspec, yyvsp[0].cmndspec, entries); + + /* propagate runcwd and runchroot */ + if (yyvsp[0].cmndspec->runcwd == NULL) + yyvsp[0].cmndspec->runcwd = prev->runcwd; + if (yyvsp[0].cmndspec->runchroot == NULL) + yyvsp[0].cmndspec->runchroot = prev->runchroot; #ifdef HAVE_SELINUX /* propagate role and type */ if (yyvsp[0].cmndspec->role == NULL && yyvsp[0].cmndspec->type == NULL) { @@ -1574,7 +1599,7 @@ case 42: } break; case 43: -#line 440 "gram.y" +#line 450 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { @@ -1617,6 +1642,8 @@ case 43: cs->notbefore = yyvsp[-2].options.notbefore; cs->notafter = yyvsp[-2].options.notafter; cs->timeout = yyvsp[-2].options.timeout; + cs->runcwd = yyvsp[-2].options.runcwd; + cs->runchroot = yyvsp[-2].options.runchroot; cs->tags = yyvsp[-1].tag; cs->cmnd = yyvsp[0].member; HLTQ_INIT(cs, entries); @@ -1628,7 +1655,7 @@ case 43: } break; case 44: -#line 493 "gram.y" +#line 505 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1638,7 +1665,7 @@ case 44: } break; case 45: -#line 500 "gram.y" +#line 512 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1648,7 +1675,7 @@ case 45: } break; case 46: -#line 507 "gram.y" +#line 519 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1658,7 +1685,7 @@ case 46: } break; case 47: -#line 514 "gram.y" +#line 526 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1668,20 +1695,20 @@ case 47: } break; case 49: -#line 524 "gram.y" +#line 536 "gram.y" { HLTQ_CONCAT(yyvsp[-2].digest, yyvsp[0].digest, entries); yyval.digest = yyvsp[-2].digest; } break; case 50: -#line 530 "gram.y" +#line 542 "gram.y" { yyval.member = yyvsp[0].member; } break; case 51: -#line 533 "gram.y" +#line 545 "gram.y" { struct sudo_command *c = (struct sudo_command *) yyvsp[0].member->name; @@ -1703,75 +1730,87 @@ case 51: } break; case 52: -#line 554 "gram.y" +#line 566 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 53: -#line 558 "gram.y" +#line 570 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 54: -#line 564 "gram.y" +#line 576 "gram.y" { yyval.string = yyvsp[0].string; } break; case 55: -#line 569 "gram.y" +#line 581 "gram.y" { yyval.string = yyvsp[0].string; } break; case 56: -#line 573 "gram.y" +#line 586 "gram.y" { yyval.string = yyvsp[0].string; } break; case 57: -#line 578 "gram.y" +#line 591 "gram.y" { yyval.string = yyvsp[0].string; } break; case 58: -#line 583 "gram.y" +#line 595 "gram.y" { yyval.string = yyvsp[0].string; } break; case 59: -#line 588 "gram.y" +#line 600 "gram.y" { yyval.string = yyvsp[0].string; } break; case 60: -#line 592 "gram.y" +#line 605 "gram.y" { yyval.string = yyvsp[0].string; } break; case 61: -#line 597 "gram.y" +#line 610 "gram.y" +{ + yyval.string = yyvsp[0].string; + } +break; +case 62: +#line 614 "gram.y" +{ + yyval.string = yyvsp[0].string; + } +break; +case 63: +#line 619 "gram.y" { yyval.runas = NULL; } break; -case 62: -#line 600 "gram.y" +case 64: +#line 622 "gram.y" { yyval.runas = yyvsp[-1].runas; } break; -case 63: -#line 605 "gram.y" +case 65: +#line 627 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1788,8 +1827,8 @@ case 63: } } break; -case 64: -#line 620 "gram.y" +case 66: +#line 642 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1800,8 +1839,8 @@ case 64: /* $$->runasgroups = NULL; */ } break; -case 65: -#line 629 "gram.y" +case 67: +#line 651 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1812,8 +1851,8 @@ case 65: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 66: -#line 638 "gram.y" +case 68: +#line 660 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1824,8 +1863,8 @@ case 66: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 67: -#line 647 "gram.y" +case 69: +#line 669 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1842,14 +1881,28 @@ case 67: } } break; -case 68: -#line 664 "gram.y" +case 70: +#line 686 "gram.y" { init_options(&yyval.options); } break; -case 69: -#line 667 "gram.y" +case 71: +#line 689 "gram.y" +{ + free(yyval.options.runcwd); + yyval.options.runcwd = yyvsp[0].string; + } +break; +case 72: +#line 693 "gram.y" +{ + free(yyval.options.runchroot); + yyval.options.runchroot = yyvsp[0].string; + } +break; +case 73: +#line 697 "gram.y" { yyval.options.notbefore = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1859,8 +1912,8 @@ case 69: } } break; -case 70: -#line 675 "gram.y" +case 74: +#line 705 "gram.y" { yyval.options.notafter = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1870,8 +1923,8 @@ case 70: } } break; -case 71: -#line 683 "gram.y" +case 75: +#line 713 "gram.y" { yyval.options.timeout = parse_timeout(yyvsp[0].string); free(yyvsp[0].string); @@ -1884,8 +1937,8 @@ case 71: } } break; -case 72: -#line 694 "gram.y" +case 76: +#line 724 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.role); @@ -1893,8 +1946,8 @@ case 72: #endif } break; -case 73: -#line 700 "gram.y" +case 77: +#line 730 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.type); @@ -1902,8 +1955,8 @@ case 73: #endif } break; -case 74: -#line 706 "gram.y" +case 78: +#line 736 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.privs); @@ -1911,8 +1964,8 @@ case 74: #endif } break; -case 75: -#line 712 "gram.y" +case 79: +#line 742 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.limitprivs); @@ -1920,98 +1973,98 @@ case 75: #endif } break; -case 76: -#line 720 "gram.y" +case 80: +#line 750 "gram.y" { TAGS_INIT(yyval.tag); } break; -case 77: -#line 723 "gram.y" +case 81: +#line 753 "gram.y" { yyval.tag.nopasswd = true; } break; -case 78: -#line 726 "gram.y" +case 82: +#line 756 "gram.y" { yyval.tag.nopasswd = false; } break; -case 79: -#line 729 "gram.y" +case 83: +#line 759 "gram.y" { yyval.tag.noexec = true; } break; -case 80: -#line 732 "gram.y" +case 84: +#line 762 "gram.y" { yyval.tag.noexec = false; } break; -case 81: -#line 735 "gram.y" +case 85: +#line 765 "gram.y" { yyval.tag.setenv = true; } break; -case 82: -#line 738 "gram.y" +case 86: +#line 768 "gram.y" { yyval.tag.setenv = false; } break; -case 83: -#line 741 "gram.y" +case 87: +#line 771 "gram.y" { yyval.tag.log_input = true; } break; -case 84: -#line 744 "gram.y" +case 88: +#line 774 "gram.y" { yyval.tag.log_input = false; } break; -case 85: -#line 747 "gram.y" +case 89: +#line 777 "gram.y" { yyval.tag.log_output = true; } break; -case 86: -#line 750 "gram.y" +case 90: +#line 780 "gram.y" { yyval.tag.log_output = false; } break; -case 87: -#line 753 "gram.y" +case 91: +#line 783 "gram.y" { yyval.tag.follow = true; } break; -case 88: -#line 756 "gram.y" +case 92: +#line 786 "gram.y" { yyval.tag.follow = false; } break; -case 89: -#line 759 "gram.y" +case 93: +#line 789 "gram.y" { yyval.tag.send_mail = true; } break; -case 90: -#line 762 "gram.y" +case 94: +#line 792 "gram.y" { yyval.tag.send_mail = false; } break; -case 91: -#line 767 "gram.y" +case 95: +#line 797 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2020,8 +2073,8 @@ case 91: } } break; -case 92: -#line 774 "gram.y" +case 96: +#line 804 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2030,8 +2083,8 @@ case 92: } } break; -case 93: -#line 781 "gram.y" +case 97: +#line 811 "gram.y" { struct sudo_command *c; @@ -2047,8 +2100,8 @@ case 93: } } break; -case 96: -#line 801 "gram.y" +case 100: +#line 831 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, HOSTALIAS, @@ -2059,15 +2112,15 @@ case 96: } } break; -case 98: -#line 813 "gram.y" +case 102: +#line 843 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 101: -#line 823 "gram.y" +case 105: +#line 853 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, CMNDALIAS, @@ -2078,15 +2131,15 @@ case 101: } } break; -case 103: -#line 835 "gram.y" +case 107: +#line 865 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 106: -#line 845 "gram.y" +case 110: +#line 875 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, RUNASALIAS, @@ -2097,8 +2150,8 @@ case 106: } } break; -case 109: -#line 860 "gram.y" +case 113: +#line 890 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, USERALIAS, @@ -2109,29 +2162,29 @@ case 109: } } break; -case 111: -#line 872 "gram.y" +case 115: +#line 902 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 112: -#line 878 "gram.y" +case 116: +#line 908 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 113: -#line 882 "gram.y" +case 117: +#line 912 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 114: -#line 888 "gram.y" +case 118: +#line 918 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2140,8 +2193,8 @@ case 114: } } break; -case 115: -#line 895 "gram.y" +case 119: +#line 925 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2150,8 +2203,8 @@ case 115: } } break; -case 116: -#line 902 "gram.y" +case 120: +#line 932 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -2160,8 +2213,8 @@ case 116: } } break; -case 117: -#line 909 "gram.y" +case 121: +#line 939 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); if (yyval.member == NULL) { @@ -2170,8 +2223,8 @@ case 117: } } break; -case 118: -#line 916 "gram.y" +case 122: +#line 946 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2180,29 +2233,29 @@ case 118: } } break; -case 120: -#line 926 "gram.y" +case 124: +#line 956 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 121: -#line 932 "gram.y" +case 125: +#line 962 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 122: -#line 936 "gram.y" +case 126: +#line 966 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 123: -#line 942 "gram.y" +case 127: +#line 972 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2211,8 +2264,8 @@ case 123: } } break; -case 124: -#line 949 "gram.y" +case 128: +#line 979 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2221,8 +2274,8 @@ case 124: } } break; -case 125: -#line 956 "gram.y" +case 129: +#line 986 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2231,19 +2284,19 @@ case 125: } } break; -case 126: -#line 965 "gram.y" +case 130: +#line 995 "gram.y" { ; } break; -case 127: -#line 968 "gram.y" +case 131: +#line 998 "gram.y" { ; /* EOF */ } break; -#line 2233 "gram.c" +#line 2286 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.h b/plugins/sudoers/gram.h index ba5921112..4b0d9fe5f 100644 --- a/plugins/sudoers/gram.h +++ b/plugins/sudoers/gram.h @@ -35,18 +35,20 @@ #define RUNASALIAS 290 #define ERROR 291 #define NOMATCH 292 -#define TYPE 293 -#define ROLE 294 -#define PRIVS 295 -#define LIMITPRIVS 296 -#define CMND_TIMEOUT 297 -#define NOTBEFORE 298 -#define NOTAFTER 299 -#define MYSELF 300 -#define SHA224_TOK 301 -#define SHA256_TOK 302 -#define SHA384_TOK 303 -#define SHA512_TOK 304 +#define CHROOT 293 +#define CWD 294 +#define TYPE 295 +#define ROLE 296 +#define PRIVS 297 +#define LIMITPRIVS 298 +#define CMND_TIMEOUT 299 +#define NOTBEFORE 300 +#define NOTAFTER 301 +#define MYSELF 302 +#define SHA224_TOK 303 +#define SHA256_TOK 304 +#define SHA384_TOK 305 +#define SHA512_TOK 306 #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 6aabd4848..2aafa4e84 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -129,6 +129,8 @@ static struct command_digest *new_digest(int, char *); %token '\n' /* newline (with optional comment) */ %token ERROR /* error from lexer */ %token NOMATCH /* no match from lexer */ +%token CHROOT /* root directory for command */ +%token CWD /* working directory for command */ %token TYPE /* SELinux type */ %token ROLE /* SELinux role */ %token PRIVS /* Solaris privileges */ @@ -165,6 +167,8 @@ static struct command_digest *new_digest(int, char *); %type privileges %type cmndtag %type options +%type chdirspec +%type chrootspec %type rolespec %type typespec %type privsspec @@ -388,6 +392,12 @@ cmndspeclist : cmndspec struct cmndspec *prev; prev = HLTQ_LAST($1, cmndspec, entries); HLTQ_CONCAT($1, $3, entries); + + /* propagate runcwd and runchroot */ + if ($3->runcwd == NULL) + $3->runcwd = prev->runcwd; + if ($3->runchroot == NULL) + $3->runchroot = prev->runchroot; #ifdef HAVE_SELINUX /* propagate role and type */ if ($3->role == NULL && $3->type == NULL) { @@ -479,6 +489,8 @@ cmndspec : runasspec options cmndtag digcmnd { cs->notbefore = $2.notbefore; cs->notafter = $2.notafter; cs->timeout = $2.timeout; + cs->runcwd = $2.runcwd; + cs->runchroot = $2.runchroot; cs->tags = $3; cs->cmnd = $4; HLTQ_INIT(cs, entries); @@ -561,6 +573,16 @@ opcmnd : cmnd { } ; +chdirspec : CWD '=' WORD { + $$ = $3; + } + ; + +chrootspec : CHROOT '=' WORD { + $$ = $3; + } + ; + timeoutspec : CMND_TIMEOUT '=' WORD { $$ = $3; } @@ -664,6 +686,14 @@ runaslist : /* empty */ { options : /* empty */ { init_options(&$$); } + | options chdirspec { + free($$.runcwd); + $$.runcwd = $2; + } + | options chrootspec { + free($$.runchroot); + $$.runchroot = $2; + } | options notbeforespec { $$.notbefore = parse_gentime($2); free($2); @@ -1260,6 +1290,7 @@ free_privilege(struct privilege *priv) struct member_list *prev_binding = NULL; struct cmndspec *cs; struct defaults *def; + char *runcwd = NULL, *runchroot = NULL; #ifdef HAVE_SELINUX char *role = NULL, *type = NULL; #endif /* HAVE_SELINUX */ @@ -1272,6 +1303,15 @@ free_privilege(struct privilege *priv) free_members(&priv->hostlist); while ((cs = TAILQ_FIRST(&priv->cmndlist)) != NULL) { TAILQ_REMOVE(&priv->cmndlist, cs, entries); + /* Only free the first instance of runcwd/runchroot. */ + if (cs->runcwd != runcwd) { + runcwd = cs->runcwd; + free(cs->runcwd); + } + if (cs->runchroot != runchroot) { + runcwd = cs->runchroot; + free(cs->runchroot); + } #ifdef HAVE_SELINUX /* Only free the first instance of a role/type. */ if (cs->role != role) { diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index bd598a075..f01bb93e3 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -239,6 +239,24 @@ apply_cmndspec(struct cmndspec *cs) #endif /* HAVE_PRIV_SET */ if (cs->timeout > 0) def_command_timeout = cs->timeout; + if (cs->runcwd != NULL) { + free(def_runcwd); + def_runcwd = strdup(cs->runcwd); + if (def_runcwd == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + debug_return_bool(false); + } + } + if (cs->runchroot != NULL) { + free(def_runchroot); + def_runchroot = strdup(cs->runchroot); + if (def_runchroot == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + debug_return_bool(false); + } + } if (cs->tags.nopasswd != UNSPEC) def_authenticate = !cs->tags.nopasswd; if (cs->tags.noexec != UNSPEC) diff --git a/plugins/sudoers/parse.h b/plugins/sudoers/parse.h index ecc81b835..7c4fa9350 100644 --- a/plugins/sudoers/parse.h +++ b/plugins/sudoers/parse.h @@ -131,6 +131,8 @@ struct command_options { time_t notbefore; /* time restriction */ time_t notafter; /* time restriction */ int timeout; /* command timeout */ + char *runcwd; /* working directory */ + char *runchroot; /* root directory */ #ifdef HAVE_SELINUX char *role, *type; /* SELinux role and type */ #endif @@ -211,6 +213,8 @@ struct cmndspec { int timeout; /* command timeout */ time_t notbefore; /* time restriction */ time_t notafter; /* time restriction */ + char *runcwd; /* working directory */ + char *runchroot; /* root directory */ #ifdef HAVE_SELINUX char *role, *type; /* SELinux role and type */ #endif diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index 1dc0f16c9..57da0f7d2 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2010-2017 Todd C. Miller + * Copyright (c) 2010-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -567,7 +567,7 @@ sudoers_policy_exec_setup(char *argv[], char *envp[], mode_t cmnd_umask, debug_return_bool(true); /* nothing to do */ /* Increase the length of command_info as needed, it is *not* checked. */ - command_info = calloc(54, sizeof(char *)); + command_info = calloc(55, sizeof(char *)); if (command_info == NULL) goto oom; @@ -618,7 +618,15 @@ sudoers_policy_exec_setup(char *argv[], char *envp[], mode_t cmnd_umask, goto oom; } } - if (ISSET(sudo_mode, MODE_LOGIN_SHELL)) { + if (def_runcwd) { + /* Set cwd to explicit value in sudoers. */ + if (!expand_tilde(&def_runcwd, runas_pw->pw_name)) { + sudo_warnx(U_("invalid working directory: %s"), def_runcwd); + goto bad; + } + if ((command_info[info_len++] = sudo_new_key_val("cwd", def_runcwd)) == NULL) + goto oom; + } else if (ISSET(sudo_mode, MODE_LOGIN_SHELL)) { /* Set cwd to run user's homedir. */ if ((command_info[info_len++] = sudo_new_key_val("cwd", runas_pw->pw_dir)) == NULL) goto oom; @@ -779,6 +787,14 @@ sudoers_policy_exec_setup(char *argv[], char *envp[], mode_t cmnd_umask, if (asprintf(&command_info[info_len++], "timeout=%u", timeout) == -1) goto oom; } + if (def_runchroot != NULL) { + if (!expand_tilde(&def_runchroot, runas_pw->pw_name)) { + sudo_warnx(U_("invalid chroot directory: %s"), def_runchroot); + goto bad; + } + if ((command_info[info_len++] = sudo_new_key_val("chroot", def_runchroot)) == NULL) + goto oom; + } if (cmnd_umask != ACCESSPERMS) { if (asprintf(&command_info[info_len++], "umask=0%o", (unsigned int)cmnd_umask) == -1) goto oom; diff --git a/plugins/sudoers/regress/sudoers/test1.toke.ok b/plugins/sudoers/regress/sudoers/test1.toke.ok index 79945dc9e..28c85922b 100644 --- a/plugins/sudoers/regress/sudoers/test1.toke.ok +++ b/plugins/sudoers/regress/sudoers/test1.toke.ok @@ -2,7 +2,7 @@ # # # -WORD(5) ALL = LOG_INPUT LOG_OUTPUT COMMAND ARG : ALL = NOLOG_INPUT NOLOG_OUTPUT COMMAND -WORD(5) ALL = NOPASSWD NOEXEC SETENV COMMAND : ALL = PASSWD EXEC NOSETENV COMMAND -WORD(5) ALL = MAIL COMMAND : ALL = NOMAIL COMMAND -WORD(5) ALL = FOLLOW COMMAND ARG : ALL = NOFOLLOW COMMAND ARG +WORD(6) ALL = LOG_INPUT LOG_OUTPUT COMMAND ARG : ALL = NOLOG_INPUT NOLOG_OUTPUT COMMAND +WORD(6) ALL = NOPASSWD NOEXEC SETENV COMMAND : ALL = PASSWD EXEC NOSETENV COMMAND +WORD(6) ALL = MAIL COMMAND : ALL = NOMAIL COMMAND +WORD(6) ALL = FOLLOW COMMAND ARG : ALL = NOFOLLOW COMMAND ARG diff --git a/plugins/sudoers/regress/sudoers/test11.toke.ok b/plugins/sudoers/regress/sudoers/test11.toke.ok index d57d6c391..bfef7a71c 100644 --- a/plugins/sudoers/regress/sudoers/test11.toke.ok +++ b/plugins/sudoers/regress/sudoers/test11.toke.ok @@ -1,2 +1,2 @@ -WORD(5) +WORD(6) <*> \ No newline at end of file diff --git a/plugins/sudoers/regress/sudoers/test12.toke.ok b/plugins/sudoers/regress/sudoers/test12.toke.ok index a1995f0d6..0d7995989 100644 --- a/plugins/sudoers/regress/sudoers/test12.toke.ok +++ b/plugins/sudoers/regress/sudoers/test12.toke.ok @@ -1,2 +1,2 @@ -WORD(5) ALL = ( ALL ) +WORD(6) ALL = ( ALL ) <*> \ No newline at end of file diff --git a/plugins/sudoers/regress/sudoers/test13.toke.ok b/plugins/sudoers/regress/sudoers/test13.toke.ok index e189ffded..faebe902e 100644 --- a/plugins/sudoers/regress/sudoers/test13.toke.ok +++ b/plugins/sudoers/regress/sudoers/test13.toke.ok @@ -1 +1 @@ -WORD(5) ALL = ( ALL ) <*> \ No newline at end of file +WORD(6) ALL = ( ALL ) <*> \ No newline at end of file diff --git a/plugins/sudoers/regress/sudoers/test14.toke.ok b/plugins/sudoers/regress/sudoers/test14.toke.ok index 4646150f8..0b4f36a71 100644 --- a/plugins/sudoers/regress/sudoers/test14.toke.ok +++ b/plugins/sudoers/regress/sudoers/test14.toke.ok @@ -1,6 +1,6 @@ CMNDALIAS ALIAS = SHA224_TOK : DIGEST , SHA224_TOK : DIGEST COMMAND CMNDALIAS ALIAS = SHA256_TOK : DIGEST , SHA256_TOK : DIGEST COMMAND -WORD(5) ALL = ALIAS , ALIAS , SHA512_TOK : DIGEST COMMAND +WORD(6) ALL = ALIAS , ALIAS , SHA512_TOK : DIGEST COMMAND -WORD(5) ALL = SHA256_TOK : DIGEST , SHA256_TOK : DIGEST ALL +WORD(6) ALL = SHA256_TOK : DIGEST , SHA256_TOK : DIGEST ALL diff --git a/plugins/sudoers/regress/sudoers/test15.toke.ok b/plugins/sudoers/regress/sudoers/test15.toke.ok index c26de2e31..08bb2b873 100644 --- a/plugins/sudoers/regress/sudoers/test15.toke.ok +++ b/plugins/sudoers/regress/sudoers/test15.toke.ok @@ -1,2 +1,2 @@ # -WORD(5) ALL = COMMAND ARG +WORD(6) ALL = COMMAND ARG diff --git a/plugins/sudoers/regress/sudoers/test16.toke.ok b/plugins/sudoers/regress/sudoers/test16.toke.ok index 9b8c41bab..debc4c770 100644 --- a/plugins/sudoers/regress/sudoers/test16.toke.ok +++ b/plugins/sudoers/regress/sudoers/test16.toke.ok @@ -1,3 +1,3 @@ # CMNDALIAS ALIAS = COMMAND ARG -WORD(5) ALL = ALIAS +WORD(6) ALL = ALIAS diff --git a/plugins/sudoers/regress/sudoers/test17.toke.ok b/plugins/sudoers/regress/sudoers/test17.toke.ok index 17bb5fb5f..d0a82ca77 100644 --- a/plugins/sudoers/regress/sudoers/test17.toke.ok +++ b/plugins/sudoers/regress/sudoers/test17.toke.ok @@ -1,11 +1,11 @@ # DEFAULTS DEFVAR = WORD(2) -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND , COMMAND , CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND , COMMAND , CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND , CMND_TIMEOUT = WORD(6) COMMAND , CMND_TIMEOUT = WORD(6) COMMAND , CMND_TIMEOUT = WORD(6) COMMAND , CMND_TIMEOUT = WORD(6) COMMAND , CMND_TIMEOUT = WORD(6) COMMAND diff --git a/plugins/sudoers/regress/sudoers/test18.toke.ok b/plugins/sudoers/regress/sudoers/test18.toke.ok index 66ffa2eb5..56bbdef14 100644 --- a/plugins/sudoers/regress/sudoers/test18.toke.ok +++ b/plugins/sudoers/regress/sudoers/test18.toke.ok @@ -1,10 +1,10 @@ # DEFAULTS DEFVAR = WORD(2) -DEFAULTS_USER WORD(5) DEFVAR = WORD(2) -WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND , COMMAND , CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND +DEFAULTS_USER WORD(6) DEFVAR = WORD(2) +WORD(6) ALL = CMND_TIMEOUT = WORD(6) <*> COMMAND , COMMAND , CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) <*> COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) <*> COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) <*> COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) <*> COMMAND testsudoers: sudoers:2: value "2d8h10m59ss" is invalid for option "command_timeout" testsudoers: sudoers:3: value "15f" is invalid for option "command_timeout" diff --git a/plugins/sudoers/regress/sudoers/test19.toke.ok b/plugins/sudoers/regress/sudoers/test19.toke.ok index 45c5d2749..04461d9d8 100644 --- a/plugins/sudoers/regress/sudoers/test19.toke.ok +++ b/plugins/sudoers/regress/sudoers/test19.toke.ok @@ -1,12 +1,12 @@ # # -WORD(5) ALL = NOTBEFORE = WORD(5) NOTAFTER = WORD(5) COMMAND , COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND , NOTAFTER = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) NOTAFTER = WORD(6) COMMAND , COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND , NOTAFTER = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND diff --git a/plugins/sudoers/regress/sudoers/test22.toke.ok b/plugins/sudoers/regress/sudoers/test22.toke.ok index baf395bda..9eeb964df 100644 --- a/plugins/sudoers/regress/sudoers/test22.toke.ok +++ b/plugins/sudoers/regress/sudoers/test22.toke.ok @@ -1,6 +1,6 @@ # -WORD(5) ALL = ( : ) ALL -WORD(5) ALL = ( : ) ALL -WORD(5) ALL = ( ) ALL -WORD(5) ALL = ( ) ALL +WORD(6) ALL = ( : ) ALL +WORD(6) ALL = ( : ) ALL +WORD(6) ALL = ( ) ALL +WORD(6) ALL = ( ) ALL diff --git a/plugins/sudoers/regress/sudoers/test3.toke.ok b/plugins/sudoers/regress/sudoers/test3.toke.ok index 49f2e51af..028f333b1 100644 --- a/plugins/sudoers/regress/sudoers/test3.toke.ok +++ b/plugins/sudoers/regress/sudoers/test3.toke.ok @@ -1,6 +1,6 @@ # -USERALIAS ALIAS = WORD(5) , WORD(5) +USERALIAS ALIAS = WORD(6) , WORD(6) DEFAULTS_USER ALIAS DEFVAR -DEFAULTS_USER WORD(5) , WORD(5) DEFVAR -DEFAULTS_USER WORD(5) , WORD(5) DEFVAR -DEFAULTS_USER WORD(5) , WORD(5) DEFVAR +DEFAULTS_USER WORD(6) , WORD(6) DEFVAR +DEFAULTS_USER WORD(6) , WORD(6) DEFVAR +DEFAULTS_USER WORD(6) , WORD(6) DEFVAR diff --git a/plugins/sudoers/regress/sudoers/test4.toke.ok b/plugins/sudoers/regress/sudoers/test4.toke.ok index 3cb47070f..307945f43 100644 --- a/plugins/sudoers/regress/sudoers/test4.toke.ok +++ b/plugins/sudoers/regress/sudoers/test4.toke.ok @@ -1,5 +1,5 @@ # -USERALIAS ALIAS = WORD(5) : ALIAS = WORD(5) +USERALIAS ALIAS = WORD(6) : ALIAS = WORD(6) # -USERALIAS ALIAS = WORD(5) <*> ERROR ALIAS = WORD(5) +USERALIAS ALIAS = WORD(6) <*> ERROR ALIAS = WORD(6) diff --git a/plugins/sudoers/regress/sudoers/test6.toke.ok b/plugins/sudoers/regress/sudoers/test6.toke.ok index a9c0522ce..db8e1c598 100644 --- a/plugins/sudoers/regress/sudoers/test6.toke.ok +++ b/plugins/sudoers/regress/sudoers/test6.toke.ok @@ -1,12 +1,12 @@ # -DEFAULTS_USER WORD(5) DEFVAR -DEFAULTS_RUNAS WORD(5) DEFVAR +DEFAULTS_USER WORD(6) DEFVAR +DEFAULTS_RUNAS WORD(6) DEFVAR DEFAULTS_USER BEGINSTR STRBODY ENDSTR WORD(4) DEFVAR DEFAULTS_RUNAS BEGINSTR STRBODY ENDSTR WORD(4) DEFVAR # -WORD(5) ALL = ALL -WORD(5) ALL = ( WORD(5) : WORD(5) ) ALL +WORD(6) ALL = ALL +WORD(6) ALL = ( WORD(6) : WORD(6) ) ALL BEGINSTR STRBODY ENDSTR WORD(4) ALL = ALL BEGINSTR STRBODY ENDSTR WORD(4) ALL = ( BEGINSTR STRBODY ENDSTR WORD(4) : BEGINSTR STRBODY ENDSTR WORD(4) ) ALL diff --git a/plugins/sudoers/regress/sudoers/test8.toke.ok b/plugins/sudoers/regress/sudoers/test8.toke.ok index 9d6eaf9b1..4b39d04fd 100644 --- a/plugins/sudoers/regress/sudoers/test8.toke.ok +++ b/plugins/sudoers/regress/sudoers/test8.toke.ok @@ -1,7 +1,7 @@ # USERALIAS ALIAS = BEGINSTR STRBODY ENDSTR WORD(4) USERALIAS ALIAS = BEGINSTR STRBODY STRBODY ENDSTR WORD(4) -USERALIAS ALIAS = WORD(5) +USERALIAS ALIAS = WORD(6) # USERALIAS ALIAS = BEGINSTR STRBODY <*> ERROR ERROR \ No newline at end of file diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index 3b63bd437..9ef52afe4 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1993-1996, 1998-2005, 2007-2017 + * Copyright (c) 1993-1996, 1998-2005, 2007-2020 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -425,6 +425,9 @@ extern const char *path_plugin_dir; char *find_editor(int nfiles, char **files, int *argc_out, char ***argv_out, char * const *whitelist, const char **env_editor, bool env_error); +/* exptilde.c */ +bool expand_tilde(char **path, const char *user); + /* gc.c */ enum sudoers_gc_types { GC_UNKNOWN, diff --git a/plugins/sudoers/sudoers_version.h b/plugins/sudoers/sudoers_version.h index 50c729d59..35808687a 100644 --- a/plugins/sudoers/sudoers_version.h +++ b/plugins/sudoers/sudoers_version.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2011-2013, 2015, 2017 + * Copyright (c) 2011-2013, 2015, 2017, 2019-2020 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -69,6 +69,7 @@ * 46 sudo 1.8.20, added TIMEOUT, NOTBEFORE and NOTAFTER options. * 47 sudo 1.9.0, Cmd_Alias treated as Cmnd_Alias, support for multiple digests per command and for ALL. * 48 sudo 1.9.1, @include and @includedir, include path escaping/quoting. + * 49 sudo 1.9.3, CWD and CHDIR options. */ #ifndef SUDOERS_VERSION_H diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index d9dd70af6..f5ee29495 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -393,8 +393,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 78 -#define YY_END_OF_BUFFER 79 +#define YY_NUM_RULES 81 +#define YY_END_OF_BUFFER 82 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -402,108 +402,131 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[916] = +static yyconst flex_int16_t yy_accept[1126] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 79, 64, 74, 73, - 77, 72, 63, 76, 40, 67, 68, 40, 69, 64, - 64, 64, 64, 71, 70, 77, 64, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 77, - 64, 64, 74, 76, 55, 55, 55, 55, 55, 2, - 77, 1, 64, 55, 55, 55, 64, 17, 16, 16, - 17, 16, 16, 77, 76, 77, 3, 9, 8, 9, - 4, 9, 5, 77, 13, 13, 13, 11, 12, 77, - 19, 19, 18, 18, 18, 19, 18, 18, 18, 18, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 67, + 77, 76, 80, 75, 66, 79, 40, 70, 71, 40, + 72, 67, 67, 67, 67, 74, 73, 80, 67, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 80, 67, 67, 77, 79, 57, 57, 57, + 57, 57, 2, 80, 1, 67, 57, 57, 57, 67, + 17, 16, 16, 17, 16, 16, 80, 79, 80, 3, + 9, 8, 9, 4, 9, 5, 80, 13, 13, 13, + 11, 12, 80, 19, 19, 18, 18, 18, 19, 18, - 19, 19, 19, 19, 19, 19, 18, 19, 19, 65, - 65, 66, 65, 64, 0, 74, 73, 72, 76, 76, - 0, 0, 64, 42, 0, 40, 0, 41, 0, 62, - 62, 0, 64, 64, 0, 64, 64, 64, 64, 0, - 45, 64, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 0, 75, 64, - 64, 64, 64, 74, 0, 0, 0, 0, 0, 76, - 64, 64, 64, 64, 64, 2, 1, 0, 1, 56, - 56, 0, 55, 64, 17, 17, 15, 0, 14, 15, - 0, 3, 9, 0, 6, 7, 9, 9, 13, 0, + 18, 18, 18, 19, 19, 19, 19, 19, 19, 18, + 19, 19, 68, 68, 69, 68, 64, 64, 64, 64, + 64, 64, 64, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 80, 64, 64, 67, 0, 77, 76, + 75, 79, 79, 0, 0, 67, 42, 0, 40, 0, + 41, 0, 65, 65, 0, 67, 67, 0, 67, 67, + 67, 67, 0, 45, 67, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 0, 78, 67, 67, 67, 67, 77, 0, + 0, 0, 0, 0, 79, 67, 67, 67, 67, 67, - 13, 13, 0, 10, 0, 42, 0, 0, 41, 19, - 19, 0, 19, 0, 0, 18, 18, 18, 18, 18, - 18, 19, 19, 55, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 65, 65, 65, 76, 76, 76, 0, - 42, 64, 64, 64, 64, 64, 0, 0, 45, 45, - 64, 55, 47, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 64, 64, 0, 0, 0, 0, 0, 76, 64, - 64, 64, 64, 64, 64, 0, 64, 10, 0, 0, - 0, 18, 18, 18, 19, 19, 19, 19, 19, 19, + 2, 1, 0, 1, 58, 58, 0, 57, 67, 17, + 17, 15, 0, 14, 15, 0, 3, 9, 0, 6, + 7, 9, 9, 13, 0, 13, 13, 0, 10, 0, + 42, 0, 0, 41, 19, 19, 0, 19, 0, 0, + 18, 18, 18, 18, 18, 18, 19, 19, 57, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 68, 68, + 68, 64, 0, 42, 0, 41, 0, 64, 64, 0, + 64, 64, 64, 64, 64, 64, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 64, 64, 64, 64, + 79, 79, 79, 0, 42, 67, 67, 67, 67, 67, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 76, - 76, 76, 64, 64, 64, 64, 64, 64, 0, 46, - 46, 46, 0, 0, 45, 45, 45, 45, 45, 45, - 45, 64, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 51, 55, - 55, 52, 64, 64, 64, 64, 0, 0, 0, 0, - 0, 0, 76, 64, 64, 64, 64, 0, 0, 0, - 0, 0, 18, 18, 19, 19, 55, 19, 19, 19, + 0, 0, 45, 45, 67, 57, 47, 57, 51, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 67, 67, 0, + 0, 0, 0, 0, 79, 67, 67, 67, 67, 67, + 67, 0, 67, 10, 0, 0, 0, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 64, 64, 64, 0, 0, 46, 46, 46, 0, 45, + 19, 19, 19, 19, 19, 0, 64, 64, 64, 64, + 64, 57, 47, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 64, 64, 79, 79, 79, + 67, 67, 67, 67, 67, 67, 0, 46, 46, 46, - 45, 0, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 64, 0, 29, 55, 55, 55, 55, - 0, 36, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 53, 55, 55, 64, 64, 64, 64, 64, 0, - 0, 0, 76, 64, 64, 64, 0, 0, 0, 18, - 18, 19, 55, 55, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 64, 64, 64, - 64, 64, 0, 46, 0, 45, 45, 45, 0, 0, - 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 64, 55, 55, 55, 55, 55, + 0, 0, 45, 45, 45, 45, 45, 45, 45, 67, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 53, 57, 57, + 54, 67, 67, 67, 67, 0, 0, 0, 0, 0, + 0, 79, 67, 67, 67, 67, 0, 0, 0, 0, + 0, 18, 18, 19, 19, 57, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 64, + 64, 64, 64, 64, 64, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 64, 64, + 64, 64, 67, 67, 67, 0, 0, 46, 46, 46, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 57, 58, 59, 60, 64, 0, 0, 76, 64, 64, - 64, 0, 0, 0, 0, 0, 19, 55, 55, 19, - 19, 55, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 43, 43, 43, 0, 0, 45, 45, 45, - 45, 45, 45, 45, 0, 0, 0, 0, 0, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 64, 0, 38, 55, 55, 55, 0, - 28, 55, 55, 55, 0, 37, 55, 55, 55, 55, - 0, 27, 0, 30, 48, 64, 0, 0, 76, 64, + 0, 45, 45, 0, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 67, 57, 0, 29, 57, + 57, 57, 57, 0, 36, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 55, 57, 57, 67, 67, 67, + 67, 67, 0, 0, 0, 79, 67, 67, 67, 0, + 0, 0, 18, 18, 19, 57, 57, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 64, 64, 64, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 64, 64, 64, 64, 64, 67, + 67, 67, 67, 67, 0, 46, 0, 45, 45, 45, - 64, 64, 43, 43, 43, 55, 55, 19, 55, 55, - 19, 19, 19, 64, 43, 43, 43, 43, 0, 45, - 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 0, 0, 0, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 20, 55, - 55, 55, 55, 55, 55, 55, 55, 50, 55, 61, - 0, 0, 76, 64, 24, 56, 0, 43, 43, 43, - 43, 55, 55, 19, 55, 55, 19, 19, 19, 44, - 44, 44, 44, 45, 0, 0, 0, 45, 45, 45, + 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 67, 52, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 59, 60, 61, 62, 67, 0, 0, + 79, 67, 67, 67, 0, 0, 0, 0, 0, 19, + 57, 57, 19, 19, 57, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 64, 64, 64, 64, 64, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 59, 60, 61, 62, 64, 43, 43, 43, 0, + 0, 45, 45, 45, 45, 45, 45, 45, 0, 0, + + 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 67, 0, 38, + 57, 57, 57, 0, 28, 57, 57, 57, 0, 37, + 57, 57, 57, 57, 0, 27, 0, 30, 48, 67, + 0, 0, 79, 67, 67, 67, 43, 43, 43, 57, + 57, 19, 57, 57, 19, 19, 19, 43, 43, 43, + 57, 57, 57, 57, 57, 57, 57, 64, 67, 43, + 43, 43, 43, 0, 45, 0, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 0, 0, 0, 0, 0, 45, 45, 45, 45, 45, - 45, 45, 45, 64, 55, 55, 55, 0, 39, 55, - 55, 0, 26, 0, 31, 49, 0, 24, 22, 76, - 25, 0, 64, 44, 44, 44, 44, 55, 55, 55, - 55, 64, 64, 44, 44, 44, 44, 0, 0, 0, - 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 64, 54, 0, 34, 55, 55, 55, 25, - 22, 22, 22, 22, 76, 24, 0, 0, 0, 0, - 0, 24, 0, 0, 0, 44, 44, 44, 44, 55, + 45, 45, 45, 20, 57, 57, 57, 57, 57, 57, + 57, 57, 50, 57, 63, 0, 0, 79, 67, 24, + 58, 0, 43, 43, 43, 43, 57, 57, 19, 57, + 57, 19, 19, 19, 64, 43, 43, 43, 43, 57, + 57, 57, 57, 57, 57, 57, 63, 44, 44, 44, + 44, 45, 0, 0, 0, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, + 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, + 45, 67, 57, 57, 57, 0, 39, 57, 57, 0, + 26, 0, 31, 49, 0, 24, 22, 79, 25, 0, - 55, 55, 64, 64, 64, 0, 0, 0, 45, 45, + 67, 44, 44, 44, 44, 57, 57, 57, 57, 44, + 44, 44, 44, 57, 57, 57, 57, 67, 67, 44, + 44, 44, 44, 0, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 21, 0, 32, 55, - 55, 22, 76, 0, 24, 0, 0, 0, 55, 55, - 64, 64, 64, 64, 64, 0, 0, 0, 0, 0, + 45, 45, 45, 45, 45, 45, 45, 45, 67, 56, + 0, 34, 57, 57, 57, 25, 22, 22, 22, 22, + 79, 24, 0, 0, 0, 0, 0, 24, 0, 0, + 0, 44, 44, 44, 44, 57, 57, 57, 64, 64, + 44, 44, 44, 44, 57, 57, 57, 67, 67, 67, + 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 21, 0, 32, 57, 57, 22, 79, 0, 24, + 0, 0, 0, 57, 57, 64, 64, 64, 57, 57, + 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 0, 35, - 55, 23, 0, 0, 0, 0, 0, 55, 64, 64, - 64, 45, 45, 45, 45, 45, 45, 0, 33, 23, - 23, 23, 23, 0, 0, 0, 64, 64, 64, 64, - 64, 45, 45, 45, 45, 45, 23, 0, 0, 0, + 57, 23, 0, 0, 0, 0, 0, 57, 64, 64, + 64, 64, 64, 57, 67, 67, 67, 45, 45, 45, + 45, 45, 45, 0, 33, 23, 23, 23, 23, 0, + 0, 0, 64, 64, 64, 67, 67, 67, 67, 67, + 45, 45, 45, 45, 45, 23, 0, 0, 0, 0, - 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, + 0, 64, 64, 64, 64, 64, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0 } ; @@ -542,1605 +565,2131 @@ static yyconst flex_int32_t yy_ec[256] = static yyconst flex_int32_t yy_meta[75] = { 0, 1, 2, 3, 4, 3, 2, 5, 6, 7, 1, - 8, 8, 1, 1, 9, 1, 10, 11, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 13, 14, - 8, 1, 12, 12, 12, 12, 12, 12, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 16, 17, 18, 18, 18, - 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19 + 8, 8, 1, 9, 10, 1, 11, 12, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 14, 15, + 8, 1, 13, 13, 13, 13, 13, 13, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 17, 18, 19, 19, 19, + 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20 } ; -static yyconst flex_int16_t yy_base[996] = +static yyconst flex_int16_t yy_base[1228] = { 0, 0, 73, 123, 194, 81, 97, 265, 338, 411, 466, - 128, 137, 522, 0, 154, 172, 4214, 4153, 74, 6090, - 4204, 4197, 6090, 594, 72, 6090, 6090, 4142, 6090, 174, - 606, 194, 95, 4168, 6090, 6090, 29, 669, 4153, 35, - 48, 725, 51, 4161, 4147, 72, 4145, 4143, 52, 787, - 226, 98, 225, 816, 55, 103, 4109, 76, 4101, 186, - 259, 145, 286, 4126, 4125, 4132, 133, 0, 6090, 4161, - 4156, 6090, 0, 359, 880, 230, 0, 4101, 6090, 134, - 6090, 167, 6090, 253, 4100, 146, 184, 6090, 297, 248, - 420, 908, 952, 287, 329, 1010, 1060, 4112, 140, 165, + 128, 137, 522, 0, 157, 172, 596, 0, 6501, 6444, + 74, 8253, 6486, 6460, 8253, 668, 72, 8253, 8253, 6408, + 8253, 174, 680, 195, 95, 6434, 8253, 8253, 29, 743, + 6419, 54, 35, 77, 799, 52, 6428, 6381, 44, 6378, + 6386, 50, 861, 226, 127, 225, 890, 216, 105, 6344, + 76, 6341, 192, 266, 145, 359, 6365, 6364, 6376, 132, + 0, 8253, 6405, 6400, 8253, 0, 427, 954, 230, 0, + 6344, 8253, 116, 8253, 169, 8253, 275, 6342, 202, 182, + 8253, 293, 246, 434, 982, 1026, 284, 294, 1084, 1134, - 1116, 4103, 4115, 4101, 4056, 4042, 356, 0, 160, 4022, - 262, 6090, 429, 4005, 482, 286, 6090, 4053, 164, 6090, - 4056, 434, 479, 414, 629, 436, 669, 4000, 798, 766, - 3999, 1178, 581, 1191, 4007, 4018, 826, 836, 335, 4005, - 272, 373, 1254, 1310, 3979, 3972, 3963, 3961, 3965, 3962, - 471, 3952, 3959, 3956, 3948, 3947, 3922, 764, 6090, 235, - 809, 148, 168, 908, 3898, 3903, 3884, 3868, 3857, 382, - 602, 329, 314, 410, 233, 818, 314, 847, 361, 880, - 3864, 1372, 885, 383, 0, 3895, 874, 3897, 6090, 6090, - 1030, 0, 3814, 1158, 6090, 6090, 3813, 952, 3812, 3859, + 6332, 148, 106, 1190, 6328, 6329, 6293, 6303, 6298, 329, + 0, 294, 6278, 227, 8253, 372, 6269, 333, 6268, 447, + 1237, 360, 465, 1300, 6268, 315, 111, 1356, 6250, 6261, + 6237, 6238, 6208, 1418, 485, 387, 6188, 719, 358, 8253, + 6235, 259, 8253, 6238, 655, 824, 6183, 858, 436, 892, + 6179, 919, 929, 6177, 1448, 981, 1463, 6202, 6213, 996, + 1006, 495, 6187, 343, 100, 1526, 1582, 6172, 6160, 6159, + 6157, 6150, 6147, 6151, 6126, 895, 6106, 6100, 6087, 6072, + 6077, 6073, 492, 8253, 184, 717, 307, 392, 1241, 6051, + 6046, 6025, 6017, 6016, 836, 676, 194, 207, 368, 414, - 769, 384, 892, 770, 3862, 454, 904, 1190, 3807, 1381, - 0, 1230, 1438, 1390, 1330, 1477, 3834, 1402, 1437, 1040, - 1527, 1583, 3796, 0, 3790, 3778, 3781, 3778, 1429, 3762, - 3741, 3730, 3726, 3718, 828, 439, 259, 366, 444, 1460, - 1497, 1630, 1670, 1710, 1750, 3749, 3736, 1795, 618, 1841, - 830, 1886, 0, 3729, 3703, 3688, 3664, 3677, 3665, 3661, - 3648, 3656, 3633, 3617, 483, 3602, 3598, 3612, 3611, 3599, - 3598, 928, 408, 577, 3570, 3554, 3545, 3548, 1143, 555, - 770, 3551, 605, 428, 708, 1670, 861, 887, 1605, 1642, - 1684, 1931, 3591, 1976, 0, 3551, 3531, 3514, 3527, 3515, + 949, 727, 1104, 749, 1224, 5999, 1644, 1241, 833, 0, + 6045, 960, 6048, 8253, 8253, 1381, 0, 5994, 1300, 8253, + 8253, 5985, 1134, 5984, 6029, 941, 366, 966, 752, 6009, + 846, 879, 1431, 5954, 1653, 0, 1502, 1710, 1662, 1445, + 1751, 5992, 1602, 1674, 1218, 1801, 1857, 5944, 0, 5935, + 5928, 5918, 5915, 1687, 5905, 5897, 5873, 5846, 5839, 985, + 665, 5831, 1787, 5814, 1892, 5806, 1919, 1750, 5805, 1949, + 1726, 1964, 5843, 1916, 1946, 1612, 2027, 2083, 5816, 5805, + 5782, 5778, 5775, 1966, 5738, 5736, 390, 1500, 365, 897, + 457, 474, 496, 2103, 2128, 2140, 2180, 2220, 2258, 5760, - 3512, 3500, 3501, 3457, 3445, 3408, 3419, 1134, 3385, 6090, - 752, 777, 1694, 1011, 2023, 2063, 1723, 752, 3425, 3398, - 1732, 926, 3397, 3396, 908, 1770, 2103, 1815, 1340, 2149, - 1863, 874, 3381, 1163, 3363, 3358, 921, 1228, 3337, 3323, - 3310, 3300, 3291, 3289, 3283, 3267, 3243, 3246, 0, 3224, - 3220, 0, 1385, 366, 604, 1101, 3208, 3203, 3204, 3154, - 3168, 3117, 1165, 263, 1359, 879, 1138, 1906, 3170, 1953, - 1998, 1509, 2194, 2239, 1387, 3124, 922, 1402, 3125, 3100, - 3103, 3083, 3074, 3070, 3066, 3054, 857, 3071, 3077, 3015, - 2286, 2326, 2366, 3001, 2997, 2033, 2956, 2946, 2931, 2914, + 5736, 2303, 717, 2349, 928, 2412, 2468, 5718, 0, 5728, + 5719, 5720, 5690, 5703, 5683, 5660, 5659, 5667, 5662, 5656, + 286, 5633, 5618, 5630, 5628, 5620, 5617, 1389, 154, 370, + 5580, 5570, 5558, 5560, 1392, 335, 1077, 5556, 798, 654, + 782, 2180, 393, 1228, 2152, 2194, 2206, 2513, 5596, 2558, + 0, 5576, 5567, 5545, 5547, 5533, 5526, 5517, 5496, 5493, + 5467, 5454, 5448, 1410, 5409, 2259, 2605, 2645, 2685, 2725, + 5443, 2770, 0, 5424, 5415, 5389, 5387, 5375, 5359, 5344, + 5356, 5342, 5337, 5324, 5335, 1657, 940, 8253, 826, 949, + 2278, 1085, 2817, 2857, 1889, 464, 5336, 5321, 2230, 1095, - 924, 2044, 1048, 2073, 1418, 2406, 0, 2085, 2453, 2123, - 1615, 2499, 2171, 1125, 1797, 6090, 2888, 2893, 2882, 2875, - 1798, 6090, 2890, 2861, 2808, 2821, 2791, 2784, 2764, 2757, - 2758, 0, 2676, 2673, 986, 1091, 1148, 735, 1187, 2687, - 2607, 2605, 1539, 1105, 1166, 1334, 2216, 2261, 2298, 2644, - 2627, 2602, 2609, 2590, 2604, 2556, 2499, 2512, 2505, 2514, - 2514, 2496, 2508, 2505, 2506, 2489, 2448, 2308, 1206, 2546, - 2586, 2339, 2478, 2476, 2456, 2434, 2624, 1347, 2348, 2379, - 2391, 1357, 2012, 2275, 2426, 2466, 2671, 0, 2479, 2718, - 2519, 1825, 2764, 2558, 1351, 1933, 2408, 2391, 2387, 1934, + 5320, 5297, 1265, 2323, 2897, 2369, 1684, 2943, 2490, 1331, + 3006, 900, 1659, 1105, 471, 1643, 1710, 1192, 1106, 801, + 657, 1238, 1007, 827, 1274, 867, 1445, 5284, 1013, 1240, + 5281, 1420, 1395, 1226, 905, 5252, 5237, 5228, 5212, 5226, + 5202, 1490, 1189, 1709, 1094, 1419, 2533, 5211, 2580, 2617, + 2115, 3062, 3107, 1726, 5166, 1266, 1727, 5144, 5137, 5140, + 5130, 5108, 5106, 5102, 5099, 3152, 1491, 1514, 1739, 2627, + 1379, 3199, 3239, 2658, 1583, 5103, 2005, 5055, 1621, 2006, + 5040, 5033, 5023, 5020, 5011, 5008, 4996, 5003, 1776, 1620, + 1749, 1624, 3279, 3319, 3359, 4952, 4950, 2665, 4921, 4912, - 2375, 1632, 2150, 2367, 2339, 2342, 2320, 2151, 2152, 2307, - 2283, 2260, 2240, 2238, 372, 2223, 2202, 1429, 1190, 1019, - 1344, 2568, 2234, 2598, 2610, 2438, 2547, 2201, 2195, 2672, - 2180, 1634, 2673, 2171, 2161, 2674, 2719, 0, 0, 0, - 0, 2123, 2810, 2849, 2888, 2131, 2130, 2126, 2644, 2928, - 2691, 1873, 2973, 2740, 2784, 2118, 2822, 2834, 2796, 1642, - 1659, 2475, 2861, 2861, 2874, 3020, 0, 2900, 3067, 2874, - 1963, 3113, 2911, 1207, 2720, 6090, 2093, 2082, 2071, 2721, - 6090, 2064, 2066, 2059, 2767, 6090, 2045, 1980, 1983, 1980, - 2940, 6090, 2974, 6090, 0, 1418, 1942, 1934, 1472, 1284, + 4911, 4910, 1619, 2696, 1977, 2706, 2000, 3399, 0, 2747, + 3446, 2790, 2288, 3492, 2829, 1384, 1487, 2261, 8253, 982, + 1690, 1383, 723, 2350, 8253, 1867, 1262, 1658, 1761, 1609, + 1491, 1714, 1706, 1917, 4909, 1900, 1631, 1891, 1832, 1940, + 2137, 1747, 4861, 4819, 4820, 2110, 1949, 1963, 1921, 2841, + 2869, 2881, 4826, 4797, 4772, 4772, 4751, 4766, 4757, 4731, + 4732, 4723, 4722, 4711, 4679, 2015, 2166, 2248, 276, 2214, + 3539, 3579, 3619, 4598, 4591, 4582, 4591, 4580, 4523, 4499, + 4492, 4480, 4450, 4410, 2358, 2156, 2542, 2359, 2127, 2917, + 1958, 3659, 3699, 2803, 4432, 4417, 4416, 4371, 3737, 2003, - 1175, 1433, 2994, 3041, 3088, 1955, 1941, 1918, 1916, 1892, - 1906, 1889, 1865, 3133, 131, 3172, 3211, 3145, 1888, 1852, - 3158, 1423, 3183, 1751, 3251, 0, 3195, 3264, 3221, 2054, - 3309, 3233, 3286, 3331, 3356, 1710, 1987, 2941, 2950, 3366, - 2954, 3378, 0, 3400, 3425, 3445, 2181, 3472, 1745, 1820, - 1821, 1800, 2975, 1755, 1732, 2976, 3021, 0, 1744, 1709, - 1691, 1676, 2375, 1436, 2239, 1669, 3482, 1664, 3493, 3504, - 3052, 1624, 1597, 3022, 1593, 1573, 3023, 3115, 0, 3516, - 3556, 3596, 3636, 1586, 3528, 3540, 3568, 1585, 2262, 2380, - 3578, 2477, 3676, 0, 3608, 3689, 3619, 3296, 3734, 3648, + 2965, 3084, 3129, 2244, 2388, 2594, 3172, 2979, 3784, 0, + 3211, 3831, 3222, 2379, 3877, 3251, 2297, 4355, 2560, 2085, + 1858, 2304, 2561, 1930, 2479, 2771, 1191, 1762, 2390, 2375, + 2772, 2773, 2469, 4289, 4282, 4281, 4261, 2204, 4249, 4225, + 2693, 2716, 2514, 2943, 3261, 4274, 3291, 3303, 2929, 2992, + 4223, 4219, 3331, 4222, 2314, 3348, 4170, 4174, 3359, 3360, + 2399, 2500, 2589, 2635, 2714, 3373, 2168, 3924, 3964, 3350, + 3362, 4130, 4103, 3401, 4080, 2523, 3402, 4069, 4052, 3447, + 3448, 4026, 4025, 3977, 3878, 3036, 4003, 4042, 4081, 3904, + 3900, 3896, 3419, 4121, 3466, 3094, 4166, 3514, 3549, 3871, - 3658, 1566, 3711, 3756, 3411, 2205, 2326, 2956, 783, 1023, - 3781, 0, 3457, 1387, 1510, 3116, 1508, 3605, 6090, 1492, - 1480, 3783, 6090, 3784, 6090, 0, 1421, 2218, 2110, 1759, - 1415, 3808, 3816, 3809, 3821, 3833, 3854, 3860, 1394, 1367, - 1370, 3871, 1667, 3911, 3951, 3884, 1685, 3890, 1397, 3924, - 3936, 3902, 1338, 1337, 2535, 2587, 3961, 2611, 3991, 0, - 3973, 4004, 4024, 3341, 4049, 4071, 4095, 4106, 4117, 2834, - 1323, 1248, 1020, 0, 4051, 6090, 4052, 1235, 1233, 6090, - 1504, 2335, 6090, 1678, 1802, 4144, 4152, 4160, 4168, 4162, - 4190, 4204, 4220, 4217, 1227, 4242, 4254, 4266, 1223, 4197, + 3561, 3591, 3184, 2645, 2881, 3334, 3528, 3601, 3631, 4213, + 0, 3633, 4260, 3644, 3139, 4306, 3671, 2136, 3449, 8253, + 4369, 3096, 2377, 3493, 8253, 1488, 2654, 3307, 3494, 8253, + 2573, 2959, 2695, 2906, 3495, 8253, 3671, 8253, 3842, 2683, + 3758, 3743, 2867, 1330, 1986, 2684, 3683, 3710, 3721, 3743, + 3705, 4430, 3672, 3638, 2875, 1030, 3564, 4487, 4526, 4565, + 4621, 2824, 2213, 2652, 3579, 2876, 1562, 2939, 3758, 2763, + 4678, 4717, 3769, 3568, 3565, 3807, 2818, 3851, 3222, 4757, + 0, 3899, 4770, 3934, 3390, 4815, 3946, 3976, 3988, 4015, + 3303, 3514, 3913, 4027, 4027, 4054, 4862, 0, 4056, 4909, - 1156, 1140, 4274, 4314, 4354, 4286, 4298, 4326, 1153, 1133, - 2741, 3196, 4336, 3234, 4394, 0, 4366, 4407, 4377, 3721, - 4429, 965, 4453, 4464, 4082, 943, 871, 4227, 6090, 4228, - 773, 6090, 2595, 4474, 4484, 4496, 4508, 4520, 4363, 715, - 4530, 1707, 4570, 4610, 4543, 4549, 655, 4583, 4595, 4561, - 630, 569, 3265, 502, 431, 4622, 0, 3195, 4622, 6090, - 4650, 2769, 4648, 373, 4661, 4673, 4638, 4700, 4713, 4753, - 4793, 4688, 4698, 4723, 331, 0, 246, 4725, 6090, 1847, - 3685, 6090, 1913, 4736, 4765, 4777, 4803, 1881, 4843, 4883, - 4816, 6090, 4854, 4864, 3864, 6090, 6090, 4893, 182, 4905, + 4067, 3817, 4093, 2957, 4972, 2263, 1881, 3880, 3205, 2307, + 4122, 4123, 3497, 3165, 3488, 3444, 3384, 3288, 2604, 3602, + 3396, 4141, 3430, 4187, 4234, 4112, 3355, 3305, 5045, 3287, + 3219, 3878, 3879, 0, 4280, 3236, 5102, 5141, 4291, 5197, + 2392, 4214, 2967, 3159, 4215, 4216, 3127, 5255, 5295, 5335, + 5375, 3135, 4329, 4499, 4511, 3109, 3280, 3373, 4536, 3562, + 5415, 0, 4548, 5428, 4575, 4339, 5473, 4587, 4688, 3102, + 4700, 4729, 4741, 3946, 3988, 4599, 2482, 2505, 5520, 0, + 4792, 3861, 3042, 4816, 2493, 4261, 8253, 2606, 3451, 4369, + 8253, 4370, 8253, 3041, 2943, 4598, 3748, 3858, 2927, 4852, - 4921, 4824, 4931, 4941, 4951, 4989, 4999, 5009, 21, 5019, - 5029, 6090, 5035, 4439, 6090, 5085, 5104, 5123, 5142, 5161, - 5180, 5199, 5218, 5237, 5256, 5264, 5282, 5301, 5304, 5323, - 5342, 5361, 5380, 5399, 5418, 5437, 5456, 5475, 5494, 5502, - 5509, 5517, 5535, 5554, 5573, 5576, 5595, 5614, 5633, 5652, - 5671, 5679, 5696, 5715, 5723, 5731, 5738, 5745, 5752, 5760, - 5767, 5773, 5780, 5787, 5795, 5804, 5811, 5818, 5825, 5833, - 5842, 5849, 5856, 5864, 5873, 5880, 5889, 5897, 5906, 5913, - 5922, 5930, 5939, 5957, 5976, 5995, 6003, 6012, 6020, 6027, - 6036, 6043, 6052, 6070, 2015 + 4863, 4890, 4931, 5114, 5126, 4817, 2837, 2770, 2752, 5532, + 5572, 5612, 5652, 5176, 2705, 2924, 3089, 5268, 3576, 5692, + 5732, 5153, 3657, 5164, 2720, 5280, 5308, 5033, 2671, 2606, + 3965, 4067, 5318, 4094, 5772, 0, 5347, 5785, 5358, 4747, + 5830, 5387, 5398, 5449, 5494, 4511, 2597, 3019, 3182, 2536, + 4818, 8253, 5476, 3132, 3185, 8253, 3350, 4375, 8253, 3354, + 4647, 5559, 5567, 5599, 5610, 5625, 4972, 5654, 5692, 5558, + 2551, 5664, 5707, 5719, 2527, 5198, 2285, 2143, 5747, 3759, + 5877, 5917, 5759, 3806, 5521, 2120, 3497, 5957, 5997, 6037, + 5807, 5852, 5889, 2111, 2028, 4110, 4430, 5899, 4549, 6077, + 0, 5929, 6090, 5940, 4882, 5969, 2015, 5980, 6008, 4942, + 1944, 1833, 5696, 8253, 6037, 3540, 8253, 4727, 6048, 6058, + 6112, 6137, 6149, 5926, 1783, 6161, 6201, 6241, 6190, 1709, + 6178, 3870, 6281, 6321, 6190, 6228, 1673, 6253, 6265, 6025, + 1475, 1302, 4603, 1251, 1148, 6293, 0, 3951, 6009, 8253, + 6321, 4861, 6332, 902, 6344, 6359, 6309, 6230, 6369, 4001, + 6409, 6449, 6382, 6410, 6489, 6529, 6569, 6421, 6431, 6459, + 858, 0, 694, 6293, 8253, 3656, 5478, 8253, 3709, 6471, + 6501, 6513, 6609, 6649, 6689, 6542, 4002, 6729, 6769, 6554, + 8253, 6580, 6592, 5817, 8253, 8253, 6619, 668, 6631, 6661, + + 6398, 6671, 4318, 6809, 6849, 6702, 6709, 6747, 6785, 6795, + 6823, 6833, 6859, 6869, 6907, 320, 6917, 6123, 8253, 6927, + 5862, 134, 6955, 6720, 8253, 7011, 7031, 7051, 7071, 7091, + 7111, 7131, 7151, 7171, 7191, 4157, 7211, 7231, 3749, 7251, + 7271, 7291, 7311, 7331, 7351, 7371, 7391, 7411, 7431, 7451, + 7471, 7491, 7511, 7531, 7551, 7571, 4159, 4560, 7580, 7599, + 7619, 7639, 4178, 7659, 7679, 7699, 7719, 7731, 7751, 4962, + 7771, 7791, 7811, 7831, 7851, 7871, 7891, 7911, 4562, 7920, + 4605, 4843, 5180, 7928, 7947, 5190, 5334, 5374, 5414, 7956, + 7965, 5511, 5590, 5607, 7973, 7982, 5611, 5645, 7990, 7999, + + 8018, 5683, 8030, 5731, 8040, 8048, 8057, 8076, 6074, 8088, + 8108, 5771, 8118, 8126, 8135, 8154, 8174, 8194, 5916, 8204, + 5183, 5956, 8213, 6224, 5551, 8232, 4808 } ; -static yyconst flex_int16_t yy_def[996] = +static yyconst flex_int16_t yy_def[1228] = { 0, - 915, 1, 1, 1, 916, 916, 917, 917, 918, 918, - 919, 919, 915, 13, 920, 920, 915, 921, 915, 915, - 915, 915, 915, 922, 923, 915, 915, 924, 915, 925, - 921, 31, 31, 926, 915, 915, 921, 915, 38, 38, - 38, 38, 42, 42, 42, 42, 42, 42, 42, 921, - 31, 921, 915, 922, 38, 38, 42, 42, 42, 915, - 915, 915, 927, 42, 42, 42, 921, 928, 915, 915, - 928, 915, 928, 915, 922, 915, 929, 930, 915, 930, - 915, 930, 915, 931, 932, 932, 932, 915, 915, 933, - 934, 935, 915, 93, 93, 93, 915, 97, 97, 97, + 1125, 1, 1, 1, 1126, 1126, 1127, 1127, 1128, 1128, + 1129, 1129, 1125, 13, 1130, 1130, 1125, 17, 1125, 1131, + 1125, 1125, 1125, 1125, 1125, 1132, 1133, 1125, 1125, 1134, + 1125, 1135, 1131, 33, 33, 1136, 1125, 1125, 1131, 1125, + 40, 40, 40, 40, 40, 45, 45, 45, 45, 45, + 45, 45, 1131, 33, 1131, 1125, 1132, 40, 40, 45, + 45, 45, 1125, 1125, 1125, 1137, 45, 45, 45, 1131, + 1138, 1125, 1125, 1138, 1125, 1138, 1125, 1132, 1125, 1139, + 1140, 1125, 1140, 1125, 1140, 1125, 1141, 1142, 1142, 1142, + 1125, 1125, 1143, 1144, 1145, 1125, 96, 96, 96, 1125, - 97, 101, 101, 101, 101, 101, 93, 96, 96, 936, - 936, 915, 936, 921, 921, 915, 915, 915, 937, 915, - 915, 938, 915, 923, 915, 933, 923, 924, 924, 925, - 939, 921, 921, 31, 940, 134, 134, 134, 134, 941, - 942, 921, 915, 143, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 915, 915, 921, - 921, 921, 921, 915, 915, 915, 915, 915, 915, 937, - 921, 134, 921, 921, 921, 915, 915, 915, 915, 943, - 944, 921, 144, 921, 945, 945, 915, 915, 915, 915, - 938, 946, 947, 947, 915, 915, 947, 947, 948, 915, + 100, 100, 100, 100, 104, 104, 104, 104, 104, 96, + 99, 99, 1146, 1146, 1125, 1146, 1147, 1148, 1149, 1150, + 1147, 121, 121, 1125, 124, 124, 124, 124, 128, 128, + 128, 128, 128, 1147, 121, 1147, 1131, 1131, 1125, 1125, + 1125, 1151, 1125, 1125, 1152, 1125, 1153, 1125, 1143, 1153, + 1154, 1154, 1155, 1156, 1131, 1131, 1131, 1157, 157, 157, + 157, 157, 1158, 1159, 1131, 1125, 166, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 1125, 1125, 1131, 1131, 1131, 1131, 1125, 1125, + 1125, 1125, 1125, 1125, 1151, 1131, 157, 1131, 1131, 1131, - 948, 948, 915, 915, 915, 933, 933, 933, 949, 950, - 96, 949, 951, 915, 915, 93, 216, 216, 216, 216, - 915, 221, 222, 952, 222, 222, 222, 222, 222, 222, - 222, 96, 96, 953, 953, 953, 937, 937, 954, 915, - 915, 921, 921, 921, 134, 245, 955, 915, 956, 915, - 921, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 921, 921, 915, 915, 915, 915, 915, 937, 921, - 921, 245, 921, 921, 921, 915, 921, 915, 915, 915, - 915, 96, 292, 221, 222, 222, 222, 222, 222, 222, + 1125, 1125, 1125, 1125, 1160, 1161, 1131, 167, 1131, 1162, + 1162, 1125, 1125, 1125, 1125, 1152, 1163, 1164, 1164, 1125, + 1125, 1164, 1164, 1165, 1125, 1165, 1165, 1125, 1125, 1125, + 1143, 1143, 1143, 1166, 1167, 1168, 1166, 1169, 1125, 1125, + 1168, 241, 241, 241, 241, 1125, 246, 247, 1170, 247, + 247, 247, 247, 247, 247, 247, 1168, 1168, 1171, 1171, + 1171, 1172, 1172, 1173, 1173, 1174, 1174, 1175, 1176, 1172, + 1172, 1172, 272, 272, 272, 272, 1125, 277, 278, 278, + 278, 278, 278, 278, 278, 278, 1172, 1172, 1172, 1172, + 1177, 1177, 1178, 1125, 1125, 1131, 1131, 1131, 1131, 299, - 222, 222, 222, 222, 222, 222, 222, 96, 96, 915, - 954, 954, 921, 921, 921, 921, 921, 921, 957, 958, - 958, 321, 959, 958, 960, 250, 915, 327, 327, 915, - 327, 921, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 921, 921, 921, 921, 915, 915, 915, 915, - 915, 915, 937, 921, 921, 921, 921, 915, 915, 915, - 915, 915, 292, 221, 222, 222, 961, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 96, 96, 96, 96, - 921, 921, 921, 915, 962, 962, 396, 962, 963, 964, + 1179, 1125, 1180, 1125, 1131, 1125, 306, 307, 307, 307, + 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 307, 307, 307, 307, 307, 307, 307, 1131, 1131, 1125, + 1125, 1125, 1125, 1125, 1177, 1131, 1131, 299, 1131, 1131, + 1131, 1125, 1131, 1125, 1125, 1125, 1125, 1168, 348, 246, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 1168, 1168, 1125, 1172, 1172, 1172, 272, + 370, 277, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 1172, 1172, 1125, 1178, 1178, + 1131, 1131, 1131, 1131, 1131, 1131, 1181, 1182, 1182, 399, - 965, 915, 966, 330, 966, 915, 406, 966, 915, 409, - 409, 915, 409, 921, 915, 915, 144, 144, 144, 144, - 915, 915, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 921, 921, 921, 921, 921, 915, - 915, 915, 937, 921, 921, 921, 915, 915, 915, 373, - 374, 222, 961, 961, 222, 222, 222, 222, 222, 222, - 222, 222, 96, 96, 96, 96, 96, 921, 921, 921, - 921, 921, 967, 967, 968, 969, 915, 915, 915, 915, - 915, 970, 970, 971, 412, 971, 915, 487, 971, 915, - 490, 490, 915, 490, 921, 144, 144, 144, 144, 144, + 1183, 1182, 1184, 304, 1125, 405, 405, 1125, 405, 1131, + 1125, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 1131, 1131, 1131, 1131, 1125, 1125, 1125, 1125, 1125, + 1125, 1185, 1131, 1131, 1131, 1131, 1125, 1125, 1125, 1125, + 1125, 348, 246, 247, 247, 1186, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 452, 466, 466, 466, 1172, + 1172, 1172, 1172, 1172, 1172, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 1172, 1172, + 1172, 1172, 1131, 1131, 1131, 1125, 1187, 1187, 498, 1187, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 921, 921, 921, 921, 921, 915, 915, 937, 921, 921, - 921, 915, 915, 915, 915, 915, 222, 961, 961, 222, - 222, 961, 222, 222, 222, 222, 222, 96, 96, 96, - 96, 96, 921, 921, 921, 915, 972, 973, 477, 915, - 550, 550, 915, 550, 915, 915, 915, 915, 915, 915, - 974, 974, 975, 493, 975, 915, 566, 975, 915, 569, - 569, 915, 569, 921, 915, 915, 144, 144, 144, 915, - 915, 144, 144, 144, 915, 915, 144, 144, 144, 144, - 915, 915, 915, 915, 144, 921, 915, 915, 937, 921, + 1188, 1189, 1190, 1125, 1191, 408, 1191, 1125, 508, 1191, + 1125, 511, 511, 1125, 511, 1131, 411, 1125, 1125, 411, + 411, 411, 411, 1125, 1125, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 1131, 1131, 1131, + 1131, 1131, 1125, 1125, 1125, 1185, 1131, 1131, 1131, 1125, + 1125, 1125, 452, 453, 247, 1186, 1186, 247, 247, 247, + 247, 247, 247, 247, 247, 466, 466, 466, 466, 466, + 1172, 1172, 1172, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 1172, 1172, 1172, 1172, 1172, 1131, + 1131, 1131, 1131, 1131, 1192, 1192, 1193, 1194, 1125, 1125, - 921, 921, 915, 915, 915, 961, 961, 222, 961, 961, - 222, 222, 96, 921, 921, 921, 921, 921, 915, 976, - 915, 977, 553, 977, 977, 625, 977, 915, 628, 628, - 915, 628, 915, 915, 915, 915, 978, 978, 979, 572, - 979, 915, 642, 979, 915, 645, 645, 645, 921, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 921, - 915, 915, 937, 921, 921, 921, 915, 915, 915, 915, - 915, 961, 961, 222, 961, 961, 222, 222, 96, 921, - 921, 921, 921, 915, 915, 915, 915, 980, 980, 981, - 631, 981, 981, 693, 981, 915, 696, 696, 915, 696, + 1125, 1125, 1125, 1195, 1195, 1196, 514, 1196, 1125, 609, + 1196, 1125, 612, 612, 1125, 612, 1131, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 1131, 1131, 1131, 1131, 1131, 1125, 1125, + 1185, 1131, 1131, 1131, 1125, 1125, 1125, 1125, 1125, 247, + 1186, 1186, 247, 247, 1186, 247, 247, 247, 247, 247, + 466, 466, 466, 466, 466, 1172, 1172, 1172, 1172, 1172, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 1172, 1172, 1172, 1172, 1172, 1131, 1131, 1131, 1125, + 1197, 1198, 599, 1125, 694, 694, 1125, 694, 1125, 1125, - 915, 915, 915, 915, 915, 915, 982, 982, 983, 983, - 983, 711, 983, 921, 144, 144, 144, 915, 915, 144, - 144, 915, 915, 915, 915, 144, 915, 915, 984, 937, - 921, 985, 986, 915, 915, 915, 915, 961, 961, 961, - 961, 921, 921, 921, 921, 921, 921, 915, 915, 915, - 915, 915, 915, 987, 987, 988, 699, 988, 988, 759, - 988, 915, 762, 762, 915, 762, 915, 915, 915, 915, - 989, 989, 921, 144, 915, 915, 144, 144, 144, 915, - 984, 984, 915, 984, 937, 985, 985, 985, 985, 915, - 985, 986, 986, 915, 915, 915, 915, 915, 915, 961, + 1125, 1125, 1125, 1125, 1199, 1199, 1200, 615, 1200, 1125, + 710, 1200, 1125, 713, 713, 1125, 713, 1131, 1125, 1125, + 1125, 721, 721, 1125, 1125, 721, 721, 721, 1125, 1125, + 721, 721, 721, 721, 1125, 1125, 1125, 1125, 721, 1131, + 1125, 1125, 1201, 1131, 1131, 1131, 1125, 1125, 1125, 1202, + 1202, 1125, 1202, 1202, 752, 752, 1203, 1172, 1172, 1172, + 1125, 761, 761, 761, 761, 761, 761, 1172, 1131, 1131, + 1131, 1131, 1131, 1125, 1204, 1125, 1205, 697, 1205, 1205, + 780, 1205, 1125, 783, 783, 1125, 783, 1125, 1125, 1125, + 1125, 1206, 1206, 1207, 716, 1207, 1125, 797, 1207, 1125, - 961, 961, 921, 921, 921, 915, 915, 915, 915, 990, - 990, 991, 765, 991, 991, 815, 991, 915, 818, 818, - 818, 915, 915, 915, 915, 915, 921, 915, 915, 144, - 144, 915, 937, 915, 915, 915, 915, 915, 961, 961, - 921, 921, 921, 921, 921, 915, 915, 915, 915, 915, - 915, 992, 992, 993, 993, 993, 856, 856, 915, 915, - 144, 994, 915, 915, 915, 915, 915, 961, 921, 921, - 921, 915, 915, 915, 915, 995, 995, 915, 915, 994, - 994, 915, 994, 915, 915, 915, 921, 921, 921, 921, - 921, 915, 915, 915, 915, 915, 915, 915, 915, 915, + 800, 800, 800, 1131, 1125, 805, 805, 805, 805, 805, + 805, 805, 805, 805, 1131, 1125, 1125, 1208, 1131, 1131, + 1131, 1125, 1125, 1125, 1125, 1125, 1209, 1209, 1125, 1209, + 1209, 829, 829, 1210, 1211, 1211, 1211, 1211, 1211, 1125, + 840, 840, 840, 840, 840, 840, 1211, 1131, 1131, 1131, + 1131, 1125, 1125, 1125, 1125, 1212, 1212, 1213, 786, 1213, + 1213, 861, 1213, 1125, 864, 864, 1125, 864, 1125, 1125, + 1125, 1125, 1125, 1125, 1214, 1214, 1215, 1215, 1215, 879, + 1215, 1131, 805, 805, 805, 1125, 1125, 805, 805, 1125, + 1125, 1125, 1125, 805, 1125, 1125, 1216, 1208, 1131, 1217, - 915, 915, 921, 921, 921, 915, 915, 915, 921, 921, - 921, 915, 915, 915, 0, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915 + 1218, 1125, 1125, 1125, 1125, 1209, 1209, 1209, 1209, 1211, + 1211, 1211, 1211, 840, 840, 840, 840, 1131, 1131, 1131, + 1131, 1131, 1131, 1125, 1125, 1125, 1125, 1125, 1125, 1219, + 1219, 1220, 867, 1220, 1220, 935, 1220, 1125, 938, 938, + 1125, 938, 1125, 1125, 1125, 1125, 1221, 1221, 1131, 805, + 1125, 1125, 805, 805, 805, 1125, 1216, 1216, 1125, 1216, + 1208, 1217, 1217, 1217, 1217, 1125, 1217, 1218, 1218, 1125, + 1125, 1125, 1125, 1125, 1125, 1209, 1209, 1209, 1211, 1211, + 1211, 1211, 1211, 1211, 840, 840, 840, 1131, 1131, 1131, + 1125, 1125, 1125, 1125, 1222, 1222, 1223, 941, 1223, 1223, + 1000, 1223, 1125, 1003, 1003, 1003, 1125, 1125, 1125, 1125, + 1125, 1131, 1125, 1125, 805, 805, 1125, 1208, 1125, 1125, + 1125, 1125, 1125, 1209, 1209, 1211, 1211, 1211, 840, 840, + 1131, 1131, 1131, 1131, 1131, 1125, 1125, 1125, 1125, 1125, + 1125, 1224, 1224, 1225, 1225, 1225, 1046, 1046, 1125, 1125, + 805, 1226, 1125, 1125, 1125, 1125, 1125, 1209, 1211, 1211, + 1211, 1211, 1211, 840, 1131, 1131, 1131, 1125, 1125, 1125, + 1125, 1227, 1227, 1125, 1125, 1226, 1226, 1125, 1226, 1125, + 1125, 1125, 1211, 1211, 1211, 1131, 1131, 1131, 1131, 1131, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + + 1125, 1211, 1211, 1211, 1211, 1211, 1131, 1131, 1131, 1125, + 1125, 1125, 1211, 1211, 1211, 1131, 1131, 1131, 1125, 1125, + 1125, 1211, 1211, 1211, 0, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125 } ; -static yyconst flex_int16_t yy_nxt[6165] = +static yyconst flex_int16_t yy_nxt[8328] = { 0, - 18, 19, 20, 18, 21, 19, 22, 23, 24, 25, - 26, 27, 18, 28, 29, 18, 18, 30, 31, 32, - 33, 31, 31, 31, 31, 31, 31, 31, 34, 35, - 36, 37, 38, 39, 39, 39, 40, 41, 42, 42, - 42, 42, 43, 44, 45, 42, 46, 47, 48, 49, - 42, 42, 42, 42, 42, 50, 18, 51, 51, 51, - 51, 51, 51, 18, 18, 18, 18, 18, 18, 18, - 18, 52, 18, 18, 53, 116, 115, 144, 53, 116, - 125, 54, 19, 69, 115, 70, 19, 71, 146, 72, - 144, 148, 156, 147, 142, 72, 149, 144, 19, 69, - - 126, 70, 19, 71, 152, 72, 157, 55, 56, 72, - 73, 72, 57, 138, 138, 138, 138, 138, 139, 153, - 58, 154, 171, 59, 60, 72, 73, 127, 60, 86, - 20, 61, 21, 86, 87, 88, 74, 62, 86, 20, - 63, 21, 86, 87, 88, 144, 179, 201, 614, 174, - 179, 201, 74, 115, 18, 19, 20, 36, 21, 19, - 111, 112, 162, 195, 172, 64, 120, 65, 238, 66, - 42, 163, 42, 19, 20, 36, 21, 19, 111, 112, - 131, 131, 222, 89, 131, 131, 115, 176, 115, 194, - 202, 176, 89, 225, 67, 60, 196, 162, 898, 60, - - 177, 200, 61, 115, 131, 272, 184, 222, 62, 113, - 226, 63, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 194, 115, 232, 18, 164, 113, 273, 132, - 164, 158, 159, 233, 188, 158, 64, 159, 65, 200, - 66, 42, 114, 42, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 198, 159, 125, 188, 198, 165, - 166, 120, 621, 238, 167, 67, 19, 20, 236, 21, - 19, 22, 168, 75, 178, 169, 207, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 116, 115, 248, - 115, 116, 181, 181, 285, 444, 181, 181, 203, 204, - - 250, 205, 203, 208, 199, 218, 218, 218, 218, 218, - 218, 218, 218, 218, 218, 179, 181, 235, 115, 179, - 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 19, - 20, 182, 21, 19, 22, 114, 75, 219, 219, 219, - 219, 219, 220, 246, 246, 246, 246, 246, 246, 813, - 187, 159, 179, 188, 187, 189, 179, 190, 310, 115, - 238, 189, 915, 190, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 120, 283, 238, 190, 190, 863, - 202, 282, 437, 76, 77, 77, 77, 77, 77, 77, - - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 19, 20, 190, 21, 19, 22, 79, 75, - 209, 115, 915, 209, 80, 81, 82, 115, 115, 209, - 158, 159, 209, 188, 158, 209, 209, 596, 115, 200, - 83, 251, 915, 287, 125, 236, 120, 915, 312, 211, - 279, 209, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 915, 115, 915, 115, 84, 19, 20, 127, - 21, 19, 22, 79, 75, 212, 209, 356, 284, 80, - 81, 82, 915, 115, 235, 366, 114, 114, 114, 114, - 114, 208, 114, 114, 235, 83, 114, 123, 123, 123, - - 123, 123, 123, 123, 123, 123, 123, 259, 260, 208, - 114, 114, 114, 261, 262, 345, 346, 263, 621, 264, - 265, 84, 36, 19, 20, 36, 21, 19, 22, 36, - 36, 90, 26, 27, 36, 91, 29, 36, 36, 92, - 93, 94, 95, 93, 93, 93, 93, 93, 93, 93, - 34, 96, 36, 36, 97, 98, 98, 98, 99, 100, - 101, 101, 101, 101, 102, 103, 104, 101, 105, 101, - 106, 101, 101, 101, 101, 101, 101, 76, 36, 107, - 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, - 108, 108, 108, 109, 108, 108, 120, 813, 121, 242, - - 243, 244, 242, 242, 242, 242, 242, 242, 242, 122, - 115, 364, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 133, 438, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 135, 248, 115, 357, 136, 136, - 136, 136, 136, 136, 240, 358, 326, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 115, 757, 115, - 115, 115, 280, 136, 136, 136, 136, 136, 136, 114, - 281, 846, 114, 124, 124, 124, 124, 280, 114, 124, - 124, 114, 114, 124, 114, 114, 114, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 135, 124, 124, - - 114, 143, 143, 143, 143, 143, 143, 144, 144, 144, - 144, 145, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 115, 144, 136, 136, 136, 136, - 136, 136, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 915, 120, 514, 312, 144, 144, 144, - 144, 144, 144, 115, 868, 158, 159, 144, 188, 158, - 201, 288, 131, 131, 201, 288, 131, 131, 280, 310, - 135, 312, 114, 114, 114, 114, 114, 114, 158, 159, - 115, 160, 161, 114, 114, 114, 131, 114, 114, 402, - - 248, 114, 128, 128, 128, 128, 128, 115, 128, 128, - 158, 159, 128, 188, 158, 114, 114, 114, 120, 176, - 121, 132, 861, 176, 200, 115, 128, 128, 128, 234, - 280, 122, 177, 234, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 246, 246, 246, 246, 246, 246, - 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, - 246, 246, 246, 246, 115, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 158, 159, 463, 188, 158, - 464, 170, 120, 235, 121, 115, 181, 181, 288, 332, - 181, 181, 288, 203, 204, 191, 205, 203, 915, 915, - - 915, 915, 915, 915, 915, 915, 915, 915, 131, 164, - 181, 131, 125, 164, 131, 131, 115, 131, 131, 131, - 131, 259, 260, 131, 131, 248, 115, 261, 262, 115, - 367, 263, 915, 264, 115, 182, 326, 211, 131, 131, - 414, 248, 165, 166, 398, 398, 398, 167, 353, 354, - 280, 355, 326, 158, 159, 168, 188, 158, 169, 208, - 248, 419, 453, 214, 131, 211, 420, 454, 215, 211, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 135, 211, 248, 115, 217, 217, 217, 217, 217, 217, - 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, - - 211, 211, 211, 211, 211, 211, 211, 194, 511, 217, - 217, 217, 217, 217, 217, 211, 211, 211, 211, 211, - 211, 211, 211, 211, 211, 211, 915, 313, 211, 211, - 211, 211, 211, 211, 211, 211, 211, 211, 915, 915, - 248, 115, 211, 211, 211, 211, 211, 211, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 293, 293, - 293, 293, 293, 293, 402, 248, 115, 211, 211, 211, - 211, 211, 211, 211, 115, 115, 404, 211, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 135, 211, - 827, 601, 221, 221, 221, 221, 221, 221, 222, 222, - - 222, 222, 223, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 512, 224, 217, 217, 217, - 217, 217, 217, 211, 211, 211, 211, 211, 211, 211, - 211, 211, 211, 211, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 915, 120, 115, 238, 222, 222, - 222, 222, 222, 222, 387, 388, 115, 389, 222, 193, - 115, 757, 439, 193, 415, 193, 193, 120, 415, 238, - 513, 519, 193, 211, 211, 211, 211, 211, 211, 131, - 115, 691, 114, 130, 114, 114, 130, 193, 114, 114, - 840, 416, 130, 115, 206, 206, 206, 206, 495, 446, - - 206, 206, 363, 115, 206, 839, 130, 130, 114, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 206, - 206, 115, 468, 245, 245, 245, 245, 245, 245, 421, - 115, 443, 520, 421, 209, 209, 209, 209, 209, 794, - 209, 209, 115, 794, 209, 115, 665, 515, 245, 245, - 245, 245, 245, 245, 114, 600, 422, 114, 209, 209, - 209, 115, 115, 114, 402, 248, 114, 114, 649, 114, - 114, 114, 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 135, 831, 830, 114, 252, 252, 252, 252, - 252, 252, 144, 144, 144, 144, 144, 144, 144, 144, - - 144, 144, 144, 144, 144, 144, 144, 144, 144, 115, - 144, 245, 245, 245, 245, 245, 245, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 915, 115, - 248, 664, 144, 144, 144, 144, 144, 144, 289, 290, - 291, 289, 289, 289, 289, 289, 289, 289, 407, 407, - 407, 407, 407, 408, 248, 691, 623, 114, 114, 114, - 114, 114, 114, 181, 248, 326, 114, 180, 114, 114, - 180, 209, 114, 114, 209, 404, 180, 135, 415, 115, - 209, 131, 415, 209, 521, 131, 209, 209, 131, 115, - - 180, 180, 114, 421, 131, 435, 115, 421, 436, 602, - 211, 574, 209, 748, 115, 416, 802, 801, 131, 131, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 422, 120, 445, 238, 915, 248, 212, 209, 131, 621, - 115, 131, 115, 800, 131, 131, 404, 131, 131, 131, - 131, 623, 773, 131, 131, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 300, 301, 211, 131, 131, - 115, 302, 303, 115, 120, 304, 238, 305, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 115, 599, - 660, 115, 780, 214, 131, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 666, 783, 731, 784, 292, - 292, 292, 292, 292, 292, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 368, 779, 369, 369, 369, - 369, 369, 369, 663, 292, 292, 292, 292, 292, 292, - 211, 120, 778, 238, 211, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 135, 211, 777, 774, 294, - 294, 294, 294, 294, 294, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 701, 224, 292, 292, 292, 292, 292, 292, - 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, - - 211, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 915, 518, 623, 549, 222, 222, 222, 222, 222, - 222, 368, 741, 369, 369, 369, 369, 369, 369, 369, - 369, 369, 369, 488, 488, 488, 488, 488, 489, 740, - 211, 211, 211, 211, 211, 211, 313, 739, 314, 314, - 314, 314, 314, 314, 314, 314, 314, 314, 368, 248, - 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, - 404, 181, 583, 738, 609, 181, 248, 584, 181, 610, - 832, 667, 784, 742, 181, 115, 313, 485, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 181, 181, - - 368, 742, 371, 371, 371, 371, 371, 372, 369, 369, - 369, 369, 391, 392, 393, 391, 391, 391, 391, 391, - 391, 391, 115, 841, 115, 115, 313, 248, 316, 316, - 316, 316, 316, 317, 314, 314, 314, 314, 485, 313, - 115, 314, 314, 314, 314, 314, 314, 728, 727, 115, - 396, 396, 397, 398, 398, 398, 398, 398, 398, 398, - 323, 120, 115, 238, 115, 115, 114, 915, 318, 318, - 318, 318, 318, 318, 318, 318, 318, 318, 115, 623, - 726, 721, 318, 318, 318, 318, 318, 318, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 415, 421, - - 115, 720, 415, 421, 120, 714, 238, 318, 318, 318, - 318, 318, 318, 320, 321, 322, 322, 322, 322, 322, - 322, 322, 322, 323, 785, 416, 422, 324, 324, 324, - 324, 324, 324, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 567, 567, 567, 567, 567, 568, 882, - 717, 883, 324, 324, 324, 324, 324, 324, 248, 327, - 328, 329, 327, 327, 327, 327, 327, 327, 327, 330, - 716, 715, 833, 331, 331, 331, 331, 331, 331, 915, - 549, 405, 405, 405, 405, 405, 405, 405, 405, 405, - 405, 626, 626, 626, 626, 626, 627, 887, 331, 331, - - 331, 331, 331, 331, 333, 333, 333, 333, 333, 333, - 333, 333, 333, 333, 135, 897, 400, 883, 333, 333, - 333, 333, 333, 333, 447, 448, 449, 447, 447, 447, - 447, 447, 447, 447, 575, 580, 115, 679, 575, 580, - 678, 677, 676, 318, 318, 318, 318, 318, 318, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 135, - 675, 576, 581, 373, 373, 373, 373, 373, 373, 368, - 674, 369, 369, 369, 369, 369, 369, 369, 369, 369, - 369, 643, 643, 643, 643, 643, 644, 673, 373, 373, - 373, 373, 373, 373, 374, 374, 374, 374, 374, 374, - - 374, 374, 374, 374, 248, 672, 662, 661, 374, 374, - 374, 374, 374, 374, 368, 564, 369, 369, 369, 369, - 369, 369, 369, 369, 369, 369, 896, 659, 402, 248, - 658, 657, 896, 373, 373, 373, 373, 373, 373, 313, - 404, 314, 314, 314, 314, 314, 314, 314, 314, 314, - 314, 474, 474, 474, 474, 474, 474, 474, 474, 474, - 474, 323, 479, 480, 481, 479, 479, 479, 479, 479, - 479, 479, 694, 694, 694, 694, 694, 695, 115, 313, - 656, 314, 314, 314, 314, 314, 314, 314, 314, 314, - 314, 413, 413, 413, 413, 413, 413, 413, 413, 413, - - 413, 402, 248, 483, 483, 483, 483, 483, 483, 655, - 654, 782, 783, 404, 784, 782, 653, 652, 115, 402, - 248, 403, 403, 403, 403, 403, 403, 403, 403, 403, - 403, 404, 651, 650, 555, 405, 405, 405, 405, 405, - 405, 487, 487, 487, 487, 487, 487, 487, 487, 487, - 487, 585, 591, 593, 549, 585, 591, 593, 400, 323, - 405, 405, 405, 405, 405, 405, 248, 409, 410, 411, - 409, 409, 409, 409, 409, 409, 409, 412, 586, 592, - 594, 413, 413, 413, 413, 413, 413, 915, 613, 486, - 486, 486, 486, 486, 486, 486, 486, 486, 486, 712, - - 712, 712, 712, 712, 713, 612, 413, 413, 413, 413, - 413, 413, 450, 450, 450, 450, 450, 450, 450, 450, - 450, 450, 248, 611, 732, 608, 450, 450, 450, 450, - 450, 450, 522, 564, 523, 523, 523, 523, 523, 523, - 523, 523, 523, 523, 607, 732, 732, 606, 732, 732, - 522, 450, 450, 450, 450, 450, 450, 451, 451, 451, - 451, 451, 451, 451, 451, 451, 451, 732, 598, 732, - 733, 451, 451, 451, 451, 451, 451, 522, 621, 524, - 524, 524, 524, 524, 524, 524, 524, 524, 524, 597, - 623, 402, 248, 115, 115, 115, 450, 450, 450, 450, - - 450, 450, 468, 485, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 522, 115, 525, 525, 525, 525, - 525, 526, 523, 523, 523, 523, 543, 544, 545, 543, - 543, 543, 543, 543, 543, 543, 782, 783, 115, 784, - 782, 115, 468, 248, 470, 470, 470, 470, 470, 470, - 470, 470, 470, 470, 640, 468, 595, 469, 469, 469, - 469, 469, 469, 115, 555, 590, 556, 556, 556, 556, - 556, 556, 556, 556, 556, 556, 729, 120, 589, 238, - 729, 115, 468, 588, 471, 471, 471, 471, 471, 472, - 469, 469, 469, 469, 115, 555, 621, 557, 557, 557, - - 557, 557, 557, 557, 557, 557, 557, 555, 691, 558, - 558, 558, 558, 558, 559, 556, 556, 556, 556, 587, - 582, 115, 402, 248, 483, 483, 483, 483, 483, 483, - 483, 483, 483, 483, 404, 730, 579, 578, 482, 482, - 482, 482, 482, 482, 494, 494, 494, 494, 494, 494, - 494, 494, 494, 494, 522, 577, 523, 523, 523, 523, - 523, 523, 549, 482, 482, 482, 482, 482, 482, 402, - 248, 484, 484, 484, 484, 484, 484, 484, 484, 484, - 484, 485, 915, 248, 400, 486, 486, 486, 486, 486, - 486, 402, 248, 915, 485, 402, 248, 562, 562, 562, - - 562, 562, 562, 485, 323, 691, 323, 485, 542, 541, - 486, 486, 486, 486, 486, 486, 248, 490, 491, 492, - 490, 490, 490, 490, 490, 490, 490, 493, 540, 539, - 538, 494, 494, 494, 494, 494, 494, 566, 566, 566, - 566, 566, 566, 566, 566, 566, 566, 537, 575, 536, - 535, 621, 575, 534, 533, 532, 494, 494, 494, 494, - 494, 494, 468, 691, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 915, 576, 565, 565, 565, 565, - 565, 565, 565, 565, 565, 565, 603, 604, 605, 603, - 603, 603, 603, 603, 603, 603, 862, 120, 531, 238, - - 862, 115, 468, 621, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 522, 757, 523, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 522, 915, 523, 523, - 523, 523, 523, 523, 523, 523, 523, 523, 530, 757, - 529, 115, 550, 551, 552, 550, 550, 550, 550, 550, - 550, 550, 553, 528, 527, 915, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 915, 580, 585, 591, 357, 580, 585, 591, - 517, 554, 554, 554, 554, 554, 554, 402, 248, 562, - 562, 562, 562, 562, 562, 562, 562, 562, 562, 485, - - 581, 586, 592, 561, 561, 561, 561, 561, 561, 625, - 625, 625, 625, 625, 625, 625, 625, 625, 625, 516, - 593, 575, 580, 510, 593, 575, 580, 509, 561, 561, - 561, 561, 561, 561, 402, 248, 563, 563, 563, 563, - 563, 563, 563, 563, 563, 563, 564, 594, 576, 581, - 565, 565, 565, 565, 565, 565, 915, 621, 624, 624, - 624, 624, 624, 624, 624, 624, 624, 624, 585, 757, - 881, 882, 585, 883, 881, 565, 565, 565, 565, 565, - 565, 248, 569, 570, 571, 569, 569, 569, 569, 569, - 569, 569, 572, 508, 507, 586, 573, 573, 573, 573, - - 573, 573, 633, 634, 635, 633, 633, 633, 633, 633, - 633, 633, 555, 506, 556, 556, 556, 556, 556, 556, - 505, 573, 573, 573, 573, 573, 573, 614, 615, 615, - 615, 615, 615, 615, 615, 615, 615, 615, 555, 504, - 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, - 555, 248, 556, 556, 556, 556, 556, 556, 556, 556, - 556, 556, 640, 503, 502, 115, 614, 616, 616, 616, - 616, 616, 616, 616, 616, 616, 616, 402, 248, 573, - 573, 573, 573, 573, 573, 573, 573, 573, 573, 564, - 915, 248, 642, 642, 642, 642, 642, 642, 642, 642, - - 642, 642, 564, 501, 115, 614, 617, 617, 617, 617, - 617, 618, 615, 615, 615, 615, 402, 248, 638, 638, - 638, 638, 638, 638, 500, 499, 498, 915, 564, 641, - 641, 641, 641, 641, 641, 641, 641, 641, 641, 497, - 496, 591, 477, 115, 621, 591, 622, 622, 622, 622, - 622, 622, 622, 622, 622, 622, 623, 402, 248, 400, - 624, 624, 624, 624, 624, 624, 402, 248, 592, 564, - 915, 248, 402, 248, 323, 593, 718, 722, 640, 593, - 718, 722, 640, 473, 640, 624, 624, 624, 624, 624, - 624, 628, 629, 630, 628, 628, 628, 628, 628, 628, - - 628, 631, 594, 719, 723, 632, 632, 632, 632, 632, - 632, 667, 668, 668, 668, 668, 668, 668, 668, 668, - 668, 668, 724, 718, 722, 323, 724, 718, 722, 141, - 632, 632, 632, 632, 632, 632, 402, 248, 638, 638, - 638, 638, 638, 638, 638, 638, 638, 638, 564, 725, - 719, 723, 637, 637, 637, 637, 637, 637, 667, 669, - 669, 669, 669, 669, 669, 669, 669, 669, 669, 667, - 668, 668, 668, 668, 668, 668, 467, 637, 637, 637, - 637, 637, 637, 402, 248, 639, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 640, 466, 465, 462, 641, - - 641, 641, 641, 641, 641, 667, 670, 670, 670, 670, - 670, 671, 668, 668, 668, 668, 724, 775, 461, 460, - 724, 775, 459, 458, 641, 641, 641, 641, 641, 641, - 248, 645, 646, 647, 645, 645, 645, 645, 645, 645, - 645, 457, 456, 725, 776, 648, 648, 648, 648, 648, - 648, 680, 681, 682, 683, 680, 680, 680, 680, 680, - 680, 455, 614, 615, 615, 615, 615, 615, 615, 452, - 648, 648, 648, 648, 648, 648, 685, 686, 687, 685, - 685, 685, 685, 685, 685, 685, 368, 357, 115, 614, - 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, - - 115, 632, 632, 632, 632, 632, 632, 632, 632, 632, - 632, 621, 621, 689, 689, 689, 689, 689, 689, 876, - 876, 876, 876, 623, 813, 442, 357, 115, 614, 615, - 615, 615, 615, 615, 615, 615, 615, 615, 615, 693, - 693, 693, 693, 693, 693, 693, 693, 693, 693, 915, - 915, 692, 692, 692, 692, 692, 692, 692, 692, 692, - 692, 441, 813, 357, 440, 434, 115, 621, 433, 689, - 689, 689, 689, 689, 689, 689, 689, 689, 689, 623, - 621, 621, 690, 690, 690, 690, 690, 690, 690, 690, - 690, 690, 691, 813, 432, 431, 692, 692, 692, 692, - - 692, 692, 701, 430, 702, 702, 702, 702, 702, 702, - 702, 702, 702, 702, 760, 760, 760, 760, 760, 761, - 429, 692, 692, 692, 692, 692, 692, 696, 697, 698, - 696, 696, 696, 696, 696, 696, 696, 699, 428, 427, - 426, 700, 700, 700, 700, 700, 700, 701, 425, 703, - 703, 703, 703, 703, 703, 703, 703, 703, 703, 816, - 816, 816, 816, 816, 817, 424, 700, 700, 700, 700, - 700, 700, 701, 423, 704, 704, 704, 704, 704, 705, - 702, 702, 702, 702, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 402, 248, 708, 708, 708, 708, - - 708, 708, 708, 708, 708, 708, 640, 418, 417, 135, - 707, 707, 707, 707, 707, 707, 402, 248, 708, 708, - 708, 708, 708, 708, 323, 400, 323, 701, 640, 702, - 702, 702, 702, 702, 702, 707, 707, 707, 707, 707, - 707, 402, 248, 709, 709, 709, 709, 709, 709, 709, - 709, 709, 709, 141, 390, 386, 385, 710, 710, 710, - 710, 710, 710, 711, 711, 711, 711, 711, 711, 711, - 711, 711, 711, 402, 248, 772, 772, 772, 772, 772, - 772, 384, 710, 710, 710, 710, 710, 710, 915, 383, - 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, - - 734, 735, 736, 737, 734, 734, 734, 734, 734, 734, - 667, 668, 668, 668, 668, 668, 668, 668, 668, 668, - 668, 667, 668, 668, 668, 668, 668, 668, 668, 668, - 668, 668, 742, 382, 743, 743, 743, 743, 743, 743, - 743, 743, 743, 743, 748, 381, 749, 749, 749, 749, - 749, 749, 749, 749, 749, 749, 748, 380, 750, 750, - 750, 750, 750, 750, 750, 750, 750, 750, 379, 378, - 377, 115, 742, 376, 744, 744, 744, 744, 744, 744, - 744, 744, 744, 744, 748, 375, 751, 751, 751, 751, - 751, 752, 749, 749, 749, 749, 700, 700, 700, 700, - - 700, 700, 700, 700, 700, 700, 718, 215, 365, 362, - 718, 115, 742, 361, 745, 745, 745, 745, 745, 746, - 747, 747, 747, 747, 621, 360, 755, 755, 755, 755, - 755, 755, 359, 719, 352, 351, 691, 759, 759, 759, - 759, 759, 759, 759, 759, 759, 759, 350, 349, 348, - 347, 115, 742, 344, 747, 747, 747, 743, 743, 743, - 743, 743, 743, 743, 915, 343, 758, 758, 758, 758, - 758, 758, 758, 758, 758, 758, 767, 768, 769, 767, - 767, 767, 767, 767, 767, 767, 881, 882, 342, 883, - 881, 115, 621, 341, 755, 755, 755, 755, 755, 755, - - 755, 755, 755, 755, 691, 621, 340, 756, 756, 756, - 756, 756, 756, 756, 756, 756, 756, 757, 339, 338, - 337, 758, 758, 758, 758, 758, 758, 701, 336, 702, - 702, 702, 702, 702, 702, 702, 702, 702, 702, 857, - 857, 857, 857, 857, 858, 335, 758, 758, 758, 758, - 758, 758, 762, 763, 764, 762, 762, 762, 762, 762, - 762, 762, 765, 334, 141, 133, 766, 766, 766, 766, - 766, 766, 701, 235, 702, 702, 702, 702, 702, 702, - 702, 702, 702, 702, 722, 724, 309, 308, 722, 724, - 307, 766, 766, 766, 766, 766, 766, 402, 248, 772, - - 772, 772, 772, 772, 772, 772, 772, 772, 772, 787, - 306, 723, 725, 787, 788, 789, 790, 787, 299, 298, - 297, 787, 788, 789, 790, 794, 296, 795, 795, 795, - 795, 795, 795, 795, 795, 795, 795, 794, 295, 796, - 796, 796, 796, 796, 796, 796, 796, 796, 796, 794, - 915, 797, 797, 797, 797, 797, 798, 799, 799, 799, - 799, 775, 212, 791, 204, 775, 199, 200, 194, 194, - 794, 793, 799, 799, 799, 795, 795, 795, 795, 795, - 795, 795, 892, 892, 892, 892, 892, 892, 776, 803, - 804, 805, 803, 803, 803, 803, 803, 803, 803, 159, - - 742, 186, 743, 743, 743, 743, 743, 743, 806, 807, - 808, 806, 806, 806, 806, 806, 806, 806, 748, 286, - 749, 749, 749, 749, 749, 749, 115, 742, 278, 743, - 743, 743, 743, 743, 743, 743, 743, 743, 743, 115, - 748, 277, 749, 749, 749, 749, 749, 749, 749, 749, - 749, 749, 748, 276, 749, 749, 749, 749, 749, 749, - 749, 749, 749, 749, 275, 274, 115, 742, 271, 743, - 743, 743, 743, 743, 743, 743, 743, 743, 743, 766, - 766, 766, 766, 766, 766, 766, 766, 766, 766, 621, - 270, 811, 811, 811, 811, 811, 811, 269, 268, 267, - - 266, 757, 258, 257, 256, 255, 115, 621, 254, 811, - 811, 811, 811, 811, 811, 811, 811, 811, 811, 757, - 621, 253, 812, 812, 812, 812, 812, 812, 812, 812, - 812, 812, 813, 141, 114, 141, 814, 814, 814, 814, - 814, 814, 815, 815, 815, 815, 815, 815, 815, 815, - 815, 815, 775, 828, 214, 129, 775, 828, 120, 118, - 115, 814, 814, 814, 814, 814, 814, 818, 819, 820, - 818, 818, 818, 818, 818, 818, 818, 235, 231, 776, - 829, 821, 821, 821, 821, 821, 821, 915, 230, 814, - 814, 814, 814, 814, 814, 814, 814, 814, 814, 248, - - 822, 822, 822, 822, 822, 822, 821, 821, 821, 821, - 821, 821, 248, 822, 822, 822, 822, 822, 822, 822, - 822, 822, 822, 248, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 248, 824, 824, 824, 824, 824, - 825, 822, 822, 822, 822, 915, 229, 228, 227, 915, - 915, 915, 915, 787, 222, 200, 194, 787, 788, 789, - 790, 915, 186, 117, 152, 915, 788, 789, 790, 915, - 183, 149, 175, 915, 915, 915, 790, 834, 173, 155, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 154, 915, 151, 150, 786, 144, 141, 129, 828, 791, - - 786, 786, 828, 118, 786, 915, 117, 791, 115, 915, - 915, 915, 915, 915, 915, 791, 915, 915, 786, 786, - 786, 915, 915, 791, 792, 829, 915, 915, 828, 859, - 792, 792, 828, 859, 792, 836, 837, 838, 836, 836, - 836, 836, 836, 836, 836, 915, 915, 915, 792, 792, - 792, 915, 915, 915, 915, 829, 860, 915, 794, 793, - 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, - 794, 915, 795, 795, 795, 795, 795, 795, 795, 795, - 795, 795, 794, 915, 795, 795, 795, 795, 795, 795, - 841, 915, 842, 842, 842, 842, 842, 842, 842, 842, - - 842, 842, 846, 915, 847, 847, 847, 847, 847, 847, - 847, 847, 847, 847, 846, 915, 848, 848, 848, 848, - 848, 848, 848, 848, 848, 848, 915, 915, 915, 115, - 841, 915, 843, 843, 843, 843, 843, 843, 843, 843, - 843, 843, 846, 915, 849, 849, 849, 849, 849, 850, - 847, 847, 847, 847, 821, 821, 821, 821, 821, 821, - 821, 821, 821, 821, 859, 915, 915, 915, 859, 115, - 841, 915, 844, 844, 844, 844, 844, 845, 842, 842, - 842, 842, 621, 915, 853, 853, 853, 853, 853, 853, - 915, 860, 915, 915, 813, 856, 856, 856, 856, 856, - - 856, 856, 856, 856, 856, 915, 915, 915, 915, 115, - 621, 915, 853, 853, 853, 853, 853, 853, 853, 853, - 853, 853, 813, 621, 915, 854, 854, 854, 854, 854, - 854, 854, 854, 854, 854, 915, 915, 915, 915, 855, - 855, 855, 855, 855, 855, 915, 915, 855, 855, 855, - 855, 855, 855, 855, 855, 855, 855, 912, 912, 912, - 912, 912, 912, 915, 855, 855, 855, 855, 855, 855, - 248, 822, 822, 822, 822, 822, 822, 822, 822, 822, - 822, 248, 822, 822, 822, 822, 822, 822, 822, 822, - 822, 822, 835, 835, 835, 835, 835, 835, 835, 835, - - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 863, 915, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 863, 915, 865, 865, 865, 865, - 865, 865, 865, 865, 865, 865, 863, 915, 866, 866, - 866, 866, 866, 867, 864, 864, 864, 864, 869, 870, - 871, 869, 869, 869, 869, 869, 869, 869, 915, 841, - 915, 842, 842, 842, 842, 842, 842, 872, 873, 874, - 872, 872, 872, 872, 872, 872, 872, 846, 915, 847, - 847, 847, 847, 847, 847, 115, 841, 915, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, 115, 846, - - 915, 847, 847, 847, 847, 847, 847, 847, 847, 847, - 847, 846, 915, 847, 847, 847, 847, 847, 847, 847, - 847, 847, 847, 859, 915, 115, 841, 859, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, 621, 915, - 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, - 860, 878, 915, 915, 863, 878, 864, 864, 864, 864, - 864, 864, 915, 915, 915, 115, 884, 885, 886, 884, - 884, 884, 884, 884, 884, 884, 915, 863, 879, 864, - 864, 864, 864, 864, 864, 864, 864, 864, 864, 863, - 915, 864, 864, 864, 864, 864, 864, 864, 864, 864, - - 864, 878, 915, 915, 915, 878, 892, 892, 892, 892, - 892, 892, 892, 892, 892, 892, 893, 893, 893, 893, - 893, 893, 893, 893, 893, 893, 878, 915, 879, 887, - 878, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 894, 894, 894, 894, 894, 895, 892, 892, 892, - 892, 915, 898, 879, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 915, 915, 915, 915, 115, 887, - 915, 889, 889, 889, 889, 889, 889, 889, 889, 889, - 889, 898, 915, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 898, 915, 901, 901, 901, 901, 901, - - 902, 899, 899, 899, 899, 915, 915, 915, 115, 887, - 915, 890, 890, 890, 890, 890, 891, 888, 888, 888, - 888, 903, 904, 905, 903, 903, 903, 903, 903, 903, - 903, 915, 887, 915, 888, 888, 888, 888, 888, 888, - 898, 915, 899, 899, 899, 899, 899, 899, 115, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 115, 887, - 915, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 115, 892, 892, 892, 892, 892, 892, 892, 892, - 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, - 892, 892, 915, 915, 915, 915, 915, 915, 115, 887, - - 915, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 906, 907, 908, 906, 906, 906, 906, 906, 906, - 906, 898, 915, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 915, 915, 915, 915, 898, 115, 899, - 899, 899, 899, 899, 899, 899, 899, 899, 899, 909, - 909, 909, 909, 909, 909, 909, 909, 909, 909, 903, - 903, 903, 903, 903, 903, 903, 903, 903, 903, 910, - 910, 910, 910, 910, 911, 909, 909, 909, 909, 915, - 915, 915, 915, 915, 915, 915, 115, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 115, 915, 915, 915, - - 915, 915, 915, 915, 915, 915, 115, 912, 912, 912, - 912, 912, 912, 912, 912, 912, 912, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 913, 913, 913, - 913, 913, 914, 912, 912, 912, 912, 909, 909, 909, - 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, - 909, 909, 909, 912, 912, 912, 912, 912, 912, 912, - 912, 912, 912, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 115, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 115, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - - 68, 68, 68, 68, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 114, 915, 915, 114, 915, 915, 915, 915, 915, 114, - 114, 114, 915, 915, 114, 114, 114, 114, 114, 119, - - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 124, 915, - 915, 124, 915, 915, 124, 915, 915, 124, 124, 124, - 124, 915, 124, 124, 124, 124, 124, 128, 915, 915, - 128, 915, 915, 915, 915, 915, 128, 128, 128, 915, - 915, 128, 128, 128, 128, 128, 130, 915, 915, 130, - 130, 130, 915, 130, 915, 130, 130, 130, 915, 915, - 130, 130, 130, 130, 130, 140, 140, 915, 915, 915, - 915, 140, 180, 915, 915, 180, 180, 180, 915, 180, - 915, 180, 180, 180, 915, 915, 180, 180, 180, 180, - - 180, 185, 915, 915, 185, 185, 185, 915, 185, 915, - 185, 185, 185, 915, 185, 185, 915, 185, 185, 185, - 192, 192, 192, 193, 915, 915, 193, 193, 915, 915, - 193, 915, 193, 193, 193, 193, 915, 193, 193, 193, - 193, 193, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 199, 199, 915, 199, 199, 915, 199, 199, 199, - 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, - 206, 915, 915, 206, 915, 915, 206, 915, 915, 206, - 206, 206, 206, 915, 206, 206, 206, 206, 206, 210, - - 915, 915, 210, 915, 915, 915, 915, 915, 210, 210, - 210, 915, 210, 210, 210, 210, 210, 210, 213, 915, - 915, 213, 213, 213, 915, 213, 915, 213, 213, 213, - 915, 213, 213, 213, 213, 213, 213, 234, 915, 915, - 915, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 239, 239, 915, 239, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 239, 131, 915, 915, 131, 131, 131, - - 915, 131, 915, 131, 131, 131, 915, 915, 131, 131, - 131, 131, 131, 140, 140, 915, 915, 915, 915, 140, - 247, 247, 915, 915, 915, 915, 247, 249, 249, 249, - 915, 915, 915, 915, 249, 180, 915, 915, 180, 180, - 180, 915, 180, 915, 180, 180, 180, 915, 915, 180, - 180, 180, 180, 180, 181, 915, 915, 181, 181, 181, - 915, 181, 915, 181, 181, 181, 915, 915, 181, 181, - 181, 181, 181, 185, 915, 915, 185, 185, 185, 915, - 185, 915, 185, 185, 185, 915, 185, 185, 915, 185, - 185, 185, 192, 192, 192, 193, 915, 915, 193, 193, - - 915, 915, 193, 915, 193, 193, 193, 193, 915, 193, - 193, 193, 193, 193, 199, 199, 915, 199, 199, 915, - 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, - 199, 199, 199, 209, 915, 915, 209, 915, 915, 915, - 915, 915, 209, 209, 209, 915, 915, 209, 209, 209, - 209, 209, 210, 915, 915, 210, 915, 915, 915, 915, - 915, 210, 210, 210, 915, 210, 210, 210, 210, 210, - 210, 213, 915, 915, 213, 213, 213, 915, 213, 915, - 213, 213, 213, 915, 213, 213, 213, 213, 213, 213, - 224, 915, 915, 224, 915, 224, 234, 915, 915, 915, - - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 319, 319, 915, 915, 915, 915, - 319, 325, 325, 325, 915, 915, 915, 915, 325, 394, - 394, 915, 915, 915, 915, 394, 395, 395, 915, 915, - 915, 915, 395, 399, 399, 915, 915, 915, 915, 399, - 401, 401, 401, 915, 915, 915, 915, 401, 224, 915, - 915, 224, 915, 224, 473, 473, 915, 915, 915, 915, - 473, 475, 475, 915, 915, 915, 915, 475, 476, 476, - - 915, 915, 915, 915, 476, 478, 478, 478, 915, 915, - 915, 915, 478, 482, 482, 482, 482, 915, 915, 915, - 915, 482, 546, 546, 915, 915, 915, 915, 546, 547, - 547, 915, 915, 915, 915, 547, 548, 548, 915, 915, - 915, 915, 548, 560, 560, 560, 915, 915, 915, 915, - 560, 561, 561, 561, 561, 915, 915, 915, 915, 561, - 619, 619, 915, 915, 915, 915, 619, 620, 620, 915, - 915, 915, 915, 620, 636, 636, 636, 915, 915, 915, - 915, 636, 637, 637, 637, 637, 915, 915, 915, 915, - 637, 684, 684, 915, 915, 915, 915, 684, 688, 915, - - 688, 688, 915, 915, 915, 915, 688, 706, 706, 706, - 915, 915, 915, 915, 706, 707, 707, 707, 707, 915, - 915, 915, 915, 707, 753, 753, 915, 915, 915, 915, - 753, 754, 915, 754, 754, 915, 915, 915, 915, 754, - 770, 770, 770, 915, 915, 915, 915, 770, 771, 771, - 771, 915, 915, 915, 915, 915, 771, 781, 781, 781, - 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, - 781, 781, 781, 781, 781, 781, 786, 786, 915, 786, - 786, 786, 786, 915, 915, 786, 786, 786, 915, 915, - 786, 786, 786, 786, 786, 792, 792, 915, 792, 792, - - 792, 792, 915, 915, 792, 792, 792, 915, 915, 792, - 792, 792, 792, 792, 809, 809, 915, 915, 915, 915, - 809, 810, 915, 810, 810, 915, 915, 915, 915, 810, - 826, 826, 915, 915, 915, 915, 915, 826, 851, 851, - 915, 915, 915, 915, 851, 852, 915, 852, 852, 915, - 915, 915, 915, 852, 875, 875, 915, 915, 915, 915, - 875, 876, 915, 876, 915, 915, 915, 915, 915, 876, - 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, - 880, 880, 880, 880, 880, 880, 880, 880, 880, 17, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915 - } ; - -static yyconst flex_int16_t yy_chk[6165] = - { 0, - 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, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 19, 909, 40, 2, 19, - 25, 2, 5, 5, 37, 5, 5, 5, 40, 5, - 41, 43, 49, 41, 37, 5, 43, 55, 6, 6, - - 25, 6, 6, 6, 46, 6, 49, 2, 2, 5, - 5, 6, 2, 33, 33, 33, 33, 33, 33, 46, - 2, 58, 55, 2, 3, 6, 6, 25, 3, 11, - 11, 3, 11, 11, 11, 11, 5, 3, 12, 12, - 3, 12, 12, 12, 12, 56, 62, 86, 615, 58, - 62, 86, 6, 52, 3, 15, 15, 15, 15, 15, - 15, 15, 52, 80, 56, 3, 119, 3, 119, 3, - 3, 52, 3, 16, 16, 16, 16, 16, 16, 16, - 30, 30, 99, 11, 30, 30, 615, 60, 67, 80, - 87, 60, 12, 99, 3, 4, 82, 67, 899, 4, - - 60, 86, 4, 162, 30, 162, 67, 100, 4, 15, - 100, 4, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 82, 163, 109, 4, 53, 16, 163, 30, - 53, 76, 76, 109, 76, 76, 4, 160, 4, 87, - 4, 4, 51, 4, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 84, 84, 90, 84, 84, 53, - 53, 237, 877, 237, 53, 4, 7, 7, 111, 7, - 7, 7, 53, 7, 61, 53, 90, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 116, 175, 141, - 160, 116, 63, 63, 175, 364, 63, 63, 89, 89, - - 141, 89, 89, 90, 89, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 177, 63, 111, 364, 177, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, - 8, 63, 8, 8, 8, 172, 8, 95, 95, 95, - 95, 95, 95, 139, 139, 139, 139, 139, 139, 875, - 74, 74, 179, 74, 74, 74, 179, 74, 238, 173, - 238, 74, 107, 74, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 170, 173, 170, 74, 74, 864, - 202, 172, 354, 8, 8, 8, 8, 8, 8, 8, - - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 9, 9, 74, 9, 9, 9, 9, 9, - 91, 354, 124, 91, 9, 9, 9, 515, 142, 91, - 113, 113, 91, 113, 113, 91, 91, 515, 184, 202, - 9, 142, 124, 184, 126, 236, 239, 855, 239, 91, - 170, 91, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 206, 273, 126, 174, 9, 10, 10, 124, - 10, 10, 10, 10, 10, 91, 91, 273, 174, 10, - 10, 10, 206, 284, 113, 284, 115, 115, 115, 115, - 115, 126, 115, 115, 236, 10, 115, 123, 123, 123, - - 123, 123, 123, 123, 123, 123, 123, 151, 151, 206, - 115, 115, 115, 151, 151, 265, 265, 151, 854, 151, - 151, 10, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 24, 852, 24, 133, - - 133, 133, 133, 133, 133, 133, 133, 133, 133, 24, - 280, 280, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 31, 355, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 249, 133, 274, 31, 31, - 31, 31, 31, 31, 125, 274, 249, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 171, 851, 355, - 283, 31, 171, 31, 31, 31, 31, 31, 31, 38, - 171, 847, 38, 127, 127, 127, 127, 283, 38, 127, - 127, 38, 38, 127, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 127, 127, - - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 311, 438, 311, 42, 42, 42, - 42, 42, 42, 285, 840, 158, 158, 42, 158, 158, - 201, 204, 130, 130, 201, 204, 130, 130, 285, 312, - 318, 312, 42, 42, 42, 42, 42, 42, 50, 50, - 438, 50, 50, 50, 50, 50, 130, 50, 50, 709, - - 709, 50, 129, 129, 129, 129, 129, 318, 129, 129, - 161, 161, 129, 161, 161, 50, 50, 50, 54, 176, - 54, 130, 831, 176, 201, 281, 129, 129, 129, 235, - 281, 54, 176, 235, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 161, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 187, 187, 387, 187, 187, - 387, 54, 75, 235, 75, 251, 180, 180, 288, 251, - 180, 180, 288, 203, 203, 75, 203, 203, 75, 75, - - 75, 75, 75, 75, 75, 75, 75, 75, 92, 164, - 180, 92, 207, 164, 92, 92, 287, 92, 92, 92, - 92, 183, 183, 92, 92, 325, 827, 183, 183, 332, - 287, 183, 207, 183, 366, 180, 325, 92, 92, 92, - 332, 401, 164, 164, 322, 322, 322, 164, 272, 272, - 366, 272, 401, 198, 198, 164, 198, 198, 164, 207, - 826, 337, 377, 92, 92, 93, 337, 377, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 822, 272, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - - 93, 93, 93, 93, 93, 93, 93, 198, 435, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 96, 314, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 710, - 710, 435, 96, 96, 96, 96, 96, 96, 191, 191, - 191, 191, 191, 191, 191, 191, 191, 191, 220, 220, - 220, 220, 220, 220, 403, 403, 314, 96, 96, 96, - 96, 96, 96, 97, 520, 773, 403, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 773, 520, 97, 97, 97, 97, 97, 97, 97, 97, - - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 436, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 279, 436, 279, 101, 101, - 101, 101, 101, 101, 308, 308, 356, 308, 101, 194, - 444, 810, 356, 194, 334, 194, 194, 363, 334, 363, - 437, 444, 194, 101, 101, 101, 101, 101, 101, 132, - 414, 809, 132, 132, 132, 132, 132, 194, 132, 132, - 802, 334, 132, 367, 208, 208, 208, 208, 414, 367, - - 208, 208, 279, 437, 208, 801, 132, 132, 132, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 208, - 208, 445, 469, 134, 134, 134, 134, 134, 134, 338, - 601, 363, 445, 338, 212, 212, 212, 212, 212, 799, - 212, 212, 439, 795, 212, 519, 601, 439, 134, 134, - 134, 134, 134, 134, 143, 519, 338, 143, 212, 212, - 212, 469, 574, 143, 772, 772, 143, 143, 574, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 779, 778, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 600, - 771, 600, 144, 144, 144, 144, 144, 144, 215, 215, - 215, 215, 215, 215, 215, 215, 215, 215, 329, 329, - 329, 329, 329, 329, 478, 754, 753, 144, 144, 144, - 144, 144, 144, 182, 482, 478, 182, 182, 182, 182, - 182, 210, 182, 182, 210, 482, 182, 365, 375, 446, - 210, 214, 375, 210, 446, 214, 210, 210, 214, 521, - - 182, 182, 182, 378, 214, 353, 495, 378, 353, 521, - 210, 495, 210, 749, 365, 375, 741, 740, 214, 214, - 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 378, 518, 365, 518, 405, 405, 210, 210, 213, 622, - 353, 213, 714, 739, 213, 213, 405, 213, 213, 213, - 213, 622, 714, 213, 213, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 229, 229, 213, 213, 213, - 731, 229, 229, 596, 599, 229, 599, 229, 240, 240, - 240, 240, 240, 240, 240, 240, 240, 240, 602, 518, - 596, 664, 727, 213, 213, 216, 216, 216, 216, 216, - - 216, 216, 216, 216, 216, 602, 781, 664, 781, 216, - 216, 216, 216, 216, 216, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 372, 721, 372, 372, 372, - 372, 372, 372, 599, 216, 216, 216, 216, 216, 216, - 221, 443, 720, 443, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 717, 715, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 702, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - - 221, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 443, 688, 684, 222, 222, 222, 222, 222, - 222, 289, 676, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 411, 411, 411, 411, 411, 411, 675, - 222, 222, 222, 222, 222, 222, 242, 673, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 242, 290, 560, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 560, 286, 502, 672, 532, 286, 561, 502, 286, 532, - 784, 668, 784, 743, 286, 242, 243, 561, 243, 243, - 243, 243, 243, 243, 243, 243, 243, 243, 286, 286, - - 291, 747, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 743, 842, 666, 243, 244, 636, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 636, 317, - 747, 317, 317, 317, 317, 317, 317, 662, 661, 313, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 730, 842, 730, 660, 244, 245, 624, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 317, 624, - 659, 655, 245, 245, 245, 245, 245, 245, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, 415, 421, - - 649, 654, 415, 421, 785, 649, 785, 245, 245, 245, - 245, 245, 245, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 730, 415, 421, 248, 248, 248, - 248, 248, 248, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 492, 492, 492, 492, 492, 492, 880, - 652, 880, 248, 248, 248, 248, 248, 248, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 651, 650, 785, 250, 250, 250, 250, 250, 250, 331, - 620, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 552, 552, 552, 552, 552, 552, 888, 250, 250, - - 250, 250, 250, 250, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 883, 619, 883, 252, 252, - 252, 252, 252, 252, 368, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 496, 500, 888, 613, 496, 500, - 612, 611, 610, 252, 252, 252, 252, 252, 252, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 609, 496, 500, 292, 292, 292, 292, 292, 292, 370, - 608, 370, 370, 370, 370, 370, 370, 370, 370, 370, - 370, 571, 571, 571, 571, 571, 571, 607, 292, 292, - 292, 292, 292, 292, 294, 294, 294, 294, 294, 294, - - 294, 294, 294, 294, 637, 606, 598, 597, 294, 294, - 294, 294, 294, 294, 371, 637, 371, 371, 371, 371, - 371, 371, 371, 371, 371, 371, 995, 590, 483, 483, - 589, 588, 995, 294, 294, 294, 294, 294, 294, 315, - 483, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 396, 396, 396, 396, 396, 396, 396, 396, 396, - 396, 396, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 630, 630, 630, 630, 630, 630, 315, 316, - 587, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 404, 404, 404, 404, 404, 404, 404, 404, 404, - - 404, 408, 408, 408, 408, 408, 408, 408, 408, 584, - 583, 729, 729, 408, 729, 729, 582, 579, 316, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 578, 577, 556, 327, 327, 327, 327, 327, - 327, 410, 410, 410, 410, 410, 410, 410, 410, 410, - 410, 503, 508, 509, 548, 503, 508, 509, 547, 546, - 327, 327, 327, 327, 327, 327, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 503, 508, - 509, 330, 330, 330, 330, 330, 330, 413, 542, 413, - 413, 413, 413, 413, 413, 413, 413, 413, 413, 647, - - 647, 647, 647, 647, 647, 535, 330, 330, 330, 330, - 330, 330, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 706, 534, 728, 531, 373, 373, 373, 373, - 373, 373, 447, 706, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 529, 665, 728, 528, 728, 728, - 523, 373, 373, 373, 373, 373, 373, 374, 374, 374, - 374, 374, 374, 374, 374, 374, 374, 665, 517, 665, - 665, 374, 374, 374, 374, 374, 374, 448, 689, 448, - 448, 448, 448, 448, 448, 448, 448, 448, 448, 516, - 689, 484, 484, 514, 665, 513, 374, 374, 374, 374, - - 374, 374, 391, 484, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 449, 512, 449, 449, 449, 449, - 449, 449, 449, 449, 449, 449, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 782, 782, 511, 782, - 782, 391, 392, 707, 392, 392, 392, 392, 392, 392, - 392, 392, 392, 392, 707, 472, 510, 472, 472, 472, - 472, 472, 472, 468, 479, 507, 479, 479, 479, 479, - 479, 479, 479, 479, 479, 479, 663, 663, 506, 663, - 663, 392, 393, 505, 393, 393, 393, 393, 393, 393, - 393, 393, 393, 393, 472, 480, 690, 480, 480, 480, - - 480, 480, 480, 480, 480, 480, 480, 481, 690, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 504, - 501, 393, 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 406, 406, 663, 499, 498, 406, 406, - 406, 406, 406, 406, 485, 485, 485, 485, 485, 485, - 485, 485, 485, 485, 526, 497, 526, 526, 526, 526, - 526, 526, 476, 406, 406, 406, 406, 406, 406, 409, - 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 486, 486, 475, 409, 409, 409, 409, 409, - 409, 562, 562, 692, 486, 489, 489, 489, 489, 489, - - 489, 489, 489, 562, 474, 692, 473, 489, 467, 466, - 409, 409, 409, 409, 409, 409, 412, 412, 412, 412, - 412, 412, 412, 412, 412, 412, 412, 412, 465, 464, - 463, 412, 412, 412, 412, 412, 412, 491, 491, 491, - 491, 491, 491, 491, 491, 491, 491, 462, 527, 461, - 460, 755, 527, 459, 458, 457, 412, 412, 412, 412, - 412, 412, 470, 755, 470, 470, 470, 470, 470, 470, - 470, 470, 470, 470, 494, 527, 494, 494, 494, 494, - 494, 494, 494, 494, 494, 494, 522, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 833, 833, 456, 833, - - 833, 470, 471, 756, 471, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 524, 756, 524, 524, 524, 524, - 524, 524, 524, 524, 524, 524, 525, 758, 525, 525, - 525, 525, 525, 525, 525, 525, 525, 525, 455, 758, - 454, 471, 477, 477, 477, 477, 477, 477, 477, 477, - 477, 477, 477, 453, 452, 451, 477, 477, 477, 477, - 477, 477, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 450, 530, 533, 536, 442, 530, 533, 536, - 441, 477, 477, 477, 477, 477, 477, 487, 487, 487, - 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, - - 530, 533, 536, 487, 487, 487, 487, 487, 487, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 440, - 537, 575, 580, 434, 537, 575, 580, 433, 487, 487, - 487, 487, 487, 487, 490, 490, 490, 490, 490, 490, - 490, 490, 490, 490, 490, 490, 490, 537, 575, 580, - 490, 490, 490, 490, 490, 490, 554, 811, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, 585, 811, - 862, 862, 585, 862, 862, 490, 490, 490, 490, 490, - 490, 493, 493, 493, 493, 493, 493, 493, 493, 493, - 493, 493, 493, 431, 430, 585, 493, 493, 493, 493, - - 493, 493, 555, 555, 555, 555, 555, 555, 555, 555, - 555, 555, 559, 429, 559, 559, 559, 559, 559, 559, - 428, 493, 493, 493, 493, 493, 493, 543, 543, 543, - 543, 543, 543, 543, 543, 543, 543, 543, 557, 427, - 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, - 558, 770, 558, 558, 558, 558, 558, 558, 558, 558, - 558, 558, 770, 426, 425, 543, 544, 544, 544, 544, - 544, 544, 544, 544, 544, 544, 544, 563, 563, 564, - 564, 564, 564, 564, 564, 564, 564, 564, 564, 563, - 565, 565, 570, 570, 570, 570, 570, 570, 570, 570, - - 570, 570, 565, 424, 544, 545, 545, 545, 545, 545, - 545, 545, 545, 545, 545, 545, 568, 568, 568, 568, - 568, 568, 568, 568, 423, 420, 419, 573, 568, 573, - 573, 573, 573, 573, 573, 573, 573, 573, 573, 418, - 417, 591, 400, 545, 550, 591, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 638, 638, 399, - 550, 550, 550, 550, 550, 550, 639, 639, 591, 638, - 641, 641, 708, 708, 398, 593, 653, 656, 639, 593, - 653, 656, 641, 397, 708, 550, 550, 550, 550, 550, - 550, 553, 553, 553, 553, 553, 553, 553, 553, 553, - - 553, 553, 593, 653, 656, 553, 553, 553, 553, 553, - 553, 603, 603, 603, 603, 603, 603, 603, 603, 603, - 603, 603, 657, 674, 677, 395, 657, 674, 677, 394, - 553, 553, 553, 553, 553, 553, 566, 566, 566, 566, - 566, 566, 566, 566, 566, 566, 566, 566, 566, 657, - 674, 677, 566, 566, 566, 566, 566, 566, 604, 604, - 604, 604, 604, 604, 604, 604, 604, 604, 604, 671, - 671, 671, 671, 671, 671, 671, 390, 566, 566, 566, - 566, 566, 566, 569, 569, 569, 569, 569, 569, 569, - 569, 569, 569, 569, 569, 569, 389, 388, 386, 569, - - 569, 569, 569, 569, 569, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 678, 716, 385, 384, - 678, 716, 383, 382, 569, 569, 569, 569, 569, 569, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 381, 380, 678, 716, 572, 572, 572, 572, 572, - 572, 614, 614, 614, 614, 614, 614, 614, 614, 614, - 614, 379, 618, 618, 618, 618, 618, 618, 618, 376, - 572, 572, 572, 572, 572, 572, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 369, 362, 614, 616, + 20, 21, 22, 20, 23, 21, 24, 25, 26, 27, + 28, 29, 20, 30, 31, 20, 20, 32, 33, 34, + 35, 33, 33, 33, 33, 33, 33, 33, 36, 37, + 38, 39, 40, 41, 42, 41, 43, 44, 45, 45, + 45, 45, 46, 47, 48, 45, 49, 50, 51, 52, + 45, 45, 45, 45, 45, 53, 20, 54, 54, 54, + 54, 54, 54, 20, 20, 20, 20, 20, 20, 20, + 20, 55, 20, 20, 56, 139, 177, 167, 56, 139, + 148, 57, 21, 72, 138, 73, 21, 74, 171, 75, + 181, 178, 173, 169, 165, 75, 167, 174, 21, 72, + + 149, 73, 21, 74, 182, 75, 170, 58, 59, 75, + 76, 75, 60, 161, 161, 161, 161, 161, 162, 167, + 61, 179, 172, 62, 63, 75, 76, 150, 63, 89, + 22, 64, 23, 89, 90, 91, 77, 65, 89, 22, + 66, 23, 89, 90, 91, 220, 204, 167, 247, 199, + 204, 251, 77, 278, 20, 138, 281, 41, 21, 22, + 38, 23, 21, 114, 115, 67, 197, 68, 305, 69, + 45, 219, 45, 21, 22, 38, 23, 21, 114, 115, + 154, 154, 138, 92, 154, 154, 184, 138, 227, 263, + 247, 187, 92, 201, 70, 63, 187, 201, 221, 63, + + 188, 250, 64, 226, 154, 209, 202, 226, 65, 138, + 137, 66, 116, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 435, 219, 20, 189, 116, 41, 155, + 189, 183, 184, 261, 213, 183, 67, 225, 68, 138, + 69, 45, 137, 45, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 148, 169, 338, 225, 167, 190, + 191, 143, 138, 292, 192, 70, 21, 22, 170, 23, + 21, 24, 193, 78, 232, 194, 223, 184, 339, 213, + 223, 203, 260, 196, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 228, 229, 664, 230, 228, 236, + + 224, 233, 243, 243, 243, 243, 243, 243, 243, 243, + 243, 243, 244, 244, 244, 244, 244, 245, 424, 425, + 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 21, + 22, 148, 23, 21, 24, 1125, 78, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 278, 257, 139, + 302, 232, 138, 139, 328, 206, 206, 258, 280, 206, + 206, 304, 227, 183, 184, 138, 213, 183, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 265, 206, + 138, 443, 184, 79, 80, 80, 80, 80, 80, 80, + + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 21, 22, 207, 23, 21, 24, 82, 78, + 263, 225, 386, 138, 83, 84, 85, 260, 212, 184, + 436, 213, 212, 214, 234, 215, 340, 234, 437, 214, + 86, 215, 263, 234, 148, 263, 234, 138, 138, 234, + 234, 289, 329, 269, 269, 215, 215, 269, 269, 143, + 290, 292, 446, 236, 1125, 234, 87, 21, 22, 138, + 23, 21, 24, 82, 78, 341, 388, 269, 292, 83, + 84, 85, 215, 275, 275, 275, 275, 275, 276, 237, + 234, 233, 158, 183, 184, 86, 213, 183, 143, 1125, + + 390, 262, 270, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 300, 300, 300, 300, 300, 300, 138, + 521, 87, 38, 21, 22, 38, 23, 21, 24, 38, + 38, 93, 28, 29, 38, 94, 31, 38, 38, 95, + 96, 97, 98, 96, 96, 96, 96, 96, 96, 96, + 36, 99, 38, 38, 100, 101, 101, 101, 102, 103, + 104, 104, 104, 104, 105, 106, 107, 104, 108, 104, + 109, 104, 104, 104, 104, 104, 104, 79, 38, 110, + 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, + 111, 111, 111, 112, 111, 111, 117, 21, 22, 117, + + 23, 21, 24, 38, 38, 118, 28, 29, 117, 119, + 31, 117, 117, 120, 121, 122, 123, 121, 121, 121, + 121, 121, 121, 121, 36, 37, 38, 117, 124, 125, + 125, 125, 126, 127, 128, 128, 128, 128, 129, 130, + 131, 128, 132, 128, 133, 128, 128, 128, 128, 128, + 128, 134, 117, 135, 135, 135, 135, 135, 135, 117, + 117, 117, 117, 117, 117, 117, 117, 136, 117, 117, + 143, 261, 144, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 145, 1097, 1125, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 156, 529, 157, 157, + + 157, 157, 157, 157, 157, 157, 157, 157, 158, 138, + 776, 445, 159, 159, 159, 159, 159, 159, 183, 184, + 260, 213, 183, 137, 137, 137, 137, 137, 204, 137, + 137, 138, 204, 137, 302, 138, 336, 159, 159, 159, + 159, 159, 159, 137, 337, 404, 137, 137, 137, 137, + 204, 1125, 137, 344, 204, 137, 137, 344, 137, 137, + 137, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 158, 138, 622, 137, 166, 166, 166, 166, 166, + 166, 167, 167, 167, 167, 168, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 138, 167, + + 159, 159, 159, 159, 159, 159, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 1125, 143, 1125, + 390, 167, 167, 167, 167, 167, 167, 138, 143, 528, + 292, 167, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 336, 138, 1125, 1125, 137, 137, 137, 137, + 137, 137, 183, 184, 532, 185, 186, 137, 137, 137, + 336, 137, 137, 294, 1125, 137, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 998, 148, 138, 137, + 137, 137, 143, 343, 144, 1125, 147, 147, 147, 147, + + 147, 233, 147, 147, 335, 145, 147, 1125, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 1053, 534, + 147, 147, 147, 151, 151, 151, 151, 151, 1125, 151, + 151, 315, 316, 151, 233, 154, 154, 317, 318, 154, + 154, 319, 226, 320, 321, 517, 226, 151, 151, 151, + 201, 388, 263, 390, 201, 195, 143, 387, 144, 154, + 138, 183, 184, 202, 213, 183, 542, 228, 229, 216, + 230, 228, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 154, 138, 155, 154, 259, 410, 154, 154, + 259, 154, 154, 154, 154, 263, 225, 154, 154, 296, + + 297, 298, 296, 296, 296, 296, 296, 296, 296, 492, + 1125, 236, 154, 154, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 619, 1125, 138, 239, 154, 236, + 260, 1125, 240, 236, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 158, 236, 531, 536, 242, 242, + 242, 242, 242, 242, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 833, 247, 242, 242, 242, 242, 242, 242, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + + 1125, 391, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 1125, 500, 500, 500, 236, 236, 236, 236, + 236, 236, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 138, 1125, 1125, 183, 184, 336, 213, 183, + 138, 236, 236, 236, 236, 236, 236, 236, 527, 138, + 520, 236, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 158, 236, 1125, 336, 246, 246, 246, 246, + 246, 246, 247, 247, 247, 247, 248, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 219, + 249, 242, 242, 242, 242, 242, 242, 236, 236, 236, + + 236, 236, 236, 236, 236, 236, 236, 236, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 1125, 1125, + 1125, 547, 247, 247, 247, 247, 247, 247, 526, 344, + 206, 206, 247, 344, 206, 206, 349, 349, 349, 349, + 349, 349, 189, 731, 138, 541, 189, 236, 236, 236, + 236, 236, 236, 271, 206, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 158, 1125, 776, 1125, 273, + 273, 273, 273, 273, 273, 190, 191, 315, 316, 207, + 192, 138, 302, 317, 318, 537, 530, 319, 193, 320, + 1125, 194, 263, 404, 273, 273, 273, 273, 273, 273, + + 262, 218, 1125, 262, 624, 218, 556, 218, 218, 262, + 533, 557, 262, 262, 218, 262, 262, 262, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 158, 218, + 998, 262, 277, 277, 277, 277, 277, 277, 278, 278, + 278, 278, 279, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 263, 278, 273, 273, 273, + 273, 273, 273, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 1125, 138, 138, 819, 278, 278, + 278, 278, 278, 278, 143, 470, 292, 516, 278, 1125, + + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 432, + 433, 1125, 434, 262, 262, 262, 262, 262, 262, 183, + 184, 540, 287, 288, 262, 262, 262, 621, 262, 262, + 466, 467, 262, 468, 263, 231, 231, 231, 231, 138, + 538, 231, 231, 539, 138, 231, 262, 262, 262, 154, + 138, 442, 137, 153, 137, 137, 153, 617, 137, 137, + 231, 231, 153, 345, 346, 347, 345, 345, 345, 345, + 345, 345, 345, 1125, 138, 138, 153, 153, 137, 156, + 549, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 158, 143, 535, 292, 299, 299, 299, 299, 299, + + 299, 183, 184, 933, 213, 183, 234, 234, 234, 234, + 234, 236, 234, 234, 236, 1125, 234, 568, 138, 1125, + 299, 299, 299, 299, 299, 299, 137, 628, 167, 137, + 234, 234, 234, 569, 236, 137, 618, 236, 137, 137, + 808, 137, 137, 137, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 158, 263, 546, 137, 306, 306, + 306, 306, 306, 306, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 138, 167, 299, 299, 299, 299, 299, 299, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 1125, 158, 278, 846, 167, 167, 167, 167, 167, 167, + 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, + 371, 371, 371, 371, 371, 371, 302, 1125, 263, 137, + 137, 137, 137, 137, 137, 206, 587, 404, 137, 205, + 137, 137, 205, 234, 137, 137, 234, 627, 205, 1125, + 518, 575, 234, 154, 518, 234, 576, 154, 234, 234, + 154, 1125, 205, 205, 137, 263, 154, 489, 490, 263, + 491, 633, 236, 522, 234, 589, 1125, 519, 523, 1036, + 154, 154, 349, 349, 349, 349, 349, 349, 349, 349, + + 349, 349, 509, 509, 509, 509, 509, 510, 237, 234, + 154, 524, 263, 154, 625, 524, 154, 154, 1125, 154, + 154, 154, 154, 356, 357, 154, 154, 518, 524, 358, + 359, 518, 524, 360, 1125, 361, 620, 158, 525, 236, + 154, 154, 1125, 630, 367, 368, 369, 367, 367, 367, + 367, 367, 367, 367, 519, 525, 269, 269, 1064, 236, + 269, 269, 236, 629, 138, 239, 154, 240, 588, 348, + 348, 348, 348, 348, 348, 348, 348, 348, 348, 158, + 269, 263, 548, 348, 348, 348, 348, 348, 348, 1125, + 1125, 262, 262, 262, 262, 262, 585, 262, 262, 586, + + 570, 262, 138, 626, 263, 270, 732, 638, 348, 348, + 348, 348, 348, 348, 236, 262, 262, 262, 236, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 158, + 236, 263, 1058, 350, 350, 350, 350, 350, 350, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 635, 249, 348, 348, + 348, 348, 348, 348, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 1125, 1125, 138, 138, 247, + 247, 247, 247, 247, 247, 1125, 264, 264, 264, 264, + + 264, 623, 264, 264, 722, 391, 264, 392, 392, 392, + 392, 392, 392, 634, 236, 236, 236, 236, 236, 236, + 264, 264, 264, 266, 266, 266, 266, 266, 1125, 266, + 266, 885, 167, 266, 371, 371, 371, 371, 371, 371, + 371, 371, 371, 371, 138, 1125, 138, 266, 266, 266, + 269, 632, 631, 262, 268, 262, 262, 268, 1125, 262, + 262, 302, 636, 268, 371, 371, 371, 371, 371, 371, + 371, 371, 371, 371, 590, 726, 138, 268, 268, 262, + 271, 644, 370, 370, 370, 370, 370, 370, 370, 370, + 370, 370, 158, 504, 302, 138, 370, 370, 370, 370, + + 370, 370, 378, 379, 138, 506, 518, 524, 380, 381, + 518, 524, 382, 138, 383, 642, 1125, 302, 138, 263, + 302, 370, 370, 370, 370, 370, 370, 262, 506, 643, + 262, 404, 302, 519, 525, 236, 262, 661, 236, 262, + 262, 138, 262, 262, 262, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 158, 933, 820, 262, 372, + 372, 372, 372, 372, 372, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 263, 278, 370, 370, 370, 370, 370, 370, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + + 262, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 1125, 143, 1125, 292, 278, 278, 278, 278, 278, + 278, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 447, 721, 448, 448, 448, 448, 448, 448, 859, + 262, 262, 262, 262, 262, 262, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 391, 637, 392, 392, + 392, 392, 392, 392, 392, 392, 392, 392, 447, 1029, + 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, + 683, 206, 263, 641, 666, 206, 236, 686, 206, 236, + 662, 138, 138, 1025, 206, 138, 391, 804, 393, 393, + + 393, 393, 393, 393, 393, 393, 393, 393, 206, 206, + 447, 263, 449, 449, 449, 449, 449, 449, 449, 449, + 449, 449, 447, 263, 450, 450, 450, 450, 450, 451, + 448, 448, 448, 448, 236, 138, 391, 236, 394, 394, + 394, 394, 394, 395, 392, 392, 392, 392, 498, 498, + 499, 500, 500, 500, 500, 500, 500, 500, 401, 138, + 269, 302, 518, 278, 269, 842, 518, 269, 236, 740, + 663, 236, 506, 269, 665, 138, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 158, 269, 269, 519, + 396, 396, 396, 396, 396, 396, 493, 494, 495, 493, + + 493, 493, 493, 493, 493, 493, 610, 610, 610, 610, + 610, 611, 884, 138, 167, 396, 396, 396, 396, 396, + 396, 398, 399, 400, 400, 400, 400, 400, 400, 400, + 400, 401, 1125, 138, 1024, 402, 402, 402, 402, 402, + 402, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 524, 138, 723, 753, 524, 889, 718, 167, 754, + 402, 402, 402, 402, 402, 402, 302, 405, 406, 407, + 405, 405, 405, 405, 405, 405, 405, 408, 525, 685, + 682, 409, 409, 409, 409, 409, 409, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 711, 711, 711, + + 711, 711, 712, 1125, 504, 302, 409, 409, 409, 409, + 409, 409, 137, 263, 263, 137, 506, 167, 1125, 236, + 734, 137, 236, 807, 137, 137, 733, 137, 137, 137, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 158, 278, 915, 137, 411, 411, 411, 411, 411, 411, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 138, 167, 396, + 396, 396, 396, 396, 396, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 1125, 1125, 504, 302, + + 167, 167, 167, 167, 167, 167, 1125, 1125, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 739, 727, + 236, 1125, 302, 236, 728, 137, 137, 137, 137, 137, + 137, 452, 452, 452, 452, 452, 452, 452, 452, 452, + 452, 158, 953, 970, 167, 452, 452, 452, 452, 452, + 452, 550, 551, 552, 550, 550, 550, 550, 550, 550, + 550, 719, 724, 764, 684, 719, 724, 970, 765, 138, + 452, 452, 452, 452, 452, 452, 453, 453, 453, 453, + 453, 453, 453, 453, 453, 453, 745, 167, 720, 725, + 453, 453, 453, 453, 453, 453, 447, 263, 448, 448, + + 448, 448, 448, 448, 448, 448, 448, 448, 811, 236, + 504, 302, 236, 167, 302, 452, 452, 452, 452, 452, + 452, 470, 607, 471, 471, 471, 471, 471, 471, 471, + 471, 471, 471, 447, 859, 448, 448, 448, 448, 448, + 448, 448, 448, 448, 448, 571, 572, 573, 571, 571, + 571, 571, 571, 571, 571, 236, 954, 167, 236, 138, + 263, 470, 302, 472, 472, 472, 472, 472, 472, 472, + 472, 472, 472, 506, 470, 899, 471, 471, 471, 471, + 471, 471, 263, 596, 596, 596, 596, 596, 596, 596, + 596, 596, 596, 401, 167, 143, 843, 292, 809, 778, + + 263, 470, 278, 473, 473, 473, 473, 473, 474, 471, + 471, 471, 471, 263, 601, 602, 603, 601, 601, 601, + 601, 601, 601, 601, 515, 515, 515, 515, 515, 515, + 515, 515, 515, 515, 236, 167, 924, 236, 138, 138, + 263, 262, 813, 475, 475, 475, 475, 475, 475, 475, + 475, 475, 475, 743, 985, 815, 821, 475, 475, 475, + 475, 475, 475, 504, 302, 605, 605, 605, 605, 605, + 605, 138, 729, 735, 737, 506, 729, 735, 737, 757, + 769, 744, 475, 475, 475, 475, 475, 475, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 978, 730, + + 736, 738, 476, 476, 476, 476, 476, 476, 609, 609, + 609, 609, 609, 609, 609, 609, 609, 609, 138, 590, + 977, 591, 591, 591, 591, 591, 591, 475, 475, 475, + 475, 475, 475, 391, 776, 392, 392, 392, 392, 392, + 392, 392, 392, 392, 392, 1125, 778, 608, 608, 608, + 608, 608, 608, 608, 608, 608, 608, 645, 138, 646, + 646, 646, 646, 646, 646, 646, 646, 646, 646, 143, + 841, 292, 138, 391, 278, 392, 392, 392, 392, 392, + 392, 392, 392, 392, 392, 645, 976, 647, 647, 647, + 647, 647, 647, 647, 647, 647, 647, 645, 302, 648, + + 648, 648, 648, 648, 649, 646, 646, 646, 646, 607, + 832, 845, 138, 504, 302, 505, 505, 505, 505, 505, + 505, 505, 505, 505, 505, 506, 278, 247, 818, 507, + 507, 507, 507, 507, 507, 687, 688, 689, 687, 687, + 687, 687, 687, 687, 687, 645, 167, 646, 646, 646, + 646, 646, 646, 814, 507, 507, 507, 507, 507, 507, + 302, 511, 512, 513, 511, 511, 511, 511, 511, 511, + 511, 514, 138, 278, 986, 515, 515, 515, 515, 515, + 515, 699, 138, 700, 700, 700, 700, 700, 700, 700, + 700, 700, 700, 719, 263, 1125, 302, 719, 138, 167, + + 515, 515, 515, 515, 515, 515, 137, 607, 746, 137, + 812, 847, 138, 916, 956, 137, 278, 882, 137, 137, + 720, 137, 137, 137, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 158, 504, 302, 137, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 138, 167, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 950, 263, 167, 167, 553, 553, 553, 553, 553, 553, + + 699, 768, 701, 701, 701, 701, 701, 701, 701, 701, + 701, 701, 781, 781, 781, 781, 781, 782, 869, 553, + 553, 553, 553, 553, 553, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 987, 167, 778, 278, 554, + 554, 554, 554, 554, 554, 699, 806, 702, 702, 702, + 702, 702, 703, 700, 700, 700, 700, 798, 798, 798, + 798, 798, 799, 693, 553, 553, 553, 553, 553, 553, + 236, 236, 566, 236, 236, 567, 236, 236, 236, 236, + 1125, 1015, 263, 167, 236, 236, 236, 236, 236, 236, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, - 618, 623, 623, 623, 623, 623, 623, 623, 623, 623, - 623, 627, 812, 627, 627, 627, 627, 627, 627, 858, - 858, 858, 858, 627, 812, 361, 360, 616, 617, 617, - 617, 617, 617, 617, 617, 617, 617, 617, 617, 629, - 629, 629, 629, 629, 629, 629, 629, 629, 629, 632, - 814, 632, 632, 632, 632, 632, 632, 632, 632, 632, - 632, 359, 814, 358, 357, 351, 617, 625, 350, 625, - 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, - 628, 853, 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 853, 348, 347, 628, 628, 628, 628, + 699, 894, 700, 700, 700, 700, 700, 700, 917, 236, + 236, 236, 236, 236, 236, 470, 167, 471, 471, 471, + 471, 471, 471, 471, 471, 471, 471, 504, 302, 706, + 706, 706, 706, 706, 706, 1016, 167, 138, 1125, 607, + 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, + 778, 888, 1012, 835, 263, 470, 167, 471, 471, 471, + 471, 471, 471, 471, 471, 471, 471, 1125, 909, 709, + 709, 709, 709, 709, 709, 709, 709, 709, 709, 747, + 748, 749, 747, 747, 747, 747, 747, 747, 747, 897, + 143, 263, 292, 897, 263, 590, 776, 591, 591, 591, - 628, 628, 633, 346, 633, 633, 633, 633, 633, 633, - 633, 633, 633, 633, 698, 698, 698, 698, 698, 698, - 345, 628, 628, 628, 628, 628, 628, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, 344, 343, - 342, 631, 631, 631, 631, 631, 631, 634, 341, 634, - 634, 634, 634, 634, 634, 634, 634, 634, 634, 764, - 764, 764, 764, 764, 764, 340, 631, 631, 631, 631, - 631, 631, 635, 339, 635, 635, 635, 635, 635, 635, - 635, 635, 635, 635, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 642, 642, 642, 642, 642, 642, + 591, 591, 591, 591, 591, 591, 591, 645, 778, 646, + 646, 646, 646, 646, 646, 646, 646, 646, 646, 645, + 302, 646, 646, 646, 646, 646, 646, 646, 646, 646, + 646, 607, 724, 908, 138, 590, 724, 592, 592, 592, + 592, 592, 592, 592, 592, 592, 592, 167, 898, 729, + 504, 302, 959, 729, 960, 907, 1017, 810, 960, 725, + 735, 737, 607, 719, 735, 737, 666, 719, 667, 667, + 667, 667, 667, 667, 138, 590, 730, 593, 593, 593, + 593, 593, 594, 591, 591, 591, 591, 736, 738, 776, + 720, 758, 759, 760, 758, 758, 758, 758, 758, 758, - 642, 642, 642, 642, 642, 642, 642, 336, 335, 333, - 642, 642, 642, 642, 642, 642, 644, 644, 644, 644, - 644, 644, 644, 644, 324, 323, 320, 705, 644, 705, - 705, 705, 705, 705, 705, 642, 642, 642, 642, 642, - 642, 645, 645, 645, 645, 645, 645, 645, 645, 645, - 645, 645, 645, 319, 309, 307, 306, 645, 645, 645, - 645, 645, 645, 646, 646, 646, 646, 646, 646, 646, - 646, 646, 646, 713, 713, 713, 713, 713, 713, 713, - 713, 305, 645, 645, 645, 645, 645, 645, 648, 304, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 758, 859, 724, 729, 906, 263, 724, 729, 862, 862, + 862, 862, 862, 863, 138, 504, 302, 605, 605, 605, + 605, 605, 605, 605, 605, 605, 605, 506, 263, 725, + 730, 604, 604, 604, 604, 604, 604, 698, 698, 698, + 698, 698, 698, 698, 698, 698, 698, 822, 735, 737, + 719, 138, 735, 737, 719, 896, 604, 604, 604, 604, + 604, 604, 504, 302, 606, 606, 606, 606, 606, 606, + 606, 606, 606, 606, 607, 736, 738, 720, 608, 608, + 608, 608, 608, 608, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 724, 729, 735, 955, 724, 729, - 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, - 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, - 669, 670, 670, 670, 670, 670, 670, 670, 670, 670, - 670, 670, 680, 303, 680, 680, 680, 680, 680, 680, - 680, 680, 680, 680, 685, 302, 685, 685, 685, 685, - 685, 685, 685, 685, 685, 685, 686, 301, 686, 686, - 686, 686, 686, 686, 686, 686, 686, 686, 300, 299, - 298, 680, 681, 297, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 687, 296, 687, 687, 687, 687, - 687, 687, 687, 687, 687, 687, 691, 691, 691, 691, + 735, 895, 167, 608, 608, 608, 608, 608, 608, 302, + 612, 613, 614, 612, 612, 612, 612, 612, 612, 612, + 615, 725, 730, 736, 616, 616, 616, 616, 616, 616, + 1125, 302, 779, 779, 779, 779, 779, 779, 779, 779, + 779, 779, 708, 138, 504, 302, 278, 1030, 167, 616, + 616, 616, 616, 616, 616, 666, 708, 667, 667, 667, + 667, 667, 667, 667, 667, 667, 667, 788, 789, 790, + 788, 788, 788, 788, 788, 788, 788, 699, 1125, 700, + 700, 700, 700, 700, 700, 700, 700, 700, 700, 1051, + 859, 167, 918, 693, 263, 666, 502, 668, 668, 668, - 691, 691, 691, 691, 691, 691, 718, 293, 282, 278, - 718, 681, 682, 277, 682, 682, 682, 682, 682, 682, - 682, 682, 682, 682, 695, 276, 695, 695, 695, 695, - 695, 695, 275, 718, 271, 270, 695, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 269, 268, 267, - 266, 682, 683, 264, 683, 683, 683, 683, 683, 683, - 683, 683, 683, 683, 700, 263, 700, 700, 700, 700, - 700, 700, 700, 700, 700, 700, 701, 701, 701, 701, - 701, 701, 701, 701, 701, 701, 881, 881, 262, 881, - 881, 683, 693, 261, 693, 693, 693, 693, 693, 693, + 668, 668, 668, 668, 668, 668, 668, 699, 900, 700, + 700, 700, 700, 700, 700, 700, 700, 700, 700, 717, + 717, 717, 717, 717, 717, 717, 717, 717, 717, 844, + 900, 138, 900, 901, 263, 666, 834, 669, 669, 669, + 669, 669, 670, 667, 667, 667, 667, 1125, 302, 504, + 302, 793, 793, 793, 793, 793, 793, 138, 1078, 708, + 1079, 708, 797, 797, 797, 797, 797, 797, 797, 797, + 797, 797, 737, 918, 263, 590, 737, 591, 591, 591, + 591, 591, 591, 591, 591, 591, 591, 1125, 831, 796, + 796, 796, 796, 796, 796, 796, 796, 796, 796, 738, - 693, 693, 693, 693, 693, 696, 260, 696, 696, 696, - 696, 696, 696, 696, 696, 696, 696, 696, 259, 258, - 257, 696, 696, 696, 696, 696, 696, 703, 256, 703, - 703, 703, 703, 703, 703, 703, 703, 703, 703, 820, - 820, 820, 820, 820, 820, 255, 696, 696, 696, 696, - 696, 696, 699, 699, 699, 699, 699, 699, 699, 699, - 699, 699, 699, 254, 247, 246, 699, 699, 699, 699, - 699, 699, 704, 234, 704, 704, 704, 704, 704, 704, - 704, 704, 704, 704, 722, 724, 233, 232, 722, 724, - 231, 699, 699, 699, 699, 699, 699, 711, 711, 711, + 822, 823, 823, 823, 823, 823, 823, 823, 823, 823, + 823, 1096, 138, 1079, 138, 590, 830, 591, 591, 591, + 591, 591, 591, 591, 591, 591, 591, 822, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 824, 822, 825, + 825, 825, 825, 825, 826, 823, 823, 823, 823, 958, + 959, 828, 960, 958, 138, 694, 695, 696, 694, 694, + 694, 694, 694, 694, 694, 697, 217, 217, 217, 698, + 698, 698, 698, 698, 698, 979, 848, 849, 850, 851, + 848, 848, 848, 848, 848, 848, 769, 770, 770, 770, + 770, 770, 770, 827, 698, 698, 698, 698, 698, 698, - 711, 711, 711, 711, 711, 711, 711, 711, 711, 732, - 230, 722, 724, 732, 732, 732, 732, 733, 228, 227, - 226, 733, 733, 733, 733, 734, 225, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 735, 223, 735, - 735, 735, 735, 735, 735, 735, 735, 735, 735, 736, - 217, 736, 736, 736, 736, 736, 736, 736, 736, 736, - 736, 738, 209, 732, 205, 738, 200, 199, 197, 193, - 737, 733, 737, 737, 737, 737, 737, 737, 737, 737, - 737, 737, 895, 895, 895, 895, 895, 895, 738, 742, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 188, + 504, 302, 706, 706, 706, 706, 706, 706, 706, 706, + 706, 706, 607, 138, 263, 817, 705, 705, 705, 705, + 705, 705, 979, 816, 138, 853, 854, 855, 853, 853, + 853, 853, 853, 853, 853, 880, 880, 880, 880, 880, + 881, 705, 705, 705, 705, 705, 705, 504, 302, 707, + 707, 707, 707, 707, 707, 707, 707, 707, 707, 708, + 143, 263, 292, 709, 709, 709, 709, 709, 709, 787, + 787, 787, 787, 787, 787, 787, 787, 787, 787, 890, + 892, 886, 167, 890, 892, 886, 1031, 699, 709, 709, + 709, 709, 709, 709, 302, 713, 714, 715, 713, 713, - 746, 186, 746, 746, 746, 746, 746, 746, 748, 748, - 748, 748, 748, 748, 748, 748, 748, 748, 752, 181, - 752, 752, 752, 752, 752, 752, 742, 744, 169, 744, - 744, 744, 744, 744, 744, 744, 744, 744, 744, 746, - 750, 168, 750, 750, 750, 750, 750, 750, 750, 750, - 750, 750, 751, 167, 751, 751, 751, 751, 751, 751, - 751, 751, 751, 751, 166, 165, 744, 745, 157, 745, - 745, 745, 745, 745, 745, 745, 745, 745, 745, 757, - 757, 757, 757, 757, 757, 757, 757, 757, 757, 761, - 156, 761, 761, 761, 761, 761, 761, 155, 154, 153, + 713, 713, 713, 713, 713, 716, 891, 893, 887, 717, + 717, 717, 717, 717, 717, 776, 138, 857, 857, 857, + 857, 857, 857, 961, 693, 138, 949, 778, 502, 504, + 302, 167, 401, 263, 717, 717, 717, 717, 717, 717, + 666, 708, 667, 667, 667, 667, 667, 667, 667, 667, + 667, 667, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 1125, 302, 860, 860, 860, 860, 860, 860, + 860, 860, 860, 860, 708, 1072, 1072, 1072, 1072, 263, + 666, 776, 667, 667, 667, 667, 667, 667, 667, 667, + 667, 667, 869, 859, 870, 870, 870, 870, 870, 870, - 152, 761, 150, 149, 148, 147, 745, 759, 146, 759, - 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, - 762, 145, 762, 762, 762, 762, 762, 762, 762, 762, - 762, 762, 762, 140, 136, 135, 762, 762, 762, 762, - 762, 762, 763, 763, 763, 763, 763, 763, 763, 763, - 763, 763, 775, 777, 131, 128, 775, 777, 121, 118, - 114, 762, 762, 762, 762, 762, 762, 765, 765, 765, - 765, 765, 765, 765, 765, 765, 765, 110, 106, 775, - 777, 765, 765, 765, 765, 765, 765, 766, 105, 766, - 766, 766, 766, 766, 766, 766, 766, 766, 766, 825, + 870, 870, 870, 870, 869, 302, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 795, 1059, 1086, 263, + 769, 770, 770, 770, 770, 770, 770, 770, 770, 770, + 770, 869, 263, 872, 872, 872, 872, 872, 873, 870, + 870, 870, 870, 504, 302, 803, 803, 803, 803, 803, + 803, 803, 803, 803, 803, 795, 263, 138, 138, 769, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 1125, 302, 504, 302, 876, 876, 876, 876, 876, 876, + 263, 263, 795, 776, 795, 879, 879, 879, 879, 879, + 879, 879, 879, 879, 879, 933, 767, 138, 769, 772, - 825, 825, 825, 825, 825, 825, 765, 765, 765, 765, - 765, 765, 767, 767, 767, 767, 767, 767, 767, 767, - 767, 767, 767, 768, 768, 768, 768, 768, 768, 768, - 768, 768, 768, 768, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 769, 769, 786, 104, 103, 102, 786, - 786, 786, 786, 787, 98, 85, 78, 787, 787, 787, - 787, 788, 71, 70, 66, 788, 788, 788, 788, 789, - 65, 64, 59, 789, 789, 789, 789, 790, 57, 48, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 47, 791, 45, 44, 791, 39, 34, 28, 800, 786, + 772, 772, 772, 772, 773, 770, 770, 770, 770, 1125, + 1125, 878, 878, 878, 878, 878, 878, 878, 878, 878, + 878, 766, 933, 890, 892, 763, 776, 890, 892, 822, + 823, 823, 823, 823, 823, 823, 138, 776, 933, 777, + 777, 777, 777, 777, 777, 777, 777, 777, 777, 778, + 891, 893, 762, 779, 779, 779, 779, 779, 779, 902, + 903, 904, 905, 902, 902, 902, 902, 902, 902, 163, + 163, 163, 163, 167, 167, 163, 761, 163, 779, 779, + 779, 779, 779, 779, 783, 784, 785, 783, 783, 783, + 783, 783, 783, 783, 786, 217, 217, 217, 787, 787, - 791, 791, 800, 22, 791, 792, 21, 787, 18, 792, - 792, 792, 792, 17, 0, 788, 0, 0, 791, 791, - 791, 793, 0, 789, 793, 800, 0, 0, 828, 830, - 793, 793, 828, 830, 793, 794, 794, 794, 794, 794, - 794, 794, 794, 794, 794, 0, 0, 0, 793, 793, - 793, 0, 0, 0, 0, 828, 830, 0, 796, 792, - 796, 796, 796, 796, 796, 796, 796, 796, 796, 796, - 797, 0, 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 798, 0, 798, 798, 798, 798, 798, 798, - 803, 0, 803, 803, 803, 803, 803, 803, 803, 803, + 787, 787, 787, 787, 822, 823, 823, 823, 823, 823, + 823, 823, 823, 823, 823, 886, 890, 892, 756, 886, + 890, 892, 755, 787, 787, 787, 787, 787, 787, 504, + 302, 793, 793, 793, 793, 793, 793, 793, 793, 793, + 793, 708, 887, 891, 893, 792, 792, 792, 792, 792, + 792, 822, 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 886, 278, 278, 278, 886, 752, 751, 750, + 792, 792, 792, 792, 792, 792, 504, 302, 794, 794, + 794, 794, 794, 794, 794, 794, 794, 794, 795, 887, + 645, 742, 796, 796, 796, 796, 796, 796, 910, 911, - 803, 803, 806, 0, 806, 806, 806, 806, 806, 806, - 806, 806, 806, 806, 807, 0, 807, 807, 807, 807, - 807, 807, 807, 807, 807, 807, 0, 0, 0, 803, - 804, 0, 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 808, 0, 808, 808, 808, 808, 808, 808, - 808, 808, 808, 808, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 839, 0, 0, 0, 839, 804, - 805, 0, 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 817, 0, 817, 817, 817, 817, 817, 817, - 0, 839, 0, 0, 817, 819, 819, 819, 819, 819, + 912, 913, 910, 910, 910, 910, 910, 910, 835, 836, + 836, 836, 836, 836, 836, 741, 138, 796, 796, 796, + 796, 796, 796, 302, 800, 801, 802, 800, 800, 800, + 800, 800, 800, 800, 1102, 263, 138, 138, 803, 803, + 803, 803, 803, 803, 138, 924, 263, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 936, 936, 936, + 936, 936, 937, 803, 803, 803, 803, 803, 803, 137, + 890, 892, 137, 263, 890, 892, 958, 959, 137, 960, + 958, 137, 137, 1125, 137, 137, 137, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 891, 893, 693, - 819, 819, 819, 819, 819, 0, 0, 0, 0, 805, - 815, 0, 815, 815, 815, 815, 815, 815, 815, 815, - 815, 815, 815, 818, 0, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 0, 0, 0, 0, 818, - 818, 818, 818, 818, 818, 821, 0, 821, 821, 821, - 821, 821, 821, 821, 821, 821, 821, 914, 914, 914, - 914, 914, 914, 0, 818, 818, 818, 818, 818, 818, - 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, - 823, 824, 824, 824, 824, 824, 824, 824, 824, 824, - 824, 824, 834, 834, 834, 834, 834, 834, 834, 834, + 137, 167, 167, 167, 167, 167, 167, 167, 167, 805, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 138, 167, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 236, 502, 401, 776, 236, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 998, 236, + 401, 681, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 829, 247, 247, 680, 249, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 834, 834, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 836, 0, 836, 836, 836, 836, 836, 836, - 836, 836, 836, 836, 837, 0, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 838, 0, 838, 838, - 838, 838, 838, 838, 838, 838, 838, 838, 841, 841, - 841, 841, 841, 841, 841, 841, 841, 841, 0, 845, - 0, 845, 845, 845, 845, 845, 845, 846, 846, 846, - 846, 846, 846, 846, 846, 846, 846, 850, 0, 850, - 850, 850, 850, 850, 850, 841, 843, 0, 843, 843, - 843, 843, 843, 843, 843, 843, 843, 843, 845, 848, + 236, 236, 236, 236, 835, 836, 836, 836, 836, 836, + 836, 836, 836, 836, 836, 924, 679, 926, 926, 926, + 926, 926, 926, 926, 926, 926, 926, 924, 302, 927, + 927, 927, 927, 927, 928, 925, 925, 925, 925, 795, + 678, 677, 263, 835, 837, 837, 837, 837, 837, 837, + 837, 837, 837, 837, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 776, 1125, 931, 931, 931, 931, + 931, 931, 301, 301, 397, 397, 859, 998, 301, 676, + 397, 263, 835, 838, 838, 838, 838, 838, 839, 836, + 836, 836, 836, 935, 935, 935, 935, 935, 935, 935, - 0, 848, 848, 848, 848, 848, 848, 848, 848, 848, - 848, 849, 0, 849, 849, 849, 849, 849, 849, 849, - 849, 849, 849, 859, 0, 843, 844, 859, 844, 844, - 844, 844, 844, 844, 844, 844, 844, 844, 856, 0, - 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, - 859, 861, 0, 0, 867, 861, 867, 867, 867, 867, - 867, 867, 0, 0, 0, 844, 863, 863, 863, 863, - 863, 863, 863, 863, 863, 863, 0, 865, 861, 865, - 865, 865, 865, 865, 865, 865, 865, 865, 865, 866, - 0, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 935, 935, 935, 1125, 900, 934, 934, 934, 934, 934, + 934, 934, 934, 934, 934, 504, 302, 496, 496, 776, + 263, 262, 675, 496, 262, 674, 900, 795, 900, 900, + 262, 998, 673, 262, 262, 672, 262, 262, 262, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 143, + 671, 292, 262, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 840, 278, 278, 278, 278, 263, 278, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 769, 770, 770, 770, 770, - 866, 868, 0, 0, 0, 868, 872, 872, 872, 872, - 872, 872, 872, 872, 872, 872, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 878, 0, 868, 869, - 878, 869, 869, 869, 869, 869, 869, 869, 869, 869, - 869, 874, 874, 874, 874, 874, 874, 874, 874, 874, - 874, 0, 884, 878, 884, 884, 884, 884, 884, 884, - 884, 884, 884, 884, 0, 0, 0, 0, 869, 870, - 0, 870, 870, 870, 870, 870, 870, 870, 870, 870, - 870, 885, 0, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 886, 0, 886, 886, 886, 886, 886, + 770, 770, 770, 770, 770, 770, 943, 944, 945, 943, + 943, 943, 943, 943, 943, 943, 869, 1018, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 870, 1052, 143, + 660, 292, 1052, 138, 769, 770, 770, 770, 770, 770, + 770, 770, 770, 770, 770, 869, 659, 870, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 869, 658, 870, + 870, 870, 870, 870, 870, 1001, 1001, 1001, 1001, 1001, + 1002, 657, 138, 776, 656, 857, 857, 857, 857, 857, + 857, 857, 857, 857, 857, 778, 776, 655, 858, 858, + 858, 858, 858, 858, 858, 858, 858, 858, 859, 654, - 886, 886, 886, 886, 886, 0, 0, 0, 870, 871, - 0, 871, 871, 871, 871, 871, 871, 871, 871, 871, - 871, 887, 887, 887, 887, 887, 887, 887, 887, 887, - 887, 0, 891, 0, 891, 891, 891, 891, 891, 891, - 902, 0, 902, 902, 902, 902, 902, 902, 871, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 887, 889, - 0, 889, 889, 889, 889, 889, 889, 889, 889, 889, - 889, 891, 893, 893, 893, 893, 893, 893, 893, 893, - 893, 893, 894, 894, 894, 894, 894, 894, 894, 894, - 894, 894, 0, 0, 0, 0, 0, 0, 889, 890, + 653, 652, 860, 860, 860, 860, 860, 860, 504, 302, + 948, 948, 948, 948, 948, 948, 651, 951, 951, 951, + 1095, 951, 951, 951, 650, 1125, 1095, 860, 860, 860, + 860, 860, 860, 864, 865, 866, 864, 864, 864, 864, + 864, 864, 864, 867, 952, 952, 952, 868, 868, 868, + 868, 868, 868, 963, 1125, 497, 497, 963, 964, 965, + 966, 497, 1077, 1078, 963, 1079, 1077, 167, 963, 964, + 965, 966, 868, 868, 868, 868, 868, 868, 504, 302, + 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, + 795, 436, 640, 639, 875, 875, 875, 875, 875, 875, - 0, 890, 890, 890, 890, 890, 890, 890, 890, 890, - 890, 898, 898, 898, 898, 898, 898, 898, 898, 898, - 898, 900, 0, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 0, 0, 0, 0, 901, 890, 901, - 901, 901, 901, 901, 901, 901, 901, 901, 901, 903, - 903, 903, 903, 903, 903, 903, 903, 903, 903, 904, - 904, 904, 904, 904, 904, 904, 904, 904, 904, 905, - 905, 905, 905, 905, 905, 905, 905, 905, 905, 0, - 0, 0, 0, 0, 0, 0, 903, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 904, 0, 0, 0, + 1047, 1047, 1047, 1047, 1047, 1048, 970, 967, 971, 971, + 971, 971, 971, 971, 971, 971, 971, 971, 969, 875, + 875, 875, 875, 875, 875, 504, 302, 877, 877, 877, + 877, 877, 877, 877, 877, 877, 877, 1125, 599, 502, + 401, 878, 878, 878, 878, 878, 878, 970, 595, 972, + 972, 972, 972, 972, 972, 972, 972, 972, 972, 302, + 1007, 1007, 1007, 1007, 1007, 1007, 878, 878, 878, 878, + 878, 878, 137, 1125, 249, 137, 962, 249, 401, 249, + 164, 137, 962, 962, 137, 137, 962, 137, 137, 137, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, - 0, 0, 0, 0, 0, 0, 905, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 907, 907, 907, - 907, 907, 907, 907, 907, 907, 907, 908, 908, 908, - 908, 908, 908, 908, 908, 908, 908, 910, 910, 910, - 910, 910, 910, 910, 910, 910, 910, 911, 911, 911, - 911, 911, 911, 913, 913, 913, 913, 913, 913, 913, - 913, 913, 913, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 910, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 911, 916, 916, 916, 916, 916, - 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, + 962, 962, 962, 137, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 883, 167, 167, 167, 138, 167, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 886, 584, 583, 924, + 886, 925, 925, 925, 925, 925, 925, 582, 236, 581, + 580, 579, 236, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 887, 236, 578, 577, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 916, 916, 916, 916, 917, 917, 917, 917, 917, 917, - 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, - 917, 917, 917, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 919, 919, 919, 919, 919, 919, 919, 919, + 574, 249, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 835, + 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, + 970, 158, 973, 973, 973, 973, 973, 974, 975, 975, + 975, 975, 970, 565, 975, 975, 975, 971, 971, 971, + 971, 971, 971, 971, 564, 563, 562, 263, 835, 836, + 836, 836, 836, 836, 836, 836, 836, 836, 836, 918, + 561, 919, 919, 919, 919, 919, 919, 951, 560, 559, + 558, 951, 991, 992, 993, 991, 991, 991, 991, 991, + 991, 991, 501, 501, 1011, 1011, 263, 262, 501, 1013, + + 262, 1011, 249, 1013, 952, 249, 262, 249, 138, 262, + 262, 555, 262, 262, 262, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 1014, 447, 262, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 914, 278, 278, 278, + 278, 278, 263, 278, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 918, 436, 919, 919, 919, 919, 919, 919, 919, + 919, 919, 919, 545, 436, 544, 988, 989, 990, 988, + 988, 988, 988, 988, 988, 988, 924, 436, 925, 925, + + 925, 925, 925, 925, 925, 925, 925, 925, 543, 1125, + 138, 918, 1125, 920, 920, 920, 920, 920, 920, 920, + 920, 920, 920, 138, 924, 401, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 595, 595, 502, 401, + 138, 918, 595, 921, 921, 921, 921, 921, 922, 923, + 923, 923, 923, 776, 164, 996, 996, 996, 996, 996, + 996, 488, 487, 486, 485, 933, 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1000, 1000, 1000, 597, 597, 484, 483, + 138, 918, 597, 923, 923, 923, 919, 919, 919, 919, + + 919, 919, 919, 1125, 482, 999, 999, 999, 999, 999, + 999, 999, 999, 999, 999, 302, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 598, 598, 481, 480, + 138, 776, 598, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 859, 776, 479, 932, 932, 932, 932, + 932, 932, 932, 932, 932, 932, 933, 478, 477, 271, + 934, 934, 934, 934, 934, 934, 302, 1008, 1008, 1008, + 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1013, 469, 1077, + 1078, 1013, 1079, 1077, 465, 934, 934, 934, 934, 934, + 934, 938, 939, 940, 938, 938, 938, 938, 938, 938, + + 938, 941, 464, 463, 1014, 942, 942, 942, 942, 942, + 942, 302, 1009, 1009, 1009, 1009, 1009, 1010, 1007, 1007, + 1007, 1007, 1013, 690, 690, 462, 1013, 167, 461, 690, + 942, 942, 942, 942, 942, 942, 504, 302, 948, 948, + 948, 948, 948, 948, 948, 948, 948, 948, 979, 1014, + 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, + 1125, 1072, 460, 1072, 1125, 1125, 1125, 1125, 963, 1072, + 278, 459, 963, 964, 965, 966, 1021, 1022, 1023, 1021, + 1021, 1021, 1021, 1021, 1021, 1021, 458, 263, 979, 457, + 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, + + 1125, 456, 691, 691, 1125, 964, 965, 966, 691, 455, + 454, 1125, 240, 444, 967, 1125, 1125, 1125, 966, 692, + 692, 441, 967, 774, 774, 692, 440, 263, 979, 774, + 982, 982, 982, 982, 982, 983, 984, 984, 984, 984, + 1019, 439, 438, 1020, 1020, 1020, 1020, 1020, 1020, 1020, + 1020, 1020, 1020, 431, 967, 1125, 430, 775, 775, 1125, + 1125, 1125, 1125, 775, 429, 967, 428, 263, 979, 427, + 984, 984, 984, 980, 980, 980, 980, 980, 980, 980, + 970, 426, 971, 971, 971, 971, 971, 971, 971, 971, + 971, 971, 423, 1125, 422, 249, 968, 1013, 249, 421, + + 249, 1013, 968, 968, 420, 419, 968, 263, 918, 969, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, - 919, 920, 920, 920, 920, 920, 920, 920, 920, 920, + 968, 968, 968, 970, 1014, 971, 971, 971, 971, 971, + 971, 971, 971, 971, 971, 970, 418, 971, 971, 971, + 971, 971, 971, 852, 852, 417, 416, 138, 918, 852, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 415, 414, 413, 412, 164, 1026, 1027, 1028, 1026, 1026, + 1026, 1026, 1026, 1026, 1026, 979, 156, 980, 980, 980, + 980, 980, 980, 929, 929, 385, 384, 138, 776, 929, + 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, + + 933, 776, 263, 997, 997, 997, 997, 997, 997, 997, + 997, 997, 997, 998, 263, 377, 376, 999, 999, 999, + 999, 999, 999, 1036, 375, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1091, 1091, 1091, 1091, 1091, + 1091, 374, 999, 999, 999, 999, 999, 999, 1003, 1004, + 1005, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 373, 262, + 366, 267, 1006, 1006, 1006, 1006, 1006, 1006, 1036, 265, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1119, 1119, 1119, 1119, 1119, 1119, 263, 1006, 1006, 1006, + 1006, 1006, 1006, 979, 260, 980, 980, 980, 980, 980, + + 980, 980, 980, 980, 980, 1036, 365, 1039, 1039, 1039, + 1039, 1039, 1040, 1037, 1037, 1037, 1037, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1049, 994, 994, + 364, 1049, 263, 979, 994, 980, 980, 980, 980, 980, + 980, 980, 980, 980, 980, 776, 363, 1043, 1043, 1043, + 1043, 1043, 1043, 362, 1050, 355, 354, 998, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1041, 1041, + 353, 352, 263, 1031, 1041, 1032, 1032, 1032, 1032, 1032, + 1032, 1032, 1032, 1032, 1032, 1125, 351, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 302, 1007, 1007, + + 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1125, 237, + 1049, 229, 138, 1031, 1049, 1033, 1033, 1033, 1033, 1033, + 1033, 1033, 1033, 1033, 1033, 302, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 224, 1050, 1049, 225, + 219, 1036, 1049, 1037, 1037, 1037, 1037, 1037, 1037, 219, + 184, 211, 138, 1031, 342, 1034, 1034, 1034, 1034, 1034, + 1035, 1032, 1032, 1032, 1032, 1050, 1020, 1020, 1020, 1020, + 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, + 1020, 1020, 1020, 1020, 1020, 1020, 249, 334, 167, 249, + 333, 249, 138, 776, 332, 1043, 1043, 1043, 1043, 1043, + + 1043, 1043, 1043, 1043, 1043, 998, 776, 331, 1044, 1044, + 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 330, 327, + 326, 325, 1045, 1045, 1045, 1045, 1045, 1045, 1053, 324, + 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, + 323, 1116, 1116, 1116, 1116, 1116, 1116, 1045, 1045, 1045, + 1045, 1045, 1045, 1053, 322, 1055, 1055, 1055, 1055, 1055, + 1055, 1055, 1055, 1055, 1055, 1053, 314, 1056, 1056, 1056, + 1056, 1056, 1057, 1054, 1054, 1054, 1054, 1059, 138, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 313, + 312, 1049, 311, 310, 309, 1049, 1065, 1066, 1067, 1065, + + 1065, 1065, 1065, 1065, 1065, 1065, 1031, 308, 1032, 1032, + 1032, 1032, 1032, 1032, 307, 164, 263, 1059, 1050, 1061, + 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 137, + 164, 1074, 239, 138, 152, 1074, 1071, 1071, 150, 278, + 143, 141, 1071, 138, 286, 138, 1068, 1069, 1070, 1068, + 1068, 1068, 1068, 1068, 1068, 1068, 263, 1059, 1075, 1062, + 1062, 1062, 1062, 1062, 1063, 1060, 1060, 1060, 1060, 1036, + 285, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1036, 284, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 283, 1074, 282, 263, 1031, 1074, 1032, + + 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 776, + 278, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1075, 1074, 267, 263, 1053, 1074, 1054, 1054, 1054, + 1054, 1054, 1054, 260, 256, 255, 138, 1031, 254, 1032, + 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1075, + 1080, 1081, 1082, 1080, 1080, 1080, 1080, 1080, 1080, 1080, + 1053, 253, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, + 1054, 1054, 167, 252, 247, 1053, 138, 1054, 1054, 1054, + 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1083, 1084, 1085, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 225, 1059, 219, + + 1060, 1060, 1060, 1060, 1060, 1060, 211, 140, 177, 208, + 174, 1074, 200, 198, 1097, 1074, 1098, 1098, 1098, 1098, + 1098, 1098, 180, 179, 263, 1059, 176, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 263, 1075, 1091, + 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1092, + 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 278, + 175, 167, 164, 152, 263, 1059, 141, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1093, 1093, 1093, + 1093, 1093, 1094, 1091, 1091, 1091, 1091, 1097, 140, 1098, + 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 138, + + 1125, 1125, 1125, 1125, 263, 1086, 1125, 1087, 1087, 1087, + 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1097, 1125, 1099, + 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1097, + 1125, 1100, 1100, 1100, 1100, 1100, 1101, 1098, 1098, 1098, + 1098, 1125, 1125, 1125, 138, 1086, 1125, 1088, 1088, 1088, + 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1125, 1125, 1125, + 1107, 1108, 1109, 1107, 1107, 1107, 1107, 1107, 1107, 1107, + 1086, 1125, 1087, 1087, 1087, 1087, 1087, 1087, 1125, 1125, + 1125, 1125, 1125, 1125, 138, 1086, 1125, 1089, 1089, 1089, + 1089, 1089, 1090, 1087, 1087, 1087, 1087, 138, 1091, 1091, + + 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1125, 138, + 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, + 1125, 1125, 1125, 1125, 138, 1102, 1125, 1103, 1103, 1103, + 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1110, 1111, 1112, + 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1097, 1125, 1098, + 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1125, + 1125, 1125, 1125, 1125, 263, 1102, 1125, 1104, 1104, 1104, + 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1097, 1125, 1098, + 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1113, + 1114, 1115, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1125, + + 1125, 1125, 1125, 1125, 263, 1102, 1125, 1105, 1105, 1105, + 1105, 1105, 1106, 1103, 1103, 1103, 1103, 1125, 1102, 1125, + 1103, 1103, 1103, 1103, 1103, 1103, 263, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1125, 1122, 1122, + 1122, 1122, 1122, 1122, 263, 1086, 1125, 1087, 1087, 1087, + 1087, 1087, 1087, 1087, 1087, 1087, 1087, 263, 1125, 1125, + 1125, 1125, 1125, 1125, 138, 1107, 1107, 1107, 1107, 1107, + 1107, 1107, 1107, 1107, 1107, 263, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 138, 1086, 1125, 1087, 1087, 1087, + 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1125, 1125, 1125, + + 1125, 1125, 138, 1117, 1117, 1117, 1117, 1117, 1118, 1116, + 1116, 1116, 1116, 1119, 1119, 1119, 1119, 1119, 1119, 1119, + 1119, 1119, 1119, 1125, 138, 1102, 1125, 1103, 1103, 1103, + 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1125, 1125, 1125, + 138, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, + 1110, 1120, 1120, 1120, 1120, 1120, 1121, 1119, 1119, 1119, + 1119, 1125, 1125, 1125, 263, 1102, 1125, 1103, 1103, 1103, + 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1122, 1122, 1122, + 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1113, 1113, 1113, + 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1125, 1125, 1125, + + 1125, 1125, 1125, 1125, 263, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 263, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 263, 1123, 1123, 1123, 1123, 1123, + 1124, 1122, 1122, 1122, 1122, 1116, 1116, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1119, 1119, 1119, 1119, 1119, + 1119, 1119, 1119, 1119, 1119, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 263, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 138, 1122, 1122, 1122, 1122, 1122, 1122, 1122, + 1122, 1122, 1122, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 263, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 113, 113, 113, 113, 113, 113, 113, 113, 113, + + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 137, 1125, 1125, 137, 1125, 1125, 1125, 1125, 137, + 1125, 137, 137, 137, 1125, 1125, 137, 137, 137, 137, + 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 147, 1125, 1125, 147, 1125, 1125, 147, 1125, 147, + 1125, 147, 147, 147, 147, 1125, 147, 147, 147, 147, + 147, 151, 1125, 1125, 151, 1125, 1125, 1125, 1125, 151, + 1125, 151, 151, 151, 1125, 1125, 151, 151, 151, 151, + 151, 153, 1125, 1125, 153, 153, 153, 1125, 153, 153, + + 1125, 153, 153, 153, 1125, 1125, 153, 153, 153, 153, + 153, 205, 1125, 1125, 205, 205, 205, 1125, 205, 205, + 1125, 205, 205, 205, 1125, 1125, 205, 205, 205, 205, + 205, 210, 1125, 1125, 210, 210, 210, 1125, 210, 210, + 1125, 210, 210, 210, 1125, 210, 210, 1125, 210, 210, + 210, 218, 1125, 1125, 218, 218, 1125, 1125, 218, 218, + 1125, 218, 218, 218, 218, 1125, 218, 218, 218, 218, + 218, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 224, 224, 1125, 224, 224, 1125, 224, 224, 224, + + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 231, 1125, 1125, 231, 1125, 1125, 231, 1125, 231, + 1125, 231, 231, 231, 231, 1125, 231, 231, 231, 231, + 231, 235, 1125, 1125, 235, 1125, 1125, 1125, 1125, 235, + 1125, 235, 235, 235, 1125, 235, 235, 235, 235, 235, + 235, 238, 1125, 1125, 238, 238, 238, 1125, 238, 238, + 1125, 238, 238, 238, 1125, 238, 238, 238, 238, 238, + 238, 259, 1125, 1125, 1125, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 262, 1125, 1125, 262, 1125, 1125, 1125, 1125, 262, + + 1125, 262, 262, 262, 1125, 1125, 262, 262, 262, 262, + 262, 264, 1125, 1125, 264, 1125, 1125, 264, 1125, 264, + 1125, 264, 264, 264, 264, 1125, 264, 264, 264, 264, + 264, 266, 1125, 1125, 266, 1125, 1125, 1125, 1125, 266, + 1125, 266, 266, 266, 1125, 1125, 266, 266, 266, 266, + 266, 268, 1125, 1125, 268, 268, 268, 1125, 268, 268, + 1125, 268, 268, 268, 1125, 1125, 268, 268, 268, 268, + 268, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 293, 293, 1125, 293, 293, 293, 293, 293, 293, + + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 147, 1125, 1125, 147, 1125, 1125, 1125, 1125, 147, + 1125, 147, 147, 147, 1125, 1125, 147, 147, 147, 147, + 147, 151, 1125, 1125, 151, 1125, 1125, 1125, 1125, 151, + 1125, 151, 151, 151, 1125, 1125, 151, 151, 151, 151, + 151, 153, 1125, 1125, 153, 153, 153, 1125, 153, 153, + 1125, 153, 153, 153, 1125, 1125, 153, 153, 153, 153, + 153, 154, 1125, 1125, 154, 154, 154, 1125, 154, 154, + 1125, 154, 154, 154, 1125, 1125, 154, 154, 154, 154, + 154, 303, 303, 303, 1125, 1125, 1125, 1125, 303, 205, + + 1125, 1125, 205, 205, 205, 1125, 205, 205, 1125, 205, + 205, 205, 1125, 1125, 205, 205, 205, 205, 205, 206, + 1125, 1125, 206, 206, 206, 1125, 206, 206, 1125, 206, + 206, 206, 1125, 1125, 206, 206, 206, 206, 206, 210, + 1125, 1125, 210, 210, 210, 1125, 210, 210, 1125, 210, + 210, 210, 1125, 210, 210, 1125, 210, 210, 210, 218, + 1125, 1125, 218, 218, 1125, 1125, 218, 218, 1125, 218, + 218, 218, 218, 1125, 218, 218, 218, 218, 218, 224, + 224, 1125, 224, 224, 1125, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 234, + + 1125, 1125, 234, 1125, 1125, 1125, 1125, 234, 1125, 234, + 234, 234, 1125, 1125, 234, 234, 234, 234, 234, 235, + 1125, 1125, 235, 1125, 1125, 1125, 1125, 235, 1125, 235, + 235, 235, 1125, 235, 235, 235, 235, 235, 235, 236, + 1125, 1125, 236, 236, 1125, 236, 236, 1125, 1125, 236, + 236, 238, 1125, 1125, 238, 238, 238, 1125, 238, 238, + 1125, 238, 238, 238, 1125, 238, 238, 238, 238, 238, + 238, 259, 1125, 1125, 1125, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 262, 1125, 1125, 262, 1125, 1125, 1125, 1125, 262, + + 1125, 262, 262, 262, 1125, 1125, 262, 262, 262, 262, + 262, 264, 1125, 1125, 264, 1125, 1125, 1125, 1125, 264, + 1125, 264, 264, 264, 1125, 1125, 264, 264, 264, 264, + 264, 266, 1125, 1125, 266, 1125, 1125, 1125, 1125, 266, + 1125, 266, 266, 266, 1125, 1125, 266, 266, 266, 266, + 266, 268, 1125, 1125, 268, 268, 268, 1125, 268, 268, + 1125, 268, 268, 268, 1125, 1125, 268, 268, 268, 268, + 268, 269, 1125, 1125, 269, 269, 269, 1125, 269, 269, + 1125, 269, 269, 269, 1125, 1125, 269, 269, 269, 269, + 269, 291, 291, 291, 291, 291, 291, 291, 291, 291, + + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 403, 403, 403, 1125, 1125, 1125, 1125, 403, 503, + 503, 503, 1125, 1125, 1125, 1125, 503, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 600, 600, 600, + 1125, 1125, 1125, 1125, 600, 604, 604, 604, 604, 1125, + 1125, 1125, 1125, 604, 704, 704, 704, 1125, 1125, 1125, + 1125, 704, 705, 705, 705, 705, 1125, 1125, 1125, 1125, + + 705, 791, 791, 791, 1125, 1125, 1125, 1125, 791, 792, + 792, 792, 792, 1125, 1125, 1125, 1125, 792, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 236, 1125, + 1125, 236, 236, 1125, 236, 236, 1125, 1125, 236, 236, + 856, 1125, 856, 856, 1125, 1125, 1125, 1125, 856, 874, + 874, 874, 1125, 1125, 1125, 1125, 874, 875, 875, 875, + 875, 1125, 1125, 1125, 1125, 875, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 236, 1125, 1125, 236, + + 236, 1125, 236, 236, 1125, 1125, 236, 236, 262, 1125, + 1125, 262, 1125, 1125, 1125, 1125, 262, 1125, 262, 262, + 262, 1125, 1125, 262, 262, 262, 262, 262, 930, 1125, + 930, 930, 1125, 1125, 1125, 1125, 930, 946, 946, 946, + 1125, 1125, 1125, 1125, 946, 947, 947, 947, 1125, 1125, + 1125, 1125, 1125, 947, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 962, 962, 1125, 962, 962, 962, + 962, 1125, 962, 1125, 962, 962, 962, 1125, 1125, 962, + 962, 962, 962, 962, 968, 968, 1125, 968, 968, 968, + + 968, 1125, 968, 1125, 968, 968, 968, 1125, 1125, 968, + 968, 968, 968, 968, 995, 1125, 995, 995, 1125, 1125, + 1125, 1125, 995, 1042, 1125, 1042, 1042, 1125, 1125, 1125, + 1125, 1042, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + 1076, 1076, 19, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125 + } ; + +static yyconst flex_int16_t yy_chk[8328] = + { 0, + 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, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 21, 49, 43, 2, 21, + 27, 2, 5, 5, 39, 5, 5, 5, 43, 5, + 52, 49, 46, 42, 39, 5, 42, 46, 6, 6, + + 27, 6, 6, 6, 52, 6, 42, 2, 2, 5, + 5, 6, 2, 35, 35, 35, 35, 35, 35, 44, + 2, 61, 44, 2, 3, 6, 6, 27, 3, 11, + 11, 3, 11, 11, 11, 11, 5, 3, 12, 12, + 3, 12, 12, 12, 12, 83, 65, 59, 103, 61, + 65, 103, 6, 127, 3, 165, 127, 3, 15, 15, + 15, 15, 15, 15, 15, 3, 59, 3, 165, 3, + 3, 83, 3, 16, 16, 16, 16, 16, 16, 16, + 32, 32, 55, 11, 32, 32, 185, 70, 90, 1122, + 102, 55, 12, 63, 3, 4, 70, 63, 85, 4, + + 55, 102, 4, 89, 32, 70, 63, 89, 4, 329, + 197, 4, 15, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 329, 85, 4, 56, 16, 4, 32, + 56, 79, 79, 114, 79, 79, 4, 90, 4, 185, + 4, 4, 54, 4, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 93, 58, 197, 89, 58, 56, + 56, 142, 198, 142, 56, 4, 7, 7, 58, 7, + 7, 7, 56, 7, 93, 56, 87, 87, 198, 87, + 87, 64, 114, 58, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 92, 92, 569, 92, 92, 569, + + 92, 93, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 98, 98, 98, 98, 98, 98, 321, 321, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, + 8, 118, 8, 8, 8, 110, 8, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 126, 112, 139, + 164, 118, 187, 139, 187, 66, 66, 112, 126, 66, + 66, 164, 227, 116, 116, 1116, 116, 116, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 118, 66, + 336, 336, 287, 8, 8, 8, 8, 8, 8, 8, + + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 9, 9, 66, 9, 9, 9, 9, 9, + 289, 227, 289, 199, 9, 9, 9, 116, 77, 77, + 330, 77, 77, 77, 94, 77, 199, 94, 330, 77, + 9, 77, 136, 94, 149, 287, 94, 188, 343, 94, + 94, 136, 188, 120, 120, 77, 77, 120, 120, 291, + 136, 291, 343, 94, 149, 94, 9, 10, 10, 200, + 10, 10, 10, 10, 10, 200, 292, 120, 292, 10, + 10, 10, 77, 123, 123, 123, 123, 123, 123, 94, + 94, 149, 396, 183, 183, 10, 183, 183, 293, 415, + + 293, 135, 120, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 162, 162, 162, 162, 162, 162, 396, + 415, 10, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 17, 17, 17, 17, + + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 26, 261, 26, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 26, 1098, 421, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 33, 421, 33, 33, + + 33, 33, 33, 33, 33, 33, 33, 33, 33, 340, + 1073, 340, 33, 33, 33, 33, 33, 33, 186, 186, + 261, 186, 186, 138, 138, 138, 138, 138, 202, 138, + 138, 196, 202, 138, 303, 33, 196, 33, 33, 33, + 33, 33, 33, 40, 196, 303, 40, 138, 138, 138, + 204, 523, 40, 229, 204, 40, 40, 229, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 186, 523, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 389, 420, + 389, 45, 45, 45, 45, 45, 45, 341, 195, 420, + 195, 45, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 341, 339, 231, 424, 45, 45, 45, 45, + 45, 45, 53, 53, 424, 53, 53, 53, 53, 53, + 339, 53, 53, 148, 231, 53, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 1071, 232, 209, 53, + 53, 53, 57, 209, 57, 426, 150, 150, 150, 150, + + 150, 231, 150, 150, 195, 57, 150, 232, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 1054, 426, + 150, 150, 150, 152, 152, 152, 152, 152, 412, 152, + 152, 176, 176, 152, 232, 153, 153, 176, 176, 153, + 153, 176, 226, 176, 176, 412, 226, 152, 152, 152, + 201, 390, 290, 390, 201, 57, 78, 290, 78, 153, + 435, 212, 212, 201, 212, 212, 435, 228, 228, 78, + 228, 228, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 95, 305, 153, 95, 260, 305, 95, 95, + 260, 95, 95, 95, 95, 387, 226, 95, 95, 156, + + 156, 156, 156, 156, 156, 156, 156, 156, 156, 387, + 520, 95, 95, 95, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 520, 423, 156, 95, 95, 96, + 260, 429, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 423, 429, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 756, 756, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + + 99, 392, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 400, 400, 400, 99, 99, 99, 99, + 99, 99, 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 337, 414, 419, 223, 223, 337, 223, 223, + 392, 99, 99, 99, 99, 99, 99, 100, 419, 445, + 414, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 1045, 445, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 223, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 627, + 418, 443, 104, 104, 104, 104, 104, 104, 418, 344, + 205, 205, 104, 344, 205, 205, 245, 245, 245, 245, + 245, 245, 189, 627, 443, 434, 189, 104, 104, 104, + 104, 104, 104, 121, 205, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 422, 1044, 430, 121, + 121, 121, 121, 121, 121, 189, 189, 208, 208, 205, + 189, 434, 403, 208, 208, 430, 422, 208, 189, 208, + 527, 189, 121, 403, 121, 121, 121, 121, 121, 121, + + 124, 219, 425, 124, 527, 219, 456, 219, 219, 124, + 425, 456, 124, 124, 219, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 219, + 1042, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 744, 410, 744, 128, 128, + 128, 128, 128, 128, 335, 471, 335, 410, 128, 216, + + 216, 216, 216, 216, 216, 216, 216, 216, 216, 328, + 328, 522, 328, 128, 128, 128, 128, 128, 128, 134, + 134, 433, 134, 134, 134, 134, 134, 522, 134, 134, + 364, 364, 134, 364, 471, 233, 233, 233, 233, 516, + 432, 233, 233, 432, 328, 233, 134, 134, 134, 155, + 433, 335, 155, 155, 155, 155, 155, 516, 155, 155, + 233, 233, 155, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 427, 446, 432, 155, 155, 155, 157, + 446, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 157, 442, 427, 442, 157, 157, 157, 157, 157, + + 157, 288, 288, 1041, 288, 288, 237, 237, 237, 237, + 237, 467, 237, 237, 467, 517, 237, 467, 157, 531, + 157, 157, 157, 157, 157, 157, 166, 531, 726, 166, + 237, 237, 237, 468, 468, 166, 517, 468, 166, 166, + 726, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 288, 442, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 475, 767, 767, 167, 167, 167, 167, 167, 167, + 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, + 276, 276, 276, 276, 276, 276, 503, 530, 475, 167, + 167, 167, 167, 167, 167, 207, 490, 503, 207, 207, + 207, 207, 207, 235, 207, 207, 235, 530, 207, 537, + 413, 479, 235, 239, 413, 235, 479, 239, 235, 235, + 239, 416, 207, 207, 207, 490, 239, 386, 386, 492, + 386, 537, 235, 416, 235, 492, 528, 413, 416, 1037, + 239, 239, 244, 244, 244, 244, 244, 244, 244, 244, + + 244, 244, 407, 407, 407, 407, 407, 407, 235, 235, + 238, 417, 386, 238, 528, 417, 238, 238, 521, 238, + 238, 238, 238, 254, 254, 238, 238, 454, 457, 254, + 254, 454, 457, 254, 533, 254, 521, 444, 417, 238, + 238, 238, 532, 533, 271, 271, 271, 271, 271, 271, + 271, 271, 271, 271, 454, 457, 268, 268, 1030, 469, + 268, 268, 469, 532, 444, 238, 238, 241, 491, 241, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 268, 271, 444, 241, 241, 241, 241, 241, 241, 529, + 628, 263, 263, 263, 263, 263, 489, 263, 263, 489, + + 469, 263, 542, 529, 491, 268, 628, 542, 241, 241, + 241, 241, 241, 241, 246, 263, 263, 263, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 489, 1025, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 539, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 621, 539, 1012, 247, + 247, 247, 247, 247, 247, 526, 265, 265, 265, 265, + + 265, 526, 265, 265, 621, 395, 265, 395, 395, 395, + 395, 395, 395, 538, 247, 247, 247, 247, 247, 247, + 265, 265, 265, 267, 267, 267, 267, 267, 536, 267, + 267, 807, 807, 267, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 395, 534, 538, 267, 267, 267, + 270, 536, 534, 270, 270, 270, 270, 270, 624, 270, + 270, 1011, 540, 270, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 591, 624, 549, 270, 270, 270, + 272, 549, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 505, 505, 540, 272, 272, 272, 272, + + 272, 272, 284, 284, 547, 505, 477, 480, 284, 284, + 477, 480, 284, 591, 284, 547, 507, 507, 548, 272, + 600, 272, 272, 272, 272, 272, 272, 277, 507, 548, + 277, 600, 1007, 477, 480, 566, 277, 566, 566, 277, + 277, 745, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 995, 745, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + + 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 546, 620, 546, 278, 278, 278, 278, 278, + 278, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 451, 620, 451, 451, 451, 451, 451, 451, 994, + 278, 278, 278, 278, 278, 278, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 296, 541, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 345, 986, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 586, 342, 589, 546, 667, 342, 567, 589, 342, 567, + 567, 718, 541, 978, 342, 296, 297, 718, 297, 297, + + 297, 297, 297, 297, 297, 297, 297, 297, 342, 342, + 346, 586, 346, 346, 346, 346, 346, 346, 346, 346, + 346, 346, 347, 667, 347, 347, 347, 347, 347, 347, + 347, 347, 347, 347, 570, 297, 298, 570, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 399, 399, + 399, 399, 399, 399, 399, 399, 399, 399, 399, 638, + 366, 604, 518, 763, 366, 763, 518, 366, 568, 638, + 568, 568, 604, 366, 570, 298, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 366, 366, 518, + 299, 299, 299, 299, 299, 299, 391, 391, 391, 391, + + 391, 391, 391, 391, 391, 391, 513, 513, 513, 513, + 513, 513, 806, 299, 806, 299, 299, 299, 299, 299, + 299, 302, 302, 302, 302, 302, 302, 302, 302, 302, + 302, 302, 622, 391, 977, 302, 302, 302, 302, 302, + 302, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 524, 617, 622, 655, 524, 810, 617, 810, 655, + 302, 302, 302, 302, 302, 302, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 524, 588, + 585, 304, 304, 304, 304, 304, 304, 406, 406, 406, + 406, 406, 406, 406, 406, 406, 406, 614, 614, 614, + + 614, 614, 614, 630, 605, 605, 304, 304, 304, 304, + 304, 304, 306, 585, 588, 306, 605, 723, 629, 661, + 630, 306, 661, 723, 306, 306, 629, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 841, 841, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 307, 307, 307, 307, + 307, 307, 307, 307, 307, 307, 307, 633, 877, 877, + + 307, 307, 307, 307, 307, 307, 409, 625, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 633, 625, + 662, 878, 878, 662, 625, 307, 307, 307, 307, 307, + 307, 348, 348, 348, 348, 348, 348, 348, 348, 348, + 348, 348, 885, 975, 885, 348, 348, 348, 348, 348, + 348, 447, 447, 447, 447, 447, 447, 447, 447, 447, + 447, 619, 623, 676, 587, 619, 623, 971, 676, 643, + 348, 348, 348, 348, 348, 348, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 643, 950, 619, 623, + 350, 350, 350, 350, 350, 350, 449, 587, 449, 449, + + 449, 449, 449, 449, 449, 449, 449, 449, 731, 663, + 606, 606, 663, 731, 947, 350, 350, 350, 350, 350, + 350, 367, 606, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 450, 930, 450, 450, 450, 450, 450, + 450, 450, 450, 450, 450, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 664, 888, 888, 664, 819, + 367, 368, 704, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 704, 474, 819, 474, 474, 474, 474, + 474, 474, 470, 498, 498, 498, 498, 498, 498, 498, + 498, 498, 498, 498, 727, 641, 764, 641, 727, 929, + + 368, 369, 764, 369, 369, 369, 369, 369, 369, 369, + 369, 369, 369, 474, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 665, 733, 925, 665, 740, 746, + 369, 370, 733, 370, 370, 370, 370, 370, 370, 370, + 370, 370, 370, 641, 915, 740, 746, 370, 370, 370, + 370, 370, 370, 510, 510, 510, 510, 510, 510, 510, + 510, 642, 626, 631, 632, 510, 626, 631, 632, 665, + 770, 642, 370, 370, 370, 370, 370, 370, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, 909, 626, + + 631, 632, 372, 372, 372, 372, 372, 372, 512, 512, + 512, 512, 512, 512, 512, 512, 512, 512, 770, 594, + 908, 594, 594, 594, 594, 594, 594, 372, 372, 372, + 372, 372, 372, 393, 777, 393, 393, 393, 393, 393, + 393, 393, 393, 393, 393, 515, 777, 515, 515, 515, + 515, 515, 515, 515, 515, 515, 515, 550, 594, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 743, + 762, 743, 393, 394, 762, 394, 394, 394, 394, 394, + 394, 394, 394, 394, 394, 551, 907, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 552, 705, 552, + + 552, 552, 552, 552, 552, 552, 552, 552, 552, 705, + 755, 766, 394, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 766, 755, 743, 405, + 405, 405, 405, 405, 405, 590, 590, 590, 590, 590, + 590, 590, 590, 590, 590, 649, 734, 649, 649, 649, + 649, 649, 649, 734, 405, 405, 405, 405, 405, 405, + 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, + 408, 408, 590, 916, 916, 408, 408, 408, 408, 408, + 408, 601, 899, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 650, 768, 608, 608, 650, 644, 732, + + 408, 408, 408, 408, 408, 408, 411, 608, 644, 411, + 732, 768, 804, 843, 895, 411, 843, 804, 411, 411, + 650, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 948, 948, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + 883, 686, 894, 883, 452, 452, 452, 452, 452, 452, + + 602, 686, 602, 602, 602, 602, 602, 602, 602, 602, + 602, 602, 696, 696, 696, 696, 696, 696, 870, 452, + 452, 452, 452, 452, 452, 453, 453, 453, 453, 453, + 453, 453, 453, 453, 453, 917, 722, 856, 917, 453, + 453, 453, 453, 453, 453, 603, 722, 603, 603, 603, + 603, 603, 603, 603, 603, 603, 603, 715, 715, 715, + 715, 715, 715, 852, 453, 453, 453, 453, 453, 453, + 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, + 466, 954, 847, 954, 466, 466, 466, 466, 466, 466, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + + 703, 814, 703, 703, 703, 703, 703, 703, 844, 466, + 466, 466, 466, 466, 466, 472, 814, 472, 472, 472, + 472, 472, 472, 472, 472, 472, 472, 611, 611, 611, + 611, 611, 611, 611, 611, 955, 955, 949, 779, 611, + 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, + 779, 809, 949, 836, 472, 473, 809, 473, 473, 473, + 473, 473, 473, 473, 473, 473, 473, 616, 831, 616, + 616, 616, 616, 616, 616, 616, 616, 616, 616, 645, + 645, 645, 645, 645, 645, 645, 645, 645, 645, 818, + 818, 836, 818, 818, 473, 493, 857, 493, 493, 493, + + 493, 493, 493, 493, 493, 493, 493, 647, 857, 647, + 647, 647, 647, 647, 647, 647, 647, 647, 647, 648, + 791, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 791, 653, 830, 493, 494, 653, 494, 494, 494, + 494, 494, 494, 494, 494, 494, 494, 728, 818, 656, + 706, 706, 957, 656, 957, 828, 960, 728, 960, 653, + 659, 660, 706, 671, 659, 660, 670, 671, 670, 670, + 670, 670, 670, 670, 494, 495, 656, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 659, 660, 858, + 671, 666, 666, 666, 666, 666, 666, 666, 666, 666, + + 666, 858, 674, 677, 827, 670, 674, 677, 785, 785, + 785, 785, 785, 785, 495, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 666, 674, + 677, 508, 508, 508, 508, 508, 508, 693, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 823, 680, 681, + 719, 821, 680, 681, 719, 817, 508, 508, 508, 508, + 508, 508, 511, 511, 511, 511, 511, 511, 511, 511, + 511, 511, 511, 511, 511, 680, 681, 719, 511, 511, + 511, 511, 511, 511, 695, 695, 695, 695, 695, 695, + 695, 695, 695, 695, 724, 729, 735, 889, 724, 729, + + 735, 816, 889, 511, 511, 511, 511, 511, 511, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 724, 729, 735, 514, 514, 514, 514, 514, 514, + 698, 792, 698, 698, 698, 698, 698, 698, 698, 698, + 698, 698, 792, 815, 707, 707, 987, 987, 813, 514, + 514, 514, 514, 514, 514, 571, 707, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 699, 699, 699, + 699, 699, 699, 699, 699, 699, 699, 701, 860, 701, + 701, 701, 701, 701, 701, 701, 701, 701, 701, 1016, + 860, 1016, 919, 775, 571, 572, 774, 572, 572, 572, + + 572, 572, 572, 572, 572, 572, 572, 702, 820, 702, + 702, 702, 702, 702, 702, 702, 702, 702, 702, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 765, + 820, 919, 820, 820, 572, 573, 757, 573, 573, 573, + 573, 573, 573, 573, 573, 573, 573, 709, 709, 712, + 712, 712, 712, 712, 712, 712, 712, 820, 1076, 709, + 1076, 712, 714, 714, 714, 714, 714, 714, 714, 714, + 714, 714, 737, 923, 573, 592, 737, 592, 592, 592, + 592, 592, 592, 592, 592, 592, 592, 717, 754, 717, + 717, 717, 717, 717, 717, 717, 717, 717, 717, 737, + + 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, + 747, 1079, 923, 1079, 592, 593, 753, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 748, 748, 748, + 748, 748, 748, 748, 748, 748, 748, 748, 749, 749, + 749, 749, 749, 749, 749, 749, 749, 749, 749, 897, + 897, 751, 897, 897, 593, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 1139, 1139, 1139, 599, + 599, 599, 599, 599, 599, 980, 769, 769, 769, 769, + 769, 769, 769, 769, 769, 769, 773, 773, 773, 773, + 773, 773, 773, 750, 599, 599, 599, 599, 599, 599, + + 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, + 609, 609, 609, 769, 980, 742, 609, 609, 609, 609, + 609, 609, 984, 741, 773, 776, 776, 776, 776, 776, + 776, 776, 776, 776, 776, 802, 802, 802, 802, 802, + 802, 609, 609, 609, 609, 609, 609, 612, 612, 612, + 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, + 898, 984, 898, 612, 612, 612, 612, 612, 612, 778, + 778, 778, 778, 778, 778, 778, 778, 778, 778, 832, + 833, 808, 739, 832, 833, 808, 1032, 700, 612, 612, + 612, 612, 612, 612, 615, 615, 615, 615, 615, 615, + + 615, 615, 615, 615, 615, 615, 832, 833, 808, 615, + 615, 615, 615, 615, 615, 782, 882, 782, 782, 782, + 782, 782, 782, 898, 692, 1032, 882, 782, 691, 793, + 793, 808, 690, 685, 615, 615, 615, 615, 615, 615, + 668, 793, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 784, 784, 784, 784, 784, 784, 784, 784, + 784, 784, 787, 874, 787, 787, 787, 787, 787, 787, + 787, 787, 787, 787, 874, 1048, 1048, 1048, 1048, 668, + 669, 931, 669, 669, 669, 669, 669, 669, 669, 669, + 669, 669, 788, 931, 788, 788, 788, 788, 788, 788, + + 788, 788, 788, 788, 789, 875, 789, 789, 789, 789, + 789, 789, 789, 789, 789, 789, 875, 1060, 1087, 669, + 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, + 687, 790, 684, 790, 790, 790, 790, 790, 790, 790, + 790, 790, 790, 794, 794, 795, 795, 795, 795, 795, + 795, 795, 795, 795, 795, 794, 1060, 1087, 687, 688, + 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, + 796, 796, 799, 799, 799, 799, 799, 799, 799, 799, + 683, 682, 796, 932, 799, 801, 801, 801, 801, 801, + 801, 801, 801, 801, 801, 932, 679, 688, 689, 689, + + 689, 689, 689, 689, 689, 689, 689, 689, 689, 803, + 934, 803, 803, 803, 803, 803, 803, 803, 803, 803, + 803, 678, 934, 811, 812, 675, 996, 811, 812, 826, + 826, 826, 826, 826, 826, 826, 689, 694, 996, 694, + 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, + 811, 812, 673, 694, 694, 694, 694, 694, 694, 822, + 822, 822, 822, 822, 822, 822, 822, 822, 822, 1136, + 1136, 1157, 1157, 811, 812, 1136, 672, 1157, 694, 694, + 694, 694, 694, 694, 697, 697, 697, 697, 697, 697, + 697, 697, 697, 697, 697, 1163, 1163, 1163, 697, 697, + + 697, 697, 697, 697, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 842, 845, 846, 658, 842, + 845, 846, 657, 697, 697, 697, 697, 697, 697, 710, + 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, + 710, 710, 842, 845, 846, 710, 710, 710, 710, 710, + 710, 825, 825, 825, 825, 825, 825, 825, 825, 825, + 825, 825, 886, 842, 845, 846, 886, 654, 652, 651, + 710, 710, 710, 710, 710, 710, 713, 713, 713, 713, + 713, 713, 713, 713, 713, 713, 713, 713, 713, 886, + 646, 640, 713, 713, 713, 713, 713, 713, 835, 835, + + 835, 835, 835, 835, 835, 835, 835, 835, 839, 839, + 839, 839, 839, 839, 839, 639, 637, 713, 713, 713, + 713, 713, 713, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 1103, 835, 636, 635, 716, 716, + 716, 716, 716, 716, 634, 853, 839, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 866, 866, 866, + 866, 866, 866, 716, 716, 716, 716, 716, 716, 721, + 890, 892, 721, 1103, 890, 892, 958, 958, 721, 958, + 958, 721, 721, 618, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 890, 892, 598, + + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 752, 597, 596, 997, 752, 752, 752, + 752, 752, 752, 752, 752, 752, 752, 752, 997, 752, + 595, 584, 752, 752, 752, 752, 752, 752, 752, 752, + 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, + 752, 752, 752, 752, 752, 583, 752, 752, 752, 752, + 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, + + 752, 752, 752, 752, 758, 758, 758, 758, 758, 758, + 758, 758, 758, 758, 758, 854, 582, 854, 854, 854, + 854, 854, 854, 854, 854, 854, 854, 855, 946, 855, + 855, 855, 855, 855, 855, 855, 855, 855, 855, 946, + 581, 580, 758, 759, 759, 759, 759, 759, 759, 759, + 759, 759, 759, 759, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 863, 999, 863, 863, 863, 863, + 863, 863, 1158, 1158, 1179, 1179, 863, 999, 1158, 579, + 1179, 759, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 865, 865, 865, 865, 865, 865, 865, + + 865, 865, 865, 868, 896, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 876, 876, 1181, 1181, 1043, + 760, 761, 578, 1181, 761, 577, 896, 876, 896, 896, + 761, 1043, 576, 761, 761, 575, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 761, 761, 761, 961, + 574, 961, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 771, 771, 771, 771, 771, + + 771, 771, 771, 771, 771, 771, 869, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 871, 961, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 1018, 1018, + 565, 1018, 1018, 771, 772, 772, 772, 772, 772, 772, + 772, 772, 772, 772, 772, 872, 564, 872, 872, 872, + 872, 872, 872, 872, 872, 872, 872, 873, 563, 873, + 873, 873, 873, 873, 873, 940, 940, 940, 940, 940, + 940, 562, 772, 780, 561, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 783, 560, 783, 783, + 783, 783, 783, 783, 783, 783, 783, 783, 783, 559, + + 558, 557, 783, 783, 783, 783, 783, 783, 881, 881, + 881, 881, 881, 881, 881, 881, 556, 884, 906, 951, + 1227, 884, 906, 951, 555, 554, 1227, 783, 783, 783, + 783, 783, 783, 786, 786, 786, 786, 786, 786, 786, + 786, 786, 786, 786, 884, 906, 951, 786, 786, 786, + 786, 786, 786, 900, 553, 1182, 1182, 900, 900, 900, + 900, 1182, 1052, 1052, 901, 1052, 1052, 884, 901, 901, + 901, 901, 786, 786, 786, 786, 786, 786, 797, 797, + 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, + 797, 545, 544, 543, 797, 797, 797, 797, 797, 797, + + 1005, 1005, 1005, 1005, 1005, 1005, 902, 900, 902, 902, + 902, 902, 902, 902, 902, 902, 902, 902, 901, 797, + 797, 797, 797, 797, 797, 800, 800, 800, 800, 800, + 800, 800, 800, 800, 800, 800, 800, 535, 502, 501, + 500, 800, 800, 800, 800, 800, 800, 903, 499, 903, + 903, 903, 903, 903, 903, 903, 903, 903, 903, 1010, + 1010, 1010, 1010, 1010, 1010, 1010, 800, 800, 800, 800, + 800, 800, 805, 967, 1170, 805, 967, 1170, 497, 1170, + 496, 805, 967, 967, 805, 805, 967, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, + + 967, 967, 967, 805, 805, 805, 805, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 829, 488, 487, 928, + 829, 928, 928, 928, 928, 928, 928, 486, 829, 485, + 484, 483, 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 482, 481, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, + + 478, 829, 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, 829, 837, + 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 904, 476, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 905, 465, 905, 905, 905, 905, 905, 905, + 905, 905, 905, 905, 464, 463, 462, 837, 838, 838, + 838, 838, 838, 838, 838, 838, 838, 838, 838, 922, + 461, 922, 922, 922, 922, 922, 922, 914, 460, 459, + 458, 914, 924, 924, 924, 924, 924, 924, 924, 924, + 924, 924, 1183, 1183, 1221, 1221, 838, 840, 1183, 976, + + 840, 1221, 1186, 976, 914, 1186, 840, 1186, 922, 840, + 840, 455, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 840, 840, 840, 840, 914, 976, 448, 840, 840, + 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 848, 441, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 440, 439, 438, 918, 918, 918, 918, + 918, 918, 918, 918, 918, 918, 926, 437, 926, 926, + + 926, 926, 926, 926, 926, 926, 926, 926, 436, 431, + 848, 849, 428, 849, 849, 849, 849, 849, 849, 849, + 849, 849, 849, 918, 927, 402, 927, 927, 927, 927, + 927, 927, 927, 927, 927, 927, 933, 933, 933, 933, + 933, 933, 933, 933, 933, 933, 1187, 1187, 401, 398, + 849, 850, 1187, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 937, 397, 937, 937, 937, 937, 937, + 937, 385, 384, 383, 382, 937, 939, 939, 939, 939, + 939, 939, 939, 939, 939, 939, 1188, 1188, 381, 380, + 850, 851, 1188, 851, 851, 851, 851, 851, 851, 851, + + 851, 851, 851, 942, 379, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 943, 943, 943, 943, 943, + 943, 943, 943, 943, 943, 943, 1189, 1189, 378, 377, + 851, 861, 1189, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 864, 376, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 375, 374, 371, + 864, 864, 864, 864, 864, 864, 944, 944, 944, 944, + 944, 944, 944, 944, 944, 944, 944, 953, 365, 1077, + 1077, 953, 1077, 1077, 363, 864, 864, 864, 864, 864, + 864, 867, 867, 867, 867, 867, 867, 867, 867, 867, + + 867, 867, 362, 361, 953, 867, 867, 867, 867, 867, + 867, 945, 945, 945, 945, 945, 945, 945, 945, 945, + 945, 945, 985, 1192, 1192, 360, 985, 953, 359, 1192, + 867, 867, 867, 867, 867, 867, 879, 879, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, 910, 985, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 962, 1225, 358, 1225, 962, 962, 962, 962, 963, 1225, + 985, 357, 963, 963, 963, 963, 970, 970, 970, 970, + 970, 970, 970, 970, 970, 970, 356, 910, 911, 355, + 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, + + 964, 354, 1193, 1193, 964, 964, 964, 964, 1193, 353, + 352, 965, 349, 338, 962, 965, 965, 965, 965, 1194, + 1194, 334, 963, 1197, 1197, 1194, 333, 911, 912, 1197, + 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, + 966, 332, 331, 966, 966, 966, 966, 966, 966, 966, + 966, 966, 966, 327, 964, 968, 326, 1198, 1198, 968, + 968, 968, 968, 1198, 325, 965, 324, 912, 913, 323, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 972, 322, 972, 972, 972, 972, 972, 972, 972, 972, + 972, 972, 320, 969, 319, 1202, 969, 1013, 1202, 318, + + 1202, 1013, 969, 969, 317, 316, 969, 913, 920, 968, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, - 921, 0, 0, 921, 0, 0, 0, 0, 0, 921, - 921, 921, 0, 0, 921, 921, 921, 921, 921, 922, + 969, 969, 969, 973, 1013, 973, 973, 973, 973, 973, + 973, 973, 973, 973, 973, 974, 315, 974, 974, 974, + 974, 974, 974, 1204, 1204, 314, 313, 920, 921, 1204, + 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, + 312, 311, 310, 308, 301, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 983, 300, 983, 983, 983, + 983, 983, 983, 1212, 1212, 286, 285, 921, 935, 1212, + 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, - 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, - 922, 922, 922, 922, 922, 922, 922, 922, 923, 0, - 0, 923, 0, 0, 923, 0, 0, 923, 923, 923, - 923, 0, 923, 923, 923, 923, 923, 924, 0, 0, - 924, 0, 0, 0, 0, 0, 924, 924, 924, 0, - 0, 924, 924, 924, 924, 924, 925, 0, 0, 925, - 925, 925, 0, 925, 0, 925, 925, 925, 0, 0, - 925, 925, 925, 925, 925, 926, 926, 0, 0, 0, - 0, 926, 927, 0, 0, 927, 927, 927, 0, 927, - 0, 927, 927, 927, 0, 0, 927, 927, 927, 927, + 935, 938, 979, 938, 938, 938, 938, 938, 938, 938, + 938, 938, 938, 938, 983, 283, 282, 938, 938, 938, + 938, 938, 938, 991, 281, 991, 991, 991, 991, 991, + 991, 991, 991, 991, 991, 1094, 1094, 1094, 1094, 1094, + 1094, 280, 938, 938, 938, 938, 938, 938, 941, 941, + 941, 941, 941, 941, 941, 941, 941, 941, 279, 273, + 269, 266, 941, 941, 941, 941, 941, 941, 992, 264, + 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, + 1121, 1121, 1121, 1121, 1121, 1121, 262, 941, 941, 941, + 941, 941, 941, 981, 259, 981, 981, 981, 981, 981, - 927, 928, 0, 0, 928, 928, 928, 0, 928, 0, - 928, 928, 928, 0, 928, 928, 0, 928, 928, 928, - 929, 929, 929, 930, 0, 0, 930, 930, 0, 0, - 930, 0, 930, 930, 930, 930, 0, 930, 930, 930, - 930, 930, 931, 931, 931, 931, 931, 931, 931, 931, - 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, - 931, 932, 932, 0, 932, 932, 0, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, - 933, 0, 0, 933, 0, 0, 933, 0, 0, 933, - 933, 933, 933, 0, 933, 933, 933, 933, 933, 934, + 981, 981, 981, 981, 981, 993, 258, 993, 993, 993, + 993, 993, 993, 993, 993, 993, 993, 998, 998, 998, + 998, 998, 998, 998, 998, 998, 998, 1024, 1219, 1219, + 257, 1024, 981, 982, 1219, 982, 982, 982, 982, 982, + 982, 982, 982, 982, 982, 1002, 256, 1002, 1002, 1002, + 1002, 1002, 1002, 255, 1024, 253, 252, 1002, 1004, 1004, + 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1222, 1222, + 251, 250, 982, 988, 1222, 988, 988, 988, 988, 988, + 988, 988, 988, 988, 988, 1006, 248, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1008, 1008, 1008, - 0, 0, 934, 0, 0, 0, 0, 0, 934, 934, - 934, 0, 934, 934, 934, 934, 934, 934, 935, 0, - 0, 935, 935, 935, 0, 935, 0, 935, 935, 935, - 0, 935, 935, 935, 935, 935, 935, 936, 0, 0, - 0, 936, 936, 936, 936, 936, 936, 936, 936, 936, - 936, 936, 936, 936, 936, 936, 937, 937, 937, 937, - 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, - 937, 937, 937, 937, 937, 938, 938, 0, 938, 938, - 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, - 938, 938, 938, 938, 939, 0, 0, 939, 939, 939, + 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 242, 234, + 1049, 230, 988, 989, 1049, 989, 989, 989, 989, 989, + 989, 989, 989, 989, 989, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 225, 1049, 1015, 224, + 222, 1040, 1015, 1040, 1040, 1040, 1040, 1040, 1040, 218, + 213, 211, 989, 990, 206, 990, 990, 990, 990, 990, + 990, 990, 990, 990, 990, 1015, 1019, 1019, 1019, 1019, + 1019, 1019, 1019, 1019, 1019, 1019, 1020, 1020, 1020, 1020, + 1020, 1020, 1020, 1020, 1020, 1020, 1209, 194, 1015, 1209, + 193, 1209, 990, 1000, 192, 1000, 1000, 1000, 1000, 1000, - 0, 939, 0, 939, 939, 939, 0, 0, 939, 939, - 939, 939, 939, 940, 940, 0, 0, 0, 0, 940, - 941, 941, 0, 0, 0, 0, 941, 942, 942, 942, - 0, 0, 0, 0, 942, 943, 0, 0, 943, 943, - 943, 0, 943, 0, 943, 943, 943, 0, 0, 943, - 943, 943, 943, 943, 944, 0, 0, 944, 944, 944, - 0, 944, 0, 944, 944, 944, 0, 0, 944, 944, - 944, 944, 944, 945, 0, 0, 945, 945, 945, 0, - 945, 0, 945, 945, 945, 0, 945, 945, 0, 945, - 945, 945, 946, 946, 946, 947, 0, 0, 947, 947, + 1000, 1000, 1000, 1000, 1000, 1000, 1003, 191, 1003, 1003, + 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 190, 182, + 181, 180, 1003, 1003, 1003, 1003, 1003, 1003, 1021, 179, + 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, + 178, 1118, 1118, 1118, 1118, 1118, 1118, 1003, 1003, 1003, + 1003, 1003, 1003, 1022, 177, 1022, 1022, 1022, 1022, 1022, + 1022, 1022, 1022, 1022, 1022, 1023, 175, 1023, 1023, 1023, + 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1026, 1118, 1026, + 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 174, + 173, 1029, 172, 171, 170, 1029, 1031, 1031, 1031, 1031, - 0, 0, 947, 0, 947, 947, 947, 947, 0, 947, - 947, 947, 947, 947, 948, 948, 0, 948, 948, 0, - 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, - 948, 948, 948, 949, 0, 0, 949, 0, 0, 0, - 0, 0, 949, 949, 949, 0, 0, 949, 949, 949, - 949, 949, 950, 0, 0, 950, 0, 0, 0, 0, - 0, 950, 950, 950, 0, 950, 950, 950, 950, 950, - 950, 951, 0, 0, 951, 951, 951, 0, 951, 0, - 951, 951, 951, 0, 951, 951, 951, 951, 951, 951, - 952, 0, 0, 952, 0, 952, 953, 0, 0, 0, + 1031, 1031, 1031, 1031, 1031, 1031, 1035, 169, 1035, 1035, + 1035, 1035, 1035, 1035, 168, 163, 1026, 1027, 1029, 1027, + 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 159, + 158, 1058, 154, 1031, 151, 1058, 1224, 1224, 147, 1029, + 144, 141, 1224, 137, 133, 1035, 1036, 1036, 1036, 1036, + 1036, 1036, 1036, 1036, 1036, 1036, 1027, 1028, 1058, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1038, + 132, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, 1039, 131, 1039, 1039, 1039, 1039, 1039, 1039, 1039, + 1039, 1039, 1039, 130, 1074, 129, 1028, 1033, 1074, 1033, - 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, - 953, 953, 953, 953, 953, 954, 954, 954, 954, 954, - 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, - 954, 954, 954, 954, 955, 955, 0, 0, 0, 0, - 955, 956, 956, 956, 0, 0, 0, 0, 956, 957, - 957, 0, 0, 0, 0, 957, 958, 958, 0, 0, - 0, 0, 958, 959, 959, 0, 0, 0, 0, 959, - 960, 960, 960, 0, 0, 0, 0, 960, 961, 0, - 0, 961, 0, 961, 962, 962, 0, 0, 0, 0, - 962, 963, 963, 0, 0, 0, 0, 963, 964, 964, + 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1046, + 125, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1074, 1051, 119, 117, 1057, 1051, 1057, 1057, 1057, + 1057, 1057, 1057, 113, 109, 108, 1033, 1034, 107, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1051, + 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, + 1055, 106, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, + 1055, 1055, 1051, 105, 101, 1056, 1034, 1056, 1056, 1056, + 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 88, 1063, 81, - 0, 0, 0, 0, 964, 965, 965, 965, 0, 0, - 0, 0, 965, 966, 966, 966, 966, 0, 0, 0, - 0, 966, 967, 967, 0, 0, 0, 0, 967, 968, - 968, 0, 0, 0, 0, 968, 969, 969, 0, 0, - 0, 0, 969, 970, 970, 970, 0, 0, 0, 0, - 970, 971, 971, 971, 971, 0, 0, 0, 0, 971, - 972, 972, 0, 0, 0, 0, 972, 973, 973, 0, - 0, 0, 0, 973, 974, 974, 974, 0, 0, 0, - 0, 974, 975, 975, 975, 975, 0, 0, 0, 0, - 975, 976, 976, 0, 0, 0, 0, 976, 977, 0, + 1063, 1063, 1063, 1063, 1063, 1063, 74, 73, 69, 68, + 67, 1064, 62, 60, 1101, 1064, 1101, 1101, 1101, 1101, + 1101, 1101, 51, 50, 1059, 1061, 48, 1061, 1061, 1061, + 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1063, 1064, 1068, + 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1069, + 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1064, + 47, 41, 36, 30, 1061, 1062, 24, 1062, 1062, 1062, + 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1070, 1070, 1070, + 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1080, 23, 1080, + 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 20, - 977, 977, 0, 0, 0, 0, 977, 978, 978, 978, - 0, 0, 0, 0, 978, 979, 979, 979, 979, 0, - 0, 0, 0, 979, 980, 980, 0, 0, 0, 0, - 980, 981, 0, 981, 981, 0, 0, 0, 0, 981, - 982, 982, 982, 0, 0, 0, 0, 982, 983, 983, - 983, 0, 0, 0, 0, 0, 983, 984, 984, 984, - 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, - 984, 984, 984, 984, 984, 984, 985, 985, 0, 985, - 985, 985, 985, 0, 0, 985, 985, 985, 0, 0, - 985, 985, 985, 985, 985, 986, 986, 0, 986, 986, + 19, 0, 0, 0, 1062, 1065, 0, 1065, 1065, 1065, + 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1081, 0, 1081, + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1082, + 0, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, + 1082, 0, 0, 0, 1065, 1066, 0, 1066, 1066, 1066, + 1066, 1066, 1066, 1066, 1066, 1066, 1066, 0, 0, 0, + 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, + 1090, 0, 1090, 1090, 1090, 1090, 1090, 1090, 0, 0, + 0, 0, 0, 0, 1066, 1067, 0, 1067, 1067, 1067, + 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1086, 1092, 1092, - 986, 986, 0, 0, 986, 986, 986, 0, 0, 986, - 986, 986, 986, 986, 987, 987, 0, 0, 0, 0, - 987, 988, 0, 988, 988, 0, 0, 0, 0, 988, - 989, 989, 0, 0, 0, 0, 0, 989, 990, 990, - 0, 0, 0, 0, 990, 991, 0, 991, 991, 0, - 0, 0, 0, 991, 992, 992, 0, 0, 0, 0, - 992, 993, 0, 993, 0, 0, 0, 0, 0, 993, - 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, - 994, 994, 994, 994, 994, 994, 994, 994, 994, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, + 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 0, 1090, + 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, + 0, 0, 0, 0, 1067, 1083, 0, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1097, 1097, 1097, + 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1099, 0, 1099, + 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 0, + 0, 0, 0, 0, 1083, 1084, 0, 1084, 1084, 1084, + 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1100, 0, 1100, + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 0, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915 + 0, 0, 0, 0, 1084, 1085, 0, 1085, 1085, 1085, + 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 1106, 0, + 1106, 1106, 1106, 1106, 1106, 1106, 1102, 1107, 1107, 1107, + 1107, 1107, 1107, 1107, 1107, 1107, 1107, 0, 1124, 1124, + 1124, 1124, 1124, 1124, 1085, 1088, 0, 1088, 1088, 1088, + 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1106, 0, 0, + 0, 0, 0, 0, 1107, 1108, 1108, 1108, 1108, 1108, + 1108, 1108, 1108, 1108, 1108, 1124, 0, 0, 0, 0, + 0, 0, 0, 0, 1088, 1089, 0, 1089, 1089, 1089, + 1089, 1089, 1089, 1089, 1089, 1089, 1089, 0, 0, 0, + + 0, 0, 1108, 1109, 1109, 1109, 1109, 1109, 1109, 1109, + 1109, 1109, 1109, 1110, 1110, 1110, 1110, 1110, 1110, 1110, + 1110, 1110, 1110, 0, 1089, 1104, 0, 1104, 1104, 1104, + 1104, 1104, 1104, 1104, 1104, 1104, 1104, 0, 0, 0, + 1109, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, + 1111, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, + 1112, 0, 0, 0, 1104, 1105, 0, 1105, 1105, 1105, + 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1113, 1113, 1113, + 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1114, 1114, 1114, + 1114, 1114, 1114, 1114, 1114, 1114, 1114, 0, 0, 0, + + 0, 0, 0, 0, 1105, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1113, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1114, 1115, 1115, 1115, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1117, 1117, 1117, 1117, 1117, + 1117, 1117, 1117, 1117, 1117, 1120, 1120, 1120, 1120, 1120, + 1120, 1120, 1120, 1120, 1120, 0, 0, 0, 0, 0, + 0, 0, 1115, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1117, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 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, + 1123, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, + 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, + 1126, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, + 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, + 1128, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, + + 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, + 1130, 1131, 0, 0, 1131, 0, 0, 0, 0, 1131, + 0, 1131, 1131, 1131, 0, 0, 1131, 1131, 1131, 1131, + 1131, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, + 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, + 1132, 1133, 0, 0, 1133, 0, 0, 1133, 0, 1133, + 0, 1133, 1133, 1133, 1133, 0, 1133, 1133, 1133, 1133, + 1133, 1134, 0, 0, 1134, 0, 0, 0, 0, 1134, + 0, 1134, 1134, 1134, 0, 0, 1134, 1134, 1134, 1134, + 1134, 1135, 0, 0, 1135, 1135, 1135, 0, 1135, 1135, + + 0, 1135, 1135, 1135, 0, 0, 1135, 1135, 1135, 1135, + 1135, 1137, 0, 0, 1137, 1137, 1137, 0, 1137, 1137, + 0, 1137, 1137, 1137, 0, 0, 1137, 1137, 1137, 1137, + 1137, 1138, 0, 0, 1138, 1138, 1138, 0, 1138, 1138, + 0, 1138, 1138, 1138, 0, 1138, 1138, 0, 1138, 1138, + 1138, 1140, 0, 0, 1140, 1140, 0, 0, 1140, 1140, + 0, 1140, 1140, 1140, 1140, 0, 1140, 1140, 1140, 1140, + 1140, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, + 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, + 1141, 1142, 1142, 0, 1142, 1142, 0, 1142, 1142, 1142, + + 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, + 1142, 1143, 0, 0, 1143, 0, 0, 1143, 0, 1143, + 0, 1143, 1143, 1143, 1143, 0, 1143, 1143, 1143, 1143, + 1143, 1144, 0, 0, 1144, 0, 0, 0, 0, 1144, + 0, 1144, 1144, 1144, 0, 1144, 1144, 1144, 1144, 1144, + 1144, 1145, 0, 0, 1145, 1145, 1145, 0, 1145, 1145, + 0, 1145, 1145, 1145, 0, 1145, 1145, 1145, 1145, 1145, + 1145, 1146, 0, 0, 0, 1146, 1146, 1146, 1146, 1146, + 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, + 1146, 1147, 0, 0, 1147, 0, 0, 0, 0, 1147, + + 0, 1147, 1147, 1147, 0, 0, 1147, 1147, 1147, 1147, + 1147, 1148, 0, 0, 1148, 0, 0, 1148, 0, 1148, + 0, 1148, 1148, 1148, 1148, 0, 1148, 1148, 1148, 1148, + 1148, 1149, 0, 0, 1149, 0, 0, 0, 0, 1149, + 0, 1149, 1149, 1149, 0, 0, 1149, 1149, 1149, 1149, + 1149, 1150, 0, 0, 1150, 1150, 1150, 0, 1150, 1150, + 0, 1150, 1150, 1150, 0, 0, 1150, 1150, 1150, 1150, + 1150, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, + 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, + 1151, 1152, 1152, 0, 1152, 1152, 1152, 1152, 1152, 1152, + + 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, + 1152, 1153, 0, 0, 1153, 0, 0, 0, 0, 1153, + 0, 1153, 1153, 1153, 0, 0, 1153, 1153, 1153, 1153, + 1153, 1154, 0, 0, 1154, 0, 0, 0, 0, 1154, + 0, 1154, 1154, 1154, 0, 0, 1154, 1154, 1154, 1154, + 1154, 1155, 0, 0, 1155, 1155, 1155, 0, 1155, 1155, + 0, 1155, 1155, 1155, 0, 0, 1155, 1155, 1155, 1155, + 1155, 1156, 0, 0, 1156, 1156, 1156, 0, 1156, 1156, + 0, 1156, 1156, 1156, 0, 0, 1156, 1156, 1156, 1156, + 1156, 1159, 1159, 1159, 0, 0, 0, 0, 1159, 1160, + + 0, 0, 1160, 1160, 1160, 0, 1160, 1160, 0, 1160, + 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1161, + 0, 0, 1161, 1161, 1161, 0, 1161, 1161, 0, 1161, + 1161, 1161, 0, 0, 1161, 1161, 1161, 1161, 1161, 1162, + 0, 0, 1162, 1162, 1162, 0, 1162, 1162, 0, 1162, + 1162, 1162, 0, 1162, 1162, 0, 1162, 1162, 1162, 1164, + 0, 0, 1164, 1164, 0, 0, 1164, 1164, 0, 1164, + 1164, 1164, 1164, 0, 1164, 1164, 1164, 1164, 1164, 1165, + 1165, 0, 1165, 1165, 0, 1165, 1165, 1165, 1165, 1165, + 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1166, + + 0, 0, 1166, 0, 0, 0, 0, 1166, 0, 1166, + 1166, 1166, 0, 0, 1166, 1166, 1166, 1166, 1166, 1167, + 0, 0, 1167, 0, 0, 0, 0, 1167, 0, 1167, + 1167, 1167, 0, 1167, 1167, 1167, 1167, 1167, 1167, 1168, + 0, 0, 1168, 1168, 0, 1168, 1168, 0, 0, 1168, + 1168, 1169, 0, 0, 1169, 1169, 1169, 0, 1169, 1169, + 0, 1169, 1169, 1169, 0, 1169, 1169, 1169, 1169, 1169, + 1169, 1171, 0, 0, 0, 1171, 1171, 1171, 1171, 1171, + 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, + 1171, 1172, 0, 0, 1172, 0, 0, 0, 0, 1172, + + 0, 1172, 1172, 1172, 0, 0, 1172, 1172, 1172, 1172, + 1172, 1173, 0, 0, 1173, 0, 0, 0, 0, 1173, + 0, 1173, 1173, 1173, 0, 0, 1173, 1173, 1173, 1173, + 1173, 1174, 0, 0, 1174, 0, 0, 0, 0, 1174, + 0, 1174, 1174, 1174, 0, 0, 1174, 1174, 1174, 1174, + 1174, 1175, 0, 0, 1175, 1175, 1175, 0, 1175, 1175, + 0, 1175, 1175, 1175, 0, 0, 1175, 1175, 1175, 1175, + 1175, 1176, 0, 0, 1176, 1176, 1176, 0, 1176, 1176, + 0, 1176, 1176, 1176, 0, 0, 1176, 1176, 1176, 1176, + 1176, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1180, 1180, 1180, 0, 0, 0, 0, 1180, 1184, + 1184, 1184, 0, 0, 0, 0, 1184, 1185, 1185, 1185, + 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, + 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1190, 1190, 1190, + 0, 0, 0, 0, 1190, 1191, 1191, 1191, 1191, 0, + 0, 0, 0, 1191, 1195, 1195, 1195, 0, 0, 0, + 0, 1195, 1196, 1196, 1196, 1196, 0, 0, 0, 0, + + 1196, 1199, 1199, 1199, 0, 0, 0, 0, 1199, 1200, + 1200, 1200, 1200, 0, 0, 0, 0, 1200, 1201, 1201, + 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, + 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1203, 0, + 0, 1203, 1203, 0, 1203, 1203, 0, 0, 1203, 1203, + 1205, 0, 1205, 1205, 0, 0, 0, 0, 1205, 1206, + 1206, 1206, 0, 0, 0, 0, 1206, 1207, 1207, 1207, + 1207, 0, 0, 0, 0, 1207, 1208, 1208, 1208, 1208, + 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, + 1208, 1208, 1208, 1208, 1208, 1208, 1210, 0, 0, 1210, + + 1210, 0, 1210, 1210, 0, 0, 1210, 1210, 1211, 0, + 0, 1211, 0, 0, 0, 0, 1211, 0, 1211, 1211, + 1211, 0, 0, 1211, 1211, 1211, 1211, 1211, 1213, 0, + 1213, 1213, 0, 0, 0, 0, 1213, 1214, 1214, 1214, + 0, 0, 0, 0, 1214, 1215, 1215, 1215, 0, 0, + 0, 0, 0, 1215, 1216, 1216, 1216, 1216, 1216, 1216, + 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, + 1216, 1216, 1216, 1216, 1217, 1217, 0, 1217, 1217, 1217, + 1217, 0, 1217, 0, 1217, 1217, 1217, 0, 0, 1217, + 1217, 1217, 1217, 1217, 1218, 1218, 0, 1218, 1218, 1218, + + 1218, 0, 1218, 0, 1218, 1218, 1218, 0, 0, 1218, + 1218, 1218, 1218, 1218, 1220, 0, 1220, 1220, 0, 0, + 0, 0, 1220, 1223, 0, 1223, 1223, 0, 0, 0, + 0, 1223, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125 } ; static yy_state_type yy_last_accepting_state; @@ -2257,7 +2806,8 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; -#line 2255 "toke.c" + +#line 2805 "toke.c" #define INITIAL 0 #define GOTDEFS 1 @@ -2267,6 +2817,7 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; #define INSTR 5 #define WANTDIGEST 6 #define GOTINC 7 +#define EXPECTPATH 8 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way @@ -2476,9 +3027,9 @@ YY_DECL } { -#line 119 "toke.l" +#line 120 "toke.l" -#line 2476 "toke.c" +#line 3027 "toke.c" while ( 1 ) /* loops until end-of-file is reached */ { @@ -2506,13 +3057,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 916 ) + if ( yy_current_state >= 1126 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6090 ); + while ( yy_base[yy_current_state] != 8253 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -2538,7 +3089,7 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 120 "toke.l" +#line 121 "toke.l" { LEXTRACE(", "); LEXRETURN(','); @@ -2546,12 +3097,12 @@ YY_RULE_SETUP YY_BREAK case 2: YY_RULE_SETUP -#line 125 "toke.l" +#line 126 "toke.l" BEGIN STARTDEFS; YY_BREAK case 3: YY_RULE_SETUP -#line 127 "toke.l" +#line 128 "toke.l" { BEGIN INDEFS; LEXTRACE("DEFVAR "); @@ -2563,7 +3114,7 @@ YY_RULE_SETUP case 4: YY_RULE_SETUP -#line 136 "toke.l" +#line 137 "toke.l" { BEGIN STARTDEFS; LEXTRACE(", "); @@ -2572,7 +3123,7 @@ YY_RULE_SETUP YY_BREAK case 5: YY_RULE_SETUP -#line 142 "toke.l" +#line 143 "toke.l" { LEXTRACE("= "); LEXRETURN('='); @@ -2580,7 +3131,7 @@ YY_RULE_SETUP YY_BREAK case 6: YY_RULE_SETUP -#line 147 "toke.l" +#line 148 "toke.l" { LEXTRACE("+= "); LEXRETURN('+'); @@ -2588,7 +3139,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 152 "toke.l" +#line 153 "toke.l" { LEXTRACE("-= "); LEXRETURN('-'); @@ -2596,7 +3147,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 157 "toke.l" +#line 158 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -2606,7 +3157,7 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 164 "toke.l" +#line 165 "toke.l" { LEXTRACE("WORD(2) "); if (!fill(sudoerstext, sudoersleng)) @@ -2619,7 +3170,7 @@ YY_RULE_SETUP case 10: /* rule 10 can match eol */ YY_RULE_SETUP -#line 173 "toke.l" +#line 174 "toke.l" { /* Line continuation char followed by newline. */ sudolineno++; @@ -2628,7 +3179,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 179 "toke.l" +#line 180 "toke.l" { LEXTRACE("ENDSTR "); BEGIN prev_state; @@ -2666,7 +3217,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 214 "toke.l" +#line 215 "toke.l" { LEXTRACE("BACKSLASH "); if (!append(sudoerstext, sudoersleng)) @@ -2675,7 +3226,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 220 "toke.l" +#line 221 "toke.l" { LEXTRACE("STRBODY "); if (!append(sudoerstext, sudoersleng)) @@ -2686,7 +3237,7 @@ YY_RULE_SETUP case 14: YY_RULE_SETUP -#line 228 "toke.l" +#line 229 "toke.l" { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); @@ -2697,7 +3248,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 236 "toke.l" +#line 237 "toke.l" { /* quoted sudoers special char, strip backslash */ LEXTRACE("QUOTEDCHAR "); @@ -2709,7 +3260,7 @@ YY_RULE_SETUP case 16: /* rule 16 can match eol */ YY_RULE_SETUP -#line 244 "toke.l" +#line 245 "toke.l" { BEGIN INITIAL; sudoersless(0); @@ -2719,7 +3270,7 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 251 "toke.l" +#line 252 "toke.l" { LEXTRACE("ARG "); if (!fill_args(sudoerstext, sudoersleng, sawspace)) @@ -2730,7 +3281,7 @@ YY_RULE_SETUP case 18: YY_RULE_SETUP -#line 259 "toke.l" +#line 260 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t digest_len = @@ -2748,7 +3299,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 274 "toke.l" +#line 275 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t len, digest_len = @@ -2773,7 +3324,7 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 296 "toke.l" +#line 297 "toke.l" { if (continued) { sudoerserror("invalid line continuation"); @@ -2788,7 +3339,7 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 308 "toke.l" +#line 309 "toke.l" { if (continued) { sudoerserror("invalid line continuation"); @@ -2804,7 +3355,7 @@ YY_RULE_SETUP case 22: /* rule 22 can match eol */ YY_RULE_SETUP -#line 320 "toke.l" +#line 321 "toke.l" { if (continued) { sudoerserror("invalid line continuation"); @@ -2824,7 +3375,7 @@ YY_RULE_SETUP case 23: /* rule 23 can match eol */ YY_RULE_SETUP -#line 336 "toke.l" +#line 337 "toke.l" { if (continued) { sudoerserror("invalid line continuation"); @@ -2843,7 +3394,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 352 "toke.l" +#line 353 "toke.l" { char deftype; int n; @@ -2887,7 +3438,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 393 "toke.l" +#line 394 "toke.l" { int n; @@ -2917,7 +3468,7 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 420 "toke.l" +#line 421 "toke.l" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); @@ -2926,7 +3477,7 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 426 "toke.l" +#line 427 "toke.l" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); @@ -2935,7 +3486,7 @@ YY_RULE_SETUP YY_BREAK case 28: YY_RULE_SETUP -#line 432 "toke.l" +#line 433 "toke.l" { LEXTRACE("NOEXEC "); LEXRETURN(NOEXEC); @@ -2943,7 +3494,7 @@ YY_RULE_SETUP YY_BREAK case 29: YY_RULE_SETUP -#line 437 "toke.l" +#line 438 "toke.l" { LEXTRACE("EXEC "); LEXRETURN(EXEC); @@ -2951,7 +3502,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 442 "toke.l" +#line 443 "toke.l" { LEXTRACE("SETENV "); LEXRETURN(SETENV); @@ -2959,7 +3510,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 447 "toke.l" +#line 448 "toke.l" { LEXTRACE("NOSETENV "); LEXRETURN(NOSETENV); @@ -2967,7 +3518,7 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 452 "toke.l" +#line 453 "toke.l" { LEXTRACE("LOG_OUTPUT "); LEXRETURN(LOG_OUTPUT); @@ -2975,7 +3526,7 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 457 "toke.l" +#line 458 "toke.l" { LEXTRACE("NOLOG_OUTPUT "); LEXRETURN(NOLOG_OUTPUT); @@ -2983,7 +3534,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 462 "toke.l" +#line 463 "toke.l" { LEXTRACE("LOG_INPUT "); LEXRETURN(LOG_INPUT); @@ -2991,7 +3542,7 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 467 "toke.l" +#line 468 "toke.l" { LEXTRACE("NOLOG_INPUT "); LEXRETURN(NOLOG_INPUT); @@ -2999,7 +3550,7 @@ YY_RULE_SETUP YY_BREAK case 36: YY_RULE_SETUP -#line 472 "toke.l" +#line 473 "toke.l" { LEXTRACE("MAIL "); LEXRETURN(MAIL); @@ -3007,7 +3558,7 @@ YY_RULE_SETUP YY_BREAK case 37: YY_RULE_SETUP -#line 477 "toke.l" +#line 478 "toke.l" { LEXTRACE("NOMAIL "); LEXRETURN(NOMAIL); @@ -3015,7 +3566,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 482 "toke.l" +#line 483 "toke.l" { LEXTRACE("FOLLOW "); LEXRETURN(FOLLOWLNK); @@ -3023,7 +3574,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 487 "toke.l" +#line 488 "toke.l" { LEXTRACE("NOFOLLOW "); LEXRETURN(NOFOLLOWLNK); @@ -3031,7 +3582,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 492 "toke.l" +#line 493 "toke.l" { if (sudoerstext[0] == '+') sudoerserror("empty netgroup"); @@ -3043,7 +3594,7 @@ YY_RULE_SETUP YY_BREAK case 41: YY_RULE_SETUP -#line 501 "toke.l" +#line 502 "toke.l" { /* netgroup */ if (!fill(sudoerstext, sudoersleng)) @@ -3054,7 +3605,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 509 "toke.l" +#line 510 "toke.l" { /* group */ if (!fill(sudoerstext, sudoersleng)) @@ -3065,7 +3616,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 517 "toke.l" +#line 518 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3075,7 +3626,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 524 "toke.l" +#line 525 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3085,7 +3636,7 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 531 "toke.l" +#line 532 "toke.l" { if (!ipv6_valid(sudoerstext)) { sudoerserror("invalid IPv6 address"); @@ -3100,7 +3651,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 543 "toke.l" +#line 544 "toke.l" { if (!ipv6_valid(sudoerstext)) { sudoerserror("invalid IPv6 address"); @@ -3115,7 +3666,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 555 "toke.l" +#line 556 "toke.l" { LEXTRACE("ALL "); LEXRETURN(ALL); @@ -3124,7 +3675,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 561 "toke.l" +#line 562 "toke.l" { LEXTRACE("CMND_TIMEOUT "); LEXRETURN(CMND_TIMEOUT); @@ -3132,7 +3683,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 566 "toke.l" +#line 567 "toke.l" { LEXTRACE("NOTBEFORE "); LEXRETURN(NOTBEFORE); @@ -3140,7 +3691,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 571 "toke.l" +#line 572 "toke.l" { LEXTRACE("NOTAFTER "); LEXRETURN(NOTAFTER); @@ -3148,7 +3699,27 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 576 "toke.l" +#line 577 "toke.l" +{ + LEXTRACE("CWD "); + prev_state = YY_START; + BEGIN EXPECTPATH; + LEXRETURN(CWD); + } + YY_BREAK +case 52: +YY_RULE_SETUP +#line 584 "toke.l" +{ + LEXTRACE("CHROOT "); + prev_state = YY_START; + BEGIN EXPECTPATH; + LEXRETURN(CHROOT); + } + YY_BREAK +case 53: +YY_RULE_SETUP +#line 591 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -3158,9 +3729,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 52: +case 54: YY_RULE_SETUP -#line 585 "toke.l" +#line 600 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("TYPE "); @@ -3170,9 +3741,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 53: +case 55: YY_RULE_SETUP -#line 593 "toke.l" +#line 608 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("PRIVS "); @@ -3182,9 +3753,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 54: +case 56: YY_RULE_SETUP -#line 602 "toke.l" +#line 617 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("LIMITPRIVS "); @@ -3194,9 +3765,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 55: +case 57: YY_RULE_SETUP -#line 611 "toke.l" +#line 626 "toke.l" { got_alias: if (!fill(sudoerstext, sudoersleng)) @@ -3205,9 +3776,9 @@ YY_RULE_SETUP LEXRETURN(ALIAS); } YY_BREAK -case 56: +case 58: YY_RULE_SETUP -#line 619 "toke.l" +#line 634 "toke.l" { /* XXX - no way to specify digest for command */ /* no command args allowed for Defaults!/path */ @@ -3217,9 +3788,9 @@ YY_RULE_SETUP LEXRETURN(COMMAND); } YY_BREAK -case 57: +case 59: YY_RULE_SETUP -#line 628 "toke.l" +#line 643 "toke.l" { digest_type = SUDO_DIGEST_SHA224; BEGIN WANTDIGEST; @@ -3227,9 +3798,9 @@ YY_RULE_SETUP LEXRETURN(SHA224_TOK); } YY_BREAK -case 58: +case 60: YY_RULE_SETUP -#line 635 "toke.l" +#line 650 "toke.l" { digest_type = SUDO_DIGEST_SHA256; BEGIN WANTDIGEST; @@ -3237,9 +3808,9 @@ YY_RULE_SETUP LEXRETURN(SHA256_TOK); } YY_BREAK -case 59: +case 61: YY_RULE_SETUP -#line 642 "toke.l" +#line 657 "toke.l" { digest_type = SUDO_DIGEST_SHA384; BEGIN WANTDIGEST; @@ -3247,9 +3818,9 @@ YY_RULE_SETUP LEXRETURN(SHA384_TOK); } YY_BREAK -case 60: +case 62: YY_RULE_SETUP -#line 649 "toke.l" +#line 664 "toke.l" { digest_type = SUDO_DIGEST_SHA512; BEGIN WANTDIGEST; @@ -3257,9 +3828,9 @@ YY_RULE_SETUP LEXRETURN(SHA512_TOK); } YY_BREAK -case 61: +case 63: YY_RULE_SETUP -#line 656 "toke.l" +#line 671 "toke.l" { BEGIN GOTCMND; LEXTRACE("COMMAND "); @@ -3267,9 +3838,20 @@ YY_RULE_SETUP yyterminate(); } /* sudo -e */ YY_BREAK -case 62: +case 64: YY_RULE_SETUP -#line 663 "toke.l" +#line 678 "toke.l" +{ + BEGIN prev_state; + if (!fill(sudoerstext, sudoersleng)) + yyterminate(); + LEXTRACE("WORD(5) "); + LEXRETURN(WORD); + } + YY_BREAK +case 65: +YY_RULE_SETUP +#line 686 "toke.l" { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -3277,17 +3859,16 @@ YY_RULE_SETUP if (!fill_cmnd(sudoerstext, sudoersleng)) yyterminate(); LEXRETURN(COMMAND); - } else { - BEGIN GOTCMND; - LEXTRACE("COMMAND "); - if (!fill_cmnd(sudoerstext, sudoersleng)) - yyterminate(); } + BEGIN GOTCMND; + LEXTRACE("COMMAND "); + if (!fill_cmnd(sudoerstext, sudoersleng)) + yyterminate(); } /* a pathname */ YY_BREAK -case 63: +case 66: YY_RULE_SETUP -#line 678 "toke.l" +#line 700 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3295,33 +3876,33 @@ YY_RULE_SETUP BEGIN INSTR; } YY_BREAK -case 64: +case 67: YY_RULE_SETUP -#line 685 "toke.l" +#line 707 "toke.l" { /* a word */ if (!fill(sudoerstext, sudoersleng)) yyterminate(); - LEXTRACE("WORD(5) "); + LEXTRACE("WORD(6) "); LEXRETURN(WORD); } YY_BREAK -case 65: +case 68: YY_RULE_SETUP -#line 694 "toke.l" +#line 716 "toke.l" { /* include file/directory */ if (!fill(sudoerstext, sudoersleng)) yyterminate(); BEGIN INITIAL; - LEXTRACE("WORD(6) "); + LEXTRACE("WORD(7) "); LEXRETURN(WORD); } YY_BREAK -case 66: +case 69: YY_RULE_SETUP -#line 703 "toke.l" +#line 725 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3330,49 +3911,49 @@ YY_RULE_SETUP } YY_BREAK -case 67: +case 70: YY_RULE_SETUP -#line 711 "toke.l" +#line 733 "toke.l" { LEXTRACE("( "); LEXRETURN('('); } YY_BREAK -case 68: +case 71: YY_RULE_SETUP -#line 716 "toke.l" +#line 738 "toke.l" { LEXTRACE(") "); LEXRETURN(')'); } YY_BREAK -case 69: +case 72: YY_RULE_SETUP -#line 721 "toke.l" +#line 743 "toke.l" { LEXTRACE(", "); LEXRETURN(','); } /* return ',' */ YY_BREAK -case 70: +case 73: YY_RULE_SETUP -#line 726 "toke.l" +#line 748 "toke.l" { LEXTRACE("= "); LEXRETURN('='); } /* return '=' */ YY_BREAK -case 71: +case 74: YY_RULE_SETUP -#line 731 "toke.l" +#line 753 "toke.l" { LEXTRACE(": "); LEXRETURN(':'); } /* return ':' */ YY_BREAK -case 72: +case 75: YY_RULE_SETUP -#line 736 "toke.l" +#line 758 "toke.l" { if (sudoersleng & 1) { LEXTRACE("!"); @@ -3380,10 +3961,10 @@ YY_RULE_SETUP } } YY_BREAK -case 73: -/* rule 73 can match eol */ +case 76: +/* rule 76 can match eol */ YY_RULE_SETUP -#line 743 "toke.l" +#line 765 "toke.l" { if (YY_START == INSTR) { sudoerserror("unexpected line break in string"); @@ -3397,27 +3978,27 @@ YY_RULE_SETUP LEXRETURN('\n'); } /* return newline */ YY_BREAK -case 74: +case 77: YY_RULE_SETUP -#line 756 "toke.l" +#line 778 "toke.l" { /* throw away space/tabs */ sawspace = true; /* but remember for fill_args */ } YY_BREAK -case 75: -/* rule 75 can match eol */ +case 78: +/* rule 78 can match eol */ YY_RULE_SETUP -#line 760 "toke.l" +#line 782 "toke.l" { sawspace = true; /* remember for fill_args */ sudolineno++; continued = true; } /* throw away EOL after \ */ YY_BREAK -case 76: -/* rule 76 can match eol */ +case 79: +/* rule 79 can match eol */ YY_RULE_SETUP -#line 766 "toke.l" +#line 788 "toke.l" { if (sudoerstext[sudoersleng - 1] == '\n') { /* comment ending in a newline */ @@ -3433,9 +4014,9 @@ YY_RULE_SETUP LEXRETURN('\n'); } /* comment, not uid/gid */ YY_BREAK -case 77: +case 80: YY_RULE_SETUP -#line 781 "toke.l" +#line 803 "toke.l" { LEXTRACE("NOMATCH "); LEXRETURN(NOMATCH); @@ -3449,7 +4030,8 @@ case YY_STATE_EOF(INDEFS): case YY_STATE_EOF(INSTR): case YY_STATE_EOF(WANTDIGEST): case YY_STATE_EOF(GOTINC): -#line 786 "toke.l" +case YY_STATE_EOF(EXPECTPATH): +#line 808 "toke.l" { if (YY_START != INITIAL) { BEGIN INITIAL; @@ -3461,12 +4043,12 @@ case YY_STATE_EOF(GOTINC): yyterminate(); } YY_BREAK -case 78: +case 81: YY_RULE_SETUP -#line 797 "toke.l" +#line 819 "toke.l" ECHO; YY_BREAK -#line 3464 "toke.c" +#line 4046 "toke.c" case YY_END_OF_BUFFER: { @@ -3760,7 +4342,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 916 ) + if ( yy_current_state >= 1126 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -3788,11 +4370,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 916 ) + if ( yy_current_state >= 1126 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 915); + yy_is_jam = (yy_current_state == 1125); return yy_is_jam ? 0 : yy_current_state; } @@ -4427,7 +5009,7 @@ void sudoersfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 797 "toke.l" +#line 819 "toke.l" struct path_list { diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index f680dd118..bd266b323 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -115,6 +115,7 @@ DEFVAR [a-z_]+ %x INSTR %s WANTDIGEST %x GOTINC +%s EXPECTPATH %% [[:blank:]]*,[[:blank:]]* { @@ -573,6 +574,20 @@ ALL { LEXRETURN(NOTAFTER); } +CWD { + LEXTRACE("CWD "); + prev_state = YY_START; + BEGIN EXPECTPATH; + LEXRETURN(CWD); + } + +CHROOT { + LEXTRACE("CHROOT "); + prev_state = YY_START; + BEGIN EXPECTPATH; + LEXRETURN(CHROOT); + } + ROLE { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -660,6 +675,14 @@ sudoedit { yyterminate(); } /* sudo -e */ +({PATH}|{WORD}) { + BEGIN prev_state; + if (!fill(sudoerstext, sudoersleng)) + yyterminate(); + LEXTRACE("WORD(5) "); + LEXRETURN(WORD); + } + {PATH} { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -667,12 +690,11 @@ sudoedit { if (!fill_cmnd(sudoerstext, sudoersleng)) yyterminate(); LEXRETURN(COMMAND); - } else { - BEGIN GOTCMND; - LEXTRACE("COMMAND "); - if (!fill_cmnd(sudoerstext, sudoersleng)) - yyterminate(); } + BEGIN GOTCMND; + LEXTRACE("COMMAND "); + if (!fill_cmnd(sudoerstext, sudoersleng)) + yyterminate(); } /* a pathname */ \" { @@ -686,7 +708,7 @@ sudoedit { /* a word */ if (!fill(sudoerstext, sudoersleng)) yyterminate(); - LEXTRACE("WORD(5) "); + LEXTRACE("WORD(6) "); LEXRETURN(WORD); } @@ -696,7 +718,7 @@ sudoedit { if (!fill(sudoerstext, sudoersleng)) yyterminate(); BEGIN INITIAL; - LEXTRACE("WORD(6) "); + LEXTRACE("WORD(7) "); LEXRETURN(WORD); }