diff -up sudo-1.8.6p7/config.h.in.digest-backport sudo-1.8.6p7/config.h.in
--- sudo-1.8.6p7/config.h.in.digest-backport 2013-02-25 20:46:09.000000000 +0100
+++ sudo-1.8.6p7/config.h.in 2015-07-06 11:42:35.000000000 +0200
@@ -164,6 +164,9 @@
/* Define to 1 if you use the FWTK authsrv daemon. */
#undef HAVE_FWTK
+/* Define to 1 if you have the `gcry_md_open' function. */
+#undef HAVE_GCRY_MD_OPEN
+
/* Define to 1 if you have the `getaddrinfo' function. */
#undef HAVE_GETADDRINFO
@@ -331,6 +334,9 @@
/* Define to 1 if you have the `ldap_unbind_ext_s' function. */
#undef HAVE_LDAP_UNBIND_EXT_S
+/* Define to 1 to enable libgcrypt support. */
+#undef HAVE_LIBGCRYPT
+
/* Define to 1 if you have the <libintl.h> header file. */
#undef HAVE_LIBINTL_H
@@ -676,6 +682,9 @@
/* Define to 1 if you have the `unsetenv' function. */
#undef HAVE_UNSETENV
+/* Define to 1 if the system has the type `unsigned long long int'. */
+#undef HAVE_UNSIGNED_LONG_LONG_INT
+
/* Define to 1 if you have the <util.h> header file. */
#undef HAVE_UTIL_H
@@ -901,6 +910,11 @@
/* Define to avoid using the passwd/shadow file for authentication. */
#undef WITHOUT_PASSWD
+/* Enable large inode numbers on Mac OS X 10.5. */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
/* Number of bits in a file offset, on hosts where this is settable. */
#undef _FILE_OFFSET_BITS
@@ -945,6 +959,15 @@
/* Define to `int' if <sys/types.h> doesn't define. */
#undef uid_t
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef uint32_t
+
+/* Define to `unsigned long long' if <sys/types.h> does not define. */
+#undef uint64_t
+
+/* Define to `unsigned char' if <sys/types.h> does not define. */
+#undef uint8_t
+
/* Define to empty if the keyword `volatile' does not work. Warning: valid
code using `volatile' can become incorrect without. Disable with care. */
#undef volatile
diff -up sudo-1.8.6p7/configure.in.digest-backport sudo-1.8.6p7/configure.in
--- sudo-1.8.6p7/configure.in.digest-backport 2015-07-06 11:42:33.124904862 +0200
+++ sudo-1.8.6p7/configure.in 2015-07-06 11:42:33.129904786 +0200
@@ -31,6 +31,7 @@ AC_SUBST([SUDO_OBJS])
AC_SUBST([LIBS])
AC_SUBST([SUDO_LIBS])
AC_SUBST([SUDOERS_LIBS])
+AC_SUBST([LIBPARSESUDOERS_LIBS])
AC_SUBST([NET_LIBS])
AC_SUBST([AFS_LIBS])
AC_SUBST([REPLAY_LIBS])
@@ -1404,6 +1405,19 @@ AC_ARG_WITH(selinux, [AS_HELP_STRING([--
;;
esac])
+AC_ARG_WITH(gcrypt, [AS_HELP_STRING([--with-gcrypt], [enable libgcrypt support])],
+[case $with_gcrypt in
+ yes)
+ AC_DEFINE(HAVE_LIBGCRYPT)
+ LIBPARSESUDOERS_LIBS="${LIBPARSESUDOERS_LIBS} -lgcrypt"
+ AC_CHECK_LIB([gcrypt], [gcry_md_open],
+ [AC_DEFINE(HAVE_GCRY_MD_OPEN)])
+ ;;
+ no) ;;
+ *) AC_MSG_ERROR(["--with-gcrypt does not take an argument."])
+ ;;
+esac])
+
dnl
dnl gss_krb5_ccache_name() may not work on Heimdal so we don't use it by default
dnl
@@ -2152,6 +2166,9 @@ AC_CHECK_TYPE(size_t, unsigned int)
AC_CHECK_TYPE(ssize_t, int)
AC_CHECK_TYPE(dev_t, int)
AC_CHECK_TYPE(ino_t, unsigned int)
+AC_CHECK_TYPE(uint8_t, unsigned char)
+AC_CHECK_TYPE(uint32_t, unsigned int)
+AC_CHECK_TYPE(uint64_t, unsigned long long)
AC_CHECK_TYPE(socklen_t, [], [AC_DEFINE(socklen_t, unsigned int)], [
AC_INCLUDES_DEFAULT
#include <sys/socket.h>])
@@ -3625,6 +3642,8 @@ AH_TEMPLATE(HAVE_PROJECT_H, [Define to 1
AH_TEMPLATE(HAVE_SECURID, [Define to 1 if you use SecurID for authentication.])
AH_TEMPLATE(HAVE_SELINUX, [Define to 1 to enable SELinux RBAC support.])
AH_TEMPLATE(HAVE_SETKEYCREATECON, [Define to 1 if you have the `setkeycreatecon' function.])
+AH_TEMPLATE(HAVE_LIBGCRYPT, [Define to 1 to enable libgcrypt support.])
+AH_TEMPLATE(HAVE_GCRY_MD_OPEN, [Define to 1 if you have the `gcry_md_open' function.])
AH_TEMPLATE(HAVE_SHL_LOAD, [Define to 1 if you have the `shl_load' function.])
AH_TEMPLATE(HAVE_SKEY, [Define to 1 if you use S/Key.])
AH_TEMPLATE(HAVE_SKEYACCESS, [Define to 1 if your S/Key library has skeyaccess().])
diff -up sudo-1.8.6p7/MANIFEST.digest-backport sudo-1.8.6p7/MANIFEST
--- sudo-1.8.6p7/MANIFEST.digest-backport 2015-07-06 11:42:33.103905177 +0200
+++ sudo-1.8.6p7/MANIFEST 2015-07-06 11:42:33.129904786 +0200
@@ -171,6 +171,7 @@ plugins/sudoers/gram.c
plugins/sudoers/gram.h
plugins/sudoers/gram.y
plugins/sudoers/group_plugin.c
+plugins/sudoers/hexchar.c
plugins/sudoers/ins_2001.h
plugins/sudoers/ins_classic.h
plugins/sudoers/ins_csops.h
diff -up sudo-1.8.6p7/plugins/sudoers/filedigest.c.digest-backport sudo-1.8.6p7/plugins/sudoers/filedigest.c
--- sudo-1.8.6p7/plugins/sudoers/filedigest.c.digest-backport 2015-07-06 11:42:33.129904786 +0200
+++ sudo-1.8.6p7/plugins/sudoers/filedigest.c 2015-07-06 11:42:33.129904786 +0200
@@ -0,0 +1,105 @@
+#include <config.h>
+#include <errno.h>
+#include <stddef.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include "filedigest.h"
+#include "missing.h"
+#include "sudo_debug.h"
+#include "alloc.h"
+
+#if defined(HAVE_LIBGCRYPT)
+#include <gcrypt.h>
+
+static int sudo_filedigest_gcrypt(int fd, int algo, unsigned char **dvalue, size_t *dvalue_size)
+{
+ char buffer[4096];
+ gcry_md_hd_t ctx;
+ int gcry_algo;
+ debug_decl(sudo_filedigest_gcrypt, SUDO_DEBUG_UTIL);
+
+ switch(algo) {
+ case SUDO_DIGEST_SHA224:
+ gcry_algo = GCRY_MD_SHA224; break;
+ case SUDO_DIGEST_SHA256:
+ gcry_algo = GCRY_MD_SHA256; break;
+ case SUDO_DIGEST_SHA384:
+ gcry_algo = GCRY_MD_SHA384; break;
+ case SUDO_DIGEST_SHA512:
+ gcry_algo = GCRY_MD_SHA512; break;
+ default:
+ debug_return_int(-1);
+ }
+
+ gcry_md_open(&ctx, gcry_algo, 0);
+
+ /* Read block of data from fd and digest them */
+ while (1) {
+ const ssize_t read_bytes = read(fd, buffer, sizeof buffer);
+
+ if (read_bytes < 0) {
+ /* Error */
+ gcry_md_close(ctx);
+ debug_return_int(-1);
+ }
+ else if (read_bytes > 0) {
+ /* Some data read -- update the digest */
+ gcry_md_write(ctx, buffer, (size_t)read_bytes);
+ }
+ else {
+ /* EOF */
+ break;
+ }
+ }
+
+ /*
+ * All data digested. Finalize the digest value.
+ */
+ const unsigned char *value = gcry_md_read(ctx, gcry_algo);
+
+ if (value == NULL) {
+ debug_return_int(-1);
+ }
+
+ /*
+ * Make a copy of the digest value. The pointer
+ * returned from gcry_md_read cannot be used after
+ * gcry_md_close was called
+ */
+ (*dvalue_size) = gcry_md_get_algo_dlen(gcry_algo);
+ (*dvalue) = emalloc(*dvalue_size);
+
+ if (*dvalue == NULL) {
+ debug_return_int(-1);
+ }
+
+ memcpy(*dvalue, value, *dvalue_size);
+ gcry_md_close(ctx);
+
+ debug_return_int(0);
+}
+#endif
+
+#include <stdio.h>
+
+int sudo_filedigest(const char *path, int algo, unsigned char **dvalue, size_t *dvalue_size)
+{
+ int rc = -1;
+ int fd = -1;
+ debug_decl(sudo_filedigest, SUDO_DEBUG_UTIL);
+
+ if ((fd = open(path, O_RDONLY)) < 0) {
+ debug_return_int(rc);
+ }
+
+#if defined(HAVE_LIBGCRYPT)
+ rc = sudo_filedigest_gcrypt(fd, algo, dvalue, dvalue_size);
+ close(fd);
+#else
+ rc = -1;
+ errno = ENOTSUP;
+#endif
+ debug_return_int(rc);
+}
diff -up sudo-1.8.6p7/plugins/sudoers/filedigest.h.digest-backport sudo-1.8.6p7/plugins/sudoers/filedigest.h
--- sudo-1.8.6p7/plugins/sudoers/filedigest.h.digest-backport 2015-07-06 11:42:33.129904786 +0200
+++ sudo-1.8.6p7/plugins/sudoers/filedigest.h 2015-07-06 12:03:03.006422923 +0200
@@ -0,0 +1,17 @@
+#include <stddef.h>
+
+#define SUDO_DIGEST_INVALID -1
+#define SUDO_DIGEST_SHA224 0
+#define SUDO_DIGEST_SHA256 1
+#define SUDO_DIGEST_SHA384 2
+#define SUDO_DIGEST_SHA512 3
+
+#define SUDO_SHA224_DIGEST_LENGTH 28
+#define SUDO_SHA256_DIGEST_LENGTH 32
+#define SUDO_SHA384_DIGEST_LENGTH 48
+#define SUDO_SHA512_DIGEST_LENGTH 64
+
+/*
+ * Compute a digest of a given file. Returns 0 on success, -1 otherwise.
+ */
+int sudo_filedigest(const char *path, int algo, unsigned char **dvalue, size_t *dvalue_size);
diff -up sudo-1.8.6p7/plugins/sudoers/gram.c.digest-backport sudo-1.8.6p7/plugins/sudoers/gram.c
--- sudo-1.8.6p7/plugins/sudoers/gram.c.digest-backport 2013-02-25 20:42:44.000000000 +0100
+++ sudo-1.8.6p7/plugins/sudoers/gram.c 2015-07-06 11:42:33.131904756 +0200
@@ -1,16 +1,71 @@
#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#define YYBYACC 1
-#define YYMAJOR 1
-#define YYMINOR 9
-#define YYLEX yylex()
-#define YYEMPTY -1
-#define yyclearin (yychar=(YYEMPTY))
-#define yyerrok (yyerrflag=0)
-#define YYRECOVERING() (yyerrflag!=0)
-#define YYPREFIX "yy"
-#line 2 "gram.y"
+/* A Bison parser, made by GNU Bison 2.7. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.7"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+
+
+
+/* Copy the first part of user declarations. */
+/* Line 371 of yacc.c */
+#line 1 "gram.y"
+
/*
* Copyright (c) 1996, 1998-2005, 2007-2012
* Todd C. Miller <Todd.Miller@courtesan.com>
@@ -103,6 +158,8 @@ static void add_defaults(int, struct me
static void add_userspec(struct member *, struct privilege *);
static struct defaults *new_default(char *, char *, int);
static struct member *new_member(char *, int);
+static struct sudo_digest *new_digest(int, const char *);
+
void yyerror(const char *);
void
@@ -129,1661 +186,2863 @@ yyerror(const char *s)
parse_error = true;
debug_return;
}
-#line 122 "gram.y"
-#ifndef YYSTYPE_DEFINED
-#define YYSTYPE_DEFINED
-typedef union {
+
+/* Line 371 of yacc.c */
+#line 191 "gram.c"
+
+# ifndef YY_NULL
+# if defined __cplusplus && 201103L <= __cplusplus
+# define YY_NULL nullptr
+# else
+# define YY_NULL 0
+# endif
+# endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* In a future release of Bison, this section will be replaced
+ by #include "y.tab.h". */
+#ifndef YY_YY_Y_TAB_H_INCLUDED
+# define YY_YY_Y_TAB_H_INCLUDED
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ COMMAND = 258,
+ ALIAS = 259,
+ DEFVAR = 260,
+ NTWKADDR = 261,
+ NETGROUP = 262,
+ USERGROUP = 263,
+ WORD = 264,
+ DIGEST = 265,
+ DEFAULTS = 266,
+ DEFAULTS_HOST = 267,
+ DEFAULTS_USER = 268,
+ DEFAULTS_RUNAS = 269,
+ DEFAULTS_CMND = 270,
+ NOPASSWD = 271,
+ PASSWD = 272,
+ NOEXEC = 273,
+ EXEC = 274,
+ SETENV = 275,
+ NOSETENV = 276,
+ LOG_INPUT = 277,
+ NOLOG_INPUT = 278,
+ LOG_OUTPUT = 279,
+ NOLOG_OUTPUT = 280,
+ ALL = 281,
+ COMMENT = 282,
+ HOSTALIAS = 283,
+ CMNDALIAS = 284,
+ USERALIAS = 285,
+ RUNASALIAS = 286,
+ ERROR = 287,
+ TYPE = 288,
+ ROLE = 289,
+ PRIVS = 290,
+ LIMITPRIVS = 291,
+ MYSELF = 292,
+ SHA224 = 293,
+ SHA256 = 294,
+ SHA384 = 295,
+ SHA512 = 296
+ };
+#endif
+/* Tokens. */
+#define COMMAND 258
+#define ALIAS 259
+#define DEFVAR 260
+#define NTWKADDR 261
+#define NETGROUP 262
+#define USERGROUP 263
+#define WORD 264
+#define DIGEST 265
+#define DEFAULTS 266
+#define DEFAULTS_HOST 267
+#define DEFAULTS_USER 268
+#define DEFAULTS_RUNAS 269
+#define DEFAULTS_CMND 270
+#define NOPASSWD 271
+#define PASSWD 272
+#define NOEXEC 273
+#define EXEC 274
+#define SETENV 275
+#define NOSETENV 276
+#define LOG_INPUT 277
+#define NOLOG_INPUT 278
+#define LOG_OUTPUT 279
+#define NOLOG_OUTPUT 280
+#define ALL 281
+#define COMMENT 282
+#define HOSTALIAS 283
+#define CMNDALIAS 284
+#define USERALIAS 285
+#define RUNASALIAS 286
+#define ERROR 287
+#define TYPE 288
+#define ROLE 289
+#define PRIVS 290
+#define LIMITPRIVS 291
+#define MYSELF 292
+#define SHA224 293
+#define SHA256 294
+#define SHA384 295
+#define SHA512 296
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+/* Line 387 of yacc.c */
+#line 124 "gram.y"
+
struct cmndspec *cmndspec;
struct defaults *defaults;
struct member *member;
struct runascontainer *runas;
struct privilege *privilege;
+ struct sudo_digest *digest;
struct sudo_command command;
struct cmndtag tag;
struct selinux_info seinfo;
struct solaris_privs_info privinfo;
char *string;
int tok;
+
+
+/* Line 387 of yacc.c */
+#line 332 "gram.c"
} YYSTYPE;
-#endif /* YYSTYPE_DEFINED */
-#line 149 "gram.c"
-#define COMMAND 257
-#define ALIAS 258
-#define DEFVAR 259
-#define NTWKADDR 260
-#define NETGROUP 261
-#define USERGROUP 262
-#define WORD 263
-#define DEFAULTS 264
-#define DEFAULTS_HOST 265
-#define DEFAULTS_USER 266
-#define DEFAULTS_RUNAS 267
-#define DEFAULTS_CMND 268
-#define NOPASSWD 269
-#define PASSWD 270
-#define NOEXEC 271
-#define EXEC 272
-#define SETENV 273
-#define NOSETENV 274
-#define LOG_INPUT 275
-#define NOLOG_INPUT 276
-#define LOG_OUTPUT 277
-#define NOLOG_OUTPUT 278
-#define ALL 279
-#define COMMENT 280
-#define HOSTALIAS 281
-#define CMNDALIAS 282
-#define USERALIAS 283
-#define RUNASALIAS 284
-#define ERROR 285
-#define TYPE 286
-#define ROLE 287
-#define PRIVS 288
-#define LIMITPRIVS 289
-#define MYSELF 290
-#define YYERRCODE 256
-#if defined(__cplusplus) || defined(__STDC__)
-const short yylhs[] =
-#else
-short yylhs[] =
-#endif
- { -1,
- 0, 0, 28, 28, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 29, 29, 29, 4, 4, 3, 3,
- 3, 3, 3, 20, 20, 19, 10, 10, 8, 8,
- 8, 8, 8, 2, 2, 1, 6, 6, 23, 24,
- 22, 22, 22, 22, 22, 26, 27, 25, 25, 25,
- 25, 25, 17, 17, 18, 18, 18, 18, 18, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 5, 5, 5, 31, 31, 34, 9, 9, 32, 32,
- 35, 7, 7, 33, 33, 36, 30, 30, 37, 13,
- 13, 11, 11, 12, 12, 12, 12, 12, 16, 16,
- 14, 14, 15, 15, 15,
-};
-#if defined(__cplusplus) || defined(__STDC__)
-const short yylen[] =
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+extern YYSTYPE yylval;
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
#else
-short yylen[] =
+int yyparse ();
#endif
- { 2,
- 0, 1, 1, 2, 1, 2, 2, 2, 2, 2,
- 2, 2, 3, 3, 3, 3, 1, 3, 1, 2,
- 3, 3, 3, 1, 3, 3, 1, 2, 1, 1,
- 1, 1, 1, 1, 3, 5, 1, 2, 3, 3,
- 0, 1, 1, 2, 2, 3, 3, 0, 1, 1,
- 2, 2, 0, 3, 0, 1, 3, 2, 1, 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,
-};
-#if defined(__cplusplus) || defined(__STDC__)
-const short yydefred[] =
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
#else
-short yydefred[] =
+int yyparse ();
#endif
- { 0,
- 0, 94, 96, 97, 98, 0, 0, 0, 0, 0,
- 95, 5, 0, 0, 0, 0, 0, 0, 90, 92,
- 0, 0, 3, 6, 0, 0, 17, 0, 29, 32,
- 31, 33, 30, 0, 27, 0, 77, 0, 0, 73,
- 72, 71, 0, 37, 82, 0, 0, 0, 74, 0,
- 0, 79, 0, 0, 87, 0, 0, 84, 93, 0,
- 0, 24, 0, 4, 0, 0, 0, 20, 0, 28,
- 0, 0, 0, 0, 38, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 91, 0, 0, 21, 22,
- 23, 18, 78, 83, 0, 75, 0, 80, 0, 88,
- 0, 85, 0, 34, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 103, 105, 104, 0,
- 99, 101, 0, 0, 54, 35, 0, 0, 0, 0,
- 60, 0, 0, 44, 45, 102, 0, 0, 40, 39,
- 0, 0, 0, 51, 52, 100, 46, 47, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 36,
-};
-#if defined(__cplusplus) || defined(__STDC__)
-const short yydgoto[] =
+#endif /* ! YYPARSE_PARAM */
+
+#endif /* !YY_YY_Y_TAB_H_INCLUDED */
+
+/* Copy the second part of user declarations. */
+
+/* Line 390 of yacc.c */
+#line 360 "gram.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
#else
-short yydgoto[] =
+typedef unsigned char yytype_uint8;
#endif
- { 18,
- 104, 105, 27, 28, 44, 45, 46, 35, 61, 37,
- 19, 20, 21, 121, 122, 123, 106, 110, 62, 63,
- 143, 114, 115, 116, 131, 132, 133, 22, 23, 54,
- 48, 51, 57, 49, 52, 58, 55,
-};
-#if defined(__cplusplus) || defined(__STDC__)
-const short yysindex[] =
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
#else
-short yysindex[] =
+typedef short int yytype_int8;
#endif
- { 541,
- -270, 0, 0, 0, 0, -21, -5, 553, 553, 20,
- 0, 0, -242, -229, -216, -214, -240, 0, 0, 0,
- -27, 541, 0, 0, -18, -227, 0, 2, 0, 0,
- 0, 0, 0, -223, 0, -33, 0, -31, -31, 0,
- 0, 0, -243, 0, 0, -24, -12, -6, 0, 3,
- 4, 0, 5, 7, 0, 6, 10, 0, 0, 553,
- -20, 0, 11, 0, -206, -193, -191, 0, -21, 0,
- -5, 2, 2, 2, 0, 20, 2, -5, -242, 20,
- -229, 553, -216, 553, -214, 0, 33, -5, 0, 0,
- 0, 0, 0, 0, 31, 0, 32, 0, 34, 0,
- 34, 0, 513, 0, 35, -226, 0, 86, -25, 36,
- 33, 19, 21, -234, -202, -201, 0, 0, 0, -232,
- 0, 0, 41, 86, 0, 0, -176, -173, 37, 38,
- 0, -198, -195, 0, 0, 0, 86, 41, 0, 0,
- -169, -168, 569, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,};
-#if defined(__cplusplus) || defined(__STDC__)
-const short yyrindex[] =
-#else
-short yyrindex[] =
-#endif
- { 96,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 97, 0, 0, 1, 0, 0, 177, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 207, 0, 0,
- 237, 0, 0, 271, 0, 0, 300, 0, 0, 0,
- 0, 0, 329, 0, 0, 0, 0, 0, 0, 0,
- 0, 358, 387, 417, 0, 0, 446, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 463, 0, 0, 0,
- 0, 0, 0, 0, 30, 0, 59, 0, 89, 0,
- 118, 0, 60, 0, 148, -28, 0, 62, 63, 0,
- 463, 0, 0, 594, 489, 512, 0, 0, 0, 0,
- 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 623, 653, 0, 0, 0, 0, 65, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,};
-#if defined(__cplusplus) || defined(__STDC__)
-const short yygindex[] =
-#else
-short yygindex[] =
-#endif
- { 0,
- -11, 0, 39, 12, 66, -72, 27, 76, -4, 40,
- 52, 98, -1, -23, -7, -8, 0, 0, 42, 0,
- 0, 0, 8, 13, 0, -13, -9, 0, 99, 0,
- 0, 0, 0, 46, 45, 44, 48,
-};
-#define YYTABLESIZE 932
-#if defined(__cplusplus) || defined(__STDC__)
-const short yytable[] =
-#else
-short yytable[] =
-#endif
- { 26,
- 19, 26, 36, 94, 41, 34, 38, 39, 26, 24,
- 71, 26, 60, 40, 41, 47, 60, 2, 60, 76,
- 3, 4, 5, 71, 66, 117, 67, 34, 50, 76,
- 118, 68, 124, 19, 29, 42, 30, 31, 11, 32,
- 87, 53, 65, 56, 19, 69, 119, 72, 78, 73,
- 74, 79, 43, 129, 130, 33, 89, 77, 81, 112,
- 113, 81, 76, 80, 83, 82, 84, 85, 88, 90,
- 159, 91, 103, 95, 71, 76, 125, 60, 111, 127,
- 99, 128, 101, 112, 137, 113, 139, 76, 89, 140,
- 130, 81, 129, 147, 148, 1, 2, 141, 142, 126,
- 55, 109, 59, 56, 58, 57, 97, 92, 75, 70,
- 93, 86, 136, 146, 59, 138, 81, 86, 120, 145,
- 64, 89, 144, 135, 96, 98, 0, 134, 102, 107,
- 100, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 89, 26, 0, 0,
- 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 86, 12, 0, 0, 0,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 26, 9, 0, 0, 12,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 25, 0, 25, 41, 41,
- 29, 0, 30, 31, 25, 32, 10, 25, 0, 9,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 33, 29, 0, 30, 31, 19, 32, 19, 41,
- 41, 19, 19, 19, 19, 19, 19, 19, 19, 10,
- 8, 0, 0, 33, 0, 0, 40, 41, 0, 19,
- 19, 19, 19, 19, 19, 76, 0, 76, 0, 0,
- 76, 76, 76, 76, 76, 76, 76, 76, 42, 11,
- 0, 0, 0, 8, 0, 0, 0, 0, 76, 76,
- 76, 76, 76, 76, 81, 0, 81, 0, 0, 81,
- 81, 81, 81, 81, 81, 81, 81, 0, 7, 0,
- 0, 0, 11, 0, 0, 0, 0, 81, 81, 81,
- 81, 81, 81, 117, 89, 0, 89, 0, 118, 89,
- 89, 89, 89, 89, 89, 89, 89, 15, 0, 0,
- 0, 7, 0, 0, 119, 0, 0, 89, 89, 89,
- 89, 89, 89, 86, 0, 86, 0, 0, 86, 86,
- 86, 86, 86, 86, 86, 86, 13, 0, 0, 0,
- 15, 0, 0, 0, 0, 0, 86, 86, 86, 86,
- 86, 86, 0, 26, 0, 26, 0, 0, 26, 26,
- 26, 26, 26, 26, 26, 26, 14, 0, 0, 13,
- 0, 0, 0, 0, 0, 0, 26, 26, 26, 26,
- 26, 26, 12, 0, 12, 0, 0, 12, 12, 12,
- 12, 12, 12, 12, 12, 16, 0, 0, 0, 14,
- 0, 0, 0, 0, 0, 12, 12, 12, 12, 12,
- 12, 0, 9, 0, 9, 0, 0, 9, 9, 9,
- 9, 9, 9, 9, 9, 0, 0, 0, 16, 0,
- 0, 0, 0, 0, 0, 9, 9, 9, 9, 9,
- 9, 0, 10, 0, 10, 53, 0, 10, 10, 10,
- 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 10, 10, 10, 10, 10,
- 10, 42, 0, 0, 0, 0, 8, 0, 8, 0,
- 0, 8, 8, 8, 8, 8, 8, 8, 8, 0,
- 0, 0, 0, 0, 43, 17, 0, 0, 0, 8,
- 8, 8, 8, 8, 8, 11, 0, 11, 0, 0,
- 11, 11, 11, 11, 11, 11, 11, 11, 0, 0,
- 108, 0, 0, 17, 0, 0, 0, 0, 11, 11,
- 11, 11, 11, 11, 7, 17, 7, 0, 0, 7,
- 7, 7, 7, 7, 7, 7, 7, 0, 0, 0,
- 0, 43, 0, 0, 0, 0, 0, 7, 7, 7,
- 7, 7, 7, 15, 0, 15, 0, 0, 15, 15,
- 15, 15, 15, 15, 15, 15, 48, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 15, 15, 15, 15,
- 15, 15, 13, 0, 13, 0, 0, 13, 13, 13,
- 13, 13, 13, 13, 13, 49, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 13, 13, 13, 13, 13,
- 13, 0, 14, 0, 14, 0, 0, 14, 14, 14,
- 14, 14, 14, 14, 14, 50, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
- 14, 16, 0, 16, 0, 0, 16, 16, 16, 16,
- 16, 16, 16, 16, 0, 0, 0, 0, 0, 53,
- 53, 0, 0, 0, 16, 16, 16, 16, 16, 16,
- 0, 53, 53, 53, 53, 53, 53, 53, 53, 53,
- 53, 53, 0, 0, 0, 42, 42, 0, 53, 53,
- 53, 53, 0, 0, 0, 0, 0, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, 43, 43,
- 2, 0, 0, 3, 4, 5, 42, 42, 0, 0,
- 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
- 43, 11, 0, 0, 0, 0, 1, 0, 2, 43,
- 43, 3, 4, 5, 6, 7, 8, 9, 10, 0,
- 2, 0, 0, 3, 4, 5, 0, 0, 0, 11,
- 12, 13, 14, 15, 16, 40, 41, 0, 0, 0,
- 0, 11, 0, 0, 0, 0, 0, 149, 150, 151,
- 152, 153, 154, 155, 156, 157, 158, 42, 0, 0,
- 48, 48, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 0, 0, 0, 0, 0, 0, 49,
- 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 49, 49, 49, 49, 49, 49, 49, 49, 49,
- 49, 49, 0, 0, 0, 0, 0, 0, 0, 50,
- 50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50,
-};
-#if defined(__cplusplus) || defined(__STDC__)
-const short yycheck[] =
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(Msgid) Msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(E) ((void) (E))
+#else
+# define YYUSE(E) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(N) (N)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
#else
-short yycheck[] =
+static int
+YYID (yyi)
+ int yyi;
+#endif
+{
+ return yyi;
+}
#endif
- { 33,
- 0, 33, 7, 76, 33, 33, 8, 9, 33, 280,
- 44, 33, 44, 257, 258, 258, 44, 258, 44, 44,
- 261, 262, 263, 44, 43, 258, 45, 33, 258, 0,
- 263, 259, 58, 33, 258, 279, 260, 261, 279, 263,
- 61, 258, 61, 258, 44, 44, 279, 36, 61, 38,
- 39, 58, 33, 288, 289, 279, 263, 46, 0, 286,
- 287, 58, 33, 61, 58, 61, 61, 58, 58, 263,
- 143, 263, 40, 78, 44, 44, 41, 44, 44, 61,
- 82, 61, 84, 286, 44, 287, 263, 58, 0, 263,
- 289, 33, 288, 263, 263, 0, 0, 61, 61, 111,
- 41, 103, 41, 41, 41, 41, 80, 69, 43, 34,
- 71, 60, 120, 137, 17, 124, 58, 0, 33, 133,
- 22, 33, 132, 116, 79, 81, -1, 115, 85, 88,
- 83, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 58, 0, -1, -1,
- 33, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 58, 0, -1, -1, -1,
- 33, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 58, 0, -1, -1, 33,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 259, -1, 259, 257, 258,
- 258, -1, 260, 261, 259, 263, 0, 259, -1, 33,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 279, 258, -1, 260, 261, 256, 263, 258, 288,
- 289, 261, 262, 263, 264, 265, 266, 267, 268, 33,
- 0, -1, -1, 279, -1, -1, 257, 258, -1, 279,
- 280, 281, 282, 283, 284, 256, -1, 258, -1, -1,
- 261, 262, 263, 264, 265, 266, 267, 268, 279, 0,
- -1, -1, -1, 33, -1, -1, -1, -1, 279, 280,
- 281, 282, 283, 284, 256, -1, 258, -1, -1, 261,
- 262, 263, 264, 265, 266, 267, 268, -1, 0, -1,
- -1, -1, 33, -1, -1, -1, -1, 279, 280, 281,
- 282, 283, 284, 258, 256, -1, 258, -1, 263, 261,
- 262, 263, 264, 265, 266, 267, 268, 0, -1, -1,
- -1, 33, -1, -1, 279, -1, -1, 279, 280, 281,
- 282, 283, 284, 256, -1, 258, -1, -1, 261, 262,
- 263, 264, 265, 266, 267, 268, 0, -1, -1, -1,
- 33, -1, -1, -1, -1, -1, 279, 280, 281, 282,
- 283, 284, -1, 256, -1, 258, -1, -1, 261, 262,
- 263, 264, 265, 266, 267, 268, 0, -1, -1, 33,
- -1, -1, -1, -1, -1, -1, 279, 280, 281, 282,
- 283, 284, 256, -1, 258, -1, -1, 261, 262, 263,
- 264, 265, 266, 267, 268, 0, -1, -1, -1, 33,
- -1, -1, -1, -1, -1, 279, 280, 281, 282, 283,
- 284, -1, 256, -1, 258, -1, -1, 261, 262, 263,
- 264, 265, 266, 267, 268, -1, -1, -1, 33, -1,
- -1, -1, -1, -1, -1, 279, 280, 281, 282, 283,
- 284, -1, 256, -1, 258, 33, -1, 261, 262, 263,
- 264, 265, 266, 267, 268, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 279, 280, 281, 282, 283,
- 284, 33, -1, -1, -1, -1, 256, -1, 258, -1,
- -1, 261, 262, 263, 264, 265, 266, 267, 268, -1,
- -1, -1, -1, -1, 33, 33, -1, -1, -1, 279,
- 280, 281, 282, 283, 284, 256, -1, 258, -1, -1,
- 261, 262, 263, 264, 265, 266, 267, 268, -1, -1,
- 58, -1, -1, 33, -1, -1, -1, -1, 279, 280,
- 281, 282, 283, 284, 256, 33, 258, -1, -1, 261,
- 262, 263, 264, 265, 266, 267, 268, -1, -1, -1,
- -1, 33, -1, -1, -1, -1, -1, 279, 280, 281,
- 282, 283, 284, 256, -1, 258, -1, -1, 261, 262,
- 263, 264, 265, 266, 267, 268, 33, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 279, 280, 281, 282,
- 283, 284, 256, -1, 258, -1, -1, 261, 262, 263,
- 264, 265, 266, 267, 268, 33, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 279, 280, 281, 282, 283,
- 284, -1, 256, -1, 258, -1, -1, 261, 262, 263,
- 264, 265, 266, 267, 268, 33, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 279, 280, 281, 282, 283,
- 284, 256, -1, 258, -1, -1, 261, 262, 263, 264,
- 265, 266, 267, 268, -1, -1, -1, -1, -1, 257,
- 258, -1, -1, -1, 279, 280, 281, 282, 283, 284,
- -1, 269, 270, 271, 272, 273, 274, 275, 276, 277,
- 278, 279, -1, -1, -1, 257, 258, -1, 286, 287,
- 288, 289, -1, -1, -1, -1, -1, 269, 270, 271,
- 272, 273, 274, 275, 276, 277, 278, 279, 257, 258,
- 258, -1, -1, 261, 262, 263, 288, 289, -1, -1,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 279, -1, -1, -1, -1, 256, -1, 258, 288,
- 289, 261, 262, 263, 264, 265, 266, 267, 268, -1,
- 258, -1, -1, 261, 262, 263, -1, -1, -1, 279,
- 280, 281, 282, 283, 284, 257, 258, -1, -1, -1,
- -1, 279, -1, -1, -1, -1, -1, 269, 270, 271,
- 272, 273, 274, 275, 276, 277, 278, 279, -1, -1,
- 257, 258, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, -1, -1, -1, -1, -1, -1, 257,
- 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 269, 270, 271, 272, 273, 274, 275, 276, 277,
- 278, 279, -1, -1, -1, -1, -1, -1, -1, 257,
- 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 269, 270, 271, 272, 273, 274, 275, 276, 277,
- 278, 279,
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+ /* Use EXIT_SUCCESS as a witness for stdlib.h. */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss_alloc;
+ YYSTYPE yyvs_alloc;
};
-#define YYFINAL 18
-#ifndef YYDEBUG
-#define YYDEBUG 0
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
#endif
-#define YYMAXTOKEN 290
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(Dst, Src, Count) \
+ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+# else
+# define YYCOPY(Dst, Src, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (Dst)[yyi] = (Src)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 66
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 225
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 50
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 41
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 112
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 176
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 296
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 35, 2, 2, 2, 2, 2, 2,
+ 38, 39, 2, 36, 34, 37, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 32, 2,
+ 2, 33, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49
+};
+
#if YYDEBUG
-#if defined(__cplusplus) || defined(__STDC__)
-const char * const yyname[] =
-#else
-char *yyname[] =
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint16 yyprhs[] =
+{
+ 0, 0, 3, 4, 6, 8, 11, 13, 16, 19,
+ 22, 25, 28, 31, 34, 38, 42, 46, 50, 52,
+ 56, 58, 61, 65, 69, 73, 75, 79, 83, 85,
+ 88, 90, 92, 94, 96, 98, 100, 104, 110, 114,
+ 118, 122, 126, 128, 131, 133, 136, 140, 144, 145,
+ 147, 149, 152, 155, 159, 163, 164, 166, 168, 171,
+ 174, 175, 179, 180, 182, 186, 189, 191, 192, 195,
+ 198, 201, 204, 207, 210, 213, 216, 219, 222, 224,
+ 226, 228, 230, 234, 238, 240, 244, 246, 250, 254,
+ 256, 260, 262, 266, 270, 272, 276, 280, 282, 286,
+ 288, 291, 293, 295, 297, 299, 301, 303, 307, 309,
+ 312, 314, 316
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int8 yyrhs[] =
+{
+ 51, 0, -1, -1, 52, -1, 53, -1, 52, 53,
+ -1, 27, -1, 1, 27, -1, 85, 56, -1, 30,
+ 83, -1, 28, 75, -1, 29, 78, -1, 31, 81,
+ -1, 11, 54, -1, 13, 85, 54, -1, 14, 85,
+ 54, -1, 12, 77, 54, -1, 15, 80, 54, -1,
+ 55, -1, 54, 34, 55, -1, 5, -1, 35, 5,
+ -1, 5, 33, 9, -1, 5, 36, 9, -1, 5,
+ 37, 9, -1, 57, -1, 56, 32, 57, -1, 77,
+ 33, 60, -1, 59, -1, 35, 59, -1, 4, -1,
+ 26, -1, 7, -1, 6, -1, 9, -1, 61, -1,
+ 60, 34, 61, -1, 71, 67, 70, 73, 63, -1,
+ 46, 32, 10, -1, 47, 32, 10, -1, 48, 32,
+ 10, -1, 49, 32, 10, -1, 64, -1, 62, 64,
+ -1, 74, -1, 35, 74, -1, 42, 33, 9, -1,
+ 41, 33, 9, -1, -1, 65, -1, 66, -1, 65,
+ 66, -1, 66, 65, -1, 43, 33, 9, -1, 44,
+ 33, 9, -1, -1, 68, -1, 69, -1, 68, 69,
+ -1, 69, 68, -1, -1, 38, 72, 39, -1, -1,
+ 85, -1, 85, 32, 88, -1, 32, 88, -1, 32,
+ -1, -1, 73, 16, -1, 73, 17, -1, 73, 18,
+ -1, 73, 19, -1, 73, 20, -1, 73, 21, -1,
+ 73, 22, -1, 73, 23, -1, 73, 24, -1, 73,
+ 25, -1, 26, -1, 4, -1, 3, -1, 76, -1,
+ 75, 32, 76, -1, 4, 33, 77, -1, 58, -1,
+ 77, 34, 58, -1, 79, -1, 78, 32, 79, -1,
+ 4, 33, 80, -1, 63, -1, 80, 34, 63, -1,
+ 82, -1, 81, 32, 82, -1, 4, 33, 85, -1,
+ 84, -1, 83, 32, 84, -1, 4, 33, 85, -1,
+ 86, -1, 85, 34, 86, -1, 87, -1, 35, 87,
+ -1, 4, -1, 26, -1, 7, -1, 8, -1, 9,
+ -1, 89, -1, 88, 34, 89, -1, 90, -1, 35,
+ 90, -1, 4, -1, 26, -1, 9, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 214, 214, 215, 218, 219, 222, 225, 228, 231,
+ 234, 237, 240, 243, 246, 249, 252, 255, 260, 261,
+ 267, 270, 273, 276, 279, 284, 285, 291, 301, 305,
+ 311, 314, 317, 320, 323, 328, 329, 368, 398, 401,
+ 404, 407, 412, 415, 425, 429, 435, 440, 445, 449,
+ 453, 457, 461, 467, 471, 476, 480, 484, 488, 492,
+ 497, 500, 505, 510, 515, 520, 525, 532, 536, 539,
+ 542, 545, 548, 551, 554, 557, 560, 563, 568, 571,
+ 574, 582, 583, 586, 595, 596, 602, 603, 606, 615,
+ 616, 622, 623, 626, 635, 636, 639, 648, 649, 655,
+ 659, 665, 668, 671, 674, 677, 682, 683, 689, 693,
+ 699, 702, 705
+};
#endif
- {
-"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-"'!'",0,0,0,0,0,0,"'('","')'",0,"'+'","','","'-'",0,0,0,0,0,0,0,0,0,0,0,0,"':'",
-0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-"COMMAND","ALIAS","DEFVAR","NTWKADDR","NETGROUP","USERGROUP","WORD","DEFAULTS",
-"DEFAULTS_HOST","DEFAULTS_USER","DEFAULTS_RUNAS","DEFAULTS_CMND","NOPASSWD",
-"PASSWD","NOEXEC","EXEC","SETENV","NOSETENV","LOG_INPUT","NOLOG_INPUT",
-"LOG_OUTPUT","NOLOG_OUTPUT","ALL","COMMENT","HOSTALIAS","CMNDALIAS","USERALIAS",
-"RUNASALIAS","ERROR","TYPE","ROLE","PRIVS","LIMITPRIVS","MYSELF",
+
+#if YYDEBUG || YYERROR_VERBOSE || 0
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "COMMAND", "ALIAS", "DEFVAR", "NTWKADDR",
+ "NETGROUP", "USERGROUP", "WORD", "DIGEST", "DEFAULTS", "DEFAULTS_HOST",
+ "DEFAULTS_USER", "DEFAULTS_RUNAS", "DEFAULTS_CMND", "NOPASSWD", "PASSWD",
+ "NOEXEC", "EXEC", "SETENV", "NOSETENV", "LOG_INPUT", "NOLOG_INPUT",
+ "LOG_OUTPUT", "NOLOG_OUTPUT", "ALL", "COMMENT", "HOSTALIAS", "CMNDALIAS",
+ "USERALIAS", "RUNASALIAS", "':'", "'='", "','", "'!'", "'+'", "'-'",
+ "'('", "')'", "ERROR", "TYPE", "ROLE", "PRIVS", "LIMITPRIVS", "MYSELF",
+ "SHA224", "SHA256", "SHA384", "SHA512", "$accept", "file", "line",
+ "entry", "defaults_list", "defaults_entry", "privileges", "privilege",
+ "ophost", "host", "cmndspeclist", "cmndspec", "digest", "digcmnd",
+ "opcmnd", "rolespec", "typespec", "selinux", "privsspec",
+ "limitprivsspec", "solarisprivs", "runasspec", "runaslist", "cmndtag",
+ "cmnd", "hostaliases", "hostalias", "hostlist", "cmndaliases",
+ "cmndalias", "cmndlist", "runasaliases", "runasalias", "useraliases",
+ "useralias", "userlist", "opuser", "user", "grouplist", "opgroup",
+ "group", YY_NULL
};
-#if defined(__cplusplus) || defined(__STDC__)
-const char * const yyrule[] =
-#else
-char *yyrule[] =
#endif
- {"$accept : file",
-"file :",
-"file : line",
-"line : entry",
-"line : line entry",
-"entry : COMMENT",
-"entry : error COMMENT",
-"entry : userlist privileges",
-"entry : USERALIAS useraliases",
-"entry : HOSTALIAS hostaliases",
-"entry : CMNDALIAS cmndaliases",
-"entry : RUNASALIAS runasaliases",
-"entry : DEFAULTS defaults_list",
-"entry : DEFAULTS_USER userlist defaults_list",
-"entry : DEFAULTS_RUNAS userlist defaults_list",
-"entry : DEFAULTS_HOST hostlist defaults_list",
-"entry : DEFAULTS_CMND cmndlist defaults_list",
-"defaults_list : defaults_entry",
-"defaults_list : defaults_list ',' defaults_entry",
-"defaults_entry : DEFVAR",
-"defaults_entry : '!' DEFVAR",
-"defaults_entry : DEFVAR '=' WORD",
-"defaults_entry : DEFVAR '+' WORD",
-"defaults_entry : DEFVAR '-' WORD",
-"privileges : privilege",
-"privileges : privileges ':' privilege",
-"privilege : hostlist '=' cmndspeclist",
-"ophost : host",
-"ophost : '!' host",
-"host : ALIAS",
-"host : ALL",
-"host : NETGROUP",
-"host : NTWKADDR",
-"host : WORD",
-"cmndspeclist : cmndspec",
-"cmndspeclist : cmndspeclist ',' cmndspec",
-"cmndspec : runasspec selinux solarisprivs cmndtag opcmnd",
-"opcmnd : cmnd",
-"opcmnd : '!' cmnd",
-"rolespec : ROLE '=' WORD",
-"typespec : TYPE '=' WORD",
-"selinux :",
-"selinux : rolespec",
-"selinux : typespec",
-"selinux : rolespec typespec",
-"selinux : typespec rolespec",
-"privsspec : PRIVS '=' WORD",
-"limitprivsspec : LIMITPRIVS '=' WORD",
-"solarisprivs :",
-"solarisprivs : privsspec",
-"solarisprivs : limitprivsspec",
-"solarisprivs : privsspec limitprivsspec",
-"solarisprivs : limitprivsspec privsspec",
-"runasspec :",
-"runasspec : '(' runaslist ')'",
-"runaslist :",
-"runaslist : userlist",
-"runaslist : userlist ':' grouplist",
-"runaslist : ':' grouplist",
-"runaslist : ':'",
-"cmndtag :",
-"cmndtag : cmndtag NOPASSWD",
-"cmndtag : cmndtag PASSWD",
-"cmndtag : cmndtag NOEXEC",
-"cmndtag : cmndtag EXEC",
-"cmndtag : cmndtag SETENV",
-"cmndtag : cmndtag NOSETENV",
-"cmndtag : cmndtag LOG_INPUT",
-"cmndtag : cmndtag NOLOG_INPUT",
-"cmndtag : cmndtag LOG_OUTPUT",
-"cmndtag : cmndtag NOLOG_OUTPUT",
-"cmnd : ALL",
-"cmnd : ALIAS",
-"cmnd : COMMAND",
-"hostaliases : hostalias",
-"hostaliases : hostaliases ':' hostalias",
-"hostalias : ALIAS '=' hostlist",
-"hostlist : ophost",
-"hostlist : hostlist ',' ophost",
-"cmndaliases : cmndalias",
-"cmndaliases : cmndaliases ':' cmndalias",
-"cmndalias : ALIAS '=' cmndlist",
-"cmndlist : opcmnd",
-"cmndlist : cmndlist ',' opcmnd",
-"runasaliases : runasalias",
-"runasaliases : runasaliases ':' runasalias",
-"runasalias : ALIAS '=' userlist",
-"useraliases : useralias",
-"useraliases : useraliases ':' useralias",
-"useralias : ALIAS '=' userlist",
-"userlist : opuser",
-"userlist : userlist ',' opuser",
-"opuser : user",
-"opuser : '!' user",
-"user : ALIAS",
-"user : ALL",
-"user : NETGROUP",
-"user : USERGROUP",
-"user : WORD",
-"grouplist : opgroup",
-"grouplist : grouplist ',' opgroup",
-"opgroup : group",
-"opgroup : '!' group",
-"group : ALIAS",
-"group : ALL",
-"group : WORD",
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 58, 61, 44, 33, 43, 45, 40, 41,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 50, 51, 51, 52, 52, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 54, 54,
+ 55, 55, 55, 55, 55, 56, 56, 57, 58, 58,
+ 59, 59, 59, 59, 59, 60, 60, 61, 62, 62,
+ 62, 62, 63, 63, 64, 64, 65, 66, 67, 67,
+ 67, 67, 67, 68, 69, 70, 70, 70, 70, 70,
+ 71, 71, 72, 72, 72, 72, 72, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 74, 74,
+ 74, 75, 75, 76, 77, 77, 78, 78, 79, 80,
+ 80, 81, 81, 82, 83, 83, 84, 85, 85, 86,
+ 86, 87, 87, 87, 87, 87, 88, 88, 89, 89,
+ 90, 90, 90
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 0, 1, 1, 2, 1, 2, 2, 2,
+ 2, 2, 2, 2, 3, 3, 3, 3, 1, 3,
+ 1, 2, 3, 3, 3, 1, 3, 3, 1, 2,
+ 1, 1, 1, 1, 1, 1, 3, 5, 3, 3,
+ 3, 3, 1, 2, 1, 2, 3, 3, 0, 1,
+ 1, 2, 2, 3, 3, 0, 1, 1, 2, 2,
+ 0, 3, 0, 1, 3, 2, 1, 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
+};
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 0, 0, 101, 103, 104, 105, 0, 0, 0, 0,
+ 0, 102, 6, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 97, 99, 7, 20, 0, 13, 18, 30,
+ 33, 32, 34, 31, 0, 84, 28, 0, 0, 0,
+ 80, 79, 78, 0, 0, 0, 0, 0, 0, 89,
+ 42, 44, 0, 0, 10, 81, 0, 11, 86, 0,
+ 9, 94, 0, 12, 91, 100, 1, 5, 0, 8,
+ 25, 0, 0, 0, 0, 21, 0, 29, 0, 16,
+ 14, 15, 45, 0, 0, 0, 0, 43, 0, 17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 98, 0,
+ 60, 22, 23, 24, 19, 85, 38, 39, 40, 41,
+ 90, 83, 82, 88, 87, 96, 95, 93, 92, 26,
+ 62, 27, 35, 48, 66, 0, 63, 60, 0, 0,
+ 49, 50, 55, 110, 112, 111, 0, 65, 106, 108,
+ 61, 0, 36, 0, 0, 51, 52, 0, 0, 56,
+ 57, 67, 109, 0, 64, 47, 46, 0, 0, 58,
+ 59, 0, 107, 53, 54, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 37
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
+ -1, 18, 19, 20, 27, 28, 69, 70, 35, 36,
+ 121, 122, 48, 49, 50, 130, 131, 132, 149, 150,
+ 151, 123, 125, 161, 51, 54, 55, 71, 57, 58,
+ 52, 63, 64, 60, 61, 21, 22, 23, 137, 138,
+ 139
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -86
+static const yytype_int16 yypact[] =
+{
+ 66, 8, -86, -86, -86, -86, 29, 56, 134, 134,
+ 5, -86, -86, 26, 28, 33, 39, 144, 46, 102,
+ -86, 7, -86, -86, -86, 121, 54, 27, -86, -86,
+ -86, -86, -86, -86, 155, -86, -86, 10, 23, 23,
+ -86, -86, -86, 101, 55, 57, 58, 67, 3, -86,
+ -86, -86, 34, 65, 68, -86, 74, 76, -86, 86,
+ 88, -86, 91, 93, -86, -86, -86, -86, 134, 94,
+ -86, 22, 126, 127, 138, -86, 29, -86, 56, 27,
+ 27, 27, -86, 145, 153, 156, 158, -86, 5, 27,
+ 56, 26, 5, 28, 134, 33, 134, 39, -86, 56,
+ 106, -86, -86, -86, -86, -86, -86, -86, -86, -86,
+ -86, 137, -86, 142, -86, 143, -86, 143, -86, -86,
+ 114, 146, -86, 30, 130, 136, -22, 106, 149, 150,
+ 147, 148, 40, -86, -86, -86, 141, 151, -86, -86,
+ -86, 130, -86, 169, 170, -86, -86, 159, 160, 140,
+ 152, -86, -86, 130, 151, -86, -86, 177, 180, -86,
+ -86, 1, -86, -86, -86, -86, -86, -86, -86, -86,
+ -86, -86, -86, -86, -86, -86
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
+{
+ -86, -86, -86, 172, 135, 118, -86, 97, 119, 164,
+ -86, 72, -86, -85, 154, 69, 71, -86, 53, 59,
+ -86, -86, -86, -86, 161, -86, 115, -5, -86, 112,
+ 117, -86, 110, -86, 116, -8, 157, 193, 73, 60,
+ 79
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -4
+static const yytype_int16 yytable[] =
+{
+ 38, 39, 37, 110, 40, 41, 40, 41, 40, 41,
+ 141, 29, 68, 30, 31, 25, 32, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 42, 25, 42,
+ 53, 42, 56, 33, 25, 24, 43, 59, 43, 25,
+ 43, 68, 34, 62, 78, 26, 66, 44, 45, 46,
+ 47, 44, 45, 46, 47, 100, 78, 68, 26, 75,
+ 29, 76, 30, 31, 26, 32, -2, 1, 88, 26,
+ 2, 128, 129, 3, 4, 5, 175, 6, 7, 8,
+ 9, 10, 33, 147, 148, 111, 115, 83, 117, 84,
+ 85, 34, 11, 12, 13, 14, 15, 16, 90, 86,
+ 91, 17, -3, 1, 40, 41, 2, 92, 93, 3,
+ 4, 5, 126, 6, 7, 8, 9, 10, 2, 94,
+ 95, 3, 4, 5, 96, 97, 99, 42, 11, 12,
+ 13, 14, 15, 16, 133, 101, 102, 17, 2, 134,
+ 11, 3, 4, 5, 120, 133, 124, 103, 2, 17,
+ 134, 3, 4, 5, 72, 106, 135, 73, 74, 29,
+ 11, 30, 31, 107, 32, 136, 108, 135, 109, 17,
+ 11, 78, 79, 80, 81, 140, 88, 68, 155, 156,
+ 127, 33, 143, 144, 148, 153, 163, 89, 128, 164,
+ 129, 67, 157, 158, 104, 147, 119, 105, 77, 142,
+ 146, 145, 87, 160, 82, 114, 112, 118, 159, 113,
+ 65, 116, 0, 162, 154, 152, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 98
};
+
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-86)))
+
+#define yytable_value_is_error(Yytable_value) \
+ YYID (0)
+
+static const yytype_int16 yycheck[] =
+{
+ 8, 9, 7, 88, 3, 4, 3, 4, 3, 4,
+ 32, 4, 34, 6, 7, 5, 9, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 5, 26,
+ 4, 26, 4, 26, 5, 27, 35, 4, 35, 5,
+ 35, 34, 35, 4, 34, 35, 0, 46, 47, 48,
+ 49, 46, 47, 48, 49, 33, 34, 34, 35, 5,
+ 4, 34, 6, 7, 35, 9, 0, 1, 34, 35,
+ 4, 41, 42, 7, 8, 9, 161, 11, 12, 13,
+ 14, 15, 26, 43, 44, 90, 94, 32, 96, 32,
+ 32, 35, 26, 27, 28, 29, 30, 31, 33, 32,
+ 32, 35, 0, 1, 3, 4, 4, 33, 32, 7,
+ 8, 9, 120, 11, 12, 13, 14, 15, 4, 33,
+ 32, 7, 8, 9, 33, 32, 32, 26, 26, 27,
+ 28, 29, 30, 31, 4, 9, 9, 35, 4, 9,
+ 26, 7, 8, 9, 38, 4, 32, 9, 4, 35,
+ 9, 7, 8, 9, 33, 10, 26, 36, 37, 4,
+ 26, 6, 7, 10, 9, 35, 10, 26, 10, 35,
+ 26, 34, 37, 38, 39, 39, 34, 34, 9, 9,
+ 34, 26, 33, 33, 44, 34, 9, 52, 41, 9,
+ 42, 19, 33, 33, 76, 43, 99, 78, 34, 127,
+ 131, 130, 48, 150, 43, 93, 91, 97, 149, 92,
+ 17, 95, -1, 153, 141, 136, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 68
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 1, 4, 7, 8, 9, 11, 12, 13, 14,
+ 15, 26, 27, 28, 29, 30, 31, 35, 51, 52,
+ 53, 85, 86, 87, 27, 5, 35, 54, 55, 4,
+ 6, 7, 9, 26, 35, 58, 59, 77, 85, 85,
+ 3, 4, 26, 35, 46, 47, 48, 49, 62, 63,
+ 64, 74, 80, 4, 75, 76, 4, 78, 79, 4,
+ 83, 84, 4, 81, 82, 87, 0, 53, 34, 56,
+ 57, 77, 33, 36, 37, 5, 34, 59, 34, 54,
+ 54, 54, 74, 32, 32, 32, 32, 64, 34, 54,
+ 33, 32, 33, 32, 33, 32, 33, 32, 86, 32,
+ 33, 9, 9, 9, 55, 58, 10, 10, 10, 10,
+ 63, 77, 76, 80, 79, 85, 84, 85, 82, 57,
+ 38, 60, 61, 71, 32, 72, 85, 34, 41, 42,
+ 65, 66, 67, 4, 9, 26, 35, 88, 89, 90,
+ 39, 32, 61, 33, 33, 66, 65, 43, 44, 68,
+ 69, 70, 90, 34, 88, 9, 9, 33, 33, 69,
+ 68, 73, 89, 9, 9, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 63
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
+
+#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+/* Error token number */
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
#endif
-#ifdef YYSTACKSIZE
-#undef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
#else
-#define YYSTACKSIZE 10000
-#define YYMAXDEPTH 10000
+# define YYLEX yylex ()
#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
#endif
-#define YYINITSTACKSIZE 200
-/* LINTUSED */
-int yydebug;
-int yynerrs;
-int yyerrflag;
-int yychar;
-short *yyssp;
-YYSTYPE *yyvsp;
-YYSTYPE yyval;
-YYSTYPE yylval;
-short *yyss;
-short *yysslim;
-YYSTYPE *yyvs;
-int yystacksize;
-#line 674 "gram.y"
-static struct defaults *
-new_default(char *var, char *val, int op)
{
- struct defaults *d;
- debug_decl(new_default, SUDO_DEBUG_PARSER)
+ FILE *yyo = yyoutput;
+ YYUSE (yyo);
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
- d = ecalloc(1, sizeof(struct defaults));
- d->var = var;
- d->val = val;
- tq_init(&d->binding);
- /* d->type = 0; */
- d->op = op;
- d->prev = d;
- /* d->next = NULL; */
- debug_return_ptr(d);
-}
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
-static struct member *
-new_member(char *name, int type)
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
{
- struct member *m;
- debug_decl(new_member, SUDO_DEBUG_PARSER)
-
- m = ecalloc(1, sizeof(struct member));
- m->name = name;
- m->type = type;
- m->prev = m;
- /* m->next = NULL; */
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
- debug_return_ptr(m);
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
}
-/*
- * Add a list of defaults structures to the defaults list.
- * The binding, if non-NULL, specifies a list of hosts, users, or
- * runas users the entries apply to (specified by the type).
- */
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
static void
-add_defaults(int type, struct member *bmem, struct defaults *defs)
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+ yytype_int16 *yybottom;
+ yytype_int16 *yytop;
+#endif
{
- struct defaults *d;
- struct member_list binding;
- debug_decl(add_defaults, SUDO_DEBUG_PARSER)
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
- /*
- * We can only call list2tq once on bmem as it will zero
- * out the prev pointer when it consumes bmem.
- */
- list2tq(&binding, bmem);
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
- /*
- * Set type and binding (who it applies to) for new entries.
- */
- for (d = defs; d != NULL; d = d->next) {
- d->type = type;
- d->binding = binding;
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ YYFPRINTF (stderr, "\n");
}
- tq_append(&defaults, defs);
+}
- debug_return;
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
}
+# endif
+# endif
-/*
- * Allocate a new struct userspec, populate it, and insert it at the
- * and of the userspecs list.
- */
-static void
-add_userspec(struct member *members, struct privilege *privs)
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
{
- struct userspec *u;
- debug_decl(add_userspec, SUDO_DEBUG_PARSER)
+ char *yyd = yydest;
+ const char *yys = yysrc;
- u = ecalloc(1, sizeof(*u));
- list2tq(&u->users, members);
- list2tq(&u->privileges, privs);
- u->prev = u;
- /* u->next = NULL; */
- tq_append(&userspecs, u);
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
- debug_return;
+ return yyd - 1;
}
+# endif
+# endif
-/*
- * Free up space used by data structures from a previous parser run and sets
- * the current sudoers file to path.
- */
-void
-init_parser(const char *path, bool quiet)
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
{
- struct defaults *d;
- struct member *m, *binding;
- struct userspec *us;
- struct privilege *priv;
- struct cmndspec *cs;
- struct sudo_command *c;
- debug_decl(init_parser, SUDO_DEBUG_PARSER)
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
- while ((us = tq_pop(&userspecs)) != NULL) {
- while ((m = tq_pop(&us->users)) != NULL) {
- efree(m->name);
- efree(m);
- }
- while ((priv = tq_pop(&us->privileges)) != NULL) {
- struct member *runasuser = NULL, *runasgroup = NULL;
-#ifdef HAVE_SELINUX
- char *role = NULL, *type = NULL;
-#endif /* HAVE_SELINUX */
-#ifdef HAVE_PRIV_SET
- char *privs = NULL, *limitprivs = NULL;
-#endif /* HAVE_PRIV_SET */
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
- while ((m = tq_pop(&priv->hostlist)) != NULL) {
- efree(m->name);
- efree(m);
- }
- while ((cs = tq_pop(&priv->cmndlist)) != NULL) {
-#ifdef HAVE_SELINUX
- /* Only free the first instance of a role/type. */
- if (cs->role != role) {
- role = cs->role;
- efree(cs->role);
- }
- if (cs->type != type) {
- type = cs->type;
- efree(cs->type);
- }
-#endif /* HAVE_SELINUX */
-#ifdef HAVE_PRIV_SET
- /* Only free the first instance of privs/limitprivs. */
- if (cs->privs != privs) {
- privs = cs->privs;
- efree(cs->privs);
- }
- if (cs->limitprivs != limitprivs) {
- limitprivs = cs->limitprivs;
- efree(cs->limitprivs);
- }
-#endif /* HAVE_PRIV_SET */
- if (tq_last(&cs->runasuserlist) != runasuser) {
- runasuser = tq_last(&cs->runasuserlist);
- while ((m = tq_pop(&cs->runasuserlist)) != NULL) {
- efree(m->name);
- efree(m);
- }
- }
- if (tq_last(&cs->runasgrouplist) != runasgroup) {
- runasgroup = tq_last(&cs->runasgrouplist);
- while ((m = tq_pop(&cs->runasgrouplist)) != NULL) {
- efree(m->name);
- efree(m);
- }
- }
- if (cs->cmnd->type == COMMAND) {
- c = (struct sudo_command *) cs->cmnd->name;
- efree(c->cmnd);
- efree(c->args);
- }
- efree(cs->cmnd->name);
- efree(cs->cmnd);
- efree(cs);
- }
- efree(priv);
- }
- efree(us);
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
+
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = YY_NULL;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+
+ /* There are many possibilities here to consider:
+ - Assume YYFAIL is not used. It's too flawed to consider. See
+ <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+ for details. YYERROR is fine as it does not invoke this
+ function.
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
+ {
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ {
+ YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+ }
+ }
}
- tq_init(&userspecs);
- binding = NULL;
- while ((d = tq_pop(&defaults)) != NULL) {
- if (tq_last(&d->binding) != binding) {
- binding = tq_last(&d->binding);
- while ((m = tq_pop(&d->binding)) != NULL) {
- if (m->type == COMMAND) {
- c = (struct sudo_command *) m->name;
- efree(c->cmnd);
- efree(c->args);
- }
- efree(m->name);
- efree(m);
- }
- }
- efree(d->var);
- efree(d->val);
- efree(d);
+ switch (yycount)
+ {
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
}
- tq_init(&defaults);
- init_aliases();
+ {
+ YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
- init_lexer();
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
- efree(sudoers);
- sudoers = path ? estrdup(path) : NULL;
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
+}
+#endif /* YYERROR_VERBOSE */
- parse_error = false;
- errorlineno = -1;
- errorfile = sudoers;
- sudoers_warnings = !quiet;
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
- debug_return;
-}
-#line 827 "gram.c"
-/* allocate initial stack or double stack size, up to YYMAXDEPTH */
-#if defined(__cplusplus) || defined(__STDC__)
-static int yygrowstack(void)
-#else
-static int yygrowstack()
-#endif
-{
- int newsize, i;
- short *newss;
- YYSTYPE *newvs;
-
- newsize = yystacksize ? yystacksize : YYINITSTACKSIZE;
- if (newsize >= YYMAXDEPTH)
- return -1;
- else if ((newsize *= 2) > YYMAXDEPTH)
- newsize = YYMAXDEPTH;
-#ifdef SIZE_MAX
-#define YY_SIZE_MAX SIZE_MAX
-#else
-#define YY_SIZE_MAX 0x7fffffff
-#endif
- if (YY_SIZE_MAX / newsize < sizeof *newss)
- goto bail;
- i = yyssp - yyss;
- newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :
- (short *)malloc(newsize * sizeof *newss); /* overflow check above */
- if (newss == NULL)
- goto bail;
- yyss = newss;
- yyssp = newss + i;
- newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :
- (YYSTYPE *)malloc(newsize * sizeof *newvs); /* overflow check above */
- if (newvs == NULL)
- goto bail;
- yyvs = newvs;
- yyvsp = newvs + i;
- yystacksize = newsize;
- yysslim = yyss + newsize - 1;
- return 0;
-bail:
- if (yyss)
- free(yyss);
- if (yyvs)
- free(yyvs);
- yyss = yyssp = NULL;
- yyvs = yyvsp = NULL;
- yystacksize = 0;
- return -1;
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
}
-#define YYABORT goto yyabort
-#define YYREJECT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
+
+
+
+/* The lookahead symbol. */
+int yychar;
+
+
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#endif
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
int
-#if defined(__cplusplus) || defined(__STDC__)
-yyparse(void)
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
#else
-yyparse()
+int
+yyparse ()
+
+#endif
#endif
{
- int yym, yyn, yystate;
-#if YYDEBUG
-#if defined(__cplusplus) || defined(__STDC__)
- const char *yys;
-#else /* !(defined(__cplusplus) || defined(__STDC__)) */
- char *yys;
-#endif /* !(defined(__cplusplus) || defined(__STDC__)) */
-
- if ((yys = getenv("YYDEBUG")))
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
-#endif /* YYDEBUG */
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
-
- if (yyss == NULL && yygrowstack()) goto yyoverflow;
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
-
-yyloop:
- if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ `yyss': related to states.
+ `yyvs': related to semantic values.
+
+ Refer to the stacks through separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken = 0;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yyssp = yyss = yyssa;
+ yyvsp = yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
}
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
{
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, shifting to state %d\n",
- YYPREFIX, yystate, yytable[yyn]);
-#endif
- if (yyssp >= yysslim && yygrowstack())
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
-#if defined(lint) || defined(__GNUC__)
- goto yynewerror;
-#endif
-yynewerror:
- yyerror("syntax error");
-#if defined(lint) || defined(__GNUC__)
- goto yyerrlab;
-#endif
-yyerrlab:
- ++yynerrs;
-yyinrecovery:
- if (yyerrflag < 3)
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
{
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
-#endif
- if (yyssp >= yysslim && yygrowstack())
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: error recovery discarding state %d\n",
- YYPREFIX, *yyssp);
-#endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
}
- else
+ else
{
- if (yychar == 0) goto yyabort;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
-#endif
- yychar = (-1);
- goto yyloop;
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
}
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
yyreduce:
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, reducing by rule %d (%s)\n",
- YYPREFIX, yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- if (yym)
- yyval = yyvsp[1-yym];
- else
- memset(&yyval, 0, sizeof yyval);
- switch (yyn)
- {
-case 1:
-#line 204 "gram.y"
-{ ; }
-break;
-case 5:
-#line 212 "gram.y"
-{
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 2:
+/* Line 1792 of yacc.c */
+#line 214 "gram.y"
+ { ; }
+ break;
+
+ case 6:
+/* Line 1792 of yacc.c */
+#line 222 "gram.y"
+ {
;
}
-break;
-case 6:
-#line 215 "gram.y"
-{
+ break;
+
+ case 7:
+/* Line 1792 of yacc.c */
+#line 225 "gram.y"
+ {
yyerrok;
}
-break;
-case 7:
-#line 218 "gram.y"
-{
- add_userspec(yyvsp[-1].member, yyvsp[0].privilege);
- }
-break;
-case 8:
-#line 221 "gram.y"
-{
- ;
+ break;
+
+ case 8:
+/* Line 1792 of yacc.c */
+#line 228 "gram.y"
+ {
+ add_userspec((yyvsp[(1) - (2)].member), (yyvsp[(2) - (2)].privilege));
}
-break;
-case 9:
-#line 224 "gram.y"
-{
+ break;
+
+ case 9:
+/* Line 1792 of yacc.c */
+#line 231 "gram.y"
+ {
;
}
-break;
-case 10:
-#line 227 "gram.y"
-{
+ break;
+
+ case 10:
+/* Line 1792 of yacc.c */
+#line 234 "gram.y"
+ {
;
}
-break;
-case 11:
-#line 230 "gram.y"
-{
+ break;
+
+ case 11:
+/* Line 1792 of yacc.c */
+#line 237 "gram.y"
+ {
;
}
-break;
-case 12:
-#line 233 "gram.y"
-{
- add_defaults(DEFAULTS, NULL, yyvsp[0].defaults);
+ break;
+
+ case 12:
+/* Line 1792 of yacc.c */
+#line 240 "gram.y"
+ {
+ ;
}
-break;
-case 13:
-#line 236 "gram.y"
-{
- add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults);
+ break;
+
+ case 13:
+/* Line 1792 of yacc.c */
+#line 243 "gram.y"
+ {
+ add_defaults(DEFAULTS, NULL, (yyvsp[(2) - (2)].defaults));
}
-break;
-case 14:
-#line 239 "gram.y"
-{
- add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults);
+ break;
+
+ case 14:
+/* Line 1792 of yacc.c */
+#line 246 "gram.y"
+ {
+ add_defaults(DEFAULTS_USER, (yyvsp[(2) - (3)].member), (yyvsp[(3) - (3)].defaults));
}
-break;
-case 15:
-#line 242 "gram.y"
-{
- add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults);
+ break;
+
+ case 15:
+/* Line 1792 of yacc.c */
+#line 249 "gram.y"
+ {
+ add_defaults(DEFAULTS_RUNAS, (yyvsp[(2) - (3)].member), (yyvsp[(3) - (3)].defaults));
}
-break;
-case 16:
-#line 245 "gram.y"
-{
- add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults);
+ break;
+
+ case 16:
+/* Line 1792 of yacc.c */
+#line 252 "gram.y"
+ {
+ add_defaults(DEFAULTS_HOST, (yyvsp[(2) - (3)].member), (yyvsp[(3) - (3)].defaults));
}
-break;
-case 18:
-#line 251 "gram.y"
-{
- list_append(yyvsp[-2].defaults, yyvsp[0].defaults);
- yyval.defaults = yyvsp[-2].defaults;
+ break;
+
+ case 17:
+/* Line 1792 of yacc.c */
+#line 255 "gram.y"
+ {
+ add_defaults(DEFAULTS_CMND, (yyvsp[(2) - (3)].member), (yyvsp[(3) - (3)].defaults));
}
-break;
-case 19:
-#line 257 "gram.y"
-{
- yyval.defaults = new_default(yyvsp[0].string, NULL, true);
+ break;
+
+ case 19:
+/* Line 1792 of yacc.c */
+#line 261 "gram.y"
+ {
+ list_append((yyvsp[(1) - (3)].defaults), (yyvsp[(3) - (3)].defaults));
+ (yyval.defaults) = (yyvsp[(1) - (3)].defaults);
}
-break;
-case 20:
-#line 260 "gram.y"
-{
- yyval.defaults = new_default(yyvsp[0].string, NULL, false);
+ break;
+
+ case 20:
+/* Line 1792 of yacc.c */
+#line 267 "gram.y"
+ {
+ (yyval.defaults) = new_default((yyvsp[(1) - (1)].string), NULL, true);
}
-break;
-case 21:
-#line 263 "gram.y"
-{
- yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true);
+ break;
+
+ case 21:
+/* Line 1792 of yacc.c */
+#line 270 "gram.y"
+ {
+ (yyval.defaults) = new_default((yyvsp[(2) - (2)].string), NULL, false);
}
-break;
-case 22:
-#line 266 "gram.y"
-{
- yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+');
+ break;
+
+ case 22:
+/* Line 1792 of yacc.c */
+#line 273 "gram.y"
+ {
+ (yyval.defaults) = new_default((yyvsp[(1) - (3)].string), (yyvsp[(3) - (3)].string), true);
}
-break;
-case 23:
-#line 269 "gram.y"
-{
- yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-');
+ break;
+
+ case 23:
+/* Line 1792 of yacc.c */
+#line 276 "gram.y"
+ {
+ (yyval.defaults) = new_default((yyvsp[(1) - (3)].string), (yyvsp[(3) - (3)].string), '+');
}
-break;
-case 25:
-#line 275 "gram.y"
-{
- list_append(yyvsp[-2].privilege, yyvsp[0].privilege);
- yyval.privilege = yyvsp[-2].privilege;
+ break;
+
+ case 24:
+/* Line 1792 of yacc.c */
+#line 279 "gram.y"
+ {
+ (yyval.defaults) = new_default((yyvsp[(1) - (3)].string), (yyvsp[(3) - (3)].string), '-');
}
-break;
-case 26:
-#line 281 "gram.y"
-{
+ break;
+
+ case 26:
+/* Line 1792 of yacc.c */
+#line 285 "gram.y"
+ {
+ list_append((yyvsp[(1) - (3)].privilege), (yyvsp[(3) - (3)].privilege));
+ (yyval.privilege) = (yyvsp[(1) - (3)].privilege);
+ }
+ break;
+
+ case 27:
+/* Line 1792 of yacc.c */
+#line 291 "gram.y"
+ {
struct privilege *p = ecalloc(1, sizeof(*p));
- list2tq(&p->hostlist, yyvsp[-2].member);
- list2tq(&p->cmndlist, yyvsp[0].cmndspec);
+ list2tq(&p->hostlist, (yyvsp[(1) - (3)].member));
+ list2tq(&p->cmndlist, (yyvsp[(3) - (3)].cmndspec));
p->prev = p;
/* p->next = NULL; */
- yyval.privilege = p;
+ (yyval.privilege) = p;
}
-break;
-case 27:
-#line 291 "gram.y"
-{
- yyval.member = yyvsp[0].member;
- yyval.member->negated = false;
+ break;
+
+ case 28:
+/* Line 1792 of yacc.c */
+#line 301 "gram.y"
+ {
+ (yyval.member) = (yyvsp[(1) - (1)].member);
+ (yyval.member)->negated = false;
}
-break;
-case 28:
-#line 295 "gram.y"
-{
- yyval.member = yyvsp[0].member;
- yyval.member->negated = true;
+ break;
+
+ case 29:
+/* Line 1792 of yacc.c */
+#line 305 "gram.y"
+ {
+ (yyval.member) = (yyvsp[(2) - (2)].member);
+ (yyval.member)->negated = true;
}
-break;
-case 29:
-#line 301 "gram.y"
-{
- yyval.member = new_member(yyvsp[0].string, ALIAS);
+ break;
+
+ case 30:
+/* Line 1792 of yacc.c */
+#line 311 "gram.y"
+ {
+ (yyval.member) = new_member((yyvsp[(1) - (1)].string), ALIAS);
}
-break;
-case 30:
-#line 304 "gram.y"
-{
- yyval.member = new_member(NULL, ALL);
+ break;
+
+ case 31:
+/* Line 1792 of yacc.c */
+#line 314 "gram.y"
+ {
+ (yyval.member) = new_member(NULL, ALL);
}
-break;
-case 31:
-#line 307 "gram.y"
-{
- yyval.member = new_member(yyvsp[0].string, NETGROUP);
+ break;
+
+ case 32:
+/* Line 1792 of yacc.c */
+#line 317 "gram.y"
+ {
+ (yyval.member) = new_member((yyvsp[(1) - (1)].string), NETGROUP);
}
-break;
-case 32:
-#line 310 "gram.y"
-{
- yyval.member = new_member(yyvsp[0].string, NTWKADDR);
+ break;
+
+ case 33:
+/* Line 1792 of yacc.c */
+#line 320 "gram.y"
+ {
+ (yyval.member) = new_member((yyvsp[(1) - (1)].string), NTWKADDR);
}
-break;
-case 33:
-#line 313 "gram.y"
-{
- yyval.member = new_member(yyvsp[0].string, WORD);
+ break;
+
+ case 34:
+/* Line 1792 of yacc.c */
+#line 323 "gram.y"
+ {
+ (yyval.member) = new_member((yyvsp[(1) - (1)].string), WORD);
}
-break;
-case 35:
-#line 319 "gram.y"
-{
- list_append(yyvsp[-2].cmndspec, yyvsp[0].cmndspec);
+ break;
+
+ case 36:
+/* Line 1792 of yacc.c */
+#line 329 "gram.y"
+ {
+ list_append((yyvsp[(1) - (3)].cmndspec), (yyvsp[(3) - (3)].cmndspec));
#ifdef HAVE_SELINUX
/* propagate role and type */
- if (yyvsp[0].cmndspec->role == NULL)
- yyvsp[0].cmndspec->role = yyvsp[0].cmndspec->prev->role;
- if (yyvsp[0].cmndspec->type == NULL)
- yyvsp[0].cmndspec->type = yyvsp[0].cmndspec->prev->type;
+ if ((yyvsp[(3) - (3)].cmndspec)->role == NULL)
+ (yyvsp[(3) - (3)].cmndspec)->role = (yyvsp[(3) - (3)].cmndspec)->prev->role;
+ if ((yyvsp[(3) - (3)].cmndspec)->type == NULL)
+ (yyvsp[(3) - (3)].cmndspec)->type = (yyvsp[(3) - (3)].cmndspec)->prev->type;
#endif /* HAVE_SELINUX */
#ifdef HAVE_PRIV_SET
/* propagate privs & limitprivs */
- if (yyvsp[0].cmndspec->privs == NULL)
- yyvsp[0].cmndspec->privs = yyvsp[0].cmndspec->prev->privs;
- if (yyvsp[0].cmndspec->limitprivs == NULL)
- yyvsp[0].cmndspec->limitprivs = yyvsp[0].cmndspec->prev->limitprivs;
+ if ((yyvsp[(3) - (3)].cmndspec)->privs == NULL)
+ (yyvsp[(3) - (3)].cmndspec)->privs = (yyvsp[(3) - (3)].cmndspec)->prev->privs;
+ if ((yyvsp[(3) - (3)].cmndspec)->limitprivs == NULL)
+ (yyvsp[(3) - (3)].cmndspec)->limitprivs = (yyvsp[(3) - (3)].cmndspec)->prev->limitprivs;
#endif /* HAVE_PRIV_SET */
/* propagate tags and runas list */
- if (yyvsp[0].cmndspec->tags.nopasswd == UNSPEC)
- yyvsp[0].cmndspec->tags.nopasswd = yyvsp[0].cmndspec->prev->tags.nopasswd;
- if (yyvsp[0].cmndspec->tags.noexec == UNSPEC)
- yyvsp[0].cmndspec->tags.noexec = yyvsp[0].cmndspec->prev->tags.noexec;
- if (yyvsp[0].cmndspec->tags.setenv == UNSPEC &&
- yyvsp[0].cmndspec->prev->tags.setenv != IMPLIED)
- yyvsp[0].cmndspec->tags.setenv = yyvsp[0].cmndspec->prev->tags.setenv;
- if (yyvsp[0].cmndspec->tags.log_input == UNSPEC)
- yyvsp[0].cmndspec->tags.log_input = yyvsp[0].cmndspec->prev->tags.log_input;
- if (yyvsp[0].cmndspec->tags.log_output == UNSPEC)
- yyvsp[0].cmndspec->tags.log_output = yyvsp[0].cmndspec->prev->tags.log_output;
- if ((tq_empty(&yyvsp[0].cmndspec->runasuserlist) &&
- tq_empty(&yyvsp[0].cmndspec->runasgrouplist)) &&
- (!tq_empty(&yyvsp[0].cmndspec->prev->runasuserlist) ||
- !tq_empty(&yyvsp[0].cmndspec->prev->runasgrouplist))) {
- yyvsp[0].cmndspec->runasuserlist = yyvsp[0].cmndspec->prev->runasuserlist;
- yyvsp[0].cmndspec->runasgrouplist = yyvsp[0].cmndspec->prev->runasgrouplist;
+ if ((yyvsp[(3) - (3)].cmndspec)->tags.nopasswd == UNSPEC)
+ (yyvsp[(3) - (3)].cmndspec)->tags.nopasswd = (yyvsp[(3) - (3)].cmndspec)->prev->tags.nopasswd;
+ if ((yyvsp[(3) - (3)].cmndspec)->tags.noexec == UNSPEC)
+ (yyvsp[(3) - (3)].cmndspec)->tags.noexec = (yyvsp[(3) - (3)].cmndspec)->prev->tags.noexec;
+ if ((yyvsp[(3) - (3)].cmndspec)->tags.setenv == UNSPEC &&
+ (yyvsp[(3) - (3)].cmndspec)->prev->tags.setenv != IMPLIED)
+ (yyvsp[(3) - (3)].cmndspec)->tags.setenv = (yyvsp[(3) - (3)].cmndspec)->prev->tags.setenv;
+ if ((yyvsp[(3) - (3)].cmndspec)->tags.log_input == UNSPEC)
+ (yyvsp[(3) - (3)].cmndspec)->tags.log_input = (yyvsp[(3) - (3)].cmndspec)->prev->tags.log_input;
+ if ((yyvsp[(3) - (3)].cmndspec)->tags.log_output == UNSPEC)
+ (yyvsp[(3) - (3)].cmndspec)->tags.log_output = (yyvsp[(3) - (3)].cmndspec)->prev->tags.log_output;
+ if ((tq_empty(&(yyvsp[(3) - (3)].cmndspec)->runasuserlist) &&
+ tq_empty(&(yyvsp[(3) - (3)].cmndspec)->runasgrouplist)) &&
+ (!tq_empty(&(yyvsp[(3) - (3)].cmndspec)->prev->runasuserlist) ||
+ !tq_empty(&(yyvsp[(3) - (3)].cmndspec)->prev->runasgrouplist))) {
+ (yyvsp[(3) - (3)].cmndspec)->runasuserlist = (yyvsp[(3) - (3)].cmndspec)->prev->runasuserlist;
+ (yyvsp[(3) - (3)].cmndspec)->runasgrouplist = (yyvsp[(3) - (3)].cmndspec)->prev->runasgrouplist;
}
- yyval.cmndspec = yyvsp[-2].cmndspec;
+ (yyval.cmndspec) = (yyvsp[(1) - (3)].cmndspec);
}
-break;
-case 36:
-#line 358 "gram.y"
-{
+ break;
+
+ case 37:
+/* Line 1792 of yacc.c */
+#line 368 "gram.y"
+ {
struct cmndspec *cs = ecalloc(1, sizeof(*cs));
- if (yyvsp[-4].runas != NULL) {
- list2tq(&cs->runasuserlist, yyvsp[-4].runas->runasusers);
- list2tq(&cs->runasgrouplist, yyvsp[-4].runas->runasgroups);
- efree(yyvsp[-4].runas);
+ if ((yyvsp[(1) - (5)].runas) != NULL) {
+ list2tq(&cs->runasuserlist, (yyvsp[(1) - (5)].runas)->runasusers);
+ list2tq(&cs->runasgrouplist, (yyvsp[(1) - (5)].runas)->runasgroups);
+ efree((yyvsp[(1) - (5)].runas));
} else {
tq_init(&cs->runasuserlist);
tq_init(&cs->runasgrouplist);
}
#ifdef HAVE_SELINUX
- cs->role = yyvsp[-3].seinfo.role;
- cs->type = yyvsp[-3].seinfo.type;
+ cs->role = (yyvsp[(2) - (5)].seinfo).role;
+ cs->type = (yyvsp[(2) - (5)].seinfo).type;
#endif
#ifdef HAVE_PRIV_SET
- cs->privs = yyvsp[-2].privinfo.privs;
- cs->limitprivs = yyvsp[-2].privinfo.limitprivs;
+ cs->privs = (yyvsp[(3) - (5)].privinfo).privs;
+ cs->limitprivs = (yyvsp[(3) - (5)].privinfo).limitprivs;
#endif
- cs->tags = yyvsp[-1].tag;
- cs->cmnd = yyvsp[0].member;
+ cs->tags = (yyvsp[(4) - (5)].tag);
+ cs->cmnd = (yyvsp[(5) - (5)].member);
cs->prev = cs;
cs->next = NULL;
/* sudo "ALL" implies the SETENV tag */
if (cs->cmnd->type == ALL && !cs->cmnd->negated &&
cs->tags.setenv == UNSPEC)
cs->tags.setenv = IMPLIED;
- yyval.cmndspec = cs;
- }
-break;
-case 37:
-#line 388 "gram.y"
-{
- yyval.member = yyvsp[0].member;
- yyval.member->negated = false;
+ (yyval.cmndspec) = cs;
}
-break;
-case 38:
-#line 392 "gram.y"
-{
- yyval.member = yyvsp[0].member;
- yyval.member->negated = true;
- }
-break;
-case 39:
+ break;
+
+ case 38:
+/* Line 1792 of yacc.c */
#line 398 "gram.y"
-{
- yyval.string = yyvsp[0].string;
+ {
+ (yyval.digest) = new_digest(SUDO_DIGEST_SHA224, (yyvsp[(3) - (3)].string));
}
-break;
-case 40:
-#line 403 "gram.y"
-{
- yyval.string = yyvsp[0].string;
+ break;
+
+ case 39:
+/* Line 1792 of yacc.c */
+#line 401 "gram.y"
+ {
+ (yyval.digest) = new_digest(SUDO_DIGEST_SHA256, (yyvsp[(3) - (3)].string));
}
-break;
-case 41:
-#line 408 "gram.y"
-{
- yyval.seinfo.role = NULL;
- yyval.seinfo.type = NULL;
+ break;
+
+ case 40:
+/* Line 1792 of yacc.c */
+#line 404 "gram.y"
+ {
+ (yyval.digest) = new_digest(SUDO_DIGEST_SHA384, (yyvsp[(3) - (3)].string));
}
-break;
-case 42:
+ break;
+
+ case 41:
+/* Line 1792 of yacc.c */
+#line 407 "gram.y"
+ {
+ (yyval.digest) = new_digest(SUDO_DIGEST_SHA512, (yyvsp[(3) - (3)].string));
+ }
+ break;
+
+ case 42:
+/* Line 1792 of yacc.c */
#line 412 "gram.y"
-{
- yyval.seinfo.role = yyvsp[0].string;
- yyval.seinfo.type = NULL;
+ {
+ (yyval.member) = (yyvsp[(1) - (1)].member);
}
-break;
-case 43:
-#line 416 "gram.y"
-{
- yyval.seinfo.type = yyvsp[0].string;
- yyval.seinfo.role = NULL;
+ break;
+
+ case 43:
+/* Line 1792 of yacc.c */
+#line 415 "gram.y"
+ {
+ if ((yyvsp[(2) - (2)].member)->type != COMMAND) {
+ YYERROR;
+ }
+ /* XXX - yuck */
+ ((struct sudo_command *) (yyvsp[(2) - (2)].member)->name)->digest = (yyvsp[(1) - (2)].digest);
+ (yyval.member) = (yyvsp[(2) - (2)].member);
+ }
+ break;
+
+ case 44:
+/* Line 1792 of yacc.c */
+#line 425 "gram.y"
+ {
+ (yyval.member) = (yyvsp[(1) - (1)].member);
+ (yyval.member)->negated = false;
}
-break;
-case 44:
-#line 420 "gram.y"
-{
- yyval.seinfo.role = yyvsp[-1].string;
- yyval.seinfo.type = yyvsp[0].string;
+ break;
+
+ case 45:
+/* Line 1792 of yacc.c */
+#line 429 "gram.y"
+ {
+ (yyval.member) = (yyvsp[(2) - (2)].member);
+ (yyval.member)->negated = true;
}
-break;
-case 45:
-#line 424 "gram.y"
-{
- yyval.seinfo.type = yyvsp[-1].string;
- yyval.seinfo.role = yyvsp[0].string;
+ break;
+
+ case 46:
+/* Line 1792 of yacc.c */
+#line 435 "gram.y"
+ {
+ (yyval.string) = (yyvsp[(3) - (3)].string);
}
-break;
-case 46:
-#line 430 "gram.y"
-{
- yyval.string = yyvsp[0].string;
+ break;
+
+ case 47:
+/* Line 1792 of yacc.c */
+#line 440 "gram.y"
+ {
+ (yyval.string) = (yyvsp[(3) - (3)].string);
}
-break;
-case 47:
-#line 434 "gram.y"
-{
- yyval.string = yyvsp[0].string;
+ break;
+
+ case 48:
+/* Line 1792 of yacc.c */
+#line 445 "gram.y"
+ {
+ (yyval.seinfo).role = NULL;
+ (yyval.seinfo).type = NULL;
}
-break;
-case 48:
-#line 439 "gram.y"
-{
- yyval.privinfo.privs = NULL;
- yyval.privinfo.limitprivs = NULL;
+ break;
+
+ case 49:
+/* Line 1792 of yacc.c */
+#line 449 "gram.y"
+ {
+ (yyval.seinfo).role = (yyvsp[(1) - (1)].string);
+ (yyval.seinfo).type = NULL;
}
-break;
-case 49:
-#line 443 "gram.y"
-{
- yyval.privinfo.privs = yyvsp[0].string;
- yyval.privinfo.limitprivs = NULL;
+ break;
+
+ case 50:
+/* Line 1792 of yacc.c */
+#line 453 "gram.y"
+ {
+ (yyval.seinfo).type = (yyvsp[(1) - (1)].string);
+ (yyval.seinfo).role = NULL;
}
-break;
-case 50:
-#line 447 "gram.y"
-{
- yyval.privinfo.privs = NULL;
- yyval.privinfo.limitprivs = yyvsp[0].string;
+ break;
+
+ case 51:
+/* Line 1792 of yacc.c */
+#line 457 "gram.y"
+ {
+ (yyval.seinfo).role = (yyvsp[(1) - (2)].string);
+ (yyval.seinfo).type = (yyvsp[(2) - (2)].string);
}
-break;
-case 51:
-#line 451 "gram.y"
-{
- yyval.privinfo.privs = yyvsp[-1].string;
- yyval.privinfo.limitprivs = yyvsp[0].string;
+ break;
+
+ case 52:
+/* Line 1792 of yacc.c */
+#line 461 "gram.y"
+ {
+ (yyval.seinfo).type = (yyvsp[(1) - (2)].string);
+ (yyval.seinfo).role = (yyvsp[(2) - (2)].string);
}
-break;
-case 52:
-#line 455 "gram.y"
-{
- yyval.privinfo.limitprivs = yyvsp[-1].string;
- yyval.privinfo.privs = yyvsp[0].string;
+ break;
+
+ case 53:
+/* Line 1792 of yacc.c */
+#line 467 "gram.y"
+ {
+ (yyval.string) = (yyvsp[(3) - (3)].string);
}
-break;
-case 53:
-#line 460 "gram.y"
-{
- yyval.runas = NULL;
+ break;
+
+ case 54:
+/* Line 1792 of yacc.c */
+#line 471 "gram.y"
+ {
+ (yyval.string) = (yyvsp[(3) - (3)].string);
}
-break;
-case 54:
-#line 463 "gram.y"
-{
- yyval.runas = yyvsp[-1].runas;
+ break;
+
+ case 55:
+/* Line 1792 of yacc.c */
+#line 476 "gram.y"
+ {
+ (yyval.privinfo).privs = NULL;
+ (yyval.privinfo).limitprivs = NULL;
}
-break;
-case 55:
-#line 468 "gram.y"
-{
- yyval.runas = ecalloc(1, sizeof(struct runascontainer));
- yyval.runas->runasusers = new_member(NULL, MYSELF);
+ break;
+
+ case 56:
+/* Line 1792 of yacc.c */
+#line 480 "gram.y"
+ {
+ (yyval.privinfo).privs = (yyvsp[(1) - (1)].string);
+ (yyval.privinfo).limitprivs = NULL;
+ }
+ break;
+
+ case 57:
+/* Line 1792 of yacc.c */
+#line 484 "gram.y"
+ {
+ (yyval.privinfo).privs = NULL;
+ (yyval.privinfo).limitprivs = (yyvsp[(1) - (1)].string);
+ }
+ break;
+
+ case 58:
+/* Line 1792 of yacc.c */
+#line 488 "gram.y"
+ {
+ (yyval.privinfo).privs = (yyvsp[(1) - (2)].string);
+ (yyval.privinfo).limitprivs = (yyvsp[(2) - (2)].string);
+ }
+ break;
+
+ case 59:
+/* Line 1792 of yacc.c */
+#line 492 "gram.y"
+ {
+ (yyval.privinfo).limitprivs = (yyvsp[(1) - (2)].string);
+ (yyval.privinfo).privs = (yyvsp[(2) - (2)].string);
+ }
+ break;
+
+ case 60:
+/* Line 1792 of yacc.c */
+#line 497 "gram.y"
+ {
+ (yyval.runas) = NULL;
+ }
+ break;
+
+ case 61:
+/* Line 1792 of yacc.c */
+#line 500 "gram.y"
+ {
+ (yyval.runas) = (yyvsp[(2) - (3)].runas);
+ }
+ break;
+
+ case 62:
+/* Line 1792 of yacc.c */
+#line 505 "gram.y"
+ {
+ (yyval.runas) = ecalloc(1, sizeof(struct runascontainer));
+ (yyval.runas)->runasusers = new_member(NULL, MYSELF);
/* $$->runasgroups = NULL; */
}
-break;
-case 56:
-#line 473 "gram.y"
-{
- yyval.runas = ecalloc(1, sizeof(struct runascontainer));
- yyval.runas->runasusers = yyvsp[0].member;
+ break;
+
+ case 63:
+/* Line 1792 of yacc.c */
+#line 510 "gram.y"
+ {
+ (yyval.runas) = ecalloc(1, sizeof(struct runascontainer));
+ (yyval.runas)->runasusers = (yyvsp[(1) - (1)].member);
/* $$->runasgroups = NULL; */
}
-break;
-case 57:
-#line 478 "gram.y"
-{
- yyval.runas = ecalloc(1, sizeof(struct runascontainer));
- yyval.runas->runasusers = yyvsp[-2].member;
- yyval.runas->runasgroups = yyvsp[0].member;
- }
-break;
-case 58:
-#line 483 "gram.y"
-{
- yyval.runas = ecalloc(1, sizeof(struct runascontainer));
+ break;
+
+ case 64:
+/* Line 1792 of yacc.c */
+#line 515 "gram.y"
+ {
+ (yyval.runas) = ecalloc(1, sizeof(struct runascontainer));
+ (yyval.runas)->runasusers = (yyvsp[(1) - (3)].member);
+ (yyval.runas)->runasgroups = (yyvsp[(3) - (3)].member);
+ }
+ break;
+
+ case 65:
+/* Line 1792 of yacc.c */
+#line 520 "gram.y"
+ {
+ (yyval.runas) = ecalloc(1, sizeof(struct runascontainer));
/* $$->runasusers = NULL; */
- yyval.runas->runasgroups = yyvsp[0].member;
+ (yyval.runas)->runasgroups = (yyvsp[(2) - (2)].member);
}
-break;
-case 59:
-#line 488 "gram.y"
-{
- yyval.runas = ecalloc(1, sizeof(struct runascontainer));
- yyval.runas->runasusers = new_member(NULL, MYSELF);
+ break;
+
+ case 66:
+/* Line 1792 of yacc.c */
+#line 525 "gram.y"
+ {
+ (yyval.runas) = ecalloc(1, sizeof(struct runascontainer));
+ (yyval.runas)->runasusers = new_member(NULL, MYSELF);
/* $$->runasgroups = NULL; */
}
-break;
-case 60:
-#line 495 "gram.y"
-{
- yyval.tag.nopasswd = yyval.tag.noexec = yyval.tag.setenv =
- yyval.tag.log_input = yyval.tag.log_output = UNSPEC;
+ break;
+
+ case 67:
+/* Line 1792 of yacc.c */
+#line 532 "gram.y"
+ {
+ (yyval.tag).nopasswd = (yyval.tag).noexec = (yyval.tag).setenv =
+ (yyval.tag).log_input = (yyval.tag).log_output = UNSPEC;
}
-break;
-case 61:
-#line 499 "gram.y"
-{
- yyval.tag.nopasswd = true;
+ break;
+
+ case 68:
+/* Line 1792 of yacc.c */
+#line 536 "gram.y"
+ {
+ (yyval.tag).nopasswd = true;
}
-break;
-case 62:
-#line 502 "gram.y"
-{
- yyval.tag.nopasswd = false;
+ break;
+
+ case 69:
+/* Line 1792 of yacc.c */
+#line 539 "gram.y"
+ {
+ (yyval.tag).nopasswd = false;
}
-break;
-case 63:
-#line 505 "gram.y"
-{
- yyval.tag.noexec = true;
+ break;
+
+ case 70:
+/* Line 1792 of yacc.c */
+#line 542 "gram.y"
+ {
+ (yyval.tag).noexec = true;
}
-break;
-case 64:
-#line 508 "gram.y"
-{
- yyval.tag.noexec = false;
+ break;
+
+ case 71:
+/* Line 1792 of yacc.c */
+#line 545 "gram.y"
+ {
+ (yyval.tag).noexec = false;
}
-break;
-case 65:
-#line 511 "gram.y"
-{
- yyval.tag.setenv = true;
+ break;
+
+ case 72:
+/* Line 1792 of yacc.c */
+#line 548 "gram.y"
+ {
+ (yyval.tag).setenv = true;
}
-break;
-case 66:
-#line 514 "gram.y"
-{
- yyval.tag.setenv = false;
+ break;
+
+ case 73:
+/* Line 1792 of yacc.c */
+#line 551 "gram.y"
+ {
+ (yyval.tag).setenv = false;
}
-break;
-case 67:
-#line 517 "gram.y"
-{
- yyval.tag.log_input = true;
+ break;
+
+ case 74:
+/* Line 1792 of yacc.c */
+#line 554 "gram.y"
+ {
+ (yyval.tag).log_input = true;
}
-break;
-case 68:
-#line 520 "gram.y"
-{
- yyval.tag.log_input = false;
+ break;
+
+ case 75:
+/* Line 1792 of yacc.c */
+#line 557 "gram.y"
+ {
+ (yyval.tag).log_input = false;
}
-break;
-case 69:
-#line 523 "gram.y"
-{
- yyval.tag.log_output = true;
+ break;
+
+ case 76:
+/* Line 1792 of yacc.c */
+#line 560 "gram.y"
+ {
+ (yyval.tag).log_output = true;
}
-break;
-case 70:
-#line 526 "gram.y"
-{
- yyval.tag.log_output = false;
+ break;
+
+ case 77:
+/* Line 1792 of yacc.c */
+#line 563 "gram.y"
+ {
+ (yyval.tag).log_output = false;
}
-break;
-case 71:
-#line 531 "gram.y"
-{
- yyval.member = new_member(NULL, ALL);
+ break;
+
+ case 78:
+/* Line 1792 of yacc.c */
+#line 568 "gram.y"
+ {
+ (yyval.member) = new_member(NULL, ALL);
}
-break;
-case 72:
-#line 534 "gram.y"
-{
- yyval.member = new_member(yyvsp[0].string, ALIAS);
+ break;
+
+ case 79:
+/* Line 1792 of yacc.c */
+#line 571 "gram.y"
+ {
+ (yyval.member) = new_member((yyvsp[(1) - (1)].string), ALIAS);
}
-break;
-case 73:
-#line 537 "gram.y"
-{
+ break;
+
+ case 80:
+/* Line 1792 of yacc.c */
+#line 574 "gram.y"
+ {
struct sudo_command *c = ecalloc(1, sizeof(*c));
- c->cmnd = yyvsp[0].command.cmnd;
- c->args = yyvsp[0].command.args;
- yyval.member = new_member((char *)c, COMMAND);
- }
-break;
-case 76:
-#line 549 "gram.y"
-{
+ c->cmnd = (yyvsp[(1) - (1)].command).cmnd;
+ c->args = (yyvsp[(1) - (1)].command).args;
+ (yyval.member) = new_member((char *)c, COMMAND);
+ }
+ break;
+
+ case 83:
+/* Line 1792 of yacc.c */
+#line 586 "gram.y"
+ {
char *s;
- if ((s = alias_add(yyvsp[-2].string, HOSTALIAS, yyvsp[0].member)) != NULL) {
+ if ((s = alias_add((yyvsp[(1) - (3)].string), HOSTALIAS, (yyvsp[(3) - (3)].member))) != NULL) {
yyerror(s);
YYERROR;
}
}
-break;
-case 78:
-#line 559 "gram.y"
-{
- list_append(yyvsp[-2].member, yyvsp[0].member);
- yyval.member = yyvsp[-2].member;
- }
-break;
-case 81:
-#line 569 "gram.y"
-{
+ break;
+
+ case 85:
+/* Line 1792 of yacc.c */
+#line 596 "gram.y"
+ {
+ list_append((yyvsp[(1) - (3)].member), (yyvsp[(3) - (3)].member));
+ (yyval.member) = (yyvsp[(1) - (3)].member);
+ }
+ break;
+
+ case 88:
+/* Line 1792 of yacc.c */
+#line 606 "gram.y"
+ {
char *s;
- if ((s = alias_add(yyvsp[-2].string, CMNDALIAS, yyvsp[0].member)) != NULL) {
+ if ((s = alias_add((yyvsp[(1) - (3)].string), CMNDALIAS, (yyvsp[(3) - (3)].member))) != NULL) {
yyerror(s);
YYERROR;
}
}
-break;
-case 83:
-#line 579 "gram.y"
-{
- list_append(yyvsp[-2].member, yyvsp[0].member);
- yyval.member = yyvsp[-2].member;
- }
-break;
-case 86:
-#line 589 "gram.y"
-{
+ break;
+
+ case 90:
+/* Line 1792 of yacc.c */
+#line 616 "gram.y"
+ {
+ list_append((yyvsp[(1) - (3)].member), (yyvsp[(3) - (3)].member));
+ (yyval.member) = (yyvsp[(1) - (3)].member);
+ }
+ break;
+
+ case 93:
+/* Line 1792 of yacc.c */
+#line 626 "gram.y"
+ {
char *s;
- if ((s = alias_add(yyvsp[-2].string, RUNASALIAS, yyvsp[0].member)) != NULL) {
+ if ((s = alias_add((yyvsp[(1) - (3)].string), RUNASALIAS, (yyvsp[(3) - (3)].member))) != NULL) {
yyerror(s);
YYERROR;
}
}
-break;
-case 89:
-#line 602 "gram.y"
-{
+ break;
+
+ case 96:
+/* Line 1792 of yacc.c */
+#line 639 "gram.y"
+ {
char *s;
- if ((s = alias_add(yyvsp[-2].string, USERALIAS, yyvsp[0].member)) != NULL) {
+ if ((s = alias_add((yyvsp[(1) - (3)].string), USERALIAS, (yyvsp[(3) - (3)].member))) != NULL) {
yyerror(s);
YYERROR;
}
}
-break;
-case 91:
-#line 612 "gram.y"
-{
- list_append(yyvsp[-2].member, yyvsp[0].member);
- yyval.member = yyvsp[-2].member;
+ break;
+
+ case 98:
+/* Line 1792 of yacc.c */
+#line 649 "gram.y"
+ {
+ list_append((yyvsp[(1) - (3)].member), (yyvsp[(3) - (3)].member));
+ (yyval.member) = (yyvsp[(1) - (3)].member);
}
-break;
-case 92:
-#line 618 "gram.y"
-{
- yyval.member = yyvsp[0].member;
- yyval.member->negated = false;
+ break;
+
+ case 99:
+/* Line 1792 of yacc.c */
+#line 655 "gram.y"
+ {
+ (yyval.member) = (yyvsp[(1) - (1)].member);
+ (yyval.member)->negated = false;
}
-break;
-case 93:
-#line 622 "gram.y"
-{
- yyval.member = yyvsp[0].member;
- yyval.member->negated = true;
+ break;
+
+ case 100:
+/* Line 1792 of yacc.c */
+#line 659 "gram.y"
+ {
+ (yyval.member) = (yyvsp[(2) - (2)].member);
+ (yyval.member)->negated = true;
}
-break;
-case 94:
-#line 628 "gram.y"
-{
- yyval.member = new_member(yyvsp[0].string, ALIAS);
+ break;
+
+ case 101:
+/* Line 1792 of yacc.c */
+#line 665 "gram.y"
+ {
+ (yyval.member) = new_member((yyvsp[(1) - (1)].string), ALIAS);
}
-break;
-case 95:
-#line 631 "gram.y"
-{
- yyval.member = new_member(NULL, ALL);
+ break;
+
+ case 102:
+/* Line 1792 of yacc.c */
+#line 668 "gram.y"
+ {
+ (yyval.member) = new_member(NULL, ALL);
}
-break;
-case 96:
-#line 634 "gram.y"
-{
- yyval.member = new_member(yyvsp[0].string, NETGROUP);
+ break;
+
+ case 103:
+/* Line 1792 of yacc.c */
+#line 671 "gram.y"
+ {
+ (yyval.member) = new_member((yyvsp[(1) - (1)].string), NETGROUP);
}
-break;
-case 97:
-#line 637 "gram.y"
-{
- yyval.member = new_member(yyvsp[0].string, USERGROUP);
+ break;
+
+ case 104:
+/* Line 1792 of yacc.c */
+#line 674 "gram.y"
+ {
+ (yyval.member) = new_member((yyvsp[(1) - (1)].string), USERGROUP);
}
-break;
-case 98:
-#line 640 "gram.y"
-{
- yyval.member = new_member(yyvsp[0].string, WORD);
+ break;
+
+ case 105:
+/* Line 1792 of yacc.c */
+#line 677 "gram.y"
+ {
+ (yyval.member) = new_member((yyvsp[(1) - (1)].string), WORD);
}
-break;
-case 100:
-#line 646 "gram.y"
-{
- list_append(yyvsp[-2].member, yyvsp[0].member);
- yyval.member = yyvsp[-2].member;
+ break;
+
+ case 107:
+/* Line 1792 of yacc.c */
+#line 683 "gram.y"
+ {
+ list_append((yyvsp[(1) - (3)].member), (yyvsp[(3) - (3)].member));
+ (yyval.member) = (yyvsp[(1) - (3)].member);
}
-break;
-case 101:
-#line 652 "gram.y"
-{
- yyval.member = yyvsp[0].member;
- yyval.member->negated = false;
+ break;
+
+ case 108:
+/* Line 1792 of yacc.c */
+#line 689 "gram.y"
+ {
+ (yyval.member) = (yyvsp[(1) - (1)].member);
+ (yyval.member)->negated = false;
}
-break;
-case 102:
-#line 656 "gram.y"
-{
- yyval.member = yyvsp[0].member;
- yyval.member->negated = true;
+ break;
+
+ case 109:
+/* Line 1792 of yacc.c */
+#line 693 "gram.y"
+ {
+ (yyval.member) = (yyvsp[(2) - (2)].member);
+ (yyval.member)->negated = true;
}
-break;
-case 103:
-#line 662 "gram.y"
-{
- yyval.member = new_member(yyvsp[0].string, ALIAS);
+ break;
+
+ case 110:
+/* Line 1792 of yacc.c */
+#line 699 "gram.y"
+ {
+ (yyval.member) = new_member((yyvsp[(1) - (1)].string), ALIAS);
}
-break;
-case 104:
-#line 665 "gram.y"
-{
- yyval.member = new_member(NULL, ALL);
+ break;
+
+ case 111:
+/* Line 1792 of yacc.c */
+#line 702 "gram.y"
+ {
+ (yyval.member) = new_member(NULL, ALL);
}
-break;
-case 105:
-#line 668 "gram.y"
-{
- yyval.member = new_member(yyvsp[0].string, WORD);
+ break;
+
+ case 112:
+/* Line 1792 of yacc.c */
+#line 705 "gram.y"
+ {
+ (yyval.member) = new_member((yyvsp[(1) - (1)].string), WORD);
}
-break;
-#line 1667 "gram.c"
+ break;
+
+
+/* Line 1792 of yacc.c */
+#line 2600 "gram.c"
+ default: break;
}
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
{
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state 0 to\
- state %d\n", YYPREFIX, YYFINAL);
-#endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, YYFINAL, yychar, yys);
- }
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
+ {
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ yyerror (yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ }
+# undef YYSYNTAX_ERROR
#endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
}
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state %d \
-to state %d\n", YYPREFIX, *yyssp, yystate);
-#endif
- if (yyssp >= yysslim && yygrowstack())
- {
- goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
-yyoverflow:
- yyerror("yacc stack overflow");
-yyabort:
- if (yyss)
- free(yyss);
- if (yyvs)
- free(yyvs);
- yyss = yyssp = NULL;
- yyvs = yyvsp = NULL;
- yystacksize = 0;
- return (1);
-yyaccept:
- if (yyss)
- free(yyss);
- if (yyvs)
- free(yyvs);
- yyss = yyssp = NULL;
- yyvs = yyvsp = NULL;
- yystacksize = 0;
- return (0);
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (!yypact_value_is_default (yyn))
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#if !defined yyoverflow || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+/* Line 2055 of yacc.c */
+#line 710 "gram.y"
+
+static struct defaults *
+new_default(char *var, char *val, int op)
+{
+ struct defaults *d;
+ debug_decl(new_default, SUDO_DEBUG_PARSER)
+
+ d = ecalloc(1, sizeof(struct defaults));
+ d->var = var;
+ d->val = val;
+ tq_init(&d->binding);
+ /* d->type = 0; */
+ d->op = op;
+ d->prev = d;
+ /* d->next = NULL; */
+
+ debug_return_ptr(d);
+}
+
+static struct member *
+new_member(char *name, int type)
+{
+ struct member *m;
+ debug_decl(new_member, SUDO_DEBUG_PARSER)
+
+ m = ecalloc(1, sizeof(struct member));
+ m->name = name;
+ m->type = type;
+ m->prev = m;
+ /* m->next = NULL; */
+
+ debug_return_ptr(m);
+}
+
+struct sudo_digest *
+new_digest(int digest_type, const char *digest_str)
+{
+ struct sudo_digest *dig;
+ debug_decl(new_digest, SUDO_DEBUG_PARSER)
+
+ dig = emalloc(sizeof(*dig));
+ dig->digest_type = digest_type;
+ dig->digest_str = estrdup(digest_str);
+
+ debug_return_ptr(dig);
+}
+
+/*
+ * Add a list of defaults structures to the defaults list.
+ * The binding, if non-NULL, specifies a list of hosts, users, or
+ * runas users the entries apply to (specified by the type).
+ */
+static void
+add_defaults(int type, struct member *bmem, struct defaults *defs)
+{
+ struct defaults *d;
+ struct member_list binding;
+ debug_decl(add_defaults, SUDO_DEBUG_PARSER)
+
+ /*
+ * We can only call list2tq once on bmem as it will zero
+ * out the prev pointer when it consumes bmem.
+ */
+ list2tq(&binding, bmem);
+
+ /*
+ * Set type and binding (who it applies to) for new entries.
+ */
+ for (d = defs; d != NULL; d = d->next) {
+ d->type = type;
+ d->binding = binding;
+ }
+ tq_append(&defaults, defs);
+
+ debug_return;
+}
+
+/*
+ * Allocate a new struct userspec, populate it, and insert it at the
+ * and of the userspecs list.
+ */
+static void
+add_userspec(struct member *members, struct privilege *privs)
+{
+ struct userspec *u;
+ debug_decl(add_userspec, SUDO_DEBUG_PARSER)
+
+ u = ecalloc(1, sizeof(*u));
+ list2tq(&u->users, members);
+ list2tq(&u->privileges, privs);
+ u->prev = u;
+ /* u->next = NULL; */
+ tq_append(&userspecs, u);
+
+ debug_return;
+}
+
+/*
+ * Free up space used by data structures from a previous parser run and sets
+ * the current sudoers file to path.
+ */
+void
+init_parser(const char *path, bool quiet)
+{
+ struct defaults *d;
+ struct member *m, *binding;
+ struct userspec *us;
+ struct privilege *priv;
+ struct cmndspec *cs;
+ struct sudo_command *c;
+ debug_decl(init_parser, SUDO_DEBUG_PARSER)
+
+ while ((us = tq_pop(&userspecs)) != NULL) {
+ while ((m = tq_pop(&us->users)) != NULL) {
+ efree(m->name);
+ efree(m);
+ }
+ while ((priv = tq_pop(&us->privileges)) != NULL) {
+ struct member *runasuser = NULL, *runasgroup = NULL;
+#ifdef HAVE_SELINUX
+ char *role = NULL, *type = NULL;
+#endif /* HAVE_SELINUX */
+#ifdef HAVE_PRIV_SET
+ char *privs = NULL, *limitprivs = NULL;
+#endif /* HAVE_PRIV_SET */
+
+ while ((m = tq_pop(&priv->hostlist)) != NULL) {
+ efree(m->name);
+ efree(m);
+ }
+ while ((cs = tq_pop(&priv->cmndlist)) != NULL) {
+#ifdef HAVE_SELINUX
+ /* Only free the first instance of a role/type. */
+ if (cs->role != role) {
+ role = cs->role;
+ efree(cs->role);
+ }
+ if (cs->type != type) {
+ type = cs->type;
+ efree(cs->type);
+ }
+#endif /* HAVE_SELINUX */
+#ifdef HAVE_PRIV_SET
+ /* Only free the first instance of privs/limitprivs. */
+ if (cs->privs != privs) {
+ privs = cs->privs;
+ efree(cs->privs);
+ }
+ if (cs->limitprivs != limitprivs) {
+ limitprivs = cs->limitprivs;
+ efree(cs->limitprivs);
+ }
+#endif /* HAVE_PRIV_SET */
+ if (tq_last(&cs->runasuserlist) != runasuser) {
+ runasuser = tq_last(&cs->runasuserlist);
+ while ((m = tq_pop(&cs->runasuserlist)) != NULL) {
+ efree(m->name);
+ efree(m);
+ }
+ }
+ if (tq_last(&cs->runasgrouplist) != runasgroup) {
+ runasgroup = tq_last(&cs->runasgrouplist);
+ while ((m = tq_pop(&cs->runasgrouplist)) != NULL) {
+ efree(m->name);
+ efree(m);
+ }
+ }
+ if (cs->cmnd->type == COMMAND) {
+ c = (struct sudo_command *) cs->cmnd->name;
+ efree(c->cmnd);
+ efree(c->args);
+ }
+ efree(cs->cmnd->name);
+ efree(cs->cmnd);
+ efree(cs);
+ }
+ efree(priv);
+ }
+ efree(us);
+ }
+ tq_init(&userspecs);
+
+ binding = NULL;
+ while ((d = tq_pop(&defaults)) != NULL) {
+ if (tq_last(&d->binding) != binding) {
+ binding = tq_last(&d->binding);
+ while ((m = tq_pop(&d->binding)) != NULL) {
+ if (m->type == COMMAND) {
+ c = (struct sudo_command *) m->name;
+ efree(c->cmnd);
+ efree(c->args);
+ }
+ efree(m->name);
+ efree(m);
+ }
+ }
+ efree(d->var);
+ efree(d->val);
+ efree(d);
+ }
+ tq_init(&defaults);
+
+ init_aliases();
+
+ init_lexer();
+
+ efree(sudoers);
+ sudoers = path ? estrdup(path) : NULL;
+
+ parse_error = false;
+ errorlineno = -1;
+ errorfile = sudoers;
+ sudoers_warnings = !quiet;
+
+ debug_return;
}
diff -up sudo-1.8.6p7/plugins/sudoers/gram.h.digest-backport sudo-1.8.6p7/plugins/sudoers/gram.h
--- sudo-1.8.6p7/plugins/sudoers/gram.h.digest-backport 2013-02-25 20:42:44.000000000 +0100
+++ sudo-1.8.6p7/plugins/sudoers/gram.h 2015-07-06 11:42:33.131904756 +0200
@@ -1,51 +1,177 @@
-#define COMMAND 257
-#define ALIAS 258
-#define DEFVAR 259
-#define NTWKADDR 260
-#define NETGROUP 261
-#define USERGROUP 262
-#define WORD 263
-#define DEFAULTS 264
-#define DEFAULTS_HOST 265
-#define DEFAULTS_USER 266
-#define DEFAULTS_RUNAS 267
-#define DEFAULTS_CMND 268
-#define NOPASSWD 269
-#define PASSWD 270
-#define NOEXEC 271
-#define EXEC 272
-#define SETENV 273
-#define NOSETENV 274
-#define LOG_INPUT 275
-#define NOLOG_INPUT 276
-#define LOG_OUTPUT 277
-#define NOLOG_OUTPUT 278
-#define ALL 279
-#define COMMENT 280
-#define HOSTALIAS 281
-#define CMNDALIAS 282
-#define USERALIAS 283
-#define RUNASALIAS 284
-#define ERROR 285
-#define TYPE 286
-#define ROLE 287
-#define PRIVS 288
-#define LIMITPRIVS 289
-#define MYSELF 290
-#ifndef YYSTYPE_DEFINED
-#define YYSTYPE_DEFINED
-typedef union {
+/* A Bison parser, made by GNU Bison 2.7. */
+
+/* Bison interface for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+#ifndef YY_YY_Y_TAB_H_INCLUDED
+# define YY_YY_Y_TAB_H_INCLUDED
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 1
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ COMMAND = 258,
+ ALIAS = 259,
+ DEFVAR = 260,
+ NTWKADDR = 261,
+ NETGROUP = 262,
+ USERGROUP = 263,
+ WORD = 264,
+ DIGEST = 265,
+ DEFAULTS = 266,
+ DEFAULTS_HOST = 267,
+ DEFAULTS_USER = 268,
+ DEFAULTS_RUNAS = 269,
+ DEFAULTS_CMND = 270,
+ NOPASSWD = 271,
+ PASSWD = 272,
+ NOEXEC = 273,
+ EXEC = 274,
+ SETENV = 275,
+ NOSETENV = 276,
+ LOG_INPUT = 277,
+ NOLOG_INPUT = 278,
+ LOG_OUTPUT = 279,
+ NOLOG_OUTPUT = 280,
+ ALL = 281,
+ COMMENT = 282,
+ HOSTALIAS = 283,
+ CMNDALIAS = 284,
+ USERALIAS = 285,
+ RUNASALIAS = 286,
+ ERROR = 287,
+ TYPE = 288,
+ ROLE = 289,
+ PRIVS = 290,
+ LIMITPRIVS = 291,
+ MYSELF = 292,
+ SHA224 = 293,
+ SHA256 = 294,
+ SHA384 = 295,
+ SHA512 = 296
+ };
+#endif
+/* Tokens. */
+#define COMMAND 258
+#define ALIAS 259
+#define DEFVAR 260
+#define NTWKADDR 261
+#define NETGROUP 262
+#define USERGROUP 263
+#define WORD 264
+#define DIGEST 265
+#define DEFAULTS 266
+#define DEFAULTS_HOST 267
+#define DEFAULTS_USER 268
+#define DEFAULTS_RUNAS 269
+#define DEFAULTS_CMND 270
+#define NOPASSWD 271
+#define PASSWD 272
+#define NOEXEC 273
+#define EXEC 274
+#define SETENV 275
+#define NOSETENV 276
+#define LOG_INPUT 277
+#define NOLOG_INPUT 278
+#define LOG_OUTPUT 279
+#define NOLOG_OUTPUT 280
+#define ALL 281
+#define COMMENT 282
+#define HOSTALIAS 283
+#define CMNDALIAS 284
+#define USERALIAS 285
+#define RUNASALIAS 286
+#define ERROR 287
+#define TYPE 288
+#define ROLE 289
+#define PRIVS 290
+#define LIMITPRIVS 291
+#define MYSELF 292
+#define SHA224 293
+#define SHA256 294
+#define SHA384 295
+#define SHA512 296
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+/* Line 2058 of yacc.c */
+#line 124 "gram.y"
+
struct cmndspec *cmndspec;
struct defaults *defaults;
struct member *member;
struct runascontainer *runas;
struct privilege *privilege;
+ struct sudo_digest *digest;
struct sudo_command command;
struct cmndtag tag;
struct selinux_info seinfo;
struct solaris_privs_info privinfo;
char *string;
int tok;
+
+
+/* Line 2058 of yacc.c */
+#line 155 "y.tab.h"
} YYSTYPE;
-#endif /* YYSTYPE_DEFINED */
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
extern YYSTYPE yylval;
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+#endif /* !YY_YY_Y_TAB_H_INCLUDED */
diff -up sudo-1.8.6p7/plugins/sudoers/gram.y.digest-backport sudo-1.8.6p7/plugins/sudoers/gram.y
--- sudo-1.8.6p7/plugins/sudoers/gram.y.digest-backport 2013-02-25 20:42:44.000000000 +0100
+++ sudo-1.8.6p7/plugins/sudoers/gram.y 2015-07-06 11:42:33.131904756 +0200
@@ -91,6 +91,8 @@ static void add_defaults(int, struct me
static void add_userspec(struct member *, struct privilege *);
static struct defaults *new_default(char *, char *, int);
static struct member *new_member(char *, int);
+static struct sudo_digest *new_digest(int, const char *);
+
void yyerror(const char *);
void
@@ -125,6 +127,7 @@ yyerror(const char *s)
struct member *member;
struct runascontainer *runas;
struct privilege *privilege;
+ struct sudo_digest *digest;
struct sudo_command command;
struct cmndtag tag;
struct selinux_info seinfo;
@@ -141,6 +144,7 @@ yyerror(const char *s)
%token <string> NETGROUP /* a netgroup (+NAME) */
%token <string> USERGROUP /* a usergroup (%NAME) */
%token <string> WORD /* a word */
+%token <string> DIGEST /* a SHA-2 digest */
%token <tok> DEFAULTS /* Defaults entry */
%token <tok> DEFAULTS_HOST /* Host-specific defaults entry */
%token <tok> DEFAULTS_USER /* User-specific defaults entry */
@@ -168,8 +172,12 @@ yyerror(const char *s)
%token <tok> TYPE /* SELinux type */
%token <tok> ROLE /* SELinux role */
%token <tok> PRIVS /* Solaris privileges */
-%token <tok> LIMITPRIVS /* Solaris limit privileges */
+%token <tok> LIMITPRIVS /* Solaris limit privileges */
%token <tok> MYSELF /* run as myself, not another user */
+%token <tok> SHA224 /* sha224 digest */
+%token <tok> SHA256 /* sha256 digest */
+%token <tok> SHA384 /* sha384 digest */
+%token <tok> SHA512 /* sha512 digest */
%type <cmndspec> cmndspec
%type <cmndspec> cmndspeclist
@@ -177,6 +185,7 @@ yyerror(const char *s)
%type <defaults> defaults_list
%type <member> cmnd
%type <member> opcmnd
+%type <member> digcmnd
%type <member> cmndlist
%type <member> host
%type <member> hostlist
@@ -198,6 +207,7 @@ yyerror(const char *s)
%type <privinfo> solarisprivs
%type <string> privsspec
%type <string> limitprivsspec
+%type <digest> digest
%%
@@ -355,7 +365,7 @@ cmndspeclist : cmndspec
}
;
-cmndspec : runasspec selinux solarisprivs cmndtag opcmnd {
+cmndspec : runasspec selinux solarisprivs cmndtag digcmnd {
struct cmndspec *cs = ecalloc(1, sizeof(*cs));
if ($1 != NULL) {
list2tq(&cs->runasuserlist, $1->runasusers);
@@ -385,6 +395,33 @@ cmndspec : runasspec selinux solarispriv
}
;
+digest : SHA224 ':' DIGEST {
+ $$ = new_digest(SUDO_DIGEST_SHA224, $3);
+ }
+ | SHA256 ':' DIGEST {
+ $$ = new_digest(SUDO_DIGEST_SHA256, $3);
+ }
+ | SHA384 ':' DIGEST {
+ $$ = new_digest(SUDO_DIGEST_SHA384, $3);
+ }
+ | SHA512 ':' DIGEST {
+ $$ = new_digest(SUDO_DIGEST_SHA512, $3);
+ }
+ ;
+
+digcmnd : opcmnd {
+ $$ = $1;
+ }
+ | digest opcmnd {
+ if ($2->type != COMMAND) {
+ YYERROR;
+ }
+ /* XXX - yuck */
+ ((struct sudo_command *) $2->name)->digest = $1;
+ $$ = $2;
+ }
+ ;
+
opcmnd : cmnd {
$$ = $1;
$$->negated = false;
@@ -575,8 +612,8 @@ cmndalias : ALIAS '=' cmndlist {
}
;
-cmndlist : opcmnd
- | cmndlist ',' opcmnd {
+cmndlist : digcmnd
+ | cmndlist ',' digcmnd {
list_append($1, $3);
$$ = $1;
}
@@ -704,6 +741,19 @@ new_member(char *name, int type)
debug_return_ptr(m);
}
+struct sudo_digest *
+new_digest(int digest_type, const char *digest_str)
+{
+ struct sudo_digest *dig;
+ debug_decl(new_digest, SUDO_DEBUG_PARSER)
+
+ dig = emalloc(sizeof(*dig));
+ dig->digest_type = digest_type;
+ dig->digest_str = estrdup(digest_str);
+
+ debug_return_ptr(dig);
+}
+
/*
* Add a list of defaults structures to the defaults list.
* The binding, if non-NULL, specifies a list of hosts, users, or
diff -up sudo-1.8.6p7/plugins/sudoers/hexchar.c.digest-backport sudo-1.8.6p7/plugins/sudoers/hexchar.c
--- sudo-1.8.6p7/plugins/sudoers/hexchar.c.digest-backport 2015-07-06 11:42:33.131904756 +0200
+++ sudo-1.8.6p7/plugins/sudoers/hexchar.c 2015-07-06 11:42:33.131904756 +0200
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2013 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * 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.
+ */
+
+#include <config.h>
+
+#include <sys/types.h>
+#include <stdio.h>
+
+#include "missing.h"
+#include "sudo_debug.h"
+#include "error.h"
+
+int
+hexchar(const char *s)
+{
+ unsigned char result[2];
+ int i;
+ debug_decl(hexchar, SUDO_DEBUG_UTIL)
+
+ for (i = 0; i < 2; i++) {
+ switch (s[i]) {
+ case '0':
+ result[i] = 0;
+ break;
+ case '1':
+ result[i] = 1;
+ break;
+ case '2':
+ result[i] = 2;
+ break;
+ case '3':
+ result[i] = 3;
+ break;
+ case '4':
+ result[i] = 4;
+ break;
+ case '5':
+ result[i] = 5;
+ break;
+ case '6':
+ result[i] = 6;
+ break;
+ case '7':
+ result[i] = 7;
+ break;
+ case '8':
+ result[i] = 8;
+ break;
+ case '9':
+ result[i] = 9;
+ break;
+ case 'A':
+ case 'a':
+ result[i] = 10;
+ break;
+ case 'B':
+ case 'b':
+ result[i] = 11;
+ break;
+ case 'C':
+ case 'c':
+ result[i] = 12;
+ break;
+ case 'D':
+ case 'd':
+ result[i] = 13;
+ break;
+ case 'E':
+ case 'e':
+ result[i] = 14;
+ break;
+ case 'F':
+ case 'f':
+ result[i] = 15;
+ break;
+ default:
+ /* Should not happen. */
+ errorx(1, "internal error, \\x%s not in proper hex format", s);
+ }
+ }
+ debug_return_int((result[0] << 4) | result[1]);
+}
diff -up sudo-1.8.6p7/plugins/sudoers/ldap.c.digest-backport sudo-1.8.6p7/plugins/sudoers/ldap.c
--- sudo-1.8.6p7/plugins/sudoers/ldap.c.digest-backport 2015-07-06 11:42:33.123904876 +0200
+++ sudo-1.8.6p7/plugins/sudoers/ldap.c 2015-07-06 12:05:06.636565082 +0200
@@ -805,6 +805,68 @@ sudo_ldap_check_runas(LDAP *ld, LDAPMess
debug_return_bool(ret);
}
+static struct sudo_digest *
+sudo_ldap_extract_digest(char **cmnd, struct sudo_digest *digest)
+{
+ char *ep, *cp = *cmnd;
+ int digest_type = SUDO_DIGEST_INVALID;
+ debug_decl(sudo_ldap_extract_digest, SUDO_DEBUG_LDAP)
+
+ /*
+ * Check for and extract a digest prefix, e.g.
+ * sha224:d06a2617c98d377c250edd470fd5e576327748d82915d6e33b5f8db1 /bin/ls
+ */
+ if (cp[0] == 's' && cp[1] == 'h' && cp[2] == 'a') {
+ switch (cp[3]) {
+ case '2':
+ if (cp[4] == '2' && cp[5] == '4')
+ digest_type = SUDO_DIGEST_SHA224;
+ else if (cp[4] == '5' && cp[5] == '6')
+ digest_type = SUDO_DIGEST_SHA256;
+ break;
+ case '3':
+ if (cp[4] == '8' && cp[5] == '4')
+ digest_type = SUDO_DIGEST_SHA384;
+ break;
+ case '5':
+ if (cp[4] == '1' && cp[5] == '2')
+ digest_type = SUDO_DIGEST_SHA512;
+ break;
+ }
+ if (digest_type != SUDO_DIGEST_INVALID) {
+ cp += 6;
+ while (isblank((unsigned char)*cp))
+ cp++;
+ if (*cp == ':') {
+ cp++;
+ while (isblank((unsigned char)*cp))
+ cp++;
+ ep = cp;
+ while (*ep != '\0' && !isblank((unsigned char)*ep))
+ ep++;
+ if (*ep != '\0') {
+ digest->digest_type = digest_type;
+ digest->digest_str = strndup(cp, (size_t)(ep - cp));
+ if (digest->digest_str == NULL) {
+ debug_return_ptr(NULL);
+ }
+ cp = ep + 1;
+ while (isblank((unsigned char)*cp))
+ cp++;
+ *cmnd = cp;
+ DPRINTF(("%s digest %s for %s",
+ digest_type == SUDO_DIGEST_SHA224 ? "sha224" :
+ digest_type == SUDO_DIGEST_SHA256 ? "sha256" :
+ digest_type == SUDO_DIGEST_SHA384 ? "sha384" :
+ "sha512", digest->digest_str, cp), 2);
+ debug_return_ptr(digest);
+ }
+ }
+ }
+ }
+ debug_return_ptr(NULL);
+}
+
/*
* Walk through search results and return true if we have a command match,
* false if disallowed and UNSPEC if not matched.
@@ -812,6 +874,7 @@ sudo_ldap_check_runas(LDAP *ld, LDAPMess
static int
sudo_ldap_check_command(LDAP *ld, LDAPMessage *entry, int *setenv_implied)
{
+ struct sudo_digest digest, *allowed_digest = NULL;
struct berval **bv, **p;
char *allowed_cmnd, *allowed_args, *val;
bool foundbang;
@@ -836,6 +899,9 @@ sudo_ldap_check_command(LDAP *ld, LDAPMe
continue;
}
+ /* check for sha-2 digest */
+ allowed_digest = sudo_ldap_extract_digest(&val, &digest);
+
/* check for !command */
if (*val == '!') {
foundbang = true;
@@ -851,7 +917,7 @@ sudo_ldap_check_command(LDAP *ld, LDAPMe
*allowed_args++ = '\0';
/* check the command like normal */
- if (command_matches(allowed_cmnd, allowed_args)) {
+ if (command_matches(allowed_cmnd, allowed_args, allowed_digest)) {
/*
* If allowed (no bang) set ret but keep on checking.
* If disallowed (bang), exit loop.
@@ -861,6 +927,9 @@ sudo_ldap_check_command(LDAP *ld, LDAPMe
DPRINTF(("ldap sudoCommand '%s' ... %s", val,
ret == true ? "MATCH!" : "not"), 2);
+ if (allowed_digest != NULL)
+ free(allowed_digest->digest_str);
+
efree(allowed_cmnd); /* cleanup */
}
diff -up sudo-1.8.6p7/plugins/sudoers/Makefile.in.digest-backport sudo-1.8.6p7/plugins/sudoers/Makefile.in
--- sudo-1.8.6p7/plugins/sudoers/Makefile.in.digest-backport 2015-07-06 11:42:33.112905042 +0200
+++ sudo-1.8.6p7/plugins/sudoers/Makefile.in 2015-07-06 11:42:33.132904741 +0200
@@ -50,6 +50,7 @@ LT_LIBS = $(top_builddir)/common/libcomm
LIBS = $(LT_LIBS) @LIBINTL@
NET_LIBS = @NET_LIBS@
SUDOERS_LIBS = @SUDOERS_LIBS@ @AFS_LIBS@ @GETGROUPS_LIB@ $(LIBS) $(NET_LIBS) @ZLIB@
+LIBPARSESUDOERS_LIBS = @LIBPARSESUDOERS_LIBS@
REPLAY_LIBS = @REPLAY_LIBS@ @ZLIB@
# C preprocessor flags
@@ -129,7 +130,7 @@ AUTH_OBJS = sudo_auth.lo @AUTH_OBJS@
LIBPARSESUDOERS_OBJS = alias.lo audit.lo defaults.lo gram.lo match.lo \
match_addr.lo pwutil.lo timestr.lo toke.lo \
- toke_util.lo redblack.lo
+ toke_util.lo redblack.lo hexchar.lo filedigest.lo
SUDOERS_OBJS = $(AUTH_OBJS) boottime.lo check.lo env.lo goodpath.lo \
group_plugin.lo find_path.lo interfaces.lo logging.lo \
@@ -184,7 +185,7 @@ Makefile: $(srcdir)/Makefile.in
(cd $(top_builddir) && ./config.status --file plugins/sudoers/Makefile)
libparsesudoers.la: $(LIBPARSESUDOERS_OBJS)
- $(LIBTOOL) --mode=link $(CC) -o $@ $(LIBPARSESUDOERS_OBJS) -no-install
+ $(LIBTOOL) --mode=link $(CC) -o $@ $(LIBPARSESUDOERS_OBJS) $(LIBPARSESUDOERS_LIBS) -no-install
sudoers.la: $(SUDOERS_OBJS) $(LT_LIBS) libparsesudoers.la @LT_LDDEP@
$(LIBTOOL) @LT_STATIC@ --mode=link $(CC) $(LDFLAGS) $(LT_LDFLAGS) -o $@ $(SUDOERS_OBJS) libparsesudoers.la $(SUDOERS_LIBS) -module -avoid-version -rpath $(plugindir)
@@ -512,6 +513,10 @@ env.lo: $(srcdir)/env.c $(top_builddir)/
error.o: $(top_srcdir)/src/error.c $(top_builddir)/config.h \
$(incdir)/missing.h $(incdir)/error.h $(incdir)/gettext.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(top_srcdir)/src/error.c
+filedigest.lo: $(srcdir)/filedigest.c $(top_builddir)/config.h $(incdir)/missing.h \
+ $(incdir)/sudo_debug.h $(incdir)/error.h
+ $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/filedigest.c
+filedigest.o: filedigest.lo
find_path.lo: $(srcdir)/find_path.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \
@@ -565,6 +570,10 @@ group_plugin.lo: $(srcdir)/group_plugin.
$(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/group_plugin.c
group_plugin.o: group_plugin.lo
+hexchar.lo: $(srcdir)/hexchar.c $(top_builddir)/config.h $(incdir)/missing.h \
+ $(incdir)/sudo_debug.h $(incdir)/error.h
+ $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/hexchar.c
+hexchar.o: hexchar.lo
interfaces.lo: $(srcdir)/interfaces.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \
diff -up sudo-1.8.6p7/plugins/sudoers/match.c.digest-backport sudo-1.8.6p7/plugins/sudoers/match.c
--- sudo-1.8.6p7/plugins/sudoers/match.c.digest-backport 2015-07-06 11:42:33.120904922 +0200
+++ sudo-1.8.6p7/plugins/sudoers/match.c 2015-07-06 11:42:33.132904741 +0200
@@ -53,9 +53,6 @@
#ifdef HAVE_NETGROUP_H
# include <netgroup.h>
#endif /* HAVE_NETGROUP_H */
-#include <ctype.h>
-#include <pwd.h>
-#include <grp.h>
#include <netdb.h>
#ifdef HAVE_DIRENT_H
# include <dirent.h>
@@ -73,9 +70,14 @@
# include <ndir.h>
# endif
#endif
+#include <ctype.h>
+#include <pwd.h>
+#include <grp.h>
+#include <errno.h>
#include "sudoers.h"
#include "parse.h"
+#include "filedigest.h"
#include <gram.h>
#ifndef HAVE_FNMATCH
@@ -90,7 +92,7 @@ static struct member_list empty;
static bool command_matches_dir(char *, size_t);
static bool command_matches_glob(char *, char *);
static bool command_matches_fnmatch(char *, char *);
-static bool command_matches_normal(char *, char *);
+static bool command_matches_normal(char *, char *, struct sudo_digest *);
/*
* Returns true if string 's' contains meta characters.
@@ -339,7 +341,7 @@ cmnd_matches(struct member *m)
break;
case COMMAND:
c = (struct sudo_command *)m->name;
- if (command_matches(c->cmnd, c->args))
+ if (command_matches(c->cmnd, c->args, c->digest))
matched = !m->negated;
break;
}
@@ -347,9 +349,7 @@ cmnd_matches(struct member *m)
}
static bool
-command_args_match(sudoers_cmnd, sudoers_args)
- char *sudoers_cmnd;
- char *sudoers_args;
+command_args_match(char *sudoers_cmnd, char *sudoers_args)
{
int flags = 0;
debug_decl(command_args_match, SUDO_DEBUG_MATCH)
@@ -380,7 +380,7 @@ command_args_match(sudoers_cmnd, sudoers
* otherwise, return true if user_cmnd names one of the inodes in path.
*/
bool
-command_matches(char *sudoers_cmnd, char *sudoers_args)
+command_matches(char *sudoers_cmnd, char *sudoers_args, struct sudo_digest *digest)
{
debug_decl(command_matches, SUDO_DEBUG_MATCH)
@@ -412,7 +412,7 @@ command_matches(char *sudoers_cmnd, char
debug_return_bool(command_matches_fnmatch(sudoers_cmnd, sudoers_args));
debug_return_bool(command_matches_glob(sudoers_cmnd, sudoers_args));
}
- debug_return_bool(command_matches_normal(sudoers_cmnd, sudoers_args));
+ debug_return_bool(command_matches_normal(sudoers_cmnd, sudoers_args, digest));
}
static bool
@@ -509,8 +509,119 @@ command_matches_glob(char *sudoers_cmnd,
debug_return_bool(false);
}
+/*
+ * Decode a NUL-terminated string in base64 format and store the
+ * result in dst.
+ */
+size_t
+base64_decode(const char *str, unsigned char *dst, size_t dsize)
+{
+ static const char b64[] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ const unsigned char *dst0 = dst;
+ const unsigned char *dend = dst + dsize;
+ unsigned char ch[4];
+ char *pos;
+ int i;
+ debug_decl(base64_decode, SUDO_DEBUG_MATCH)
+
+ /*
+ * Convert from base64 to binary. Each base64 char holds 6 bits of data
+ * so 4 base64 chars equals 3 chars of data.
+ * Padding (with the '=' char) may or may not be present.
+ */
+ while (*str != '\0') {
+ for (i = 0; i < 4; i++) {
+ switch (*str) {
+ case '=':
+ str++;
+ /* FALLTHROUGH */
+ case '\0':
+ ch[i] = '=';
+ break;
+ default:
+ if ((pos = strchr(b64, *str++)) == NULL)
+ debug_return_size_t((size_t)-1);
+ ch[i] = (unsigned char)(pos - b64);
+ break;
+ }
+ }
+ if (ch[0] == '=' || ch[1] == '=' || dst == dend)
+ break;
+ *dst++ = (ch[0] << 2) | ((ch[1] & 0x30) >> 4);
+ if (ch[2] == '=' || dst == dend)
+ break;
+ *dst++ = ((ch[1] & 0x0f) << 4) | ((ch[2] & 0x3c) >> 2);
+ if (ch[3] == '=' || dst == dend)
+ break;
+ *dst++ = ((ch[2] & 0x03) << 6) | ch[3];
+ }
+ debug_return_size_t((size_t)(dst - dst0));
+}
+
+static bool
+digest_matches(char *file, struct sudo_digest *sd)
+{
+ unsigned char *sudoers_digest = NULL;
+ size_t sudoers_digest_size;
+ unsigned char *file_digest = NULL;
+ size_t file_digest_size;
+ int i;
+ debug_decl(digest_matches, SUDO_DEBUG_MATCH);
+
+ if (sudo_filedigest(file, sd->digest_type,
+ &file_digest, &file_digest_size) != 0) {
+ warningx(_("Cannot compute digest type %d for %s"), sd->digest_type, file);
+ debug_return_bool(false);
+ }
+
+ /* First convert the digest from sudoers from ascii to binary. */
+ sudoers_digest = emalloc(file_digest_size);
+ sudoers_digest_size = file_digest_size;
+
+ if (sudoers_digest == NULL) {
+ efree(file_digest);
+ debug_return_bool(false);
+ }
+
+ /* Check whether the digest is specifed as a hexchar string */
+ if (strlen(sd->digest_str) == file_digest_size * 2) {
+ for (i = 0; i < sudoers_digest_size; i++) {
+ if (!isxdigit((unsigned char)sd->digest_str[i + i]) ||
+ !isxdigit((unsigned char)sd->digest_str[i + i + 1])) {
+ warningx(_("digest for %s (%s) is not in %s form"), file,
+ sd->digest_str, sd->digest_str);
+ goto bad_format;
+ }
+ sudoers_digest[i] = hexchar(&sd->digest_str[i + i]);
+ }
+ }
+ /* Try base64 */
+ else {
+ if (base64_decode(sd->digest_str, sudoers_digest,
+ sudoers_digest_size) != file_digest_size) {
+ goto bad_format;
+ }
+ }
+
+ bool match = memcmp(file_digest, sudoers_digest, file_digest_size) == 0;
+
+ efree(sudoers_digest);
+ efree(file_digest);
+
+ debug_return_bool(match);
+ bad_format:
+ warningx(_("digest for %s (%s) is not in %s form"), file,
+ sd->digest_str, sd->digest_str);
+ if (sudoers_digest)
+ efree(sudoers_digest);
+ if (file_digest)
+ efree(file_digest);
+ debug_return_bool(false);
+}
+
static bool
-command_matches_normal(char *sudoers_cmnd, char *sudoers_args)
+command_matches_normal(char *sudoers_cmnd, char *sudoers_args, struct sudo_digest *digest)
{
struct stat sudoers_stat;
char *base;
@@ -541,12 +652,15 @@ command_matches_normal(char *sudoers_cmn
(user_stat->st_dev != sudoers_stat.st_dev ||
user_stat->st_ino != sudoers_stat.st_ino))
debug_return_bool(false);
- if (command_args_match(sudoers_cmnd, sudoers_args)) {
- efree(safe_cmnd);
- safe_cmnd = estrdup(sudoers_cmnd);
- debug_return_bool(true);
+ if (!command_args_match(sudoers_cmnd, sudoers_args))
+ debug_return_bool(false);
+ if (digest != NULL && !digest_matches(sudoers_cmnd, digest)) {
+ /* XXX - log functions not available but we should log very loudly */
+ debug_return_bool(false);
}
- debug_return_bool(false);
+ efree(safe_cmnd);
+ safe_cmnd = estrdup(sudoers_cmnd);
+ debug_return_bool(true);
}
/*
diff -up sudo-1.8.6p7/plugins/sudoers/parse.h.digest-backport sudo-1.8.6p7/plugins/sudoers/parse.h
--- sudo-1.8.6p7/plugins/sudoers/parse.h.digest-backport 2015-07-06 11:42:33.120904922 +0200
+++ sudo-1.8.6p7/plugins/sudoers/parse.h 2015-07-06 11:42:33.132904741 +0200
@@ -27,12 +27,21 @@
#undef IMPLIED
#define IMPLIED 2
+#include "filedigest.h"
+
+struct sudo_digest {
+ int digest_type;
+ char *digest_str;
+};
+
/*
- * A command with args. XXX - merge into struct member.
+ * A command with args and digest.
+ * XXX - merge into struct member.
*/
struct sudo_command {
char *cmnd;
char *args;
+ struct sudo_digest *digest;
};
/*
@@ -117,6 +126,7 @@ struct cmndspec {
struct member_list runasuserlist; /* list of runas users */
struct member_list runasgrouplist; /* list of runas groups */
struct member *cmnd; /* command to allow/deny */
+ char *digest; /* optional command digest */
struct cmndtag tags; /* tag specificaion */
#ifdef HAVE_SELINUX
char *role, *type; /* SELinux role and type */
@@ -183,11 +193,14 @@ void init_aliases(void);
/* gram.c */
void init_parser(const char *, bool);
+/* hexchar.c */
+int hexchar(const char *s);
+
/* match_addr.c */
bool addr_matches(char *n);
/* match.c */
-bool command_matches(char *sudoers_cmnd, char *sudoers_args);
+bool command_matches(char *sudoers_cmnd, char *sudoers_args, struct sudo_digest *);
bool group_matches(const char *sudoers_group, const struct group *gr);
bool hostname_matches(const char *shost, const char *lhost, const char *pattern);
bool netgr_matches(const char *netgr, const char *lhost, const char *shost, const char *user);
diff -up sudo-1.8.6p7/plugins/sudoers/sssd.c.digest-backport sudo-1.8.6p7/plugins/sudoers/sssd.c
--- sudo-1.8.6p7/plugins/sudoers/sssd.c.digest-backport 2015-07-06 11:42:33.123904876 +0200
+++ sudo-1.8.6p7/plugins/sudoers/sssd.c 2015-07-06 12:03:21.220149218 +0200
@@ -812,6 +812,74 @@ sudo_sss_check_bool(struct sudo_sss_hand
}
/*
+ * If a digest prefix is present, fills in struct sudo_digest
+ * and returns a pointer to it, updating cmnd to point to the
+ * command after the digest.
+ */
+static struct sudo_digest *
+sudo_sss_extract_digest(char **cmnd, struct sudo_digest *digest)
+{
+ char *ep, *cp = *cmnd;
+ int digest_type = SUDO_DIGEST_INVALID;
+ debug_decl(sudo_sss_check_command, SUDO_DEBUG_SSSD)
+
+ /*
+ * Check for and extract a digest prefix, e.g.
+ * sha224:d06a2617c98d377c250edd470fd5e576327748d82915d6e33b5f8db1 /bin/ls
+ */
+ if (cp[0] == 's' && cp[1] == 'h' && cp[2] == 'a') {
+ switch (cp[3]) {
+ case '2':
+ if (cp[4] == '2' && cp[5] == '4')
+ digest_type = SUDO_DIGEST_SHA224;
+ else if (cp[4] == '5' && cp[5] == '6')
+ digest_type = SUDO_DIGEST_SHA256;
+ break;
+ case '3':
+ if (cp[4] == '8' && cp[5] == '4')
+ digest_type = SUDO_DIGEST_SHA384;
+ break;
+ case '5':
+ if (cp[4] == '1' && cp[5] == '2')
+ digest_type = SUDO_DIGEST_SHA512;
+ break;
+ }
+ if (digest_type != SUDO_DIGEST_INVALID) {
+ cp += 6;
+ while (isblank((unsigned char)*cp))
+ cp++;
+ if (*cp == ':') {
+ cp++;
+ while (isblank((unsigned char)*cp))
+ cp++;
+ ep = cp;
+ while (*ep != '\0' && !isblank((unsigned char)*ep))
+ ep++;
+ if (*ep != '\0') {
+ digest->digest_type = digest_type;
+ digest->digest_str = strndup(cp, (size_t)(ep - cp));
+ if (digest->digest_str == NULL) {
+ debug_return_ptr(NULL);
+ }
+ cp = ep + 1;
+ while (isblank((unsigned char)*cp))
+ cp++;
+ *cmnd = cp;
+ sudo_debug_printf(SUDO_DEBUG_INFO,
+ "%s digest %s for %s",
+ digest_type == SUDO_DIGEST_SHA224 ? "sha224" :
+ digest_type == SUDO_DIGEST_SHA256 ? "sha256" :
+ digest_type == SUDO_DIGEST_SHA384 ? "sha384" :
+ "sha512", digest->digest_str, cp);
+ debug_return_ptr(digest);
+ }
+ }
+ }
+ }
+ debug_return_ptr(NULL);
+}
+
+/*
* Walk through search results and return true if we have a command match,
* false if disallowed and UNSPEC if not matched.
*/
@@ -822,6 +890,7 @@ sudo_sss_check_command(struct sudo_sss_h
char **val_array = NULL, *val;
char *allowed_cmnd, *allowed_args;
int i, foundbang, ret = UNSPEC;
+ struct sudo_digest digest, *allowed_digest = NULL;
debug_decl(sudo_sss_check_command, SUDO_DEBUG_SSSD);
if (rule == NULL)
@@ -853,6 +922,9 @@ sudo_sss_check_command(struct sudo_sss_h
continue;
}
+ /* check for sha-2 digest */
+ allowed_digest = sudo_sss_extract_digest(&val, &digest);
+
/* check for !command */
if (*val == '!') {
foundbang = true;
@@ -868,7 +940,7 @@ sudo_sss_check_command(struct sudo_sss_h
*allowed_args++ = '\0';
/* check the command like normal */
- if (command_matches(allowed_cmnd, allowed_args)) {
+ if (command_matches(allowed_cmnd, allowed_args, allowed_digest)) {
/*
* If allowed (no bang) set ret but keep on checking.
* If disallowed (bang), exit loop.
@@ -878,6 +950,8 @@ sudo_sss_check_command(struct sudo_sss_h
sudo_debug_printf(SUDO_DEBUG_INFO, "sssd/ldap sudoCommand '%s' ... %s",
val, ret == true ? "MATCH!" : "not");
+ if (allowed_digest != NULL)
+ free(allowed_digest->digest_str);
efree(allowed_cmnd); /* cleanup */
}
diff -up sudo-1.8.6p7/plugins/sudoers/toke.c.digest-backport sudo-1.8.6p7/plugins/sudoers/toke.c
--- sudo-1.8.6p7/plugins/sudoers/toke.c.digest-backport 2015-07-06 11:42:33.114905012 +0200
+++ sudo-1.8.6p7/plugins/sudoers/toke.c 2015-07-06 11:42:33.135904696 +0200
@@ -1,71 +1,114 @@
#include <config.h>
-/* $OpenBSD: flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $ */
-/* A lexical scanner generated by flex */
+#line 3 "lex.yy.c"
-/* Scanner skeleton version:
- * $Header: /home/cvs/openbsd/src/usr.bin/lex/flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $
- */
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+/* begin standard C headers. */
#include <stdio.h>
+#include <string.h>
#include <errno.h>
+#include <stdlib.h>
+/* end standard C headers. */
-/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
-#ifdef c_plusplus
-#ifndef __cplusplus
-#define __cplusplus
-#endif
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
#endif
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
-#ifdef __cplusplus
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
-#include <stdlib.h>
-#include <unistd.h>
+#endif /* ! C99 */
-/* Use prototypes in function declarations. */
-#define YY_USE_PROTOS
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
#else /* ! __cplusplus */
-#ifdef __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
-#define YY_USE_PROTOS
#define YY_USE_CONST
-#endif /* __STDC__ */
+#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
-#ifdef __TURBOC__
- #pragma warn -rch
- #pragma warn -use
-#include <io.h>
-#include <stdlib.h>
-#define YY_USE_CONST
-#define YY_USE_PROTOS
-#endif
-
#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif
-
-#ifdef YY_USE_PROTOS
-#define YY_PROTO(proto) proto
-#else
-#define YY_PROTO(proto) ()
-#endif
-
/* Returned upon end-of-file. */
#define YY_NULL 0
@@ -80,71 +123,70 @@
* but we do it the disgusting crufty way forced on us by the ()-less
* definition of BEGIN.
*/
-#define BEGIN yy_start = 1 + 2 *
+#define BEGIN (yy_start) = 1 + 2 *
/* Translate the current start state into a value that can be later handed
* to BEGIN to return to the state. The YYSTATE alias is for lex
* compatibility.
*/
-#define YY_START ((yy_start - 1) / 2)
+#define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin )
+#define YY_NEW_FILE yyrestart(yyin )
#define YY_END_OF_BUFFER_CHAR 0
/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
-extern int yyleng;
extern FILE *yyin, *yyout;
#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
-/* The funky do-while in the following #define is used to turn the definition
- * int a single C statement (which needs a semi-colon terminator). This
- * avoids problems with code like:
- *
- * if ( condition_holds )
- * yyless( 5 );
- * else
- * do_something_else();
- *
- * Prior to using the do-while the compiler would get upset at the
- * "else" because it interpreted the "if" statement as being all
- * done when it reached the ';' after the yyless() call.
- */
-
-/* Return all but the first 'n' matched characters back to the input stream. */
-
+ #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
do \
{ \
/* Undo effects of setting up yytext. */ \
- *yy_cp = yy_hold_char; \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
YY_RESTORE_YY_MORE_OFFSET \
- yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
YY_DO_BEFORE_ACTION; /* set up yytext again */ \
} \
while ( 0 )
-#define unput(c) yyunput( c, yytext_ptr )
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-typedef unsigned int yy_size_t;
-
+#define unput(c) yyunput( c, (yytext_ptr) )
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
{
FILE *yy_input_file;
@@ -160,7 +202,7 @@ struct yy_buffer_state
/* Number of characters read into yy_ch_buf, not including EOB
* characters.
*/
- int yy_n_chars;
+ yy_size_t yy_n_chars;
/* Whether we "own" the buffer - i.e., we know we created it,
* and can realloc() it to grow it, and should free() it to
@@ -181,12 +223,16 @@ struct yy_buffer_state
*/
int yy_at_bol;
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
int yy_fill_buffer;
int yy_buffer_status;
+
#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
/* When an EOF's been seen but there's still some text to process
@@ -200,28 +246,38 @@ struct yy_buffer_state
* just pointing yyin at a new input file.
*/
#define YY_BUFFER_EOF_PENDING 2
+
};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-static YY_BUFFER_STATE yy_current_buffer = 0;
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
/* We provide macros for accessing buffer states in case in the
* future we want to put the buffer states in a more general
* "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
*/
-#define YY_CURRENT_BUFFER yy_current_buffer
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;
-
-static int yy_n_chars; /* number of characters read into yy_ch_buf */
-
-
-int yyleng;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1; /* whether we need to initialize */
+static int yy_init = 0; /* whether we need to initialize */
static int yy_start = 0; /* start state number */
/* Flag which is used to allow yywrap()'s to do buffer switches
@@ -229,157 +285,204 @@ static int yy_start = 0; /* start state
*/
static int yy_did_buffer_switch_on_eof;
-void yyrestart YY_PROTO(( FILE *input_file ));
-
-void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
-void yy_load_buffer_state YY_PROTO(( void ));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
-void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
-void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
-
-YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
-YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
-
-static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
-static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
-static void yy_flex_free YY_PROTO(( void * ));
+void yyrestart (FILE *input_file );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
+void yy_delete_buffer (YY_BUFFER_STATE b );
+void yy_flush_buffer (YY_BUFFER_STATE b );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
+
+void *yyalloc (yy_size_t );
+void *yyrealloc (void *,yy_size_t );
+void yyfree (void * );
#define yy_new_buffer yy_create_buffer
#define yy_set_interactive(is_interactive) \
{ \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_is_interactive = is_interactive; \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
}
#define yy_set_bol(at_bol) \
{ \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_at_bol = at_bol; \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
}
-#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+/* Begin user sect3 */
#define yywrap() 1
#define YY_SKIP_YYWRAP
+
typedef unsigned char YY_CHAR;
+
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
extern char *yytext;
#define yytext_ptr yytext
-static yy_state_type yy_get_previous_state YY_PROTO(( void ));
-static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
-static int yy_get_next_buffer YY_PROTO(( void ));
-static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
/* Done after the current pattern has been matched and before the
* corresponding action - sets up yytext.
*/
#define YY_DO_BEFORE_ACTION \
- yytext_ptr = yy_bp; \
- yyleng = (int) (yy_cp - yy_bp); \
- yy_hold_char = *yy_cp; \
+ (yytext_ptr) = yy_bp; \
+ yyleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \
- yy_c_buf_p = yy_cp;
+ (yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 61
-#define YY_END_OF_BUFFER 62
-static yyconst short int yy_accept[622] =
+#define YY_NUM_RULES 67
+#define YY_END_OF_BUFFER 68
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[814] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 62, 49, 57, 56, 55, 48, 60, 32,
- 50, 51, 32, 52, 49, 49, 49, 49, 54, 53,
- 60, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 60, 49, 49, 57, 60, 44, 44, 44, 44,
- 44, 2, 60, 1, 49, 44, 44, 49, 17, 16,
- 17, 16, 16, 60, 60, 60, 3, 9, 8, 9,
- 4, 9, 5, 60, 13, 13, 13, 11, 12, 49,
- 0, 57, 55, 0, 59, 0, 49, 34, 0, 32,
- 0, 33, 0, 47, 47, 0, 49, 49, 0, 49,
-
- 49, 49, 49, 0, 37, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 49, 58, 49,
- 57, 0, 0, 0, 0, 0, 0, 49, 49, 49,
- 49, 49, 2, 1, 0, 1, 45, 45, 0, 49,
- 17, 17, 15, 14, 15, 0, 0, 3, 9, 0,
- 6, 7, 9, 9, 13, 0, 13, 13, 0, 10,
- 0, 0, 0, 34, 34, 0, 0, 49, 49, 49,
- 49, 49, 0, 0, 37, 37, 44, 39, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 49, 0, 0, 0, 0, 0, 0, 49, 49, 49,
-
- 49, 49, 0, 49, 10, 0, 49, 49, 49, 49,
- 49, 49, 0, 38, 38, 38, 0, 0, 37, 37,
- 37, 37, 37, 37, 37, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 40, 44, 41, 49, 0,
- 0, 0, 0, 0, 0, 49, 49, 49, 49, 49,
- 49, 49, 0, 0, 38, 38, 38, 0, 37, 37,
- 0, 37, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 0, 25, 44, 44, 44, 44, 44, 44,
- 44, 44, 42, 44, 49, 0, 0, 0, 0, 49,
- 49, 49, 49, 49, 49, 49, 49, 0, 38, 0,
-
- 37, 37, 37, 0, 0, 0, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37, 37, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 49, 0,
- 0, 0, 49, 49, 49, 35, 35, 35, 0, 0,
- 37, 37, 37, 37, 37, 37, 37, 0, 0, 0,
- 0, 0, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 44, 44, 44, 0,
- 24, 44, 44, 44, 44, 0, 23, 0, 26, 49,
- 0, 0, 0, 49, 49, 49, 49, 35, 35, 35,
- 35, 0, 37, 0, 37, 37, 37, 37, 37, 37,
-
- 37, 37, 37, 37, 37, 0, 0, 0, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 44, 44, 44, 44, 44, 44, 44, 46, 0,
- 0, 0, 49, 20, 45, 36, 36, 36, 36, 37,
- 0, 0, 0, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 0, 0, 0, 0,
- 0, 37, 37, 37, 37, 37, 37, 37, 37, 44,
- 44, 44, 44, 44, 0, 22, 0, 27, 0, 20,
- 0, 0, 49, 0, 49, 49, 49, 36, 36, 36,
- 36, 0, 0, 0, 0, 0, 37, 37, 37, 37,
+ 0, 0, 0, 0, 68, 55, 63, 62, 61, 54,
+ 66, 34, 56, 57, 34, 58, 55, 55, 55, 55,
+ 60, 59, 66, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 66, 55, 55, 63, 66, 46, 46,
+ 46, 46, 46, 2, 66, 1, 55, 46, 46, 55,
+ 17, 16, 17, 16, 16, 66, 66, 66, 3, 9,
+ 8, 9, 4, 9, 5, 66, 13, 13, 13, 11,
+ 12, 66, 19, 19, 18, 18, 18, 19, 18, 18,
+ 18, 19, 19, 19, 19, 19, 18, 19, 19, 55,
+
+ 0, 63, 61, 0, 65, 0, 55, 36, 0, 34,
+ 0, 35, 0, 53, 53, 0, 55, 55, 0, 55,
+ 55, 55, 55, 0, 39, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 55, 64, 55,
+ 55, 63, 0, 0, 0, 0, 0, 0, 55, 55,
+ 55, 55, 55, 2, 1, 0, 1, 47, 47, 0,
+ 55, 17, 17, 15, 14, 15, 0, 0, 3, 9,
+ 0, 6, 7, 9, 9, 13, 0, 13, 13, 0,
+ 10, 36, 0, 0, 35, 19, 19, 0, 19, 0,
+ 0, 18, 18, 18, 18, 18, 18, 19, 19, 46,
+
+ 19, 19, 19, 19, 19, 19, 19, 0, 0, 0,
+ 36, 55, 55, 55, 55, 55, 0, 0, 39, 39,
+ 46, 41, 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 55, 55, 0, 0, 0, 0,
+ 0, 0, 55, 55, 55, 55, 55, 0, 55, 10,
+ 0, 0, 0, 18, 18, 18, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 0, 55, 55,
+ 55, 55, 55, 55, 0, 40, 40, 40, 0, 0,
+ 39, 39, 39, 39, 39, 39, 39, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 42, 46, 43,
+
+ 55, 55, 55, 55, 0, 0, 0, 0, 0, 0,
+ 55, 55, 55, 55, 0, 0, 0, 0, 0, 18,
+ 18, 19, 46, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 55, 55, 55, 0, 0, 40, 40,
+ 40, 0, 39, 39, 0, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 0, 27, 46, 46,
+ 46, 46, 46, 46, 46, 46, 44, 46, 55, 55,
+ 55, 55, 55, 0, 0, 0, 0, 55, 55, 55,
+ 0, 0, 0, 18, 18, 46, 46, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 55, 55,
+
+ 55, 55, 55, 0, 40, 0, 39, 39, 39, 0,
+ 0, 0, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 48, 49, 50, 51, 55, 0,
+ 0, 0, 55, 55, 55, 0, 0, 0, 0, 0,
+ 46, 46, 19, 46, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 37, 37, 37, 0, 0, 39, 39,
+ 39, 39, 39, 39, 39, 0, 0, 0, 0, 0,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 46, 46, 46, 0, 26, 46,
+
+ 46, 46, 46, 0, 25, 0, 28, 55, 0, 0,
+ 0, 55, 55, 55, 37, 37, 37, 46, 46, 46,
+ 46, 19, 19, 19, 55, 37, 37, 37, 37, 0,
+ 39, 0, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 0, 0, 0, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 46,
+ 46, 46, 46, 46, 46, 46, 52, 0, 0, 0,
+ 55, 22, 47, 0, 37, 37, 37, 37, 46, 46,
+ 46, 46, 19, 19, 19, 38, 38, 38, 38, 39,
+ 0, 0, 0, 39, 39, 39, 39, 39, 39, 39,
+
+ 39, 39, 39, 39, 39, 39, 0, 0, 0, 0,
+ 0, 39, 39, 39, 39, 39, 39, 39, 39, 46,
+ 46, 46, 46, 46, 0, 24, 0, 29, 0, 22,
+ 0, 0, 55, 0, 55, 38, 38, 38, 38, 46,
+ 46, 46, 46, 55, 55, 38, 38, 38, 38, 0,
+ 0, 0, 0, 0, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 45, 0, 32, 46, 46, 46,
+ 0, 0, 0, 20, 0, 23, 22, 0, 0, 0,
+ 0, 0, 22, 0, 0, 0, 38, 38, 38, 38,
+
+ 46, 46, 46, 55, 55, 55, 0, 0, 0, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 0, 30, 46,
+ 46, 23, 0, 0, 22, 0, 0, 0, 46, 46,
+ 55, 55, 55, 55, 55, 0, 0, 0, 0, 0,
+ 39, 39, 39, 39, 39, 39, 39, 39, 0, 33,
+ 46, 0, 0, 0, 0, 0, 0, 46, 55, 55,
+ 55, 39, 39, 39, 39, 39, 39, 0, 31, 0,
+ 0, 21, 0, 0, 0, 55, 55, 55, 55, 55,
+ 39, 39, 39, 39, 39, 0, 0, 0, 0, 0,
37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 43, 0, 30, 44,
- 44, 44, 0, 0, 0, 18, 0, 21, 20, 0,
- 0, 0, 0, 0, 20, 0, 49, 49, 49, 0,
- 0, 0, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
- 0, 28, 44, 44, 21, 0, 0, 20, 49, 49,
- 49, 49, 49, 0, 0, 0, 0, 0, 37, 37,
- 37, 37, 37, 37, 37, 37, 0, 31, 44, 0,
- 49, 49, 49, 37, 37, 37, 37, 37, 37, 0,
-
- 29, 0, 0, 19, 49, 49, 49, 49, 49, 37,
- 37, 37, 37, 37, 35, 35, 35, 35, 35, 35,
- 0
+ 37, 37, 0
} ;
-static yyconst int yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 2, 4, 5, 6, 1, 7, 1, 1, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 22, 22, 23, 24, 1, 1,
- 25, 26, 10, 27, 28, 29, 30, 31, 32, 29,
- 33, 34, 35, 36, 36, 37, 38, 39, 40, 41,
- 36, 42, 43, 44, 45, 46, 47, 48, 49, 36,
- 10, 50, 10, 1, 51, 1, 52, 53, 54, 55,
-
- 56, 57, 58, 58, 59, 58, 58, 60, 61, 62,
- 63, 58, 58, 64, 65, 66, 67, 58, 58, 58,
- 58, 58, 1, 1, 1, 1, 1, 1, 1, 1,
+ 19, 20, 21, 22, 23, 24, 25, 26, 1, 1,
+ 27, 28, 10, 29, 30, 31, 32, 33, 34, 31,
+ 35, 36, 37, 38, 38, 39, 40, 41, 42, 43,
+ 38, 44, 45, 46, 47, 48, 49, 50, 51, 38,
+ 10, 52, 10, 1, 53, 1, 54, 55, 56, 57,
+
+ 58, 59, 60, 61, 62, 60, 60, 63, 64, 65,
+ 66, 60, 60, 67, 68, 69, 70, 60, 60, 60,
+ 60, 60, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -396,583 +499,858 @@ static yyconst int yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static yyconst int yy_meta[68] =
+static yyconst flex_int32_t yy_meta[71] =
{ 0,
1, 2, 3, 4, 5, 6, 1, 7, 7, 1,
- 1, 8, 1, 9, 10, 11, 11, 11, 11, 11,
- 11, 11, 11, 12, 13, 7, 1, 11, 11, 11,
- 11, 11, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 14,
- 15, 16, 16, 16, 16, 16, 16, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15
+ 8, 9, 10, 11, 12, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 14, 15, 7, 1, 16,
+ 16, 16, 16, 16, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 18, 19, 20, 20, 20, 20, 20, 20, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21
} ;
-static yyconst short int yy_base[686] =
+static yyconst flex_int16_t yy_base[931] =
{ 0,
- 0, 66, 68, 76, 119, 124, 173, 239, 148, 197,
- 82, 90, 2937, 2886, 2933, 3595, 2929, 3595, 165, 65,
- 3595, 3595, 2882, 3595, 130, 293, 173, 146, 2907, 3595,
- 3595, 350, 2893, 42, 402, 41, 2889, 74, 2888, 2895,
- 2876, 458, 197, 57, 219, 482, 38, 207, 2854, 37,
- 2851, 117, 249, 2880, 326, 2841, 2852, 105, 0, 3595,
- 2875, 3595, 0, 469, 424, 143, 0, 2828, 3595, 48,
- 3595, 223, 3595, 155, 2827, 202, 97, 3595, 252, 2817,
- 504, 2855, 2852, 2852, 3595, 258, 504, 312, 526, 201,
- 548, 2796, 557, 528, 2795, 582, 579, 614, 2820, 2829,
-
- 593, 601, 266, 2818, 182, 656, 0, 2796, 2791, 2766,
- 2761, 296, 2727, 2725, 2713, 2696, 2691, 426, 3595, 87,
- 659, 2659, 2663, 2655, 2650, 2651, 257, 196, 318, 276,
- 258, 288, 436, 2694, 631, 2693, 655, 2644, 690, 303,
- 0, 2681, 168, 3595, 3595, 701, 352, 0, 2634, 723,
- 3595, 3595, 2633, 447, 2632, 2676, 467, 461, 433, 2670,
- 2659, 2600, 720, 733, 206, 755, 759, 771, 781, 791,
- 828, 2581, 2570, 870, 453, 913, 955, 0, 2563, 2557,
- 2540, 2523, 2530, 2541, 2536, 2516, 2502, 2496, 2475, 2473,
- 277, 2442, 2436, 2402, 2404, 2407, 477, 436, 2405, 424,
-
- 401, 292, 813, 488, 2454, 2450, 845, 438, 855, 890,
- 756, 465, 2428, 2418, 930, 554, 2409, 2408, 463, 898,
- 999, 939, 972, 1042, 980, 2403, 490, 2378, 500, 2380,
- 2338, 2327, 2325, 2321, 2310, 0, 2305, 0, 508, 2274,
- 2238, 2212, 2211, 2176, 515, 517, 615, 527, 529, 1018,
- 1061, 1086, 2212, 2210, 1026, 2209, 2203, 2171, 2166, 565,
- 1069, 754, 1096, 802, 1123, 0, 1106, 1134, 1151, 1159,
- 1177, 1196, 601, 3595, 2136, 2137, 2127, 2131, 2090, 2090,
- 2084, 2078, 0, 2062, 607, 2056, 2024, 2025, 573, 576,
- 578, 676, 1204, 591, 1221, 1239, 1231, 2064, 2031, 2006,
-
- 2004, 1274, 676, 1256, 1293, 1318, 682, 808, 815, 1301,
- 819, 1328, 0, 1339, 1350, 1367, 1247, 1393, 1377, 1955,
- 1915, 1888, 742, 692, 1884, 1891, 794, 980, 777, 1889,
- 1856, 652, 945, 680, 820, 1411, 1420, 1436, 1842, 1824,
- 1800, 1446, 1473, 1455, 1266, 1515, 1492, 1500, 1809, 1534,
- 1559, 1544, 1009, 1052, 1569, 1571, 1580, 1590, 1601, 0,
- 1612, 1623, 1590, 1463, 1666, 1642, 1762, 1737, 1740, 1108,
- 3595, 1696, 1672, 1662, 1628, 1157, 3595, 1158, 3595, 774,
- 1514, 1500, 730, 1152, 697, 913, 1650, 805, 1686, 1709,
- 1695, 1516, 1500, 1721, 1222, 1730, 1474, 1744, 0, 830,
-
- 1755, 1772, 1571, 1797, 1782, 1816, 1841, 1851, 1284, 1377,
- 1832, 1861, 1861, 1872, 1883, 0, 1894, 1905, 1872, 1824,
- 1924, 1414, 1400, 1375, 1336, 1331, 1159, 1483, 1312, 1274,
- 1260, 1539, 606, 1730, 1238, 1949, 1959, 1969, 1984, 1256,
- 1994, 2004, 2019, 1245, 1535, 1915, 1932, 1950, 2029, 0,
- 874, 2040, 2057, 2065, 2082, 2101, 2109, 1214, 2126, 2136,
- 2146, 1633, 1675, 2154, 924, 966, 2165, 0, 1003, 1092,
- 1731, 1087, 1056, 1052, 2042, 3595, 2063, 3595, 1017, 2147,
- 1126, 624, 1311, 2187, 2192, 2183, 1756, 2193, 2203, 2230,
- 1979, 2238, 992, 2248, 2265, 2275, 830, 811, 1970, 2194,
-
- 2281, 2214, 2291, 0, 1111, 2302, 2319, 2256, 2344, 2329,
- 2362, 2371, 2387, 1807, 813, 1170, 0, 2065, 3595, 2228,
- 738, 713, 680, 731, 1201, 3595, 900, 653, 2409, 2414,
- 2419, 2424, 2418, 2436, 2445, 2446, 2459, 2469, 2480, 2494,
- 2504, 2515, 569, 531, 2215, 2217, 2523, 2221, 2533, 0,
- 1278, 2544, 2561, 2569, 2588, 519, 2597, 2606, 2615, 492,
- 2304, 3595, 2393, 452, 3595, 1416, 2621, 2629, 2637, 1981,
- 2647, 2657, 2672, 2682, 345, 2692, 2707, 2717, 305, 264,
- 2303, 245, 191, 2725, 0, 1477, 2441, 3595, 2444, 1632,
- 2735, 2745, 2755, 2770, 2780, 2790, 90, 0, 92, 2482,
-
- 3595, 100, 1647, 3595, 2798, 1982, 2808, 2818, 2833, 3595,
- 2843, 2853, 2763, 3595, 2868, 2876, 2884, 19, 2892, 2903,
- 3595, 2953, 2969, 2985, 3001, 3017, 3033, 3049, 3065, 3081,
- 3087, 3103, 3119, 1676, 3135, 3151, 3167, 3183, 3199, 3215,
- 3231, 3237, 3244, 3260, 3276, 3282, 3289, 3295, 3301, 3307,
- 3314, 3320, 3326, 3332, 3339, 3347, 3353, 3359, 3365, 3372,
- 3380, 3386, 3392, 3399, 3407, 3413, 3421, 3428, 3436, 3442,
- 3450, 3457, 3465, 3481, 3497, 3513, 3519, 3527, 3534, 3540,
- 3548, 3554, 3562, 3578, 2159
+ 0, 69, 71, 79, 94, 124, 175, 244, 153, 197,
+ 85, 130, 314, 0, 4514, 4461, 4510, 5604, 4507, 5604,
+ 382, 86, 5604, 5604, 4458, 5604, 140, 394, 195, 153,
+ 4483, 5604, 5604, 453, 4383, 43, 508, 37, 4379, 65,
+ 4378, 4385, 4367, 566, 581, 91, 151, 604, 39, 41,
+ 4351, 34, 4348, 117, 4402, 4412, 428, 4371, 4382, 136,
+ 0, 5604, 4407, 5604, 0, 606, 664, 105, 0, 4358,
+ 5604, 115, 5604, 133, 5604, 138, 4357, 152, 171, 5604,
+ 188, 383, 641, 694, 737, 235, 245, 794, 843, 4369,
+ 157, 898, 4365, 4364, 4375, 4370, 944, 0, 206, 4351,
+
+ 266, 4400, 4397, 4397, 5604, 263, 532, 585, 4386, 608,
+ 707, 4346, 829, 648, 4345, 968, 981, 1018, 4359, 4370,
+ 563, 708, 422, 4357, 371, 1062, 1106, 4343, 4347, 4340,
+ 4344, 596, 4333, 4340, 4337, 4329, 4331, 644, 5604, 237,
+ 137, 946, 4309, 4314, 4305, 4300, 4301, 121, 225, 530,
+ 377, 369, 335, 445, 4366, 720, 4365, 931, 4314, 1018,
+ 169, 0, 4361, 160, 5604, 5604, 991, 388, 0, 4312,
+ 638, 5604, 5604, 4311, 661, 4310, 4356, 392, 221, 420,
+ 4358, 653, 665, 1139, 4296, 1145, 0, 1173, 1201, 1210,
+ 1037, 1239, 4333, 1081, 1170, 826, 1288, 1343, 4307, 0,
+
+ 4311, 4309, 899, 4298, 4296, 4287, 4283, 4336, 4335, 1222,
+ 1258, 1389, 1362, 968, 1428, 4323, 4310, 1472, 520, 1517,
+ 1561, 1605, 4303, 4297, 4280, 4282, 4289, 4300, 4295, 4283,
+ 4279, 4292, 4291, 4290, 654, 493, 4258, 4252, 4242, 4244,
+ 4250, 534, 579, 4253, 491, 407, 506, 1413, 626, 4304,
+ 4251, 4239, 1651, 1661, 4227, 1705, 0, 4197, 4164, 4155,
+ 4151, 4151, 4135, 4112, 4111, 811, 4067, 4122, 1749, 378,
+ 0, 0, 1041, 243, 4098, 4097, 1786, 805, 4096, 4095,
+ 623, 1410, 1799, 1447, 1091, 1844, 1890, 4094, 429, 4073,
+ 632, 4084, 4082, 4056, 4054, 4050, 4053, 0, 4046, 0,
+
+ 929, 638, 544, 561, 4022, 4024, 4008, 4022, 4008, 746,
+ 524, 1063, 413, 662, 1491, 4060, 4059, 4058, 1270, 1900,
+ 1944, 763, 904, 4037, 4020, 4009, 4007, 3992, 3988, 818,
+ 3993, 3988, 3912, 1990, 2002, 2014, 3930, 3929, 2024, 3929,
+ 3912, 3911, 3910, 919, 1536, 1003, 1580, 1142, 2037, 0,
+ 1626, 2083, 1680, 1372, 2128, 2174, 764, 5604, 3892, 3877,
+ 3870, 3884, 3862, 3869, 3879, 3879, 0, 3863, 698, 593,
+ 820, 973, 1093, 3857, 3824, 3825, 922, 897, 969, 1097,
+ 3866, 3858, 2186, 2196, 3829, 3807, 3800, 3814, 3778, 3784,
+ 3794, 3793, 3747, 3726, 3716, 3711, 3696, 3656, 2240, 1017,
+
+ 2279, 2291, 1637, 3686, 3662, 3648, 3646, 2301, 1127, 3642,
+ 3641, 2347, 1154, 1205, 1209, 1724, 1761, 2359, 0, 1763,
+ 2405, 1774, 1457, 2450, 2496, 2521, 1024, 1127, 1181, 1190,
+ 1169, 1207, 1224, 1392, 3602, 3584, 3577, 3560, 1240, 3581,
+ 3547, 1313, 1391, 874, 1774, 1821, 3584, 3576, 3569, 1503,
+ 3523, 3519, 869, 1379, 3515, 3511, 949, 1045, 0, 0,
+ 0, 0, 3478, 2577, 1863, 1546, 3510, 3509, 3506, 1919,
+ 2616, 1963, 1590, 2660, 2706, 2056, 3517, 3509, 3487, 1692,
+ 1879, 1979, 2096, 2104, 2147, 2106, 2718, 0, 2217, 2764,
+ 2250, 1734, 2809, 2855, 2880, 2086, 1133, 1088, 5604, 421,
+
+ 2087, 1184, 2088, 1369, 5604, 1370, 5604, 1197, 3418, 3389,
+ 1282, 2127, 1249, 1368, 3442, 3427, 2936, 3386, 3320, 3309,
+ 3295, 2951, 1219, 3272, 3006, 1181, 3044, 0, 1709, 3290,
+ 3263, 2260, 58, 2320, 1774, 3083, 0, 2380, 3129, 2424,
+ 1831, 3173, 3219, 3270, 3265, 3231, 2336, 2462, 2464, 2471,
+ 3256, 2477, 3243, 0, 2589, 3289, 2600, 1929, 3335, 3360,
+ 1376, 1087, 1847, 1409, 1542, 1586, 3218, 3184, 3166, 1832,
+ 1427, 2060, 3174, 2635, 3210, 3186, 3185, 2435, 3129, 3111,
+ 3114, 3066, 3429, 1454, 0, 3486, 2679, 2737, 1483, 3085,
+ 2989, 2839, 3525, 2819, 2003, 2280, 2783, 2381, 3537, 0,
+
+ 2830, 3583, 3016, 2157, 3627, 3673, 3026, 2821, 2801, 2750,
+ 2228, 2472, 2474, 2695, 1189, 1531, 3685, 0, 2647, 1848,
+ 1925, 1602, 1522, 1849, 1587, 5604, 1664, 5604, 2692, 1967,
+ 1630, 2177, 2014, 2406, 2761, 2674, 2630, 3731, 2272, 1926,
+ 2155, 2500, 1927, 3741, 2076, 3780, 0, 1967, 2277, 3054,
+ 2598, 2535, 2509, 2841, 2470, 2431, 2485, 2600, 3064, 2617,
+ 3819, 0, 3104, 3865, 3148, 3036, 3909, 3955, 2390, 2373,
+ 3966, 3118, 2338, 1742, 2298, 2129, 5604, 2743, 1825, 1738,
+ 2219, 2153, 1825, 5604, 2062, 2083, 3130, 3172, 3276, 3281,
+ 1984, 2880, 1920, 3360, 3192, 1912, 1877, 1858, 3274, 1744,
+
+ 2326, 2643, 2745, 3978, 3990, 4002, 1700, 1693, 4014, 1662,
+ 1623, 2856, 2951, 3496, 3084, 4026, 0, 3508, 4072, 3556,
+ 3074, 0, 1599, 1510, 1503, 3319, 1423, 2328, 5604, 3154,
+ 2037, 5604, 2124, 3602, 3646, 1409, 1403, 4118, 2407, 2791,
+ 4130, 2334, 4142, 4154, 3659, 3704, 1390, 1286, 1251, 3418,
+ 1158, 1087, 3105, 1077, 1056, 4166, 0, 3568, 2499, 5604,
+ 3270, 2220, 3751, 1014, 1005, 957, 3614, 2522, 4178, 4190,
+ 4202, 3761, 3790, 3800, 684, 0, 683, 2685, 5604, 658,
+ 2222, 5604, 522, 382, 4214, 4226, 2335, 4238, 4250, 3840,
+ 5604, 3846, 3884, 3202, 5604, 3928, 374, 208, 117, 3716,
+
+ 4260, 4297, 4334, 4045, 4091, 4270, 59, 4371, 3941, 5604,
+ 4280, 3771, 5604, 4423, 4444, 4465, 4486, 4507, 4528, 4549,
+ 4570, 4591, 4600, 2074, 4620, 4641, 2383, 4662, 4683, 4704,
+ 4725, 4746, 4767, 4788, 4809, 2337, 4830, 4839, 4847, 4856,
+ 4876, 4897, 4918, 2474, 4939, 4960, 4981, 5002, 5011, 5030,
+ 5039, 5048, 2421, 2516, 5056, 5064, 5072, 5081, 5089, 5096,
+ 5104, 5112, 5121, 5131, 2600, 2694, 5139, 5147, 5155, 2695,
+ 2757, 5164, 5174, 5194, 2798, 5203, 5211, 2799, 5220, 5230,
+ 5250, 2228, 2615, 5259, 5271, 5280, 5290, 2803, 2825, 5299,
+ 5309, 5318, 5338, 2700, 5347, 5359, 2841, 2872, 5368, 5378,
+
+ 2873, 5387, 5397, 5417, 5438, 5459, 3115, 3116, 5479, 3168,
+ 5486, 5496, 2951, 2967, 5505, 2520, 5525, 3304, 3313, 5534,
+ 5544, 3517, 3314, 3318, 5552, 5562, 5582, 3814, 3319, 3430
} ;
-static yyconst short int yy_def[686] =
+static yyconst flex_int16_t yy_def[931] =
{ 0,
- 621, 1, 1, 1, 622, 622, 623, 623, 624, 624,
- 625, 625, 621, 626, 621, 621, 621, 621, 627, 628,
- 621, 621, 629, 621, 630, 626, 26, 26, 631, 621,
- 621, 621, 32, 32, 32, 35, 35, 35, 35, 35,
- 35, 626, 26, 626, 621, 627, 32, 32, 35, 35,
- 35, 621, 621, 621, 632, 35, 35, 626, 633, 621,
- 633, 621, 633, 621, 627, 621, 634, 635, 621, 635,
- 621, 635, 621, 636, 637, 637, 637, 621, 621, 626,
- 626, 621, 621, 638, 621, 639, 621, 628, 621, 640,
- 628, 629, 629, 630, 641, 626, 626, 26, 631, 98,
-
- 98, 98, 98, 642, 643, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 626, 621, 626,
- 621, 621, 621, 621, 621, 621, 638, 626, 98, 626,
- 626, 626, 621, 621, 621, 621, 632, 644, 626, 626,
- 633, 633, 621, 621, 621, 639, 621, 634, 635, 635,
- 621, 621, 635, 635, 637, 621, 637, 637, 621, 621,
- 638, 645, 621, 621, 640, 640, 621, 626, 626, 626,
- 98, 171, 646, 621, 647, 621, 106, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 626, 621, 621, 621, 621, 621, 638, 626, 171, 626,
-
- 626, 626, 621, 626, 621, 645, 626, 626, 626, 626,
- 626, 626, 648, 649, 649, 215, 650, 649, 651, 176,
- 621, 221, 221, 621, 221, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 626, 621,
- 621, 621, 621, 621, 638, 626, 626, 626, 626, 626,
- 626, 626, 621, 652, 652, 255, 652, 653, 654, 655,
- 621, 656, 224, 656, 656, 265, 656, 621, 268, 268,
- 621, 268, 621, 621, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 626, 621, 621, 621, 638, 626,
- 626, 626, 626, 626, 626, 626, 626, 657, 657, 658,
-
- 659, 621, 621, 621, 621, 621, 660, 660, 661, 271,
- 661, 661, 312, 661, 621, 315, 315, 621, 315, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 626, 621,
- 621, 638, 626, 626, 626, 626, 626, 626, 621, 662,
- 663, 302, 621, 343, 343, 621, 343, 621, 621, 621,
- 621, 621, 621, 664, 664, 665, 318, 665, 665, 359,
- 665, 621, 362, 362, 621, 362, 35, 35, 35, 621,
- 621, 35, 35, 35, 35, 621, 621, 621, 621, 626,
- 621, 621, 638, 626, 626, 626, 626, 626, 626, 626,
- 626, 621, 666, 621, 667, 346, 667, 667, 398, 398,
-
- 621, 401, 401, 621, 401, 621, 621, 621, 621, 668,
- 668, 669, 365, 669, 669, 415, 669, 621, 418, 418,
- 418, 35, 35, 35, 35, 35, 35, 35, 626, 621,
- 621, 638, 626, 626, 626, 626, 626, 626, 626, 621,
- 621, 621, 621, 670, 670, 671, 404, 671, 671, 449,
- 449, 621, 452, 452, 621, 452, 621, 621, 621, 621,
- 621, 621, 672, 672, 673, 673, 673, 467, 467, 35,
- 35, 35, 35, 35, 621, 621, 621, 621, 621, 621,
- 674, 638, 626, 675, 676, 626, 626, 626, 626, 626,
- 626, 621, 621, 621, 621, 621, 621, 677, 677, 678,
-
- 455, 678, 678, 503, 503, 621, 506, 506, 621, 506,
- 621, 621, 621, 621, 679, 679, 35, 621, 621, 35,
- 35, 35, 621, 674, 674, 621, 638, 626, 675, 675,
- 675, 675, 621, 675, 676, 676, 626, 626, 626, 621,
- 621, 621, 621, 680, 680, 681, 509, 681, 681, 549,
- 549, 621, 552, 552, 552, 621, 621, 621, 621, 621,
- 621, 621, 35, 35, 621, 638, 621, 621, 626, 626,
- 626, 626, 626, 621, 621, 621, 621, 621, 621, 682,
- 682, 683, 683, 683, 584, 584, 621, 621, 35, 684,
- 626, 626, 626, 621, 621, 621, 621, 685, 685, 621,
-
- 621, 684, 684, 621, 626, 626, 626, 626, 626, 621,
- 621, 621, 621, 621, 626, 626, 626, 626, 626, 626,
- 0, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621
+ 813, 1, 1, 1, 814, 814, 815, 815, 816, 816,
+ 817, 817, 813, 13, 813, 818, 813, 813, 813, 813,
+ 819, 820, 813, 813, 821, 813, 822, 818, 28, 28,
+ 823, 813, 813, 813, 34, 34, 34, 37, 37, 37,
+ 37, 37, 37, 818, 28, 818, 813, 819, 34, 34,
+ 37, 37, 37, 813, 824, 813, 825, 37, 37, 818,
+ 826, 813, 826, 813, 826, 813, 819, 813, 827, 828,
+ 813, 828, 813, 828, 813, 829, 830, 830, 830, 813,
+ 813, 831, 832, 833, 813, 85, 85, 85, 813, 89,
+ 89, 89, 92, 92, 92, 92, 85, 88, 88, 818,
+
+ 818, 813, 813, 834, 813, 835, 813, 820, 836, 831,
+ 820, 821, 821, 822, 837, 818, 818, 28, 838, 118,
+ 118, 118, 118, 839, 840, 37, 126, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 818, 813, 818,
+ 818, 813, 813, 813, 813, 813, 813, 834, 818, 118,
+ 818, 818, 818, 813, 813, 813, 813, 841, 842, 818,
+ 818, 843, 843, 813, 813, 813, 835, 813, 844, 845,
+ 845, 813, 813, 845, 845, 830, 813, 830, 830, 813,
+ 813, 831, 831, 831, 846, 847, 88, 846, 848, 813,
+ 813, 85, 192, 192, 192, 192, 813, 197, 198, 849,
+
+ 198, 198, 198, 198, 198, 88, 88, 834, 850, 813,
+ 813, 818, 212, 212, 118, 215, 851, 813, 852, 813,
+ 127, 221, 222, 222, 222, 222, 222, 222, 222, 222,
+ 222, 222, 222, 222, 818, 818, 813, 813, 813, 813,
+ 813, 834, 818, 215, 818, 818, 818, 813, 818, 813,
+ 853, 854, 813, 88, 254, 197, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 88, 88, 850, 818, 818,
+ 212, 212, 212, 818, 855, 856, 856, 277, 857, 856,
+ 858, 220, 813, 283, 283, 813, 283, 222, 222, 222,
+ 222, 222, 222, 222, 222, 222, 222, 222, 222, 222,
+
+ 818, 818, 818, 818, 813, 813, 813, 813, 813, 834,
+ 818, 818, 818, 818, 813, 813, 853, 853, 813, 254,
+ 197, 198, 859, 198, 198, 198, 198, 198, 198, 88,
+ 88, 88, 88, 212, 212, 212, 813, 860, 860, 339,
+ 860, 861, 862, 863, 813, 864, 286, 864, 813, 349,
+ 864, 813, 352, 352, 813, 352, 813, 813, 222, 222,
+ 222, 222, 222, 222, 222, 222, 222, 222, 818, 818,
+ 818, 818, 818, 813, 813, 813, 834, 818, 818, 818,
+ 865, 866, 813, 88, 321, 859, 859, 198, 198, 198,
+ 198, 198, 198, 88, 88, 88, 88, 88, 818, 818,
+
+ 212, 212, 818, 867, 867, 868, 869, 813, 813, 870,
+ 871, 813, 872, 872, 873, 355, 873, 813, 418, 873,
+ 813, 421, 421, 813, 421, 813, 426, 426, 426, 426,
+ 426, 426, 426, 426, 818, 818, 818, 818, 818, 813,
+ 813, 874, 818, 818, 818, 813, 813, 875, 875, 813,
+ 859, 859, 198, 859, 198, 198, 198, 198, 88, 88,
+ 88, 88, 88, 818, 464, 464, 813, 876, 877, 408,
+ 813, 471, 471, 813, 471, 813, 813, 878, 878, 813,
+ 813, 879, 879, 880, 424, 880, 813, 487, 880, 813,
+ 490, 490, 813, 490, 813, 495, 495, 813, 813, 495,
+
+ 495, 495, 495, 813, 813, 813, 813, 818, 813, 813,
+ 881, 818, 818, 818, 882, 883, 813, 884, 884, 884,
+ 884, 813, 522, 885, 818, 818, 818, 527, 527, 813,
+ 886, 813, 887, 474, 887, 813, 536, 887, 813, 539,
+ 539, 813, 539, 888, 889, 813, 813, 890, 890, 891,
+ 892, 891, 813, 553, 891, 813, 556, 556, 556, 813,
+ 560, 560, 560, 560, 560, 560, 818, 813, 813, 893,
+ 818, 818, 818, 813, 813, 894, 894, 813, 895, 895,
+ 895, 895, 813, 583, 896, 818, 586, 586, 586, 813,
+ 897, 898, 813, 899, 899, 900, 542, 900, 813, 599,
+
+ 900, 813, 602, 602, 813, 602, 813, 813, 901, 901,
+ 813, 813, 902, 902, 903, 903, 813, 617, 903, 560,
+ 560, 560, 560, 560, 813, 813, 813, 813, 813, 813,
+ 904, 893, 818, 905, 906, 907, 908, 813, 907, 909,
+ 909, 909, 909, 818, 818, 818, 646, 646, 818, 813,
+ 813, 910, 910, 813, 813, 911, 911, 912, 605, 912,
+ 813, 661, 912, 813, 664, 664, 813, 664, 913, 914,
+ 813, 813, 915, 915, 560, 813, 813, 560, 560, 560,
+ 813, 904, 904, 813, 893, 818, 905, 905, 905, 905,
+ 916, 905, 917, 917, 813, 813, 907, 907, 813, 813,
+
+ 909, 909, 909, 646, 646, 646, 918, 919, 813, 813,
+ 920, 920, 921, 667, 921, 813, 716, 921, 813, 719,
+ 719, 922, 813, 913, 913, 813, 813, 813, 813, 560,
+ 560, 813, 893, 813, 813, 923, 924, 813, 909, 909,
+ 646, 818, 646, 646, 818, 813, 813, 918, 918, 813,
+ 813, 925, 925, 926, 926, 926, 756, 926, 813, 813,
+ 560, 927, 813, 813, 923, 923, 813, 909, 646, 646,
+ 646, 813, 813, 813, 813, 928, 928, 813, 813, 927,
+ 927, 813, 929, 930, 813, 646, 818, 646, 646, 818,
+ 813, 813, 813, 813, 813, 813, 813, 929, 929, 813,
+
+ 818, 818, 818, 813, 813, 813, 818, 818, 818, 813,
+ 813, 813, 0, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813
} ;
-static yyconst short int yy_nxt[3663] =
+static yyconst flex_int16_t yy_nxt[5675] =
{ 0,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 14,
- 23, 24, 14, 14, 25, 26, 27, 28, 26, 26,
- 26, 26, 26, 29, 30, 31, 14, 32, 33, 33,
- 33, 34, 35, 35, 35, 35, 36, 35, 37, 35,
- 38, 39, 40, 41, 35, 35, 35, 35, 35, 42,
- 14, 43, 43, 43, 43, 43, 43, 14, 14, 14,
- 14, 14, 14, 14, 44, 14, 14, 45, 81, 52,
- 89, 46, 151, 53, 107, 110, 115, 52, 107, 54,
- 111, 53, 55, 76, 16, 77, 78, 54, 90, 109,
- 55, 76, 16, 77, 78, 47, 48, 150, 128, 49,
-
- 158, 113, 604, 131, 56, 394, 81, 50, 57, 35,
- 51, 35, 56, 547, 91, 114, 57, 35, 133, 35,
- 15, 60, 61, 120, 62, 15, 60, 61, 134, 62,
- 62, 79, 58, 95, 95, 62, 81, 95, 95, 79,
- 58, 191, 62, 63, 147, 119, 156, 62, 63, 15,
- 16, 17, 69, 65, 81, 95, 154, 119, 70, 71,
- 72, 102, 102, 102, 102, 102, 103, 85, 64, 147,
- 119, 140, 73, 64, 15, 16, 17, 86, 65, 96,
- 87, 87, 87, 87, 87, 87, 87, 87, 101, 101,
- 101, 101, 101, 101, 101, 101, 174, 74, 15, 16,
-
- 17, 69, 65, 157, 621, 176, 89, 70, 71, 72,
- 80, 621, 100, 100, 100, 100, 100, 100, 100, 100,
- 121, 73, 66, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 15, 16, 17, 107, 65, 81, 74, 152, 122, 123,
- 166, 156, 124, 159, 160, 166, 155, 198, 394, 85,
- 125, 135, 129, 126, 87, 87, 87, 87, 87, 87,
- 87, 87, 150, 87, 87, 87, 87, 87, 87, 87,
- 87, 172, 172, 172, 172, 172, 172, 547, 66, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
-
- 67, 67, 67, 67, 67, 67, 97, 81, 98, 98,
- 98, 98, 98, 98, 98, 98, 99, 621, 197, 201,
- 100, 100, 100, 100, 100, 81, 81, 182, 501, 138,
- 138, 80, 183, 138, 138, 621, 184, 81, 185, 239,
- 200, 81, 81, 202, 100, 100, 100, 100, 100, 100,
- 80, 138, 81, 147, 119, 246, 80, 204, 574, 80,
- 80, 91, 80, 80, 80, 106, 106, 106, 106, 106,
- 106, 106, 106, 99, 199, 139, 80, 106, 106, 106,
- 106, 106, 107, 107, 107, 107, 108, 107, 107, 107,
- 107, 107, 107, 107, 107, 107, 107, 107, 107, 81,
-
- 107, 100, 100, 100, 100, 100, 100, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 107, 107, 107,
- 107, 107, 107, 107, 107, 621, 85, 147, 119, 107,
- 107, 107, 107, 107, 159, 160, 146, 133, 107, 621,
- 621, 621, 621, 621, 621, 621, 621, 134, 147, 119,
- 81, 207, 248, 80, 80, 80, 80, 80, 80, 118,
- 119, 80, 80, 80, 158, 80, 80, 174, 157, 80,
- 143, 119, 144, 81, 145, 81, 220, 174, 144, 85,
- 145, 80, 80, 80, 85, 81, 220, 81, 99, 246,
- 246, 273, 145, 145, 86, 589, 150, 87, 87, 87,
-
- 87, 87, 87, 87, 87, 80, 174, 80, 80, 80,
- 156, 80, 80, 274, 81, 80, 156, 85, 145, 87,
- 87, 87, 87, 87, 87, 87, 87, 80, 80, 80,
- 245, 95, 95, 174, 276, 95, 95, 81, 163, 277,
- 127, 164, 164, 164, 164, 164, 164, 164, 164, 88,
- 249, 88, 88, 95, 501, 88, 88, 81, 92, 88,
- 92, 92, 92, 285, 92, 92, 81, 290, 92, 257,
- 257, 257, 88, 88, 289, 85, 81, 96, 81, 174,
- 92, 92, 92, 94, 292, 80, 80, 94, 220, 80,
- 80, 246, 447, 94, 168, 169, 170, 168, 168, 168,
-
- 168, 168, 273, 333, 293, 94, 94, 80, 172, 172,
- 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
- 172, 172, 172, 172, 274, 81, 85, 81, 81, 171,
- 171, 171, 171, 171, 171, 171, 171, 334, 99, 332,
- 81, 171, 171, 171, 171, 171, 87, 87, 87, 87,
- 87, 87, 87, 87, 85, 81, 81, 483, 138, 138,
- 121, 329, 138, 138, 81, 171, 171, 171, 171, 171,
- 171, 177, 177, 177, 177, 177, 177, 177, 177, 99,
- 138, 291, 527, 177, 177, 177, 177, 177, 122, 123,
- 174, 137, 124, 80, 80, 137, 174, 80, 80, 220,
-
- 125, 137, 81, 126, 139, 263, 383, 171, 171, 171,
- 171, 171, 171, 137, 137, 80, 621, 621, 621, 621,
- 621, 621, 621, 621, 149, 81, 372, 149, 149, 81,
- 335, 373, 85, 526, 149, 164, 164, 164, 164, 164,
- 164, 164, 164, 370, 565, 385, 81, 149, 164, 164,
- 164, 164, 164, 164, 164, 164, 165, 564, 165, 165,
- 95, 434, 165, 165, 95, 371, 165, 261, 174, 207,
- 95, 208, 208, 208, 208, 208, 208, 263, 165, 165,
- 165, 563, 95, 95, 207, 432, 208, 208, 208, 208,
- 208, 208, 208, 208, 207, 376, 209, 209, 209, 209,
-
- 209, 209, 209, 209, 207, 81, 210, 210, 210, 210,
- 210, 211, 208, 208, 138, 621, 174, 377, 138, 387,
- 81, 261, 174, 81, 138, 263, 81, 174, 261, 174,
- 81, 263, 621, 174, 447, 380, 138, 138, 310, 429,
- 81, 80, 310, 212, 212, 212, 212, 212, 212, 212,
- 212, 444, 444, 396, 81, 212, 212, 212, 212, 212,
- 250, 251, 252, 250, 250, 250, 250, 250, 207, 81,
- 208, 208, 208, 208, 208, 208, 208, 208, 386, 212,
- 212, 212, 212, 212, 212, 214, 215, 216, 216, 216,
- 216, 216, 216, 217, 81, 498, 498, 218, 218, 218,
-
- 218, 218, 85, 207, 81, 208, 208, 208, 208, 208,
- 208, 208, 208, 225, 225, 225, 225, 225, 225, 225,
- 225, 218, 218, 218, 218, 218, 218, 174, 221, 222,
- 223, 221, 221, 221, 221, 221, 224, 261, 174, 81,
- 225, 225, 225, 225, 225, 255, 255, 256, 257, 257,
- 257, 257, 257, 217, 265, 265, 265, 265, 265, 265,
- 265, 265, 81, 566, 225, 225, 225, 225, 225, 225,
- 226, 226, 226, 226, 226, 226, 226, 226, 435, 621,
- 174, 378, 226, 226, 226, 226, 226, 266, 266, 266,
- 266, 266, 267, 621, 81, 264, 264, 264, 264, 264,
-
- 264, 264, 264, 379, 384, 492, 212, 212, 212, 212,
- 212, 212, 261, 174, 262, 262, 262, 262, 262, 262,
- 262, 262, 263, 174, 515, 515, 264, 264, 264, 264,
- 264, 293, 263, 294, 294, 294, 294, 294, 294, 294,
- 294, 299, 299, 299, 299, 299, 299, 299, 299, 217,
- 264, 264, 264, 264, 264, 264, 174, 268, 269, 270,
- 268, 268, 268, 268, 268, 271, 174, 81, 523, 272,
- 272, 272, 272, 272, 293, 310, 295, 295, 295, 295,
- 295, 295, 295, 295, 304, 305, 306, 304, 304, 304,
- 304, 304, 522, 272, 272, 272, 272, 272, 272, 293,
-
- 521, 296, 296, 296, 296, 296, 297, 294, 294, 370,
- 81, 272, 272, 272, 272, 272, 272, 272, 272, 261,
- 174, 308, 308, 308, 308, 308, 308, 525, 526, 263,
- 520, 371, 544, 544, 517, 81, 261, 174, 308, 308,
- 308, 308, 308, 308, 308, 308, 263, 261, 174, 309,
- 309, 309, 309, 309, 309, 309, 309, 310, 376, 378,
- 475, 311, 311, 311, 311, 311, 312, 312, 312, 312,
- 312, 312, 312, 312, 313, 313, 313, 313, 313, 314,
- 377, 379, 476, 261, 174, 311, 311, 311, 311, 311,
- 311, 174, 315, 316, 317, 315, 315, 315, 315, 315,
-
- 318, 81, 525, 526, 319, 319, 319, 319, 319, 621,
- 433, 311, 311, 311, 311, 311, 311, 311, 311, 336,
- 337, 338, 336, 336, 336, 336, 336, 457, 319, 319,
- 319, 319, 319, 319, 293, 394, 294, 294, 294, 294,
- 294, 294, 294, 294, 293, 396, 294, 294, 294, 294,
- 294, 294, 293, 81, 294, 294, 294, 294, 294, 294,
- 294, 294, 360, 360, 360, 360, 360, 361, 396, 348,
- 81, 349, 349, 349, 349, 349, 349, 349, 349, 342,
- 81, 399, 399, 399, 399, 399, 400, 81, 81, 343,
- 344, 345, 343, 343, 343, 343, 343, 346, 174, 580,
-
- 580, 347, 347, 347, 347, 347, 348, 310, 350, 350,
- 350, 350, 350, 350, 350, 350, 319, 319, 319, 319,
- 319, 319, 319, 319, 480, 347, 347, 347, 347, 347,
- 347, 348, 479, 351, 351, 351, 351, 351, 352, 349,
- 349, 261, 174, 355, 355, 355, 355, 355, 355, 355,
- 355, 310, 261, 174, 355, 355, 355, 355, 355, 355,
- 81, 81, 310, 261, 174, 356, 356, 356, 356, 356,
- 356, 356, 356, 357, 474, 528, 473, 358, 358, 358,
- 358, 358, 359, 359, 359, 359, 359, 359, 359, 359,
- 621, 174, 358, 358, 358, 358, 358, 358, 358, 358,
-
- 357, 358, 358, 358, 358, 358, 358, 174, 362, 363,
- 364, 362, 362, 362, 362, 362, 365, 590, 85, 472,
- 366, 366, 366, 366, 366, 387, 388, 388, 388, 388,
- 388, 388, 388, 388, 387, 389, 389, 389, 389, 389,
- 389, 389, 389, 471, 366, 366, 366, 366, 366, 366,
- 387, 390, 390, 390, 390, 390, 391, 388, 388, 470,
- 81, 347, 347, 347, 347, 347, 347, 347, 347, 81,
- 398, 398, 398, 398, 398, 398, 398, 398, 416, 416,
- 416, 416, 416, 417, 477, 81, 394, 621, 395, 395,
- 395, 395, 395, 395, 395, 395, 396, 396, 598, 598,
-
- 397, 397, 397, 397, 397, 621, 478, 397, 397, 397,
- 397, 397, 397, 397, 397, 406, 407, 408, 406, 406,
- 406, 406, 406, 342, 397, 397, 397, 397, 397, 397,
- 401, 402, 403, 401, 401, 401, 401, 401, 404, 259,
- 481, 85, 405, 405, 405, 405, 405, 348, 394, 349,
- 349, 349, 349, 349, 349, 349, 349, 348, 396, 349,
- 349, 349, 349, 349, 349, 431, 405, 405, 405, 405,
- 405, 405, 348, 430, 349, 349, 349, 349, 349, 349,
- 349, 349, 261, 174, 261, 174, 450, 450, 450, 450,
- 450, 451, 310, 482, 357, 366, 366, 366, 366, 366,
-
- 366, 366, 366, 621, 174, 415, 415, 415, 415, 415,
- 415, 415, 415, 357, 261, 174, 411, 411, 411, 411,
- 411, 411, 411, 411, 357, 261, 174, 411, 411, 411,
- 411, 411, 411, 603, 604, 357, 261, 174, 412, 412,
- 412, 412, 412, 412, 412, 412, 413, 174, 603, 604,
- 414, 414, 414, 414, 414, 621, 357, 414, 414, 414,
- 414, 414, 414, 414, 414, 436, 437, 438, 439, 436,
- 436, 436, 436, 428, 414, 414, 414, 414, 414, 414,
- 174, 418, 419, 420, 418, 418, 418, 418, 418, 174,
- 148, 148, 427, 421, 421, 421, 421, 421, 413, 81,
-
- 387, 388, 388, 388, 388, 388, 388, 388, 388, 387,
- 388, 388, 388, 388, 388, 388, 426, 421, 421, 421,
- 421, 421, 421, 387, 388, 388, 388, 388, 388, 388,
- 388, 388, 518, 484, 425, 81, 441, 442, 443, 441,
- 441, 441, 441, 441, 81, 405, 405, 405, 405, 405,
- 405, 405, 405, 484, 519, 484, 485, 394, 81, 445,
- 445, 445, 445, 445, 445, 445, 445, 396, 394, 486,
- 446, 446, 446, 446, 446, 446, 446, 446, 447, 81,
- 424, 423, 448, 448, 448, 448, 448, 449, 449, 449,
- 449, 449, 449, 449, 449, 621, 422, 448, 448, 448,
-
- 448, 448, 448, 448, 448, 81, 448, 448, 448, 448,
- 448, 448, 452, 453, 454, 452, 452, 452, 452, 452,
- 455, 174, 348, 342, 456, 456, 456, 456, 456, 457,
- 413, 458, 458, 458, 458, 458, 458, 458, 458, 468,
- 468, 468, 468, 468, 469, 261, 174, 259, 456, 456,
- 456, 456, 456, 456, 457, 357, 459, 459, 459, 459,
- 459, 459, 459, 459, 457, 217, 460, 460, 460, 460,
- 460, 461, 458, 458, 261, 174, 421, 421, 421, 421,
- 421, 421, 421, 421, 413, 621, 174, 467, 467, 467,
- 467, 467, 467, 467, 467, 413, 261, 174, 464, 464,
-
- 464, 464, 464, 464, 464, 464, 413, 261, 174, 464,
- 464, 464, 464, 464, 464, 382, 381, 413, 261, 174,
- 465, 465, 465, 465, 465, 465, 465, 465, 394, 375,
- 374, 369, 466, 466, 466, 466, 466, 621, 447, 466,
- 466, 466, 466, 466, 466, 466, 466, 456, 456, 456,
- 456, 456, 456, 456, 456, 368, 466, 466, 466, 466,
- 466, 466, 486, 621, 487, 487, 487, 487, 487, 487,
- 487, 487, 486, 447, 488, 488, 488, 488, 488, 488,
- 488, 488, 486, 394, 489, 489, 489, 489, 489, 490,
- 491, 491, 486, 447, 569, 605, 367, 486, 81, 491,
-
- 491, 491, 487, 487, 487, 487, 487, 492, 81, 493,
- 493, 493, 493, 493, 493, 493, 493, 492, 81, 494,
- 494, 494, 494, 494, 494, 494, 494, 342, 81, 259,
- 81, 81, 492, 81, 495, 495, 495, 495, 495, 496,
- 493, 493, 394, 475, 499, 499, 499, 499, 499, 499,
- 499, 499, 447, 394, 217, 500, 500, 500, 500, 500,
- 500, 500, 500, 501, 477, 476, 518, 502, 502, 502,
- 502, 502, 503, 503, 503, 503, 503, 503, 503, 503,
- 504, 504, 504, 504, 504, 505, 478, 217, 519, 286,
- 331, 502, 502, 502, 502, 502, 502, 506, 507, 508,
-
- 506, 506, 506, 506, 506, 509, 330, 328, 327, 510,
- 510, 510, 510, 510, 621, 326, 502, 502, 502, 502,
- 502, 502, 502, 502, 511, 512, 513, 511, 511, 511,
- 511, 511, 325, 510, 510, 510, 510, 510, 510, 457,
- 324, 458, 458, 458, 458, 458, 458, 458, 458, 457,
- 484, 458, 458, 458, 458, 458, 458, 458, 458, 457,
- 323, 458, 458, 458, 458, 458, 458, 261, 174, 614,
- 484, 322, 484, 484, 614, 321, 320, 413, 261, 174,
- 516, 516, 516, 516, 516, 516, 516, 516, 530, 302,
- 531, 532, 533, 530, 259, 531, 532, 533, 537, 538,
-
- 539, 537, 537, 537, 537, 537, 486, 394, 487, 487,
- 487, 487, 487, 487, 487, 487, 486, 501, 487, 487,
- 487, 487, 487, 487, 487, 487, 217, 621, 394, 561,
- 394, 298, 81, 217, 621, 105, 534, 501, 501, 286,
- 547, 536, 81, 486, 547, 487, 487, 487, 487, 487,
- 487, 562, 81, 540, 541, 542, 540, 540, 540, 540,
- 540, 492, 288, 493, 493, 493, 493, 493, 493, 493,
- 493, 550, 550, 550, 550, 550, 551, 286, 492, 81,
- 493, 493, 493, 493, 493, 493, 493, 493, 492, 287,
- 493, 493, 493, 493, 493, 493, 510, 510, 510, 510,
-
- 510, 510, 510, 510, 394, 561, 545, 545, 545, 545,
- 545, 545, 545, 545, 501, 394, 394, 546, 546, 546,
- 546, 546, 546, 546, 546, 547, 547, 562, 286, 548,
- 548, 548, 548, 548, 549, 549, 549, 549, 549, 549,
- 549, 549, 621, 284, 548, 548, 548, 548, 548, 548,
- 548, 548, 283, 548, 548, 548, 548, 548, 548, 552,
- 553, 554, 552, 552, 552, 552, 552, 282, 281, 280,
- 279, 555, 555, 555, 555, 555, 174, 556, 556, 556,
- 556, 556, 556, 556, 556, 174, 557, 557, 557, 557,
- 557, 557, 557, 557, 587, 555, 555, 555, 555, 555,
-
- 555, 174, 558, 558, 558, 558, 558, 559, 556, 556,
- 621, 278, 621, 621, 621, 530, 588, 531, 532, 533,
- 621, 275, 531, 532, 533, 621, 99, 621, 621, 533,
- 567, 217, 259, 568, 568, 568, 568, 568, 568, 568,
- 568, 217, 587, 529, 529, 600, 621, 529, 621, 621,
- 621, 105, 85, 535, 535, 205, 247, 535, 534, 529,
- 529, 529, 244, 534, 588, 243, 242, 601, 534, 535,
- 535, 535, 569, 534, 570, 570, 570, 570, 570, 570,
- 570, 570, 569, 600, 571, 571, 571, 571, 571, 571,
- 571, 571, 241, 569, 536, 572, 572, 572, 572, 572,
-
- 573, 570, 570, 240, 238, 601, 237, 574, 81, 575,
- 575, 575, 575, 575, 575, 575, 575, 574, 81, 576,
- 576, 576, 576, 576, 576, 576, 576, 236, 574, 81,
- 577, 577, 577, 577, 577, 578, 575, 575, 555, 555,
- 555, 555, 555, 555, 555, 555, 394, 235, 581, 581,
- 581, 581, 581, 581, 581, 581, 547, 394, 234, 582,
- 582, 582, 582, 582, 582, 582, 582, 233, 232, 231,
- 230, 583, 583, 583, 583, 583, 584, 584, 584, 584,
- 584, 584, 584, 584, 585, 585, 585, 585, 585, 586,
- 229, 228, 227, 105, 97, 583, 583, 583, 583, 583,
-
- 583, 621, 85, 583, 583, 583, 583, 583, 583, 583,
- 583, 174, 556, 556, 556, 556, 556, 556, 556, 556,
- 174, 556, 556, 556, 556, 556, 556, 556, 556, 174,
- 556, 556, 556, 556, 556, 556, 568, 568, 568, 568,
- 568, 568, 568, 568, 568, 568, 568, 568, 568, 568,
- 568, 568, 591, 592, 593, 591, 591, 591, 591, 591,
- 569, 85, 570, 570, 570, 570, 570, 570, 570, 570,
- 569, 205, 570, 570, 570, 570, 570, 570, 570, 570,
- 155, 156, 150, 150, 142, 569, 81, 570, 570, 570,
- 570, 570, 570, 203, 136, 136, 81, 594, 595, 596,
-
- 594, 594, 594, 594, 594, 574, 81, 575, 575, 575,
- 575, 575, 575, 575, 575, 196, 195, 194, 193, 192,
- 574, 81, 575, 575, 575, 575, 575, 575, 575, 575,
- 574, 190, 575, 575, 575, 575, 575, 575, 394, 189,
- 599, 599, 599, 599, 599, 599, 599, 599, 605, 188,
- 606, 606, 606, 606, 606, 606, 606, 606, 605, 187,
- 607, 607, 607, 607, 607, 607, 607, 607, 605, 186,
- 608, 608, 608, 608, 608, 609, 606, 606, 610, 610,
- 610, 610, 610, 610, 81, 610, 610, 610, 610, 610,
- 610, 610, 610, 181, 81, 611, 611, 611, 611, 611,
-
- 611, 611, 611, 180, 81, 612, 612, 612, 612, 612,
- 613, 610, 610, 615, 616, 617, 615, 615, 615, 615,
- 615, 605, 179, 606, 606, 606, 606, 606, 606, 606,
- 606, 605, 178, 606, 606, 606, 606, 606, 606, 606,
- 606, 105, 80, 105, 167, 93, 605, 81, 606, 606,
- 606, 606, 606, 606, 85, 83, 82, 81, 610, 610,
- 610, 610, 610, 610, 610, 610, 81, 81, 610, 610,
- 610, 610, 610, 610, 610, 610, 156, 150, 142, 113,
- 111, 136, 81, 618, 618, 618, 618, 618, 618, 618,
- 618, 615, 615, 615, 615, 615, 615, 615, 615, 619,
-
- 619, 619, 619, 619, 620, 618, 618, 618, 618, 618,
- 618, 618, 618, 618, 618, 132, 130, 81, 618, 618,
- 618, 618, 618, 618, 117, 81, 116, 115, 112, 107,
- 105, 93, 83, 81, 82, 81, 621, 621, 621, 621,
- 621, 81, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 81, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
-
- 68, 75, 75, 75, 75, 75, 75, 75, 75, 75,
- 75, 75, 75, 75, 75, 75, 75, 80, 621, 621,
- 621, 621, 621, 621, 621, 80, 80, 80, 621, 621,
- 80, 80, 80, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 84, 84, 84, 84, 84, 84, 84, 88,
- 621, 621, 621, 621, 88, 621, 621, 88, 88, 88,
- 88, 621, 88, 88, 88, 92, 621, 621, 621, 621,
- 621, 621, 621, 92, 92, 92, 621, 621, 92, 92,
- 92, 94, 621, 621, 94, 94, 621, 94, 621, 94,
- 94, 94, 621, 621, 94, 94, 94, 104, 104, 621,
-
- 621, 621, 104, 137, 621, 621, 137, 137, 621, 137,
- 621, 137, 137, 137, 621, 621, 137, 137, 137, 141,
- 621, 621, 141, 141, 621, 141, 621, 141, 141, 141,
- 621, 141, 621, 141, 141, 149, 621, 621, 149, 621,
- 621, 149, 621, 149, 149, 149, 149, 621, 149, 149,
- 149, 153, 153, 153, 153, 153, 153, 153, 153, 153,
- 153, 153, 153, 153, 153, 153, 153, 155, 155, 621,
- 155, 621, 155, 155, 155, 155, 155, 155, 155, 155,
- 155, 155, 155, 161, 161, 161, 161, 161, 161, 161,
- 161, 161, 161, 161, 161, 161, 161, 161, 161, 162,
-
- 162, 621, 162, 162, 162, 162, 162, 162, 162, 162,
- 162, 162, 162, 162, 162, 165, 621, 621, 621, 621,
- 165, 621, 621, 165, 165, 165, 621, 621, 165, 165,
- 165, 95, 621, 621, 95, 95, 621, 95, 621, 95,
- 95, 95, 621, 621, 95, 95, 95, 173, 173, 621,
- 621, 621, 173, 175, 175, 175, 621, 621, 621, 175,
- 138, 621, 621, 138, 138, 621, 138, 621, 138, 138,
- 138, 621, 621, 138, 138, 138, 206, 206, 206, 206,
- 206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
- 206, 206, 213, 213, 621, 621, 621, 213, 219, 219,
-
- 219, 621, 621, 621, 219, 253, 253, 621, 621, 621,
- 253, 254, 254, 621, 621, 621, 254, 258, 258, 621,
- 621, 621, 258, 260, 260, 260, 621, 621, 621, 260,
- 298, 298, 621, 621, 621, 298, 300, 300, 621, 621,
- 621, 300, 301, 301, 621, 621, 621, 301, 303, 303,
- 303, 621, 621, 621, 303, 307, 307, 307, 307, 621,
- 621, 621, 307, 339, 339, 621, 621, 621, 339, 340,
- 340, 621, 621, 621, 340, 341, 341, 621, 621, 621,
- 341, 353, 353, 353, 621, 621, 621, 353, 354, 354,
- 354, 354, 621, 621, 621, 354, 392, 392, 621, 621,
-
- 621, 392, 393, 393, 621, 621, 621, 393, 409, 409,
- 409, 621, 621, 621, 409, 410, 410, 410, 410, 621,
- 621, 621, 410, 440, 440, 621, 621, 621, 440, 444,
- 621, 444, 444, 621, 621, 621, 444, 462, 462, 462,
- 621, 621, 621, 462, 463, 463, 463, 463, 621, 621,
- 621, 463, 497, 497, 621, 621, 621, 497, 498, 621,
- 498, 498, 621, 621, 621, 498, 514, 514, 514, 621,
- 621, 621, 514, 515, 515, 515, 621, 621, 621, 621,
- 515, 524, 524, 524, 524, 524, 524, 524, 524, 524,
- 524, 524, 524, 524, 524, 524, 524, 529, 529, 621,
-
- 529, 529, 529, 621, 621, 529, 529, 529, 621, 621,
- 529, 529, 529, 535, 535, 621, 535, 535, 535, 621,
- 621, 535, 535, 535, 621, 621, 535, 535, 535, 543,
- 543, 621, 621, 621, 543, 544, 621, 544, 544, 621,
- 621, 621, 544, 560, 560, 621, 621, 621, 621, 560,
- 579, 579, 621, 621, 621, 579, 580, 621, 580, 580,
- 621, 621, 621, 580, 597, 597, 621, 621, 621, 597,
- 598, 621, 598, 621, 621, 621, 621, 598, 602, 602,
- 602, 602, 602, 602, 602, 602, 602, 602, 602, 602,
- 602, 602, 602, 602, 13, 621, 621, 621, 621, 621,
-
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 16,
+ 25, 26, 16, 16, 27, 28, 29, 30, 28, 28,
+ 28, 28, 28, 28, 28, 31, 32, 33, 16, 34,
+ 35, 35, 35, 36, 37, 37, 37, 37, 38, 37,
+ 39, 37, 40, 41, 42, 43, 37, 37, 37, 37,
+ 37, 44, 16, 45, 45, 45, 45, 45, 45, 16,
+ 16, 16, 16, 16, 16, 16, 16, 46, 16, 16,
+ 47, 532, 54, 130, 48, 135, 55, 127, 131, 127,
+ 54, 127, 56, 534, 55, 57, 78, 18, 79, 80,
+ 56, 109, 129, 57, 133, 17, 62, 63, 150, 64,
+
+ 49, 50, 149, 152, 51, 64, 168, 139, 134, 58,
+ 101, 110, 52, 59, 37, 53, 37, 58, 154, 64,
+ 65, 59, 37, 105, 37, 17, 62, 63, 155, 64,
+ 796, 78, 18, 79, 80, 64, 81, 111, 60, 175,
+ 139, 172, 101, 115, 115, 66, 60, 115, 115, 64,
+ 65, 140, 142, 178, 17, 18, 19, 71, 67, 173,
+ 141, 168, 139, 72, 73, 74, 171, 115, 122, 122,
+ 122, 122, 122, 123, 179, 66, 17, 18, 19, 75,
+ 67, 81, 143, 144, 171, 242, 145, 101, 101, 180,
+ 181, 116, 176, 236, 146, 198, 140, 147, 17, 18,
+
+ 19, 71, 67, 177, 76, 161, 201, 72, 73, 74,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 101, 796, 177, 75, 179, 249, 68, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 17, 18, 19, 76, 67,
+ 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
+ 195, 195, 195, 195, 195, 196, 206, 100, 119, 100,
+ 100, 100, 177, 100, 100, 207, 101, 100, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 101, 243,
+ 235, 100, 100, 100, 101, 68, 69, 69, 69, 69,
+
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 33, 17, 18, 19, 33, 33,
+ 82, 23, 24, 33, 83, 26, 33, 33, 84, 85,
+ 86, 87, 85, 85, 85, 85, 85, 85, 85, 31,
+ 88, 33, 33, 89, 90, 90, 90, 91, 92, 92,
+ 92, 92, 93, 92, 94, 92, 95, 92, 96, 92,
+ 92, 92, 92, 92, 92, 68, 33, 97, 97, 97,
+ 97, 97, 97, 98, 98, 98, 98, 98, 98, 98,
+ 98, 99, 98, 98, 105, 218, 101, 796, 109, 168,
+ 139, 269, 247, 178, 106, 796, 220, 107, 107, 107,
+
+ 107, 107, 107, 107, 107, 107, 107, 117, 183, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 119,
+ 101, 180, 181, 120, 120, 120, 120, 120, 101, 101,
+ 357, 159, 159, 246, 184, 159, 159, 216, 216, 216,
+ 216, 216, 216, 177, 245, 101, 154, 120, 120, 120,
+ 120, 120, 120, 100, 358, 159, 155, 127, 101, 100,
+ 313, 563, 100, 100, 101, 100, 100, 100, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 119, 160,
+ 311, 100, 126, 126, 126, 126, 126, 127, 127, 127,
+ 127, 128, 127, 127, 127, 127, 127, 127, 127, 127,
+
+ 127, 127, 127, 127, 101, 127, 120, 120, 120, 120,
+ 120, 120, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 813, 218, 796, 105, 127, 127, 127,
+ 127, 127, 101, 100, 101, 282, 127, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 101, 304, 311,
+ 372, 100, 100, 100, 100, 100, 100, 138, 139, 100,
+ 100, 100, 311, 100, 100, 101, 378, 100, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 244, 310,
+ 813, 100, 100, 100, 100, 101, 120, 120, 120, 120,
+
+ 120, 120, 120, 120, 120, 120, 105, 164, 139, 165,
+ 813, 166, 101, 109, 436, 165, 106, 166, 373, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 226,
+ 101, 166, 166, 813, 227, 311, 111, 218, 228, 170,
+ 229, 185, 170, 170, 101, 168, 139, 185, 282, 170,
+ 185, 115, 115, 185, 185, 115, 115, 166, 813, 184,
+ 782, 371, 168, 139, 170, 148, 105, 187, 360, 185,
+ 109, 301, 302, 361, 303, 115, 167, 101, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 101,
+ 813, 314, 188, 185, 115, 101, 532, 115, 115, 116,
+
+ 115, 115, 115, 115, 184, 101, 115, 115, 108, 714,
+ 108, 108, 171, 101, 108, 108, 184, 435, 108, 380,
+ 187, 115, 115, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 108, 108, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 190, 115, 187, 105, 101,
+ 191, 187, 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 119, 187, 357, 357, 193, 193, 193, 193,
+ 193, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 358, 358,
+ 193, 193, 193, 193, 193, 193, 187, 187, 187, 187,
+
+ 187, 187, 187, 187, 187, 187, 187, 813, 377, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 813,
+ 341, 341, 341, 187, 187, 187, 187, 187, 330, 331,
+ 112, 332, 112, 112, 112, 394, 112, 112, 395, 437,
+ 112, 255, 255, 255, 255, 255, 255, 187, 187, 187,
+ 187, 187, 187, 187, 112, 112, 112, 187, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197, 119, 187,
+ 498, 101, 197, 197, 197, 197, 197, 198, 198, 198,
+ 198, 199, 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 499, 200, 193, 193, 193, 193,
+
+ 193, 193, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 813, 105, 101, 443, 198, 198, 198,
+ 198, 198, 260, 218, 159, 159, 198, 261, 159, 159,
+ 386, 262, 513, 263, 282, 387, 369, 142, 101, 370,
+ 504, 187, 187, 187, 187, 187, 187, 813, 159, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 114,
+ 763, 100, 100, 114, 505, 100, 100, 143, 144, 114,
+ 101, 145, 160, 272, 272, 272, 272, 272, 273, 146,
+ 438, 442, 147, 114, 114, 100, 212, 213, 214, 212,
+
+ 212, 212, 212, 212, 212, 212, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 345, 218, 763, 158,
+ 101, 100, 100, 158, 101, 100, 100, 763, 347, 158,
+ 399, 444, 101, 215, 215, 215, 215, 215, 215, 215,
+ 215, 215, 215, 158, 158, 100, 506, 215, 215, 215,
+ 215, 215, 251, 252, 253, 251, 251, 251, 251, 251,
+ 251, 251, 100, 100, 100, 100, 496, 127, 101, 813,
+ 507, 215, 215, 215, 215, 215, 215, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 119, 119, 498,
+ 532, 221, 221, 221, 221, 221, 255, 255, 255, 255,
+
+ 255, 255, 255, 255, 255, 255, 350, 350, 350, 350,
+ 350, 351, 714, 499, 101, 215, 215, 215, 215, 215,
+ 215, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 813, 379, 622, 127, 127, 127, 127, 127, 127,
+ 182, 218, 182, 182, 101, 185, 182, 182, 101, 439,
+ 182, 185, 282, 445, 185, 813, 218, 185, 185, 100,
+ 100, 100, 100, 100, 100, 182, 182, 347, 218, 127,
+ 127, 187, 497, 185, 185, 562, 185, 185, 185, 347,
+ 185, 185, 498, 659, 185, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 525, 188, 185, 185, 185,
+
+ 185, 115, 345, 218, 115, 115, 499, 115, 115, 115,
+ 115, 115, 127, 115, 115, 115, 565, 502, 345, 218,
+ 127, 115, 345, 218, 127, 504, 500, 187, 115, 115,
+ 347, 501, 101, 127, 416, 115, 115, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 503, 101, 505,
+ 127, 198, 190, 115, 254, 254, 254, 254, 254, 254,
+ 254, 254, 254, 254, 746, 567, 584, 127, 254, 254,
+ 254, 254, 254, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 315, 105, 316, 316, 316, 316, 316,
+ 316, 101, 254, 254, 254, 254, 254, 254, 187, 746,
+
+ 101, 508, 187, 256, 256, 256, 256, 256, 256, 256,
+ 256, 256, 256, 119, 187, 105, 572, 256, 256, 256,
+ 256, 256, 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198, 198, 570,
+ 200, 254, 254, 254, 254, 254, 254, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198, 813, 511,
+ 504, 506, 198, 198, 198, 198, 198, 271, 271, 271,
+ 271, 271, 271, 271, 271, 271, 271, 419, 419, 419,
+ 419, 419, 420, 506, 505, 507, 187, 187, 187, 187,
+
+ 187, 187, 269, 746, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 159, 520, 763, 507, 159, 101,
+ 521, 621, 763, 127, 159, 287, 287, 287, 287, 287,
+ 287, 287, 287, 287, 287, 127, 573, 218, 159, 159,
+ 101, 100, 101, 274, 274, 274, 274, 274, 274, 274,
+ 274, 274, 274, 512, 624, 627, 127, 274, 274, 274,
+ 274, 274, 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 488, 488, 488, 488, 488, 489, 101, 628,
+ 633, 274, 274, 274, 274, 274, 274, 276, 277, 278,
+ 278, 278, 278, 278, 278, 278, 278, 279, 649, 649,
+
+ 649, 280, 280, 280, 280, 280, 381, 382, 383, 381,
+ 381, 381, 381, 381, 381, 381, 446, 218, 447, 447,
+ 447, 447, 447, 447, 218, 280, 280, 280, 280, 280,
+ 280, 218, 283, 284, 285, 283, 283, 283, 283, 283,
+ 283, 283, 286, 625, 813, 218, 287, 287, 287, 287,
+ 287, 410, 411, 412, 410, 410, 410, 410, 410, 410,
+ 410, 528, 528, 528, 528, 528, 529, 626, 679, 127,
+ 287, 287, 287, 287, 287, 287, 288, 288, 288, 288,
+ 288, 288, 288, 288, 288, 288, 119, 627, 625, 127,
+ 288, 288, 288, 288, 288, 356, 356, 356, 356, 356,
+
+ 356, 356, 356, 356, 356, 537, 537, 537, 537, 537,
+ 538, 628, 626, 218, 274, 274, 274, 274, 274, 274,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 813, 683, 684, 127, 127, 127, 127, 127, 127, 345,
+ 218, 414, 414, 414, 414, 414, 414, 678, 659, 127,
+ 399, 347, 400, 400, 400, 400, 400, 400, 100, 100,
+ 100, 100, 100, 100, 315, 627, 318, 318, 318, 318,
+ 318, 319, 316, 316, 316, 316, 320, 320, 320, 320,
+ 320, 320, 320, 320, 320, 320, 119, 597, 101, 628,
+ 320, 320, 320, 320, 320, 418, 418, 418, 418, 418,
+
+ 418, 418, 418, 418, 418, 476, 746, 477, 477, 477,
+ 477, 477, 477, 746, 320, 320, 320, 320, 320, 320,
+ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
+ 100, 100, 100, 100, 321, 321, 321, 321, 321, 425,
+ 425, 425, 425, 425, 425, 425, 425, 425, 425, 554,
+ 554, 554, 554, 554, 555, 345, 218, 695, 320, 320,
+ 320, 320, 320, 320, 334, 335, 336, 334, 334, 334,
+ 334, 334, 334, 334, 813, 218, 345, 218, 483, 483,
+ 483, 483, 483, 483, 731, 127, 416, 813, 416, 487,
+ 487, 487, 487, 487, 487, 487, 487, 487, 487, 534,
+
+ 101, 339, 339, 340, 341, 341, 341, 341, 341, 341,
+ 341, 279, 345, 218, 346, 346, 346, 346, 346, 346,
+ 346, 346, 346, 346, 347, 101, 683, 684, 348, 348,
+ 348, 348, 348, 631, 105, 514, 515, 516, 517, 515,
+ 515, 515, 515, 515, 515, 515, 600, 600, 600, 600,
+ 600, 601, 348, 348, 348, 348, 348, 348, 218, 352,
+ 353, 354, 352, 352, 352, 352, 352, 352, 352, 355,
+ 730, 695, 127, 356, 356, 356, 356, 356, 527, 527,
+ 527, 527, 527, 527, 527, 527, 527, 527, 632, 623,
+ 695, 680, 675, 218, 127, 127, 127, 356, 356, 356,
+
+ 356, 356, 356, 813, 347, 348, 348, 348, 348, 348,
+ 348, 348, 348, 348, 348, 384, 384, 384, 384, 384,
+ 384, 384, 384, 384, 384, 695, 676, 676, 813, 384,
+ 384, 384, 384, 384, 475, 475, 475, 475, 475, 475,
+ 475, 475, 475, 475, 618, 618, 618, 618, 618, 619,
+ 677, 677, 813, 384, 384, 384, 384, 384, 384, 385,
+ 385, 385, 385, 385, 385, 385, 385, 385, 385, 703,
+ 634, 694, 127, 385, 385, 385, 385, 385, 536, 536,
+ 536, 536, 536, 536, 536, 536, 536, 536, 100, 100,
+ 100, 100, 634, 218, 634, 634, 734, 384, 384, 384,
+
+ 384, 384, 384, 399, 416, 400, 400, 400, 400, 400,
+ 400, 400, 400, 400, 400, 399, 532, 401, 401, 401,
+ 401, 401, 401, 401, 401, 401, 401, 399, 534, 402,
+ 402, 402, 402, 402, 403, 400, 400, 400, 400, 405,
+ 405, 405, 405, 405, 405, 405, 405, 405, 405, 279,
+ 345, 218, 414, 414, 414, 414, 414, 414, 414, 414,
+ 414, 414, 347, 634, 105, 101, 413, 413, 413, 413,
+ 413, 544, 545, 546, 544, 544, 544, 544, 544, 544,
+ 544, 686, 761, 107, 127, 634, 107, 634, 635, 644,
+ 413, 413, 413, 413, 413, 413, 345, 218, 415, 415,
+
+ 415, 415, 415, 415, 415, 415, 415, 415, 416, 345,
+ 218, 101, 417, 417, 417, 417, 417, 345, 218, 813,
+ 218, 416, 127, 127, 127, 762, 105, 101, 733, 485,
+ 676, 485, 561, 564, 101, 566, 417, 417, 417, 417,
+ 417, 417, 218, 421, 422, 423, 421, 421, 421, 421,
+ 421, 421, 421, 424, 677, 684, 813, 425, 425, 425,
+ 425, 425, 494, 494, 494, 494, 494, 494, 494, 494,
+ 494, 494, 662, 662, 662, 662, 662, 663, 101, 105,
+ 813, 425, 425, 425, 425, 425, 425, 813, 571, 417,
+ 417, 417, 417, 417, 417, 417, 417, 417, 417, 446,
+
+ 701, 449, 449, 449, 449, 449, 450, 447, 447, 447,
+ 447, 384, 384, 384, 384, 384, 384, 384, 384, 384,
+ 384, 781, 782, 781, 782, 384, 384, 384, 384, 384,
+ 345, 218, 549, 549, 549, 549, 549, 549, 685, 575,
+ 575, 607, 485, 608, 608, 608, 608, 608, 608, 384,
+ 384, 384, 384, 384, 384, 464, 465, 466, 464, 464,
+ 464, 464, 464, 464, 464, 553, 553, 553, 553, 553,
+ 553, 553, 553, 553, 553, 591, 592, 593, 591, 591,
+ 591, 591, 591, 591, 591, 695, 732, 700, 700, 700,
+ 644, 101, 399, 532, 400, 400, 400, 400, 400, 400,
+
+ 400, 400, 400, 400, 399, 597, 400, 400, 400, 400,
+ 400, 400, 400, 400, 400, 400, 471, 472, 473, 471,
+ 471, 471, 471, 471, 471, 471, 474, 728, 101, 728,
+ 475, 475, 475, 475, 475, 543, 543, 543, 543, 543,
+ 543, 543, 543, 543, 543, 127, 211, 741, 786, 211,
+ 218, 729, 218, 729, 475, 475, 475, 475, 475, 475,
+ 476, 416, 479, 479, 479, 479, 479, 480, 477, 477,
+ 477, 477, 345, 218, 483, 483, 483, 483, 483, 483,
+ 483, 483, 483, 483, 416, 101, 101, 218, 482, 482,
+ 482, 482, 482, 532, 813, 595, 595, 595, 595, 595,
+
+ 595, 169, 169, 169, 218, 534, 597, 688, 759, 689,
+ 690, 691, 482, 482, 482, 482, 482, 482, 345, 218,
+ 484, 484, 484, 484, 484, 484, 484, 484, 484, 484,
+ 485, 316, 760, 316, 486, 486, 486, 486, 486, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 574,
+ 575, 575, 575, 575, 575, 575, 597, 692, 486, 486,
+ 486, 486, 486, 486, 218, 490, 491, 492, 490, 490,
+ 490, 490, 490, 490, 490, 493, 218, 345, 218, 494,
+ 494, 494, 494, 494, 345, 218, 218, 485, 218, 485,
+ 813, 218, 169, 169, 169, 534, 551, 485, 532, 551,
+
+ 759, 813, 551, 494, 494, 494, 494, 494, 494, 813,
+ 597, 486, 486, 486, 486, 486, 486, 486, 486, 486,
+ 486, 100, 650, 778, 760, 813, 317, 100, 317, 735,
+ 100, 100, 735, 100, 100, 100, 127, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 702, 779, 650, 100,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 495, 127, 127, 127, 127, 127,
+ 127, 127, 101, 127, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 525, 526, 526, 526, 526, 526, 526, 526, 526,
+
+ 526, 526, 345, 218, 614, 614, 614, 614, 614, 614,
+ 447, 650, 447, 532, 551, 617, 617, 617, 617, 617,
+ 617, 617, 617, 617, 617, 659, 576, 576, 101, 532,
+ 813, 533, 533, 533, 533, 533, 533, 533, 533, 533,
+ 533, 534, 659, 695, 813, 535, 535, 535, 535, 535,
+ 636, 637, 638, 639, 636, 636, 636, 636, 636, 636,
+ 345, 218, 674, 674, 674, 674, 674, 674, 813, 535,
+ 535, 535, 535, 535, 535, 539, 540, 541, 539, 539,
+ 539, 539, 539, 539, 539, 542, 778, 695, 739, 543,
+ 543, 543, 543, 543, 646, 646, 646, 646, 646, 646,
+
+ 646, 646, 646, 646, 448, 477, 448, 477, 345, 218,
+ 779, 575, 575, 543, 543, 543, 543, 543, 543, 813,
+ 551, 535, 535, 535, 535, 535, 535, 535, 535, 535,
+ 535, 345, 218, 549, 549, 549, 549, 549, 549, 549,
+ 549, 549, 549, 485, 728, 681, 813, 548, 548, 548,
+ 548, 548, 647, 647, 647, 647, 647, 648, 649, 649,
+ 649, 649, 688, 607, 689, 690, 691, 478, 729, 478,
+ 813, 548, 548, 548, 548, 548, 548, 345, 218, 550,
+ 550, 550, 550, 550, 550, 550, 550, 550, 550, 551,
+ 127, 740, 813, 552, 552, 552, 552, 552, 606, 606,
+
+ 606, 606, 606, 606, 606, 606, 606, 606, 447, 477,
+ 447, 477, 694, 608, 607, 608, 813, 552, 552, 552,
+ 552, 552, 552, 218, 556, 557, 558, 556, 556, 556,
+ 556, 556, 556, 556, 607, 609, 768, 609, 559, 559,
+ 559, 559, 559, 532, 534, 657, 657, 657, 657, 657,
+ 657, 651, 650, 651, 650, 597, 651, 651, 651, 651,
+ 651, 651, 559, 559, 559, 559, 559, 559, 813, 532,
+ 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
+ 100, 659, 652, 608, 652, 608, 100, 687, 687, 100,
+ 100, 687, 100, 100, 100, 127, 127, 127, 127, 127,
+
+ 127, 127, 127, 127, 127, 687, 687, 687, 100, 127,
+ 127, 127, 127, 127, 127, 127, 560, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 101, 127, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 574, 577, 577, 577, 577, 577, 578, 575, 575, 575,
+ 575, 187, 723, 723, 532, 187, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 714, 187, 724, 724,
+ 198, 198, 198, 583, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
+
+ 198, 198, 650, 200, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 586, 587, 588, 589, 586, 586, 586, 586, 586,
+ 586, 661, 661, 661, 661, 661, 661, 661, 661, 661,
+ 661, 669, 670, 671, 669, 669, 669, 669, 669, 669,
+ 669, 717, 717, 717, 717, 717, 718, 101, 525, 526,
+ 526, 526, 526, 526, 526, 526, 526, 526, 526, 707,
+ 708, 709, 707, 707, 707, 707, 707, 707, 707, 668,
+ 668, 668, 668, 668, 668, 668, 668, 668, 668, 757,
+ 757, 757, 757, 757, 758, 101, 532, 813, 595, 595,
+
+ 595, 595, 595, 595, 595, 595, 595, 595, 534, 714,
+ 470, 643, 594, 594, 594, 594, 594, 532, 532, 712,
+ 712, 712, 712, 712, 712, 696, 697, 696, 697, 659,
+ 714, 813, 218, 813, 813, 813, 594, 594, 594, 594,
+ 594, 594, 532, 551, 596, 596, 596, 596, 596, 596,
+ 596, 596, 596, 596, 597, 759, 642, 641, 598, 598,
+ 598, 598, 598, 716, 716, 716, 716, 716, 716, 716,
+ 716, 716, 716, 688, 640, 689, 690, 691, 651, 760,
+ 651, 692, 598, 598, 598, 598, 598, 598, 602, 603,
+ 604, 602, 602, 602, 602, 602, 602, 602, 605, 574,
+
+ 574, 127, 606, 606, 606, 606, 606, 736, 737, 738,
+ 736, 736, 736, 736, 736, 736, 736, 791, 791, 791,
+ 791, 791, 791, 692, 574, 101, 606, 606, 606, 606,
+ 606, 606, 813, 630, 598, 598, 598, 598, 598, 598,
+ 598, 598, 598, 598, 607, 629, 610, 610, 610, 610,
+ 610, 611, 608, 608, 608, 608, 345, 218, 614, 614,
+ 614, 614, 614, 614, 614, 614, 614, 614, 551, 101,
+ 218, 778, 613, 613, 613, 613, 613, 813, 607, 689,
+ 690, 691, 813, 607, 813, 813, 691, 695, 470, 696,
+ 696, 696, 696, 696, 696, 779, 613, 613, 613, 613,
+
+ 613, 613, 345, 218, 615, 615, 615, 615, 615, 615,
+ 615, 615, 615, 615, 747, 343, 747, 127, 616, 616,
+ 616, 616, 616, 748, 764, 748, 764, 692, 765, 797,
+ 765, 797, 692, 218, 723, 723, 723, 723, 723, 723,
+ 585, 582, 616, 616, 616, 616, 616, 616, 813, 581,
+ 616, 616, 616, 616, 616, 616, 616, 616, 616, 616,
+ 100, 693, 580, 693, 693, 693, 100, 693, 693, 100,
+ 100, 693, 100, 100, 100, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 127, 693, 693, 693, 100, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+
+ 127, 127, 127, 127, 127, 127, 127, 620, 127, 127,
+ 127, 101, 127, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 625, 746, 579, 747, 747, 747, 747, 747, 747, 187,
+ 798, 574, 798, 187, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 626, 187, 574, 569, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
+ 568, 200, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 644,
+
+ 476, 645, 645, 645, 645, 645, 645, 645, 645, 645,
+ 645, 722, 722, 722, 722, 722, 722, 722, 722, 722,
+ 722, 532, 476, 753, 753, 753, 753, 753, 753, 755,
+ 476, 470, 755, 714, 343, 279, 755, 101, 650, 524,
+ 653, 653, 653, 653, 653, 654, 651, 651, 651, 651,
+ 532, 523, 657, 657, 657, 657, 657, 657, 657, 657,
+ 657, 657, 597, 522, 519, 518, 656, 656, 656, 656,
+ 656, 756, 756, 756, 756, 756, 756, 756, 756, 756,
+ 756, 532, 446, 777, 777, 777, 777, 777, 777, 446,
+ 656, 656, 656, 656, 656, 656, 532, 446, 658, 658,
+
+ 658, 658, 658, 658, 658, 658, 658, 658, 659, 510,
+ 509, 101, 660, 660, 660, 660, 660, 735, 735, 735,
+ 735, 735, 735, 735, 735, 735, 735, 763, 101, 764,
+ 764, 764, 764, 764, 764, 101, 660, 660, 660, 660,
+ 660, 660, 664, 665, 666, 664, 664, 664, 664, 664,
+ 664, 664, 667, 101, 476, 476, 668, 668, 668, 668,
+ 668, 735, 735, 735, 735, 735, 735, 735, 735, 735,
+ 735, 470, 741, 343, 742, 742, 742, 742, 742, 742,
+ 668, 668, 668, 668, 668, 668, 813, 279, 660, 660,
+ 660, 660, 660, 660, 660, 660, 660, 660, 345, 218,
+
+ 674, 674, 674, 674, 674, 674, 674, 674, 674, 674,
+ 101, 279, 463, 462, 673, 673, 673, 673, 673, 772,
+ 773, 774, 772, 772, 772, 772, 772, 772, 772, 796,
+ 461, 797, 797, 797, 797, 797, 797, 460, 673, 673,
+ 673, 673, 673, 673, 695, 459, 698, 698, 698, 698,
+ 698, 699, 700, 700, 700, 700, 704, 705, 706, 704,
+ 704, 704, 704, 704, 704, 704, 783, 784, 785, 783,
+ 783, 783, 783, 783, 783, 783, 791, 791, 791, 791,
+ 791, 791, 791, 791, 791, 791, 810, 810, 810, 810,
+ 810, 810, 101, 644, 458, 645, 645, 645, 645, 645,
+
+ 645, 645, 645, 645, 645, 792, 792, 792, 792, 792,
+ 792, 792, 792, 792, 792, 793, 793, 793, 793, 793,
+ 794, 791, 791, 791, 791, 457, 795, 456, 455, 795,
+ 454, 101, 532, 795, 712, 712, 712, 712, 712, 712,
+ 712, 712, 712, 712, 659, 453, 452, 451, 711, 711,
+ 711, 711, 711, 786, 813, 787, 787, 787, 787, 787,
+ 787, 791, 791, 791, 791, 791, 791, 791, 791, 791,
+ 791, 446, 711, 711, 711, 711, 711, 711, 532, 446,
+ 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
+ 714, 101, 374, 441, 715, 715, 715, 715, 715, 791,
+
+ 791, 791, 791, 791, 791, 791, 791, 791, 791, 440,
+ 434, 433, 432, 431, 430, 429, 428, 427, 715, 715,
+ 715, 715, 715, 715, 719, 720, 721, 719, 719, 719,
+ 719, 719, 719, 719, 426, 408, 343, 279, 722, 722,
+ 722, 722, 722, 804, 805, 806, 804, 804, 804, 804,
+ 804, 804, 804, 404, 279, 125, 807, 807, 807, 807,
+ 807, 807, 722, 722, 722, 722, 722, 722, 813, 398,
+ 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
+ 218, 725, 725, 725, 725, 725, 726, 723, 723, 723,
+ 723, 741, 101, 742, 742, 742, 742, 742, 742, 742,
+
+ 742, 742, 742, 741, 397, 743, 743, 743, 743, 743,
+ 743, 743, 743, 743, 743, 741, 396, 744, 744, 744,
+ 744, 744, 745, 742, 742, 742, 742, 746, 393, 749,
+ 749, 749, 749, 749, 750, 747, 747, 747, 747, 532,
+ 392, 753, 753, 753, 753, 753, 753, 753, 753, 753,
+ 753, 714, 391, 390, 389, 752, 752, 752, 752, 752,
+ 810, 810, 810, 810, 810, 810, 810, 810, 810, 810,
+ 388, 315, 315, 315, 374, 376, 374, 375, 374, 752,
+ 752, 752, 752, 752, 752, 532, 368, 754, 754, 754,
+ 754, 754, 754, 754, 754, 754, 754, 367, 366, 365,
+
+ 364, 755, 755, 755, 755, 755, 804, 804, 804, 804,
+ 804, 804, 804, 804, 804, 804, 363, 362, 359, 119,
+ 279, 343, 279, 125, 105, 755, 755, 755, 755, 755,
+ 755, 763, 333, 766, 766, 766, 766, 766, 767, 764,
+ 764, 764, 764, 100, 329, 769, 770, 771, 769, 769,
+ 769, 769, 769, 769, 769, 741, 328, 742, 742, 742,
+ 742, 742, 742, 742, 742, 742, 742, 741, 327, 742,
+ 742, 742, 742, 742, 742, 742, 742, 742, 742, 532,
+ 326, 777, 777, 777, 777, 777, 777, 777, 777, 777,
+ 777, 786, 325, 787, 787, 787, 787, 787, 787, 787,
+
+ 787, 787, 787, 786, 324, 788, 788, 788, 788, 788,
+ 788, 788, 788, 788, 788, 786, 323, 789, 789, 789,
+ 789, 789, 790, 787, 787, 787, 787, 796, 322, 799,
+ 799, 799, 799, 799, 800, 797, 797, 797, 797, 100,
+ 191, 801, 802, 803, 801, 801, 801, 801, 801, 801,
+ 801, 786, 315, 787, 787, 787, 787, 787, 787, 787,
+ 787, 787, 787, 786, 315, 787, 787, 787, 787, 787,
+ 787, 787, 787, 787, 787, 807, 807, 807, 807, 807,
+ 807, 807, 807, 807, 807, 811, 811, 811, 811, 811,
+ 812, 810, 810, 810, 810, 810, 810, 810, 810, 810,
+
+ 810, 810, 810, 810, 810, 250, 312, 309, 308, 307,
+ 306, 101, 801, 801, 801, 801, 801, 801, 801, 801,
+ 801, 801, 305, 300, 299, 298, 297, 296, 295, 294,
+ 293, 292, 291, 290, 289, 125, 117, 105, 105, 267,
+ 266, 265, 264, 259, 258, 257, 813, 188, 101, 808,
+ 808, 808, 808, 808, 809, 807, 807, 807, 807, 250,
+ 176, 177, 171, 171, 163, 248, 157, 157, 241, 240,
+ 239, 238, 237, 234, 233, 232, 231, 230, 225, 224,
+ 223, 222, 125, 100, 125, 101, 807, 807, 807, 807,
+ 807, 807, 807, 807, 807, 807, 190, 113, 210, 105,
+
+ 103, 102, 101, 205, 204, 203, 202, 198, 177, 171,
+ 163, 133, 131, 157, 156, 153, 151, 137, 136, 135,
+ 132, 127, 101, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+
+ 77, 77, 77, 77, 77, 77, 77, 100, 125, 113,
+ 103, 102, 101, 813, 100, 813, 100, 100, 100, 100,
+ 813, 813, 100, 100, 100, 100, 100, 100, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 108,
+ 813, 813, 813, 813, 108, 813, 108, 813, 108, 108,
+ 108, 108, 108, 813, 108, 108, 108, 108, 108, 108,
+ 112, 813, 813, 813, 813, 813, 813, 112, 813, 112,
+ 112, 112, 112, 813, 813, 112, 112, 112, 112, 112,
+ 112, 114, 813, 813, 114, 114, 813, 114, 114, 813,
+
+ 114, 114, 114, 114, 813, 813, 114, 114, 114, 114,
+ 114, 114, 124, 124, 813, 124, 813, 813, 813, 124,
+ 158, 813, 813, 158, 158, 813, 158, 158, 813, 158,
+ 158, 158, 158, 813, 813, 158, 158, 158, 158, 158,
+ 158, 162, 813, 813, 162, 162, 813, 162, 162, 813,
+ 162, 162, 162, 162, 813, 162, 162, 162, 813, 162,
+ 162, 162, 170, 813, 813, 170, 813, 813, 170, 170,
+ 813, 170, 170, 170, 170, 170, 813, 170, 170, 170,
+ 170, 170, 170, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+
+ 174, 174, 174, 174, 176, 176, 813, 176, 813, 176,
+ 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
+ 176, 176, 176, 176, 176, 182, 813, 813, 813, 813,
+ 182, 813, 182, 813, 182, 182, 182, 182, 182, 813,
+ 182, 182, 182, 182, 182, 182, 186, 813, 813, 813,
+ 813, 813, 813, 186, 813, 186, 186, 186, 186, 813,
+ 186, 186, 186, 186, 186, 186, 186, 189, 813, 813,
+ 189, 189, 813, 189, 189, 813, 189, 189, 189, 189,
+ 813, 189, 189, 189, 189, 189, 189, 189, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 209,
+ 209, 813, 209, 209, 209, 209, 209, 209, 209, 209,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
+ 115, 813, 813, 115, 115, 813, 115, 115, 813, 115,
+ 115, 115, 115, 813, 813, 115, 115, 115, 115, 115,
+ 115, 124, 124, 813, 124, 813, 813, 813, 124, 217,
+ 217, 813, 217, 813, 813, 813, 217, 219, 219, 219,
+ 813, 219, 813, 813, 813, 219, 158, 813, 813, 158,
+ 158, 813, 158, 158, 813, 158, 158, 158, 158, 813,
+ 813, 158, 158, 158, 158, 158, 158, 159, 813, 813,
+
+ 159, 159, 813, 159, 159, 813, 159, 159, 159, 159,
+ 813, 813, 159, 159, 159, 159, 159, 159, 162, 813,
+ 813, 162, 162, 813, 162, 162, 813, 162, 162, 162,
+ 162, 813, 162, 162, 162, 813, 162, 162, 162, 170,
+ 813, 813, 170, 813, 813, 170, 170, 813, 170, 170,
+ 170, 170, 170, 813, 170, 170, 170, 170, 170, 170,
+ 185, 813, 813, 813, 813, 813, 813, 185, 813, 185,
+ 185, 185, 185, 813, 813, 185, 185, 185, 185, 185,
+ 185, 186, 813, 813, 813, 813, 813, 813, 186, 813,
+ 186, 186, 186, 186, 813, 186, 186, 186, 186, 186,
+
+ 186, 186, 189, 813, 813, 189, 189, 813, 189, 189,
+ 813, 189, 189, 189, 189, 813, 189, 189, 189, 189,
+ 189, 189, 189, 200, 813, 813, 200, 200, 813, 200,
+ 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 275, 275, 813, 275, 813, 813, 813, 275, 281,
+ 281, 281, 813, 281, 813, 813, 813, 281, 337, 337,
+ 813, 337, 813, 813, 813, 337, 338, 338, 813, 338,
+ 813, 813, 813, 338, 342, 342, 813, 342, 813, 813,
+ 813, 342, 344, 344, 344, 813, 344, 813, 813, 813,
+
+ 344, 200, 813, 813, 200, 200, 813, 200, 404, 404,
+ 813, 404, 813, 813, 813, 404, 406, 406, 813, 406,
+ 813, 813, 813, 406, 407, 407, 813, 407, 813, 813,
+ 813, 407, 409, 409, 409, 813, 409, 813, 813, 813,
+ 409, 413, 413, 413, 413, 813, 413, 813, 813, 813,
+ 413, 467, 467, 813, 467, 813, 813, 813, 467, 468,
+ 468, 813, 468, 813, 813, 813, 468, 469, 469, 813,
+ 469, 813, 813, 813, 469, 481, 481, 481, 813, 481,
+ 813, 813, 813, 481, 482, 482, 482, 482, 813, 482,
+ 813, 813, 813, 482, 208, 208, 208, 208, 208, 208,
+
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 530, 530, 813, 530, 813,
+ 813, 813, 530, 531, 531, 813, 531, 813, 813, 813,
+ 531, 547, 547, 547, 813, 547, 813, 813, 813, 547,
+ 548, 548, 548, 548, 813, 548, 813, 813, 813, 548,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 200, 813, 813, 200, 200, 813, 200, 187, 813,
+ 813, 813, 187, 187, 813, 187, 187, 187, 813, 813,
+ 187, 187, 590, 590, 813, 590, 813, 813, 813, 590,
+
+ 594, 813, 594, 594, 813, 594, 813, 813, 813, 594,
+ 612, 612, 612, 813, 612, 813, 813, 813, 612, 613,
+ 613, 613, 613, 813, 613, 813, 813, 813, 613, 559,
+ 559, 813, 813, 559, 813, 813, 813, 559, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 200,
+ 813, 813, 200, 200, 813, 200, 187, 813, 813, 813,
+ 187, 187, 813, 187, 187, 187, 813, 813, 187, 187,
+ 655, 655, 813, 655, 813, 813, 813, 655, 656, 813,
+ 656, 656, 813, 656, 813, 813, 813, 656, 672, 672,
+
+ 672, 813, 672, 813, 813, 813, 672, 673, 673, 673,
+ 813, 813, 673, 813, 813, 813, 673, 682, 682, 682,
+ 682, 682, 682, 682, 682, 682, 682, 682, 682, 682,
+ 682, 682, 682, 682, 682, 682, 682, 682, 687, 687,
+ 813, 687, 687, 687, 813, 687, 813, 687, 687, 687,
+ 687, 813, 813, 687, 687, 687, 687, 687, 687, 693,
+ 693, 813, 693, 693, 693, 813, 693, 813, 693, 693,
+ 693, 693, 813, 813, 693, 693, 693, 693, 693, 693,
+ 200, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 200, 200, 813, 200, 200, 813, 200, 710, 710,
+
+ 813, 710, 813, 813, 813, 710, 711, 813, 711, 711,
+ 813, 711, 813, 813, 813, 711, 727, 727, 813, 813,
+ 727, 813, 813, 813, 727, 693, 813, 813, 813, 813,
+ 813, 813, 693, 813, 693, 693, 693, 693, 813, 813,
+ 693, 693, 693, 693, 693, 693, 751, 751, 813, 751,
+ 813, 813, 813, 751, 752, 813, 752, 752, 813, 752,
+ 813, 813, 813, 752, 775, 775, 813, 775, 813, 813,
+ 813, 775, 776, 813, 776, 813, 813, 776, 813, 813,
+ 813, 776, 780, 780, 780, 780, 780, 780, 780, 780,
+ 780, 780, 780, 780, 780, 780, 780, 780, 780, 780,
+
+ 780, 780, 780, 15, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813
} ;
-static yyconst short int yy_chk[3663] =
+static yyconst flex_int16_t yy_chk[5675] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -980,408 +1358,632 @@ static yyconst short int yy_chk[3663] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 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, 618, 3,
- 20, 2, 70, 3, 47, 36, 50, 4, 34, 3,
- 36, 4, 3, 11, 11, 11, 11, 4, 20, 34,
- 4, 12, 12, 12, 12, 2, 2, 70, 47, 2,
-
- 77, 38, 602, 50, 3, 599, 44, 2, 3, 3,
- 2, 3, 4, 597, 20, 38, 4, 4, 52, 4,
- 5, 5, 5, 44, 5, 6, 6, 6, 52, 6,
- 5, 11, 3, 25, 25, 6, 120, 25, 25, 12,
- 4, 120, 5, 5, 66, 66, 77, 6, 6, 9,
- 9, 9, 9, 9, 58, 25, 74, 74, 9, 9,
- 9, 28, 28, 28, 28, 28, 28, 19, 5, 143,
- 143, 58, 9, 6, 7, 7, 7, 19, 7, 25,
- 19, 19, 19, 19, 19, 19, 19, 19, 27, 27,
- 27, 27, 27, 27, 27, 27, 105, 9, 10, 10,
-
- 10, 10, 10, 76, 583, 105, 90, 10, 10, 10,
- 43, 165, 43, 43, 43, 43, 43, 43, 43, 43,
- 45, 10, 7, 7, 7, 7, 7, 7, 7, 7,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 533, 3, 38, 2, 52, 3, 49, 38, 50,
+ 4, 36, 3, 533, 4, 3, 11, 11, 11, 11,
+ 4, 22, 36, 4, 40, 5, 5, 5, 50, 5,
+
+ 2, 2, 49, 52, 2, 5, 68, 68, 40, 3,
+ 807, 22, 2, 3, 3, 2, 3, 4, 54, 5,
+ 5, 4, 4, 148, 4, 6, 6, 6, 54, 6,
+ 799, 12, 12, 12, 12, 6, 11, 22, 3, 76,
+ 76, 72, 46, 27, 27, 5, 4, 27, 27, 6,
+ 6, 46, 47, 78, 9, 9, 9, 9, 9, 74,
+ 46, 164, 164, 9, 9, 9, 72, 27, 30, 30,
+ 30, 30, 30, 30, 79, 6, 7, 7, 7, 9,
+ 7, 12, 47, 47, 74, 148, 47, 60, 141, 81,
+ 81, 27, 81, 141, 47, 91, 60, 47, 10, 10,
+
+ 10, 10, 10, 78, 9, 60, 91, 10, 10, 10,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 161, 798, 79, 10, 179, 161, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 8, 8, 8, 48, 8, 128, 10, 72, 45, 45,
- 90, 76, 45, 79, 79, 165, 79, 128, 582, 127,
- 45, 53, 48, 45, 53, 53, 53, 53, 53, 53,
- 53, 53, 72, 86, 86, 86, 86, 86, 86, 86,
- 86, 103, 103, 103, 103, 103, 103, 580, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 7, 7, 7, 7, 7, 8, 8, 8, 10, 8,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 87, 87, 87, 87, 87, 87, 99, 101, 274, 101,
+ 101, 101, 179, 101, 101, 99, 149, 101, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106, 140, 149,
+ 140, 101, 101, 101, 274, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 26, 131, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 88, 127, 131,
- 26, 26, 26, 26, 26, 130, 191, 112, 579, 55,
- 55, 129, 112, 55, 55, 88, 112, 132, 112, 191,
- 130, 202, 26, 132, 26, 26, 26, 26, 26, 26,
- 32, 55, 140, 147, 147, 202, 32, 140, 575, 32,
- 32, 88, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 129, 55, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 65, 118, 118, 35,
- 35, 35, 35, 35, 159, 159, 65, 133, 35, 65,
- 65, 65, 65, 65, 65, 65, 65, 133, 154, 154,
- 201, 208, 201, 35, 35, 35, 35, 35, 35, 42,
- 42, 42, 42, 42, 158, 42, 42, 175, 157, 42,
- 64, 64, 64, 200, 64, 118, 175, 219, 64, 197,
- 64, 42, 42, 42, 46, 198, 219, 208, 212, 200,
- 198, 227, 64, 64, 46, 564, 154, 46, 46, 46,
-
- 46, 46, 46, 46, 46, 81, 560, 81, 81, 81,
- 158, 81, 81, 227, 212, 81, 157, 245, 64, 87,
- 87, 87, 87, 87, 87, 87, 87, 81, 81, 81,
- 197, 94, 94, 556, 229, 94, 94, 204, 89, 229,
- 46, 89, 89, 89, 89, 89, 89, 89, 89, 91,
- 204, 91, 91, 94, 544, 91, 91, 239, 93, 91,
- 93, 93, 93, 239, 93, 93, 246, 246, 93, 216,
- 216, 216, 91, 91, 245, 289, 248, 94, 249, 260,
- 93, 93, 93, 96, 249, 96, 96, 96, 260, 96,
- 96, 248, 543, 96, 97, 97, 97, 97, 97, 97,
-
- 97, 97, 273, 290, 294, 96, 96, 96, 101, 101,
- 101, 101, 101, 101, 101, 101, 102, 102, 102, 102,
- 102, 102, 102, 102, 273, 290, 482, 291, 97, 98,
- 98, 98, 98, 98, 98, 98, 98, 291, 247, 289,
- 294, 98, 98, 98, 98, 98, 135, 135, 135, 135,
- 135, 135, 135, 135, 332, 433, 285, 433, 137, 137,
- 121, 285, 137, 137, 247, 98, 98, 98, 98, 98,
- 98, 106, 106, 106, 106, 106, 106, 106, 106, 106,
- 137, 247, 482, 106, 106, 106, 106, 106, 121, 121,
- 303, 139, 121, 139, 139, 139, 307, 139, 139, 303,
-
- 121, 139, 528, 121, 137, 307, 332, 106, 106, 106,
- 106, 106, 106, 139, 139, 139, 146, 146, 146, 146,
- 146, 146, 146, 146, 150, 292, 324, 150, 150, 334,
- 292, 324, 383, 524, 150, 163, 163, 163, 163, 163,
- 163, 163, 163, 323, 523, 334, 385, 150, 164, 164,
- 164, 164, 164, 164, 164, 164, 166, 522, 166, 166,
- 167, 385, 166, 166, 167, 323, 166, 262, 262, 211,
- 167, 211, 211, 211, 211, 211, 211, 262, 166, 166,
- 166, 521, 167, 167, 168, 383, 168, 168, 168, 168,
- 168, 168, 168, 168, 169, 327, 169, 169, 169, 169,
-
- 169, 169, 169, 169, 170, 211, 170, 170, 170, 170,
- 170, 170, 170, 170, 203, 264, 264, 327, 203, 388,
- 168, 308, 308, 380, 203, 264, 329, 515, 309, 309,
- 169, 308, 311, 311, 498, 329, 203, 203, 309, 380,
- 170, 171, 311, 171, 171, 171, 171, 171, 171, 171,
- 171, 400, 400, 497, 388, 171, 171, 171, 171, 171,
- 207, 207, 207, 207, 207, 207, 207, 207, 209, 335,
- 209, 209, 209, 209, 209, 209, 209, 209, 335, 171,
- 171, 171, 171, 171, 171, 174, 174, 174, 174, 174,
- 174, 174, 174, 174, 207, 451, 451, 174, 174, 174,
-
- 174, 174, 527, 210, 209, 210, 210, 210, 210, 210,
- 210, 210, 210, 220, 220, 220, 220, 220, 220, 220,
- 220, 174, 174, 174, 174, 174, 174, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 465, 465, 210,
- 176, 176, 176, 176, 176, 215, 215, 215, 215, 215,
- 215, 215, 215, 215, 222, 222, 222, 222, 222, 222,
- 222, 222, 386, 527, 176, 176, 176, 176, 176, 176,
- 177, 177, 177, 177, 177, 177, 177, 177, 386, 466,
- 466, 328, 177, 177, 177, 177, 177, 223, 223, 223,
- 223, 223, 223, 225, 333, 225, 225, 225, 225, 225,
-
- 225, 225, 225, 328, 333, 493, 177, 177, 177, 177,
- 177, 177, 221, 221, 221, 221, 221, 221, 221, 221,
- 221, 221, 221, 353, 469, 469, 221, 221, 221, 221,
- 221, 250, 353, 250, 250, 250, 250, 250, 250, 250,
- 250, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 221, 221, 221, 221, 221, 221, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 354, 250, 479, 224,
- 224, 224, 224, 224, 251, 354, 251, 251, 251, 251,
- 251, 251, 251, 251, 261, 261, 261, 261, 261, 261,
- 261, 261, 474, 224, 224, 224, 224, 224, 224, 252,
-
- 473, 252, 252, 252, 252, 252, 252, 252, 252, 370,
- 251, 263, 263, 263, 263, 263, 263, 263, 263, 267,
- 267, 267, 267, 267, 267, 267, 267, 481, 481, 267,
- 472, 370, 505, 505, 470, 252, 265, 265, 265, 265,
- 265, 265, 265, 265, 265, 265, 265, 268, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 376, 378,
- 427, 268, 268, 268, 268, 268, 269, 269, 269, 269,
- 269, 269, 269, 269, 270, 270, 270, 270, 270, 270,
- 376, 378, 427, 516, 516, 268, 268, 268, 268, 268,
- 268, 271, 271, 271, 271, 271, 271, 271, 271, 271,
-
- 271, 384, 525, 525, 271, 271, 271, 271, 271, 272,
- 384, 272, 272, 272, 272, 272, 272, 272, 272, 293,
- 293, 293, 293, 293, 293, 293, 293, 458, 271, 271,
- 271, 271, 271, 271, 295, 395, 295, 295, 295, 295,
- 295, 295, 295, 295, 297, 395, 297, 297, 297, 297,
- 297, 297, 296, 293, 296, 296, 296, 296, 296, 296,
- 296, 296, 317, 317, 317, 317, 317, 317, 444, 304,
- 295, 304, 304, 304, 304, 304, 304, 304, 304, 440,
- 297, 345, 345, 345, 345, 345, 345, 435, 296, 302,
- 302, 302, 302, 302, 302, 302, 302, 302, 409, 551,
-
- 551, 302, 302, 302, 302, 302, 305, 409, 305, 305,
- 305, 305, 305, 305, 305, 305, 310, 310, 310, 310,
- 310, 310, 310, 310, 431, 302, 302, 302, 302, 302,
- 302, 306, 430, 306, 306, 306, 306, 306, 306, 306,
- 306, 312, 312, 312, 312, 312, 312, 312, 312, 312,
- 312, 312, 314, 314, 314, 314, 314, 314, 314, 314,
- 483, 429, 314, 315, 315, 315, 315, 315, 315, 315,
- 315, 315, 315, 315, 426, 483, 425, 315, 315, 315,
- 315, 315, 316, 316, 316, 316, 316, 316, 316, 316,
- 319, 410, 319, 319, 319, 319, 319, 319, 319, 319,
-
- 410, 315, 315, 315, 315, 315, 315, 318, 318, 318,
- 318, 318, 318, 318, 318, 318, 318, 566, 566, 424,
- 318, 318, 318, 318, 318, 336, 336, 336, 336, 336,
- 336, 336, 336, 336, 337, 337, 337, 337, 337, 337,
- 337, 337, 337, 423, 318, 318, 318, 318, 318, 318,
- 338, 338, 338, 338, 338, 338, 338, 338, 338, 422,
- 336, 342, 342, 342, 342, 342, 342, 342, 342, 337,
- 344, 344, 344, 344, 344, 344, 344, 344, 364, 364,
- 364, 364, 364, 364, 428, 338, 343, 397, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 397, 586, 586,
-
- 343, 343, 343, 343, 343, 347, 428, 347, 347, 347,
- 347, 347, 347, 347, 347, 348, 348, 348, 348, 348,
- 348, 348, 348, 393, 343, 343, 343, 343, 343, 343,
- 346, 346, 346, 346, 346, 346, 346, 346, 346, 392,
- 432, 432, 346, 346, 346, 346, 346, 350, 445, 350,
- 350, 350, 350, 350, 350, 350, 350, 352, 445, 352,
- 352, 352, 352, 352, 352, 382, 346, 346, 346, 346,
- 346, 346, 351, 381, 351, 351, 351, 351, 351, 351,
- 351, 351, 355, 355, 356, 356, 403, 403, 403, 403,
- 403, 403, 355, 432, 356, 357, 357, 357, 357, 357,
-
- 357, 357, 357, 358, 358, 363, 363, 363, 363, 363,
- 363, 363, 363, 358, 359, 359, 359, 359, 359, 359,
- 359, 359, 359, 359, 359, 361, 361, 361, 361, 361,
- 361, 361, 361, 590, 590, 361, 362, 362, 362, 362,
- 362, 362, 362, 362, 362, 362, 362, 462, 603, 603,
- 362, 362, 362, 362, 362, 366, 462, 366, 366, 366,
- 366, 366, 366, 366, 366, 387, 387, 387, 387, 387,
- 387, 387, 387, 375, 362, 362, 362, 362, 362, 362,
- 365, 365, 365, 365, 365, 365, 365, 365, 365, 463,
- 634, 634, 374, 365, 365, 365, 365, 365, 463, 387,
-
- 389, 389, 389, 389, 389, 389, 389, 389, 389, 391,
- 391, 391, 391, 391, 391, 391, 373, 365, 365, 365,
- 365, 365, 365, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 471, 434, 372, 389, 394, 394, 394, 394,
- 394, 394, 394, 394, 391, 396, 396, 396, 396, 396,
- 396, 396, 396, 434, 471, 434, 434, 398, 390, 398,
- 398, 398, 398, 398, 398, 398, 398, 398, 401, 487,
- 401, 401, 401, 401, 401, 401, 401, 401, 401, 434,
- 369, 368, 401, 401, 401, 401, 401, 402, 402, 402,
- 402, 402, 402, 402, 402, 405, 367, 405, 405, 405,
-
- 405, 405, 405, 405, 405, 487, 401, 401, 401, 401,
- 401, 401, 404, 404, 404, 404, 404, 404, 404, 404,
- 404, 514, 349, 341, 404, 404, 404, 404, 404, 406,
- 514, 406, 406, 406, 406, 406, 406, 406, 406, 420,
- 420, 420, 420, 420, 420, 411, 411, 340, 404, 404,
- 404, 404, 404, 404, 407, 411, 407, 407, 407, 407,
- 407, 407, 407, 407, 408, 339, 408, 408, 408, 408,
- 408, 408, 408, 408, 412, 412, 413, 413, 413, 413,
- 413, 413, 413, 413, 412, 414, 414, 419, 419, 419,
- 419, 419, 419, 419, 419, 414, 415, 415, 415, 415,
-
- 415, 415, 415, 415, 415, 415, 415, 417, 417, 417,
- 417, 417, 417, 417, 417, 331, 330, 417, 418, 418,
- 418, 418, 418, 418, 418, 418, 418, 418, 446, 326,
- 325, 322, 418, 418, 418, 418, 418, 421, 446, 421,
- 421, 421, 421, 421, 421, 421, 421, 447, 447, 447,
- 447, 447, 447, 447, 447, 321, 418, 418, 418, 418,
- 418, 418, 436, 448, 436, 436, 436, 436, 436, 436,
- 436, 436, 437, 448, 437, 437, 437, 437, 437, 437,
- 437, 437, 438, 499, 438, 438, 438, 438, 438, 438,
- 438, 438, 491, 499, 570, 606, 320, 439, 436, 439,
-
- 439, 439, 439, 439, 439, 439, 439, 441, 437, 441,
- 441, 441, 441, 441, 441, 441, 441, 442, 438, 442,
- 442, 442, 442, 442, 442, 442, 442, 301, 491, 300,
- 570, 606, 443, 439, 443, 443, 443, 443, 443, 443,
- 443, 443, 449, 475, 449, 449, 449, 449, 449, 449,
- 449, 449, 449, 452, 299, 452, 452, 452, 452, 452,
- 452, 452, 452, 452, 477, 475, 518, 452, 452, 452,
- 452, 452, 453, 453, 453, 453, 453, 453, 453, 453,
- 454, 454, 454, 454, 454, 454, 477, 298, 518, 288,
- 287, 452, 452, 452, 452, 452, 452, 455, 455, 455,
-
- 455, 455, 455, 455, 455, 455, 286, 284, 282, 455,
- 455, 455, 455, 455, 456, 281, 456, 456, 456, 456,
- 456, 456, 456, 456, 457, 457, 457, 457, 457, 457,
- 457, 457, 280, 455, 455, 455, 455, 455, 455, 459,
- 279, 459, 459, 459, 459, 459, 459, 459, 459, 460,
- 480, 460, 460, 460, 460, 460, 460, 460, 460, 461,
- 278, 461, 461, 461, 461, 461, 461, 464, 464, 685,
- 480, 277, 480, 480, 685, 276, 275, 464, 467, 467,
- 467, 467, 467, 467, 467, 467, 467, 467, 484, 259,
- 484, 484, 484, 485, 258, 485, 485, 485, 486, 486,
-
- 486, 486, 486, 486, 486, 486, 488, 500, 488, 488,
- 488, 488, 488, 488, 488, 488, 489, 500, 489, 489,
- 489, 489, 489, 489, 489, 489, 257, 502, 545, 520,
- 546, 256, 486, 254, 548, 253, 484, 502, 545, 244,
- 546, 485, 488, 490, 548, 490, 490, 490, 490, 490,
- 490, 520, 489, 492, 492, 492, 492, 492, 492, 492,
- 492, 494, 243, 494, 494, 494, 494, 494, 494, 494,
- 494, 508, 508, 508, 508, 508, 508, 242, 495, 490,
- 495, 495, 495, 495, 495, 495, 495, 495, 496, 241,
- 496, 496, 496, 496, 496, 496, 501, 501, 501, 501,
-
- 501, 501, 501, 501, 503, 561, 503, 503, 503, 503,
- 503, 503, 503, 503, 503, 506, 581, 506, 506, 506,
- 506, 506, 506, 506, 506, 506, 581, 561, 240, 506,
- 506, 506, 506, 506, 507, 507, 507, 507, 507, 507,
- 507, 507, 510, 237, 510, 510, 510, 510, 510, 510,
- 510, 510, 235, 506, 506, 506, 506, 506, 506, 509,
- 509, 509, 509, 509, 509, 509, 509, 234, 233, 232,
- 231, 509, 509, 509, 509, 509, 511, 511, 511, 511,
- 511, 511, 511, 511, 511, 512, 512, 512, 512, 512,
- 512, 512, 512, 512, 563, 509, 509, 509, 509, 509,
-
- 509, 513, 513, 513, 513, 513, 513, 513, 513, 513,
- 529, 230, 529, 529, 529, 530, 563, 530, 530, 530,
- 531, 228, 531, 531, 531, 532, 226, 532, 532, 532,
- 533, 218, 217, 533, 533, 533, 533, 533, 533, 533,
- 533, 214, 587, 534, 534, 589, 535, 534, 535, 535,
- 535, 213, 206, 536, 536, 205, 199, 536, 529, 534,
- 534, 534, 196, 530, 587, 195, 194, 589, 531, 536,
- 536, 536, 537, 532, 537, 537, 537, 537, 537, 537,
- 537, 537, 538, 600, 538, 538, 538, 538, 538, 538,
- 538, 538, 193, 539, 535, 539, 539, 539, 539, 539,
-
- 539, 539, 539, 192, 190, 600, 189, 540, 537, 540,
- 540, 540, 540, 540, 540, 540, 540, 541, 538, 541,
- 541, 541, 541, 541, 541, 541, 541, 188, 542, 539,
- 542, 542, 542, 542, 542, 542, 542, 542, 547, 547,
- 547, 547, 547, 547, 547, 547, 549, 187, 549, 549,
- 549, 549, 549, 549, 549, 549, 549, 552, 186, 552,
- 552, 552, 552, 552, 552, 552, 552, 185, 184, 183,
- 182, 552, 552, 552, 552, 552, 553, 553, 553, 553,
- 553, 553, 553, 553, 554, 554, 554, 554, 554, 554,
- 181, 180, 179, 173, 172, 552, 552, 552, 552, 552,
-
- 552, 555, 162, 555, 555, 555, 555, 555, 555, 555,
- 555, 557, 557, 557, 557, 557, 557, 557, 557, 557,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 559,
- 559, 559, 559, 559, 559, 559, 567, 567, 567, 567,
- 567, 567, 567, 567, 568, 568, 568, 568, 568, 568,
- 568, 568, 569, 569, 569, 569, 569, 569, 569, 569,
- 571, 161, 571, 571, 571, 571, 571, 571, 571, 571,
- 572, 160, 572, 572, 572, 572, 572, 572, 572, 572,
- 156, 155, 153, 149, 142, 573, 569, 573, 573, 573,
- 573, 573, 573, 138, 136, 134, 571, 574, 574, 574,
-
- 574, 574, 574, 574, 574, 576, 572, 576, 576, 576,
- 576, 576, 576, 576, 576, 126, 125, 124, 123, 122,
- 577, 573, 577, 577, 577, 577, 577, 577, 577, 577,
- 578, 117, 578, 578, 578, 578, 578, 578, 584, 116,
- 584, 584, 584, 584, 584, 584, 584, 584, 591, 115,
- 591, 591, 591, 591, 591, 591, 591, 591, 592, 114,
- 592, 592, 592, 592, 592, 592, 592, 592, 593, 113,
- 593, 593, 593, 593, 593, 593, 593, 593, 613, 613,
- 613, 613, 613, 613, 591, 594, 594, 594, 594, 594,
- 594, 594, 594, 111, 592, 595, 595, 595, 595, 595,
-
- 595, 595, 595, 110, 593, 596, 596, 596, 596, 596,
- 596, 596, 596, 605, 605, 605, 605, 605, 605, 605,
- 605, 607, 109, 607, 607, 607, 607, 607, 607, 607,
- 607, 608, 108, 608, 608, 608, 608, 608, 608, 608,
- 608, 104, 100, 99, 95, 92, 609, 605, 609, 609,
- 609, 609, 609, 609, 84, 83, 82, 607, 611, 611,
- 611, 611, 611, 611, 611, 611, 80, 608, 612, 612,
- 612, 612, 612, 612, 612, 612, 75, 68, 61, 57,
- 56, 54, 609, 615, 615, 615, 615, 615, 615, 615,
- 615, 616, 616, 616, 616, 616, 616, 616, 616, 617,
-
- 617, 617, 617, 617, 617, 617, 617, 619, 619, 619,
- 619, 619, 619, 619, 619, 51, 49, 615, 620, 620,
- 620, 620, 620, 620, 41, 616, 40, 39, 37, 33,
- 29, 23, 17, 617, 15, 14, 13, 0, 0, 0,
- 0, 619, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 620, 622, 622, 622, 622, 622, 622, 622,
- 622, 622, 622, 622, 622, 622, 622, 622, 622, 623,
- 623, 623, 623, 623, 623, 623, 623, 623, 623, 623,
- 623, 623, 623, 623, 623, 624, 624, 624, 624, 624,
- 624, 624, 624, 624, 624, 624, 624, 624, 624, 624,
-
- 624, 625, 625, 625, 625, 625, 625, 625, 625, 625,
- 625, 625, 625, 625, 625, 625, 625, 626, 0, 0,
- 0, 0, 0, 0, 0, 626, 626, 626, 0, 0,
- 626, 626, 626, 627, 627, 627, 627, 627, 627, 627,
- 627, 627, 627, 627, 627, 627, 627, 627, 627, 628,
- 0, 0, 0, 0, 628, 0, 0, 628, 628, 628,
- 628, 0, 628, 628, 628, 629, 0, 0, 0, 0,
- 0, 0, 0, 629, 629, 629, 0, 0, 629, 629,
- 629, 630, 0, 0, 630, 630, 0, 630, 0, 630,
- 630, 630, 0, 0, 630, 630, 630, 631, 631, 0,
-
- 0, 0, 631, 632, 0, 0, 632, 632, 0, 632,
- 0, 632, 632, 632, 0, 0, 632, 632, 632, 633,
- 0, 0, 633, 633, 0, 633, 0, 633, 633, 633,
- 0, 633, 0, 633, 633, 635, 0, 0, 635, 0,
- 0, 635, 0, 635, 635, 635, 635, 0, 635, 635,
- 635, 636, 636, 636, 636, 636, 636, 636, 636, 636,
- 636, 636, 636, 636, 636, 636, 636, 637, 637, 0,
- 637, 0, 637, 637, 637, 637, 637, 637, 637, 637,
- 637, 637, 637, 638, 638, 638, 638, 638, 638, 638,
- 638, 638, 638, 638, 638, 638, 638, 638, 638, 639,
-
- 639, 0, 639, 639, 639, 639, 639, 639, 639, 639,
- 639, 639, 639, 639, 639, 640, 0, 0, 0, 0,
- 640, 0, 0, 640, 640, 640, 0, 0, 640, 640,
- 640, 641, 0, 0, 641, 641, 0, 641, 0, 641,
- 641, 641, 0, 0, 641, 641, 641, 642, 642, 0,
- 0, 0, 642, 643, 643, 643, 0, 0, 0, 643,
- 644, 0, 0, 644, 644, 0, 644, 0, 644, 644,
- 644, 0, 0, 644, 644, 644, 645, 645, 645, 645,
- 645, 645, 645, 645, 645, 645, 645, 645, 645, 645,
- 645, 645, 646, 646, 0, 0, 0, 646, 647, 647,
-
- 647, 0, 0, 0, 647, 648, 648, 0, 0, 0,
- 648, 649, 649, 0, 0, 0, 649, 650, 650, 0,
- 0, 0, 650, 651, 651, 651, 0, 0, 0, 651,
- 652, 652, 0, 0, 0, 652, 653, 653, 0, 0,
- 0, 653, 654, 654, 0, 0, 0, 654, 655, 655,
- 655, 0, 0, 0, 655, 656, 656, 656, 656, 0,
- 0, 0, 656, 657, 657, 0, 0, 0, 657, 658,
- 658, 0, 0, 0, 658, 659, 659, 0, 0, 0,
- 659, 660, 660, 660, 0, 0, 0, 660, 661, 661,
- 661, 661, 0, 0, 0, 661, 662, 662, 0, 0,
-
- 0, 662, 663, 663, 0, 0, 0, 663, 664, 664,
- 664, 0, 0, 0, 664, 665, 665, 665, 665, 0,
- 0, 0, 665, 666, 666, 0, 0, 0, 666, 667,
- 0, 667, 667, 0, 0, 0, 667, 668, 668, 668,
- 0, 0, 0, 668, 669, 669, 669, 669, 0, 0,
- 0, 669, 670, 670, 0, 0, 0, 670, 671, 0,
- 671, 671, 0, 0, 0, 671, 672, 672, 672, 0,
- 0, 0, 672, 673, 673, 673, 0, 0, 0, 0,
- 673, 674, 674, 674, 674, 674, 674, 674, 674, 674,
- 674, 674, 674, 674, 674, 674, 674, 675, 675, 0,
-
- 675, 675, 675, 0, 0, 675, 675, 675, 0, 0,
- 675, 675, 675, 676, 676, 0, 676, 676, 676, 0,
- 0, 676, 676, 676, 0, 0, 676, 676, 676, 677,
- 677, 0, 0, 0, 677, 678, 0, 678, 678, 0,
- 0, 0, 678, 679, 679, 0, 0, 0, 0, 679,
- 680, 680, 0, 0, 0, 680, 681, 0, 681, 681,
- 0, 0, 0, 681, 682, 682, 0, 0, 0, 682,
- 683, 0, 683, 0, 0, 0, 0, 683, 684, 684,
- 684, 684, 684, 684, 684, 684, 684, 684, 684, 684,
- 684, 684, 684, 684, 621, 621, 621, 621, 621, 621,
-
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
- 621, 621
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 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, 21, 125, 153, 797, 82, 168,
+ 168, 270, 153, 178, 21, 784, 125, 21, 21, 21,
+
+ 21, 21, 21, 21, 21, 21, 21, 28, 82, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 152, 180, 180, 28, 28, 28, 28, 28, 151, 270,
+ 289, 57, 57, 152, 82, 57, 57, 123, 123, 123,
+ 123, 123, 123, 178, 151, 28, 154, 28, 28, 28,
+ 28, 28, 28, 34, 289, 57, 154, 500, 246, 34,
+ 246, 500, 34, 34, 313, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 57,
+ 313, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 219, 783, 242, 37, 37, 37,
+ 37, 37, 245, 150, 236, 219, 37, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 247, 236, 245,
+ 303, 37, 37, 37, 37, 37, 37, 44, 44, 44,
+ 44, 44, 247, 44, 44, 311, 311, 44, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 150, 242,
+ 108, 44, 44, 44, 45, 303, 45, 45, 45, 45,
+
+ 45, 45, 45, 45, 45, 45, 48, 66, 66, 66,
+ 108, 66, 304, 110, 370, 66, 48, 66, 304, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 132,
+ 243, 66, 66, 110, 132, 243, 108, 281, 132, 171,
+ 132, 83, 171, 171, 370, 138, 138, 83, 281, 171,
+ 83, 114, 114, 83, 83, 114, 114, 66, 182, 110,
+ 780, 302, 175, 175, 171, 48, 67, 83, 291, 83,
+ 183, 235, 235, 291, 235, 114, 67, 249, 182, 67,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 302,
+ 183, 249, 83, 83, 84, 138, 777, 84, 84, 114,
+
+ 84, 84, 84, 84, 182, 235, 84, 84, 111, 775,
+ 111, 111, 175, 314, 111, 111, 183, 369, 111, 314,
+ 84, 84, 84, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 111, 111, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 84, 84, 85, 310, 369,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 322, 357, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 322, 357,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+
+ 85, 85, 85, 85, 85, 85, 85, 88, 310, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 278, 278, 278, 88, 88, 88, 88, 88, 266, 266,
+ 113, 266, 113, 113, 113, 330, 113, 113, 330, 371,
+ 113, 196, 196, 196, 196, 196, 196, 88, 88, 88,
+ 88, 88, 88, 89, 113, 113, 113, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 453, 371, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 453, 89, 89, 89, 89, 89,
+
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 377, 444, 378, 92, 92, 92,
+ 92, 92, 203, 344, 158, 158, 92, 203, 158, 158,
+ 323, 203, 444, 203, 344, 323, 301, 142, 378, 301,
+ 457, 92, 92, 92, 92, 92, 92, 97, 158, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 116,
+ 766, 116, 116, 116, 457, 116, 116, 142, 142, 116,
+ 301, 142, 158, 214, 214, 214, 214, 214, 214, 142,
+ 372, 377, 142, 116, 116, 116, 117, 117, 117, 117,
+
+ 117, 117, 117, 117, 117, 117, 167, 167, 167, 167,
+ 167, 167, 167, 167, 167, 167, 346, 346, 765, 160,
+ 379, 160, 160, 160, 372, 160, 160, 764, 346, 160,
+ 400, 379, 117, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 160, 160, 160, 458, 118, 118, 118,
+ 118, 118, 191, 191, 191, 191, 191, 191, 191, 191,
+ 191, 191, 273, 273, 273, 273, 427, 427, 400, 755,
+ 458, 118, 118, 118, 118, 118, 118, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 312, 498,
+ 754, 126, 126, 126, 126, 126, 194, 194, 194, 194,
+
+ 194, 194, 194, 194, 194, 194, 285, 285, 285, 285,
+ 285, 285, 752, 498, 312, 126, 126, 126, 126, 126,
+ 126, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 312, 562, 562, 127, 127, 127, 127, 127,
+ 184, 409, 184, 184, 373, 186, 184, 184, 380, 373,
+ 184, 186, 409, 380, 186, 348, 348, 186, 186, 127,
+ 127, 127, 127, 127, 127, 184, 184, 348, 413, 497,
+ 428, 186, 428, 186, 188, 497, 188, 188, 188, 413,
+ 188, 188, 429, 751, 188, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 526, 186, 186, 188, 188,
+
+ 188, 189, 615, 615, 189, 189, 429, 189, 189, 189,
+ 189, 190, 431, 189, 189, 190, 502, 431, 414, 414,
+ 502, 190, 415, 415, 429, 433, 430, 189, 189, 189,
+ 414, 430, 526, 430, 415, 190, 190, 210, 210, 210,
+ 210, 210, 210, 210, 210, 210, 210, 432, 508, 433,
+ 432, 523, 189, 189, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 749, 508, 523, 433, 192, 192,
+ 192, 192, 192, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 319, 511, 319, 319, 319, 319, 319,
+ 319, 439, 192, 192, 192, 192, 192, 192, 197, 748,
+
+ 513, 439, 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 442, 513, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197, 197, 511,
+ 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198, 198, 442,
+ 504, 506, 198, 198, 198, 198, 198, 213, 213, 213,
+ 213, 213, 213, 213, 213, 213, 213, 354, 354, 354,
+ 354, 354, 354, 434, 504, 506, 198, 198, 198, 198,
+
+ 198, 198, 212, 747, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 248, 454, 737, 434, 248, 514,
+ 454, 561, 736, 561, 248, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 434, 514, 727, 248, 248,
+ 212, 215, 443, 215, 215, 215, 215, 215, 215, 215,
+ 215, 215, 215, 443, 564, 584, 564, 215, 215, 215,
+ 215, 215, 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 423, 423, 423, 423, 423, 423, 571, 584,
+ 571, 215, 215, 215, 215, 215, 215, 218, 218, 218,
+ 218, 218, 218, 218, 218, 218, 218, 218, 589, 589,
+
+ 589, 218, 218, 218, 218, 218, 315, 315, 315, 315,
+ 315, 315, 315, 315, 315, 315, 450, 725, 450, 450,
+ 450, 450, 450, 450, 724, 218, 218, 218, 218, 218,
+ 218, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 565, 616, 616, 220, 220, 220, 220,
+ 220, 345, 345, 345, 345, 345, 345, 345, 345, 345,
+ 345, 466, 466, 466, 466, 466, 466, 565, 623, 623,
+ 220, 220, 220, 220, 220, 220, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 566, 625, 565,
+ 221, 221, 221, 221, 221, 347, 347, 347, 347, 347,
+
+ 347, 347, 347, 347, 347, 473, 473, 473, 473, 473,
+ 473, 566, 625, 723, 221, 221, 221, 221, 221, 221,
+ 222, 222, 222, 222, 222, 222, 222, 222, 222, 222,
+ 222, 631, 631, 566, 222, 222, 222, 222, 222, 351,
+ 351, 351, 351, 351, 351, 351, 351, 622, 711, 622,
+ 403, 351, 403, 403, 403, 403, 403, 403, 222, 222,
+ 222, 222, 222, 222, 253, 627, 253, 253, 253, 253,
+ 253, 253, 253, 253, 253, 253, 254, 254, 254, 254,
+ 254, 254, 254, 254, 254, 254, 254, 710, 403, 627,
+ 254, 254, 254, 254, 254, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 480, 708, 480, 480, 480,
+ 480, 480, 480, 707, 254, 254, 254, 254, 254, 254,
+ 256, 256, 256, 256, 256, 256, 256, 256, 256, 256,
+ 529, 529, 529, 529, 256, 256, 256, 256, 256, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 492,
+ 492, 492, 492, 492, 492, 674, 674, 700, 256, 256,
+ 256, 256, 256, 256, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 417, 417, 420, 420, 420, 420,
+ 420, 420, 420, 420, 680, 680, 417, 535, 420, 422,
+ 422, 422, 422, 422, 422, 422, 422, 422, 422, 535,
+
+ 269, 277, 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 445, 683, 683, 283, 283,
+ 283, 283, 283, 570, 570, 445, 446, 446, 446, 446,
+ 446, 446, 446, 446, 446, 446, 541, 541, 541, 541,
+ 541, 541, 283, 283, 283, 283, 283, 283, 286, 286,
+ 286, 286, 286, 286, 286, 286, 286, 286, 286, 286,
+ 679, 698, 679, 286, 286, 286, 286, 286, 465, 465,
+ 465, 465, 465, 465, 465, 465, 465, 465, 570, 563,
+ 697, 624, 620, 481, 563, 620, 624, 286, 286, 286,
+
+ 286, 286, 286, 287, 481, 287, 287, 287, 287, 287,
+ 287, 287, 287, 287, 287, 320, 320, 320, 320, 320,
+ 320, 320, 320, 320, 320, 696, 621, 640, 643, 320,
+ 320, 320, 320, 320, 470, 470, 470, 470, 470, 470,
+ 470, 470, 470, 470, 558, 558, 558, 558, 558, 558,
+ 621, 640, 643, 320, 320, 320, 320, 320, 320, 321,
+ 321, 321, 321, 321, 321, 321, 321, 321, 321, 643,
+ 630, 693, 621, 321, 321, 321, 321, 321, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 648, 648,
+ 648, 648, 630, 482, 630, 630, 691, 321, 321, 321,
+
+ 321, 321, 321, 334, 482, 334, 334, 334, 334, 334,
+ 334, 334, 334, 334, 334, 335, 595, 335, 335, 335,
+ 335, 335, 335, 335, 335, 335, 335, 336, 595, 336,
+ 336, 336, 336, 336, 336, 336, 336, 336, 336, 339,
+ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339,
+ 349, 349, 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 572, 685, 633, 349, 349, 349, 349,
+ 349, 476, 476, 476, 476, 476, 476, 476, 476, 476,
+ 476, 633, 731, 824, 731, 572, 824, 572, 572, 645,
+ 349, 349, 349, 349, 349, 349, 352, 352, 352, 352,
+
+ 352, 352, 352, 352, 352, 352, 352, 352, 352, 483,
+ 483, 572, 352, 352, 352, 352, 352, 484, 484, 486,
+ 486, 483, 496, 501, 503, 733, 733, 645, 685, 484,
+ 676, 486, 496, 501, 686, 503, 352, 352, 352, 352,
+ 352, 352, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 676, 682, 641, 355, 355, 355,
+ 355, 355, 485, 485, 485, 485, 485, 485, 485, 485,
+ 485, 485, 604, 604, 604, 604, 604, 604, 512, 632,
+ 641, 355, 355, 355, 355, 355, 355, 356, 512, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 383,
+
+ 641, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 384, 384, 384, 384, 384, 384, 384, 384, 384,
+ 384, 762, 762, 781, 781, 384, 384, 384, 384, 384,
+ 489, 489, 489, 489, 489, 489, 489, 489, 632, 882,
+ 882, 611, 489, 611, 611, 611, 611, 611, 611, 384,
+ 384, 384, 384, 384, 384, 399, 399, 399, 399, 399,
+ 399, 399, 399, 399, 399, 491, 491, 491, 491, 491,
+ 491, 491, 491, 491, 491, 532, 532, 532, 532, 532,
+ 532, 532, 532, 532, 532, 639, 681, 639, 639, 639,
+ 649, 399, 401, 596, 401, 401, 401, 401, 401, 401,
+
+ 401, 401, 401, 401, 402, 596, 402, 402, 402, 402,
+ 402, 402, 402, 402, 402, 402, 408, 408, 408, 408,
+ 408, 408, 408, 408, 408, 408, 408, 701, 649, 728,
+ 408, 408, 408, 408, 408, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 675, 836, 742, 787, 836,
+ 547, 701, 673, 728, 408, 408, 408, 408, 408, 408,
+ 412, 547, 412, 412, 412, 412, 412, 412, 412, 412,
+ 412, 412, 418, 418, 418, 418, 418, 418, 418, 418,
+ 418, 418, 418, 418, 418, 742, 787, 670, 418, 418,
+ 418, 418, 418, 538, 598, 538, 538, 538, 538, 538,
+
+ 538, 827, 827, 827, 669, 538, 598, 634, 739, 634,
+ 634, 634, 418, 418, 418, 418, 418, 418, 421, 421,
+ 421, 421, 421, 421, 421, 421, 421, 421, 421, 421,
+ 421, 853, 739, 853, 421, 421, 421, 421, 421, 540,
+ 540, 540, 540, 540, 540, 540, 540, 540, 540, 578,
+ 578, 578, 578, 578, 578, 578, 656, 634, 421, 421,
+ 421, 421, 421, 421, 424, 424, 424, 424, 424, 424,
+ 424, 424, 424, 424, 424, 424, 548, 549, 549, 424,
+ 424, 424, 424, 424, 550, 550, 612, 548, 613, 549,
+ 552, 552, 844, 844, 844, 655, 550, 612, 657, 613,
+
+ 759, 642, 552, 424, 424, 424, 424, 424, 424, 425,
+ 657, 425, 425, 425, 425, 425, 425, 425, 425, 425,
+ 425, 426, 653, 768, 759, 642, 854, 426, 854, 916,
+ 426, 426, 916, 426, 426, 426, 426, 426, 426, 426,
+ 426, 426, 426, 426, 426, 426, 642, 768, 652, 426,
+ 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
+ 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
+ 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
+ 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
+ 426, 464, 464, 464, 464, 464, 464, 464, 464, 464,
+
+ 464, 464, 555, 555, 555, 555, 555, 555, 555, 555,
+ 865, 651, 865, 658, 555, 557, 557, 557, 557, 557,
+ 557, 557, 557, 557, 557, 658, 883, 883, 464, 471,
+ 660, 471, 471, 471, 471, 471, 471, 471, 471, 471,
+ 471, 471, 660, 637, 702, 471, 471, 471, 471, 471,
+ 574, 574, 574, 574, 574, 574, 574, 574, 574, 574,
+ 619, 619, 619, 619, 619, 619, 619, 619, 702, 471,
+ 471, 471, 471, 471, 471, 474, 474, 474, 474, 474,
+ 474, 474, 474, 474, 474, 474, 778, 636, 702, 474,
+ 474, 474, 474, 474, 587, 587, 587, 587, 587, 587,
+
+ 587, 587, 587, 587, 866, 870, 866, 870, 614, 614,
+ 778, 894, 894, 474, 474, 474, 474, 474, 474, 475,
+ 614, 475, 475, 475, 475, 475, 475, 475, 475, 475,
+ 475, 487, 487, 487, 487, 487, 487, 487, 487, 487,
+ 487, 487, 487, 487, 678, 629, 703, 487, 487, 487,
+ 487, 487, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 635, 610, 635, 635, 635, 871, 678, 871,
+ 703, 487, 487, 487, 487, 487, 487, 490, 490, 490,
+ 490, 490, 490, 490, 490, 490, 490, 490, 490, 490,
+ 678, 703, 740, 490, 490, 490, 490, 490, 597, 597,
+
+ 597, 597, 597, 597, 597, 597, 597, 597, 875, 878,
+ 875, 878, 635, 888, 609, 888, 740, 490, 490, 490,
+ 490, 490, 490, 493, 493, 493, 493, 493, 493, 493,
+ 493, 493, 493, 493, 608, 889, 740, 889, 493, 493,
+ 493, 493, 493, 601, 594, 601, 601, 601, 601, 601,
+ 601, 897, 592, 897, 654, 601, 654, 654, 654, 654,
+ 654, 654, 493, 493, 493, 493, 493, 493, 494, 712,
+ 494, 494, 494, 494, 494, 494, 494, 494, 494, 494,
+ 495, 712, 898, 901, 898, 901, 495, 692, 692, 495,
+ 495, 692, 495, 495, 495, 495, 495, 495, 495, 495,
+
+ 495, 495, 495, 495, 495, 692, 692, 692, 495, 495,
+ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495,
+ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495,
+ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495,
+ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495,
+ 517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
+ 517, 522, 913, 913, 713, 522, 522, 522, 522, 522,
+ 522, 522, 522, 522, 522, 522, 713, 522, 914, 914,
+ 522, 522, 522, 522, 522, 522, 522, 522, 522, 522,
+ 522, 522, 522, 522, 522, 522, 522, 522, 522, 522,
+
+ 522, 522, 591, 522, 522, 522, 522, 522, 522, 522,
+ 522, 522, 522, 522, 522, 522, 522, 522, 522, 522,
+ 522, 525, 525, 525, 525, 525, 525, 525, 525, 525,
+ 525, 603, 603, 603, 603, 603, 603, 603, 603, 603,
+ 603, 607, 607, 607, 607, 607, 607, 607, 607, 607,
+ 607, 666, 666, 666, 666, 666, 666, 525, 527, 527,
+ 527, 527, 527, 527, 527, 527, 527, 527, 527, 650,
+ 650, 650, 650, 650, 650, 650, 650, 650, 650, 659,
+ 659, 659, 659, 659, 659, 659, 659, 659, 659, 721,
+ 721, 721, 721, 721, 721, 527, 536, 715, 536, 536,
+
+ 536, 536, 536, 536, 536, 536, 536, 536, 536, 715,
+ 590, 582, 536, 536, 536, 536, 536, 663, 753, 663,
+ 663, 663, 663, 663, 663, 907, 908, 907, 908, 663,
+ 753, 687, 672, 687, 687, 687, 536, 536, 536, 536,
+ 536, 536, 539, 672, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 730, 581, 580, 539, 539,
+ 539, 539, 539, 665, 665, 665, 665, 665, 665, 665,
+ 665, 665, 665, 688, 579, 688, 688, 688, 910, 730,
+ 910, 687, 539, 539, 539, 539, 539, 539, 542, 542,
+ 542, 542, 542, 542, 542, 542, 542, 542, 542, 577,
+
+ 576, 730, 542, 542, 542, 542, 542, 695, 695, 695,
+ 695, 695, 695, 695, 695, 695, 695, 794, 794, 794,
+ 794, 794, 794, 688, 575, 573, 542, 542, 542, 542,
+ 542, 542, 543, 569, 543, 543, 543, 543, 543, 543,
+ 543, 543, 543, 543, 546, 568, 546, 546, 546, 546,
+ 546, 546, 546, 546, 546, 546, 553, 553, 553, 553,
+ 553, 553, 553, 553, 553, 553, 553, 553, 553, 567,
+ 551, 761, 553, 553, 553, 553, 553, 689, 545, 689,
+ 689, 689, 690, 544, 690, 690, 690, 699, 531, 699,
+ 699, 699, 699, 699, 699, 761, 553, 553, 553, 553,
+
+ 553, 553, 556, 556, 556, 556, 556, 556, 556, 556,
+ 556, 556, 556, 556, 918, 530, 918, 761, 556, 556,
+ 556, 556, 556, 919, 923, 919, 923, 689, 924, 929,
+ 924, 929, 690, 726, 726, 726, 726, 726, 726, 726,
+ 524, 521, 556, 556, 556, 556, 556, 556, 559, 520,
+ 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
+ 560, 694, 519, 694, 694, 694, 560, 694, 694, 560,
+ 560, 694, 560, 560, 560, 560, 560, 560, 560, 560,
+ 560, 560, 560, 560, 560, 694, 694, 694, 560, 560,
+ 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
+
+ 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
+ 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
+ 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
+ 583, 750, 518, 750, 750, 750, 750, 750, 750, 583,
+ 930, 516, 930, 583, 583, 583, 583, 583, 583, 583,
+ 583, 583, 583, 583, 583, 583, 515, 510, 583, 583,
+ 583, 583, 583, 583, 583, 583, 583, 583, 583, 583,
+ 583, 583, 583, 583, 583, 583, 583, 583, 583, 583,
+ 509, 583, 583, 583, 583, 583, 583, 583, 583, 583,
+ 583, 583, 583, 583, 583, 583, 583, 583, 583, 586,
+
+ 479, 586, 586, 586, 586, 586, 586, 586, 586, 586,
+ 586, 714, 714, 714, 714, 714, 714, 714, 714, 714,
+ 714, 718, 478, 718, 718, 718, 718, 718, 718, 922,
+ 477, 469, 922, 718, 468, 467, 922, 586, 593, 463,
+ 593, 593, 593, 593, 593, 593, 593, 593, 593, 593,
+ 599, 456, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 455, 452, 451, 599, 599, 599, 599,
+ 599, 720, 720, 720, 720, 720, 720, 720, 720, 720,
+ 720, 758, 449, 758, 758, 758, 758, 758, 758, 448,
+ 599, 599, 599, 599, 599, 599, 602, 447, 602, 602,
+
+ 602, 602, 602, 602, 602, 602, 602, 602, 602, 441,
+ 440, 438, 602, 602, 602, 602, 602, 734, 734, 734,
+ 734, 734, 734, 734, 734, 734, 734, 767, 437, 767,
+ 767, 767, 767, 767, 767, 436, 602, 602, 602, 602,
+ 602, 602, 605, 605, 605, 605, 605, 605, 605, 605,
+ 605, 605, 605, 435, 411, 410, 605, 605, 605, 605,
+ 605, 735, 735, 735, 735, 735, 735, 735, 735, 735,
+ 735, 407, 745, 406, 745, 745, 745, 745, 745, 745,
+ 605, 605, 605, 605, 605, 605, 606, 405, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606, 617, 617,
+
+ 617, 617, 617, 617, 617, 617, 617, 617, 617, 617,
+ 745, 404, 398, 397, 617, 617, 617, 617, 617, 746,
+ 746, 746, 746, 746, 746, 746, 746, 746, 746, 800,
+ 396, 800, 800, 800, 800, 800, 800, 395, 617, 617,
+ 617, 617, 617, 617, 638, 394, 638, 638, 638, 638,
+ 638, 638, 638, 638, 638, 638, 644, 644, 644, 644,
+ 644, 644, 644, 644, 644, 644, 763, 763, 763, 763,
+ 763, 763, 763, 763, 763, 763, 772, 772, 772, 772,
+ 772, 772, 772, 772, 772, 772, 812, 812, 812, 812,
+ 812, 812, 644, 646, 393, 646, 646, 646, 646, 646,
+
+ 646, 646, 646, 646, 646, 773, 773, 773, 773, 773,
+ 773, 773, 773, 773, 773, 774, 774, 774, 774, 774,
+ 774, 774, 774, 774, 774, 392, 928, 391, 390, 928,
+ 389, 646, 661, 928, 661, 661, 661, 661, 661, 661,
+ 661, 661, 661, 661, 661, 388, 387, 386, 661, 661,
+ 661, 661, 661, 790, 385, 790, 790, 790, 790, 790,
+ 790, 792, 792, 792, 792, 792, 792, 792, 792, 792,
+ 792, 382, 661, 661, 661, 661, 661, 661, 664, 381,
+ 664, 664, 664, 664, 664, 664, 664, 664, 664, 664,
+ 664, 790, 376, 375, 664, 664, 664, 664, 664, 793,
+
+ 793, 793, 793, 793, 793, 793, 793, 793, 793, 374,
+ 368, 366, 365, 364, 363, 362, 361, 360, 664, 664,
+ 664, 664, 664, 664, 667, 667, 667, 667, 667, 667,
+ 667, 667, 667, 667, 359, 343, 342, 341, 667, 667,
+ 667, 667, 667, 796, 796, 796, 796, 796, 796, 796,
+ 796, 796, 796, 340, 338, 337, 809, 809, 809, 809,
+ 809, 809, 667, 667, 667, 667, 667, 667, 668, 333,
+ 668, 668, 668, 668, 668, 668, 668, 668, 668, 668,
+ 671, 671, 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 704, 809, 704, 704, 704, 704, 704, 704, 704,
+
+ 704, 704, 704, 705, 332, 705, 705, 705, 705, 705,
+ 705, 705, 705, 705, 705, 706, 331, 706, 706, 706,
+ 706, 706, 706, 706, 706, 706, 706, 709, 329, 709,
+ 709, 709, 709, 709, 709, 709, 709, 709, 709, 716,
+ 328, 716, 716, 716, 716, 716, 716, 716, 716, 716,
+ 716, 716, 327, 326, 325, 716, 716, 716, 716, 716,
+ 804, 804, 804, 804, 804, 804, 804, 804, 804, 804,
+ 324, 318, 317, 316, 309, 308, 307, 306, 305, 716,
+ 716, 716, 716, 716, 716, 719, 299, 719, 719, 719,
+ 719, 719, 719, 719, 719, 719, 719, 297, 296, 295,
+
+ 294, 719, 719, 719, 719, 719, 805, 805, 805, 805,
+ 805, 805, 805, 805, 805, 805, 293, 292, 290, 288,
+ 280, 279, 276, 275, 268, 719, 719, 719, 719, 719,
+ 719, 738, 267, 738, 738, 738, 738, 738, 738, 738,
+ 738, 738, 738, 741, 265, 741, 741, 741, 741, 741,
+ 741, 741, 741, 741, 741, 743, 264, 743, 743, 743,
+ 743, 743, 743, 743, 743, 743, 743, 744, 263, 744,
+ 744, 744, 744, 744, 744, 744, 744, 744, 744, 756,
+ 262, 756, 756, 756, 756, 756, 756, 756, 756, 756,
+ 756, 769, 261, 769, 769, 769, 769, 769, 769, 769,
+
+ 769, 769, 769, 770, 260, 770, 770, 770, 770, 770,
+ 770, 770, 770, 770, 770, 771, 259, 771, 771, 771,
+ 771, 771, 771, 771, 771, 771, 771, 785, 258, 785,
+ 785, 785, 785, 785, 785, 785, 785, 785, 785, 786,
+ 255, 786, 786, 786, 786, 786, 786, 786, 786, 786,
+ 786, 788, 252, 788, 788, 788, 788, 788, 788, 788,
+ 788, 788, 788, 789, 251, 789, 789, 789, 789, 789,
+ 789, 789, 789, 789, 789, 801, 801, 801, 801, 801,
+ 801, 801, 801, 801, 801, 806, 806, 806, 806, 806,
+ 806, 806, 806, 806, 806, 811, 811, 811, 811, 811,
+
+ 811, 811, 811, 811, 811, 250, 244, 241, 240, 239,
+ 238, 801, 802, 802, 802, 802, 802, 802, 802, 802,
+ 802, 802, 237, 234, 233, 232, 231, 230, 229, 228,
+ 227, 226, 225, 224, 223, 217, 216, 209, 208, 207,
+ 206, 205, 204, 202, 201, 199, 193, 185, 802, 803,
+ 803, 803, 803, 803, 803, 803, 803, 803, 803, 181,
+ 177, 176, 174, 170, 163, 159, 157, 155, 147, 146,
+ 145, 144, 143, 137, 136, 135, 134, 133, 131, 130,
+ 129, 128, 124, 120, 119, 803, 808, 808, 808, 808,
+ 808, 808, 808, 808, 808, 808, 115, 112, 109, 104,
+
+ 103, 102, 100, 96, 95, 94, 93, 90, 77, 70,
+ 63, 59, 58, 56, 55, 53, 51, 43, 42, 41,
+ 39, 35, 808, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 815, 815, 815, 815, 815, 815,
+ 815, 815, 815, 815, 815, 815, 815, 815, 815, 815,
+ 815, 815, 815, 815, 815, 816, 816, 816, 816, 816,
+ 816, 816, 816, 816, 816, 816, 816, 816, 816, 816,
+ 816, 816, 816, 816, 816, 816, 817, 817, 817, 817,
+ 817, 817, 817, 817, 817, 817, 817, 817, 817, 817,
+
+ 817, 817, 817, 817, 817, 817, 817, 818, 31, 25,
+ 19, 17, 16, 15, 818, 0, 818, 818, 818, 818,
+ 0, 0, 818, 818, 818, 818, 818, 818, 819, 819,
+ 819, 819, 819, 819, 819, 819, 819, 819, 819, 819,
+ 819, 819, 819, 819, 819, 819, 819, 819, 819, 820,
+ 0, 0, 0, 0, 820, 0, 820, 0, 820, 820,
+ 820, 820, 820, 0, 820, 820, 820, 820, 820, 820,
+ 821, 0, 0, 0, 0, 0, 0, 821, 0, 821,
+ 821, 821, 821, 0, 0, 821, 821, 821, 821, 821,
+ 821, 822, 0, 0, 822, 822, 0, 822, 822, 0,
+
+ 822, 822, 822, 822, 0, 0, 822, 822, 822, 822,
+ 822, 822, 823, 823, 0, 823, 0, 0, 0, 823,
+ 825, 0, 0, 825, 825, 0, 825, 825, 0, 825,
+ 825, 825, 825, 0, 0, 825, 825, 825, 825, 825,
+ 825, 826, 0, 0, 826, 826, 0, 826, 826, 0,
+ 826, 826, 826, 826, 0, 826, 826, 826, 0, 826,
+ 826, 826, 828, 0, 0, 828, 0, 0, 828, 828,
+ 0, 828, 828, 828, 828, 828, 0, 828, 828, 828,
+ 828, 828, 828, 829, 829, 829, 829, 829, 829, 829,
+ 829, 829, 829, 829, 829, 829, 829, 829, 829, 829,
+
+ 829, 829, 829, 829, 830, 830, 0, 830, 0, 830,
+ 830, 830, 830, 830, 830, 830, 830, 830, 830, 830,
+ 830, 830, 830, 830, 830, 831, 0, 0, 0, 0,
+ 831, 0, 831, 0, 831, 831, 831, 831, 831, 0,
+ 831, 831, 831, 831, 831, 831, 832, 0, 0, 0,
+ 0, 0, 0, 832, 0, 832, 832, 832, 832, 0,
+ 832, 832, 832, 832, 832, 832, 832, 833, 0, 0,
+ 833, 833, 0, 833, 833, 0, 833, 833, 833, 833,
+ 0, 833, 833, 833, 833, 833, 833, 833, 834, 834,
+ 834, 834, 834, 834, 834, 834, 834, 834, 834, 834,
+
+ 834, 834, 834, 834, 834, 834, 834, 834, 834, 835,
+ 835, 0, 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 835, 835, 835,
+ 837, 0, 0, 837, 837, 0, 837, 837, 0, 837,
+ 837, 837, 837, 0, 0, 837, 837, 837, 837, 837,
+ 837, 838, 838, 0, 838, 0, 0, 0, 838, 839,
+ 839, 0, 839, 0, 0, 0, 839, 840, 840, 840,
+ 0, 840, 0, 0, 0, 840, 841, 0, 0, 841,
+ 841, 0, 841, 841, 0, 841, 841, 841, 841, 0,
+ 0, 841, 841, 841, 841, 841, 841, 842, 0, 0,
+
+ 842, 842, 0, 842, 842, 0, 842, 842, 842, 842,
+ 0, 0, 842, 842, 842, 842, 842, 842, 843, 0,
+ 0, 843, 843, 0, 843, 843, 0, 843, 843, 843,
+ 843, 0, 843, 843, 843, 0, 843, 843, 843, 845,
+ 0, 0, 845, 0, 0, 845, 845, 0, 845, 845,
+ 845, 845, 845, 0, 845, 845, 845, 845, 845, 845,
+ 846, 0, 0, 0, 0, 0, 0, 846, 0, 846,
+ 846, 846, 846, 0, 0, 846, 846, 846, 846, 846,
+ 846, 847, 0, 0, 0, 0, 0, 0, 847, 0,
+ 847, 847, 847, 847, 0, 847, 847, 847, 847, 847,
+
+ 847, 847, 848, 0, 0, 848, 848, 0, 848, 848,
+ 0, 848, 848, 848, 848, 0, 848, 848, 848, 848,
+ 848, 848, 848, 849, 0, 0, 849, 849, 0, 849,
+ 850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
+ 850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
+ 850, 851, 851, 0, 851, 0, 0, 0, 851, 852,
+ 852, 852, 0, 852, 0, 0, 0, 852, 855, 855,
+ 0, 855, 0, 0, 0, 855, 856, 856, 0, 856,
+ 0, 0, 0, 856, 857, 857, 0, 857, 0, 0,
+ 0, 857, 858, 858, 858, 0, 858, 0, 0, 0,
+
+ 858, 859, 0, 0, 859, 859, 0, 859, 860, 860,
+ 0, 860, 0, 0, 0, 860, 861, 861, 0, 861,
+ 0, 0, 0, 861, 862, 862, 0, 862, 0, 0,
+ 0, 862, 863, 863, 863, 0, 863, 0, 0, 0,
+ 863, 864, 864, 864, 864, 0, 864, 0, 0, 0,
+ 864, 867, 867, 0, 867, 0, 0, 0, 867, 868,
+ 868, 0, 868, 0, 0, 0, 868, 869, 869, 0,
+ 869, 0, 0, 0, 869, 872, 872, 872, 0, 872,
+ 0, 0, 0, 872, 873, 873, 873, 873, 0, 873,
+ 0, 0, 0, 873, 874, 874, 874, 874, 874, 874,
+
+ 874, 874, 874, 874, 874, 874, 874, 874, 874, 874,
+ 874, 874, 874, 874, 874, 876, 876, 0, 876, 0,
+ 0, 0, 876, 877, 877, 0, 877, 0, 0, 0,
+ 877, 879, 879, 879, 0, 879, 0, 0, 0, 879,
+ 880, 880, 880, 880, 0, 880, 0, 0, 0, 880,
+ 881, 881, 881, 881, 881, 881, 881, 881, 881, 881,
+ 881, 881, 881, 881, 881, 881, 881, 881, 881, 881,
+ 881, 884, 0, 0, 884, 884, 0, 884, 885, 0,
+ 0, 0, 885, 885, 0, 885, 885, 885, 0, 0,
+ 885, 885, 886, 886, 0, 886, 0, 0, 0, 886,
+
+ 887, 0, 887, 887, 0, 887, 0, 0, 0, 887,
+ 890, 890, 890, 0, 890, 0, 0, 0, 890, 891,
+ 891, 891, 891, 0, 891, 0, 0, 0, 891, 892,
+ 892, 0, 0, 892, 0, 0, 0, 892, 893, 893,
+ 893, 893, 893, 893, 893, 893, 893, 893, 893, 893,
+ 893, 893, 893, 893, 893, 893, 893, 893, 893, 895,
+ 0, 0, 895, 895, 0, 895, 896, 0, 0, 0,
+ 896, 896, 0, 896, 896, 896, 0, 0, 896, 896,
+ 899, 899, 0, 899, 0, 0, 0, 899, 900, 0,
+ 900, 900, 0, 900, 0, 0, 0, 900, 902, 902,
+
+ 902, 0, 902, 0, 0, 0, 902, 903, 903, 903,
+ 0, 0, 903, 0, 0, 0, 903, 904, 904, 904,
+ 904, 904, 904, 904, 904, 904, 904, 904, 904, 904,
+ 904, 904, 904, 904, 904, 904, 904, 904, 905, 905,
+ 0, 905, 905, 905, 0, 905, 0, 905, 905, 905,
+ 905, 0, 0, 905, 905, 905, 905, 905, 905, 906,
+ 906, 0, 906, 906, 906, 0, 906, 0, 906, 906,
+ 906, 906, 0, 0, 906, 906, 906, 906, 906, 906,
+ 909, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 909, 909, 0, 909, 909, 0, 909, 911, 911,
+
+ 0, 911, 0, 0, 0, 911, 912, 0, 912, 912,
+ 0, 912, 0, 0, 0, 912, 915, 915, 0, 0,
+ 915, 0, 0, 0, 915, 917, 0, 0, 0, 0,
+ 0, 0, 917, 0, 917, 917, 917, 917, 0, 0,
+ 917, 917, 917, 917, 917, 917, 920, 920, 0, 920,
+ 0, 0, 0, 920, 921, 0, 921, 921, 0, 921,
+ 0, 0, 0, 921, 925, 925, 0, 925, 0, 0,
+ 0, 925, 926, 0, 926, 0, 0, 926, 0, 0,
+ 0, 926, 927, 927, 927, 927, 927, 927, 927, 927,
+ 927, 927, 927, 927, 927, 927, 927, 927, 927, 927,
+
+ 927, 927, 927, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
+ 813, 813, 813, 813
} ;
static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
/* The intent behind this definition is that it'll catch
* any uses of REJECT which flex missed.
*/
@@ -1391,7 +1993,6 @@ static char *yy_last_accepting_cpos;
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
#line 1 "toke.l"
-#define INITIAL 0
#line 2 "toke.l"
/*
* Copyright (c) 1996, 1998-2005, 2007-2012
@@ -1466,6 +2067,7 @@ char *yytext;
#include "toke.h"
#include <gram.h>
#include "lbuf.h"
+#include "filedigest.h"
#include "secure_path.h"
extern YYSTYPE yylval;
@@ -1483,6 +2085,7 @@ gid_t sudoers_gid = SUDOERS_GID;
static bool continued, sawspace;
static int prev_state;
+static int digest_len;
static bool _push_include(char *, bool);
static bool pop_include(void);
@@ -1500,18 +2103,64 @@ int (*trace_print)(const char *msg) = su
#define push_include(_p) (_push_include((_p), false))
#define push_includedir(_p) (_push_include((_p), true))
#define YY_NO_INPUT 1
-#define YY_NO_UNPUT 1
-#define GOTDEFS 1
-#define GOTCMND 2
-#define STARTDEFS 3
-#define INDEFS 4
+
+
+#line 2112 "lex.yy.c"
+
+#define INITIAL 0
+#define GOTDEFS 1
+#define GOTCMND 2
+#define STARTDEFS 3
+#define INDEFS 4
#define INSTR 5
+#define WANTDIGEST 6
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
-#line 1514 "lex.yy.c"
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in (void );
+
+void yyset_in (FILE * in_str );
+
+FILE *yyget_out (void );
+
+void yyset_out (FILE * out_str );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number );
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -1519,65 +2168,28 @@ int (*trace_print)(const char *msg) = su
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
-extern "C" int yywrap YY_PROTO(( void ));
+extern "C" int yywrap (void );
#else
-extern int yywrap YY_PROTO(( void ));
-#endif
+extern int yywrap (void );
#endif
-
-#ifndef YY_NO_UNPUT
-static void yyunput YY_PROTO(( int c, char *buf_ptr ));
#endif
#ifndef yytext_ptr
-static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+static void yy_flex_strncpy (char *,yyconst char *,int );
#endif
#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+static int yy_flex_strlen (yyconst char * );
#endif
#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-static int yyinput YY_PROTO(( void ));
-#else
-static int input YY_PROTO(( void ));
-#endif
-#endif
-
-#if defined(YY_STACK_USED) && YY_STACK_USED
-static int yy_start_stack_ptr = 0;
-static int yy_start_stack_depth = 0;
-static int *yy_start_stack = 0;
-#ifndef YY_NO_PUSH_STATE
-static void yy_push_state YY_PROTO(( int new_state ));
-#endif
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO(( void ));
-#endif
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO(( void ));
-#endif
+#ifdef __cplusplus
+static int yyinput (void );
#else
-#define YY_NO_PUSH_STATE 1
-#define YY_NO_POP_STATE 1
-#define YY_NO_TOP_STATE 1
+static int input (void );
#endif
-#ifdef YY_MALLOC_DECL
-YY_MALLOC_DECL
-#else
-#ifdef __STDC__
-#ifndef __cplusplus
-#include <stdlib.h>
-#endif
-#else
-/* Just try to get by without declaring the routines. This will fail
- * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
- * or sizeof(void*) != sizeof(int).
- */
-#endif
#endif
/* Amount of stuff to slurp up with each read. */
@@ -1586,12 +2198,11 @@ YY_MALLOC_DECL
#endif
/* Copy whatever the last rule matched to the standard output. */
-
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
#endif
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
@@ -1599,9 +2210,10 @@ YY_MALLOC_DECL
*/
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
- if ( yy_current_buffer->yy_is_interactive ) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \
- int c = '*', n; \
+ int c = '*'; \
+ size_t n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
@@ -1611,9 +2223,22 @@ YY_MALLOC_DECL
YY_FATAL_ERROR( "input in flex scanner failed" ); \
result = n; \
} \
- else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
- && ferror( yyin ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" );
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
#endif
/* No semi-colon after return; correct usage is to write "yyterminate();" -
@@ -1634,12 +2259,18 @@ YY_MALLOC_DECL
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif
+/* end tables serialization structures and prototypes */
+
/* Default declaration of generated scanner - a define so the user can
* easily add parameters.
*/
#ifndef YY_DECL
-#define YY_DECL int yylex YY_PROTO(( void ))
-#endif
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
/* Code executed at the beginning of each rule, after yytext and yyleng
* have been set up.
@@ -1655,30 +2286,32 @@ YY_MALLOC_DECL
#define YY_RULE_SETUP \
if ( yyleng > 0 ) \
- yy_current_buffer->yy_at_bol = \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
(yytext[yyleng - 1] == '\n'); \
YY_USER_ACTION
+/** The main scanner function which does all the work.
+ */
YY_DECL
- {
+{
register yy_state_type yy_current_state;
register char *yy_cp, *yy_bp;
register int yy_act;
+
+#line 135 "toke.l"
-#line 132 "toke.l"
+#line 2303 "lex.yy.c"
-#line 1670 "lex.yy.c"
-
- if ( yy_init )
+ if ( !(yy_init) )
{
- yy_init = 0;
+ (yy_init) = 1;
#ifdef YY_USER_INIT
YY_USER_INIT;
#endif
- if ( ! yy_start )
- yy_start = 1; /* first start state */
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
if ( ! yyin )
yyin = stdin;
@@ -1686,26 +2319,28 @@ YY_DECL
if ( ! yyout )
yyout = stdout;
- if ( ! yy_current_buffer )
- yy_current_buffer =
- yy_create_buffer( yyin, YY_BUF_SIZE );
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
- yy_load_buffer_state();
+ yy_load_buffer_state( );
}
while ( 1 ) /* loops until end-of-file is reached */
{
- yy_cp = yy_c_buf_p;
+ yy_cp = (yy_c_buf_p);
/* Support of yytext. */
- *yy_cp = yy_hold_char;
+ *yy_cp = (yy_hold_char);
/* yy_bp points to the position in yy_ch_buf of the start of
* the current run.
*/
yy_bp = yy_cp;
- yy_current_state = yy_start;
+ yy_current_state = (yy_start);
yy_current_state += YY_AT_BOL();
yy_match:
do
@@ -1713,47 +2348,45 @@ yy_match:
register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
if ( yy_accept[yy_current_state] )
{
- yy_last_accepting_state = yy_current_state;
- yy_last_accepting_cpos = yy_cp;
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
}
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 >= 622 )
+ if ( yy_current_state >= 814 )
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] != 3595 );
+ while ( yy_base[yy_current_state] != 5604 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
if ( yy_act == 0 )
{ /* have to back up */
- yy_cp = yy_last_accepting_cpos;
- yy_current_state = yy_last_accepting_state;
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
yy_act = yy_accept[yy_current_state];
}
YY_DO_BEFORE_ACTION;
-
do_action: /* This label is used only to access EOF actions. */
-
switch ( yy_act )
{ /* beginning of action switch */
case 0: /* must back up */
/* undo the effects of YY_DO_BEFORE_ACTION */
- *yy_cp = yy_hold_char;
- yy_cp = yy_last_accepting_cpos;
- yy_current_state = yy_last_accepting_state;
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
goto yy_find_action;
case 1:
YY_RULE_SETUP
-#line 133 "toke.l"
+#line 136 "toke.l"
{
LEXTRACE(", ");
LEXRETURN(',');
@@ -1761,12 +2394,12 @@ YY_RULE_SETUP
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 138 "toke.l"
+#line 141 "toke.l"
BEGIN STARTDEFS;
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 140 "toke.l"
+#line 143 "toke.l"
{
BEGIN INDEFS;
LEXTRACE("DEFVAR ");
@@ -1778,7 +2411,7 @@ YY_RULE_SETUP
case 4:
YY_RULE_SETUP
-#line 149 "toke.l"
+#line 152 "toke.l"
{
BEGIN STARTDEFS;
LEXTRACE(", ");
@@ -1787,7 +2420,7 @@ YY_RULE_SETUP
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 155 "toke.l"
+#line 158 "toke.l"
{
LEXTRACE("= ");
LEXRETURN('=');
@@ -1795,7 +2428,7 @@ YY_RULE_SETUP
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 160 "toke.l"
+#line 163 "toke.l"
{
LEXTRACE("+= ");
LEXRETURN('+');
@@ -1803,7 +2436,7 @@ YY_RULE_SETUP
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 165 "toke.l"
+#line 168 "toke.l"
{
LEXTRACE("-= ");
LEXRETURN('-');
@@ -1811,7 +2444,7 @@ YY_RULE_SETUP
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 170 "toke.l"
+#line 173 "toke.l"
{
LEXTRACE("BEGINSTR ");
yylval.string = NULL;
@@ -1821,7 +2454,7 @@ YY_RULE_SETUP
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 177 "toke.l"
+#line 180 "toke.l"
{
LEXTRACE("WORD(2) ");
if (!fill(yytext, yyleng))
@@ -1832,8 +2465,9 @@ YY_RULE_SETUP
case 10:
+/* rule 10 can match eol */
YY_RULE_SETUP
-#line 186 "toke.l"
+#line 189 "toke.l"
{
/* Line continuation char followed by newline. */
sudolineno++;
@@ -1842,7 +2476,7 @@ YY_RULE_SETUP
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 192 "toke.l"
+#line 195 "toke.l"
{
LEXTRACE("ENDSTR ");
BEGIN prev_state;
@@ -1877,7 +2511,7 @@ YY_RULE_SETUP
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 224 "toke.l"
+#line 227 "toke.l"
{
LEXTRACE("BACKSLASH ");
if (!append(yytext, yyleng))
@@ -1886,7 +2520,7 @@ YY_RULE_SETUP
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 230 "toke.l"
+#line 233 "toke.l"
{
LEXTRACE("STRBODY ");
if (!append(yytext, yyleng))
@@ -1897,7 +2531,7 @@ YY_RULE_SETUP
case 14:
YY_RULE_SETUP
-#line 238 "toke.l"
+#line 241 "toke.l"
{
/* quoted fnmatch glob char, pass verbatim */
LEXTRACE("QUOTEDCHAR ");
@@ -1908,7 +2542,7 @@ YY_RULE_SETUP
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 246 "toke.l"
+#line 249 "toke.l"
{
/* quoted sudoers special char, strip backslash */
LEXTRACE("QUOTEDCHAR ");
@@ -1918,8 +2552,9 @@ YY_RULE_SETUP
}
YY_BREAK
case 16:
+/* rule 16 can match eol */
YY_RULE_SETUP
-#line 254 "toke.l"
+#line 257 "toke.l"
{
BEGIN INITIAL;
yyless(0);
@@ -1928,7 +2563,7 @@ YY_RULE_SETUP
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 260 "toke.l"
+#line 263 "toke.l"
{
LEXTRACE("ARG ");
if (!fill_args(yytext, yyleng, sawspace))
@@ -1939,7 +2574,48 @@ YY_RULE_SETUP
case 18:
YY_RULE_SETUP
-#line 268 "toke.l"
+#line 271 "toke.l"
+{
+ /* Only return DIGEST if the length is correct. */
+ if (yyleng == digest_len * 2) {
+ if (!fill(yytext, yyleng))
+ yyterminate();
+ BEGIN INITIAL;
+ LEXTRACE("DIGEST ");
+ LEXRETURN(DIGEST);
+ }
+ BEGIN INITIAL;
+ yyless(yyleng);
+ } /* hex digest */
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 284 "toke.l"
+{
+ /* Only return DIGEST if the length is correct. */
+ size_t len;
+ if (yytext[yyleng - 1] == '=') {
+ /* use padding */
+ len = 4 * ((digest_len + 2) / 3);
+ } else {
+ /* no padding */
+ len = (4 * digest_len + 2) / 3;
+ }
+ if (yyleng == len) {
+ if (!fill(yytext, yyleng))
+ yyterminate();
+ BEGIN INITIAL;
+ LEXTRACE("DIGEST ");
+ LEXRETURN(DIGEST);
+ }
+ BEGIN INITIAL;
+ yyless(yyleng);
+ } /* base64 digest */
+ YY_BREAK
+case 20:
+/* rule 20 can match eol */
+YY_RULE_SETUP
+#line 305 "toke.l"
{
char *path;
@@ -1958,9 +2634,10 @@ YY_RULE_SETUP
yyterminate();
}
YY_BREAK
-case 19:
+case 21:
+/* rule 21 can match eol */
YY_RULE_SETUP
-#line 286 "toke.l"
+#line 323 "toke.l"
{
char *path;
@@ -1982,9 +2659,9 @@ YY_RULE_SETUP
yyterminate();
}
YY_BREAK
-case 20:
+case 22:
YY_RULE_SETUP
-#line 307 "toke.l"
+#line 344 "toke.l"
{
char deftype;
int n;
@@ -2025,9 +2702,9 @@ YY_RULE_SETUP
}
}
YY_BREAK
-case 21:
+case 23:
YY_RULE_SETUP
-#line 347 "toke.l"
+#line 384 "toke.l"
{
int n;
@@ -2054,100 +2731,100 @@ YY_RULE_SETUP
}
}
YY_BREAK
-case 22:
+case 24:
YY_RULE_SETUP
-#line 373 "toke.l"
+#line 410 "toke.l"
{
/* cmnd does not require passwd for this user */
LEXTRACE("NOPASSWD ");
LEXRETURN(NOPASSWD);
}
YY_BREAK
-case 23:
+case 25:
YY_RULE_SETUP
-#line 379 "toke.l"
+#line 416 "toke.l"
{
/* cmnd requires passwd for this user */
LEXTRACE("PASSWD ");
LEXRETURN(PASSWD);
}
YY_BREAK
-case 24:
+case 26:
YY_RULE_SETUP
-#line 385 "toke.l"
+#line 422 "toke.l"
{
LEXTRACE("NOEXEC ");
LEXRETURN(NOEXEC);
}
YY_BREAK
-case 25:
+case 27:
YY_RULE_SETUP
-#line 390 "toke.l"
+#line 427 "toke.l"
{
LEXTRACE("EXEC ");
LEXRETURN(EXEC);
}
YY_BREAK
-case 26:
+case 28:
YY_RULE_SETUP
-#line 395 "toke.l"
+#line 432 "toke.l"
{
LEXTRACE("SETENV ");
LEXRETURN(SETENV);
}
YY_BREAK
-case 27:
+case 29:
YY_RULE_SETUP
-#line 400 "toke.l"
+#line 437 "toke.l"
{
LEXTRACE("NOSETENV ");
LEXRETURN(NOSETENV);
}
YY_BREAK
-case 28:
+case 30:
YY_RULE_SETUP
-#line 405 "toke.l"
+#line 442 "toke.l"
{
LEXTRACE("LOG_OUTPUT ");
LEXRETURN(LOG_OUTPUT);
}
YY_BREAK
-case 29:
+case 31:
YY_RULE_SETUP
-#line 410 "toke.l"
+#line 447 "toke.l"
{
LEXTRACE("NOLOG_OUTPUT ");
LEXRETURN(NOLOG_OUTPUT);
}
YY_BREAK
-case 30:
+case 32:
YY_RULE_SETUP
-#line 415 "toke.l"
+#line 452 "toke.l"
{
LEXTRACE("LOG_INPUT ");
LEXRETURN(LOG_INPUT);
}
YY_BREAK
-case 31:
+case 33:
YY_RULE_SETUP
-#line 420 "toke.l"
+#line 457 "toke.l"
{
LEXTRACE("NOLOG_INPUT ");
LEXRETURN(NOLOG_INPUT);
}
YY_BREAK
-case 32:
+case 34:
YY_RULE_SETUP
-#line 425 "toke.l"
+#line 462 "toke.l"
{
/* empty group or netgroup */
LEXTRACE("ERROR ");
LEXRETURN(ERROR);
}
YY_BREAK
-case 33:
+case 35:
YY_RULE_SETUP
-#line 431 "toke.l"
+#line 468 "toke.l"
{
/* netgroup */
if (!fill(yytext, yyleng))
@@ -2156,9 +2833,9 @@ YY_RULE_SETUP
LEXRETURN(NETGROUP);
}
YY_BREAK
-case 34:
+case 36:
YY_RULE_SETUP
-#line 439 "toke.l"
+#line 476 "toke.l"
{
/* group */
if (!fill(yytext, yyleng))
@@ -2167,9 +2844,9 @@ YY_RULE_SETUP
LEXRETURN(USERGROUP);
}
YY_BREAK
-case 35:
+case 37:
YY_RULE_SETUP
-#line 447 "toke.l"
+#line 484 "toke.l"
{
if (!fill(yytext, yyleng))
yyterminate();
@@ -2177,9 +2854,9 @@ YY_RULE_SETUP
LEXRETURN(NTWKADDR);
}
YY_BREAK
-case 36:
+case 38:
YY_RULE_SETUP
-#line 454 "toke.l"
+#line 491 "toke.l"
{
if (!fill(yytext, yyleng))
yyterminate();
@@ -2187,9 +2864,9 @@ YY_RULE_SETUP
LEXRETURN(NTWKADDR);
}
YY_BREAK
-case 37:
+case 39:
YY_RULE_SETUP
-#line 461 "toke.l"
+#line 498 "toke.l"
{
if (!ipv6_valid(yytext)) {
LEXTRACE("ERROR ");
@@ -2201,9 +2878,9 @@ YY_RULE_SETUP
LEXRETURN(NTWKADDR);
}
YY_BREAK
-case 38:
+case 40:
YY_RULE_SETUP
-#line 472 "toke.l"
+#line 509 "toke.l"
{
if (!ipv6_valid(yytext)) {
LEXTRACE("ERROR ");
@@ -2215,18 +2892,18 @@ YY_RULE_SETUP
LEXRETURN(NTWKADDR);
}
YY_BREAK
-case 39:
+case 41:
YY_RULE_SETUP
-#line 483 "toke.l"
+#line 520 "toke.l"
{
LEXTRACE("ALL ");
LEXRETURN(ALL);
}
YY_BREAK
-case 40:
+case 42:
YY_RULE_SETUP
-#line 489 "toke.l"
+#line 526 "toke.l"
{
#ifdef HAVE_SELINUX
LEXTRACE("ROLE ");
@@ -2236,9 +2913,9 @@ YY_RULE_SETUP
#endif
}
YY_BREAK
-case 41:
+case 43:
YY_RULE_SETUP
-#line 498 "toke.l"
+#line 535 "toke.l"
{
#ifdef HAVE_SELINUX
LEXTRACE("TYPE ");
@@ -2248,9 +2925,9 @@ YY_RULE_SETUP
#endif
}
YY_BREAK
-case 42:
+case 44:
YY_RULE_SETUP
-#line 506 "toke.l"
+#line 543 "toke.l"
{
#ifdef HAVE_PRIV_SET
LEXTRACE("PRIVS ");
@@ -2260,9 +2937,9 @@ YY_RULE_SETUP
#endif
}
YY_BREAK
-case 43:
+case 45:
YY_RULE_SETUP
-#line 515 "toke.l"
+#line 552 "toke.l"
{
#ifdef HAVE_PRIV_SET
LEXTRACE("LIMITPRIVS ");
@@ -2272,9 +2949,9 @@ YY_RULE_SETUP
#endif
}
YY_BREAK
-case 44:
+case 46:
YY_RULE_SETUP
-#line 524 "toke.l"
+#line 561 "toke.l"
{
got_alias:
if (!fill(yytext, yyleng))
@@ -2283,10 +2960,11 @@ YY_RULE_SETUP
LEXRETURN(ALIAS);
}
YY_BREAK
-case 45:
+case 47:
YY_RULE_SETUP
-#line 532 "toke.l"
+#line 569 "toke.l"
{
+ /* XXX - no way to specify digest for command */
/* no command args allowed for Defaults!/path */
if (!fill_cmnd(yytext, yyleng))
yyterminate();
@@ -2294,9 +2972,49 @@ YY_RULE_SETUP
LEXRETURN(COMMAND);
}
YY_BREAK
-case 46:
+case 48:
+YY_RULE_SETUP
+#line 578 "toke.l"
+{
+ digest_len = SUDO_SHA224_DIGEST_LENGTH;
+ BEGIN WANTDIGEST;
+ LEXTRACE("SHA224 ");
+ LEXRETURN(SHA224);
+ }
+ YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 585 "toke.l"
+{
+ digest_len = SUDO_SHA256_DIGEST_LENGTH;
+ BEGIN WANTDIGEST;
+ LEXTRACE("SHA256 ");
+ LEXRETURN(SHA256);
+ }
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 592 "toke.l"
+{
+ digest_len = SUDO_SHA384_DIGEST_LENGTH;
+ BEGIN WANTDIGEST;
+ LEXTRACE("SHA384 ");
+ LEXRETURN(SHA384);
+ }
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 599 "toke.l"
+{
+ digest_len = SUDO_SHA512_DIGEST_LENGTH;
+ BEGIN WANTDIGEST;
+ LEXTRACE("SHA512 ");
+ LEXRETURN(SHA512);
+ }
+ YY_BREAK
+case 52:
YY_RULE_SETUP
-#line 540 "toke.l"
+#line 606 "toke.l"
{
BEGIN GOTCMND;
LEXTRACE("COMMAND ");
@@ -2304,9 +3022,9 @@ YY_RULE_SETUP
yyterminate();
} /* sudo -e */
YY_BREAK
-case 47:
+case 53:
YY_RULE_SETUP
-#line 547 "toke.l"
+#line 613 "toke.l"
{
/* directories can't have args... */
if (yytext[yyleng - 1] == '/') {
@@ -2322,9 +3040,9 @@ YY_RULE_SETUP
}
} /* a pathname */
YY_BREAK
-case 48:
+case 54:
YY_RULE_SETUP
-#line 562 "toke.l"
+#line 628 "toke.l"
{
LEXTRACE("BEGINSTR ");
yylval.string = NULL;
@@ -2332,9 +3050,9 @@ YY_RULE_SETUP
BEGIN INSTR;
}
YY_BREAK
-case 49:
+case 55:
YY_RULE_SETUP
-#line 569 "toke.l"
+#line 635 "toke.l"
{
/* a word */
if (!fill(yytext, yyleng))
@@ -2343,49 +3061,49 @@ YY_RULE_SETUP
LEXRETURN(WORD);
}
YY_BREAK
-case 50:
+case 56:
YY_RULE_SETUP
-#line 577 "toke.l"
+#line 643 "toke.l"
{
LEXTRACE("( ");
LEXRETURN('(');
}
YY_BREAK
-case 51:
+case 57:
YY_RULE_SETUP
-#line 582 "toke.l"
+#line 648 "toke.l"
{
LEXTRACE(") ");
LEXRETURN(')');
}
YY_BREAK
-case 52:
+case 58:
YY_RULE_SETUP
-#line 587 "toke.l"
+#line 653 "toke.l"
{
LEXTRACE(", ");
LEXRETURN(',');
} /* return ',' */
YY_BREAK
-case 53:
+case 59:
YY_RULE_SETUP
-#line 592 "toke.l"
+#line 658 "toke.l"
{
LEXTRACE("= ");
LEXRETURN('=');
} /* return '=' */
YY_BREAK
-case 54:
+case 60:
YY_RULE_SETUP
-#line 597 "toke.l"
+#line 663 "toke.l"
{
LEXTRACE(": ");
LEXRETURN(':');
} /* return ':' */
YY_BREAK
-case 55:
+case 61:
YY_RULE_SETUP
-#line 602 "toke.l"
+#line 668 "toke.l"
{
if (yyleng & 1) {
LEXTRACE("!");
@@ -2393,9 +3111,10 @@ YY_RULE_SETUP
}
}
YY_BREAK
-case 56:
+case 62:
+/* rule 62 can match eol */
YY_RULE_SETUP
-#line 609 "toke.l"
+#line 675 "toke.l"
{
if (YY_START == INSTR) {
LEXTRACE("ERROR ");
@@ -2408,25 +3127,27 @@ YY_RULE_SETUP
LEXRETURN(COMMENT);
} /* return newline */
YY_BREAK
-case 57:
+case 63:
YY_RULE_SETUP
-#line 621 "toke.l"
+#line 687 "toke.l"
{ /* throw away space/tabs */
sawspace = true; /* but remember for fill_args */
}
YY_BREAK
-case 58:
+case 64:
+/* rule 64 can match eol */
YY_RULE_SETUP
-#line 625 "toke.l"
+#line 691 "toke.l"
{
sawspace = true; /* remember for fill_args */
sudolineno++;
continued = true;
} /* throw away EOL after \ */
YY_BREAK
-case 59:
+case 65:
+/* rule 65 can match eol */
YY_RULE_SETUP
-#line 631 "toke.l"
+#line 697 "toke.l"
{
BEGIN INITIAL;
sudolineno++;
@@ -2435,9 +3156,9 @@ YY_RULE_SETUP
LEXRETURN(COMMENT);
} /* comment, not uid/gid */
YY_BREAK
-case 60:
+case 66:
YY_RULE_SETUP
-#line 639 "toke.l"
+#line 705 "toke.l"
{
LEXTRACE("ERROR ");
LEXRETURN(ERROR);
@@ -2449,7 +3170,8 @@ case YY_STATE_EOF(GOTCMND):
case YY_STATE_EOF(STARTDEFS):
case YY_STATE_EOF(INDEFS):
case YY_STATE_EOF(INSTR):
-#line 644 "toke.l"
+case YY_STATE_EOF(WANTDIGEST):
+#line 710 "toke.l"
{
if (YY_START != INITIAL) {
BEGIN INITIAL;
@@ -2460,36 +3182,36 @@ case YY_STATE_EOF(INSTR):
yyterminate();
}
YY_BREAK
-case 61:
+case 67:
YY_RULE_SETUP
-#line 654 "toke.l"
+#line 720 "toke.l"
ECHO;
YY_BREAK
-#line 2468 "lex.yy.c"
+#line 3190 "lex.yy.c"
case YY_END_OF_BUFFER:
{
/* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
/* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = yy_hold_char;
+ *yy_cp = (yy_hold_char);
YY_RESTORE_YY_MORE_OFFSET
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
{
/* We're scanning a new file or input source. It's
* possible that this happened because the user
* just pointed yyin at a new source and called
* yylex(). If so, then we have to assure
- * consistency between yy_current_buffer and our
+ * consistency between YY_CURRENT_BUFFER and our
* globals. Here is the right place to do so, because
* this is the first action (other than possibly a
* back-up) that will match for the new input source.
*/
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yy_current_buffer->yy_input_file = yyin;
- yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
}
/* Note that here we test for yy_c_buf_p "<=" to the position
@@ -2499,13 +3221,13 @@ ECHO;
* end-of-buffer state). Contrast this with the test
* in input().
*/
- if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
{ /* This was really a NUL. */
yy_state_type yy_next_state;
- yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
/* Okay, we're now positioned to make the NUL
* transition. We couldn't have
@@ -2518,30 +3240,30 @@ ECHO;
yy_next_state = yy_try_NUL_trans( yy_current_state );
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
if ( yy_next_state )
{
/* Consume the NUL. */
- yy_cp = ++yy_c_buf_p;
+ yy_cp = ++(yy_c_buf_p);
yy_current_state = yy_next_state;
goto yy_match;
}
else
{
- yy_cp = yy_c_buf_p;
+ yy_cp = (yy_c_buf_p);
goto yy_find_action;
}
}
- else switch ( yy_get_next_buffer() )
+ else switch ( yy_get_next_buffer( ) )
{
case EOB_ACT_END_OF_FILE:
{
- yy_did_buffer_switch_on_eof = 0;
+ (yy_did_buffer_switch_on_eof) = 0;
- if ( yywrap() )
+ if ( yywrap( ) )
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
@@ -2552,7 +3274,7 @@ ECHO;
* YY_NULL, it'll still work - another
* YY_NULL will get returned.
*/
- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
yy_act = YY_STATE_EOF(YY_START);
goto do_action;
@@ -2560,30 +3282,30 @@ ECHO;
else
{
- if ( ! yy_did_buffer_switch_on_eof )
+ if ( ! (yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
}
break;
}
case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p =
- yytext_ptr + yy_amount_of_matched_text;
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
goto yy_match;
case EOB_ACT_LAST_MATCH:
- yy_c_buf_p =
- &yy_current_buffer->yy_ch_buf[yy_n_chars];
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
goto yy_find_action;
}
break;
@@ -2594,8 +3316,7 @@ ECHO;
"fatal flex scanner internal error--no action found" );
} /* end of action switch */
} /* end of scanning one token */
- } /* end of yylex */
-
+} /* end of yylex */
/* yy_get_next_buffer - try to read in a new buffer
*
@@ -2604,21 +3325,20 @@ ECHO;
* EOB_ACT_CONTINUE_SCAN - continue scanning from current position
* EOB_ACT_END_OF_FILE - end of file
*/
-
-static int yy_get_next_buffer()
- {
- register char *dest = yy_current_buffer->yy_ch_buf;
- register char *source = yytext_ptr;
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
register int number_to_move, i;
int ret_val;
- if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
YY_FATAL_ERROR(
"fatal flex scanner internal error--end of buffer missed" );
- if ( yy_current_buffer->yy_fill_buffer == 0 )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
{ /* Don't try to fill the buffer, so this is an EOF. */
- if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
{
/* We matched a single character, the EOB, so
* treat this as a final EOF.
@@ -2638,38 +3358,34 @@ static int yy_get_next_buffer()
/* Try to read more data. */
/* First move last chars to start of buffer. */
- number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
/* don't do the read, it's not guaranteed to return an EOF,
* just force an EOF
*/
- yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
else
{
- int num_to_read =
- yy_current_buffer->yy_buf_size - number_to_move - 1;
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
while ( num_to_read <= 0 )
{ /* Not enough room in the buffer - grow it. */
-#ifdef YY_USES_REJECT
- YY_FATAL_ERROR(
-"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
-#else
/* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = yy_current_buffer;
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
int yy_c_buf_p_offset =
- (int) (yy_c_buf_p - b->yy_ch_buf);
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
if ( b->yy_is_our_buffer )
{
- int new_size = b->yy_buf_size * 2;
+ yy_size_t new_size = b->yy_buf_size * 2;
if ( new_size <= 0 )
b->yy_buf_size += b->yy_buf_size / 8;
@@ -2678,8 +3394,7 @@ static int yy_get_next_buffer()
b->yy_ch_buf = (char *)
/* Include room in for 2 EOB chars. */
- yy_flex_realloc( (void *) b->yy_ch_buf,
- b->yy_buf_size + 2 );
+ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
}
else
/* Can't grow it, we don't own it. */
@@ -2689,35 +3404,35 @@ static int yy_get_next_buffer()
YY_FATAL_ERROR(
"fatal error - scanner input buffer overflow" );
- yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
- num_to_read = yy_current_buffer->yy_buf_size -
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
number_to_move - 1;
-#endif
+
}
if ( num_to_read > YY_READ_BUF_SIZE )
num_to_read = YY_READ_BUF_SIZE;
/* Read in more data. */
- YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
- yy_n_chars, num_to_read );
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
- yy_current_buffer->yy_n_chars = yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
}
- if ( yy_n_chars == 0 )
+ if ( (yy_n_chars) == 0 )
{
if ( number_to_move == YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE;
- yyrestart( yyin );
+ yyrestart(yyin );
}
else
{
ret_val = EOB_ACT_LAST_MATCH;
- yy_current_buffer->yy_buffer_status =
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
YY_BUFFER_EOF_PENDING;
}
}
@@ -2725,154 +3440,109 @@ static int yy_get_next_buffer()
else
ret_val = EOB_ACT_CONTINUE_SCAN;
- yy_n_chars += number_to_move;
- yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
- yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
- yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
- return ret_val;
- }
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+ return ret_val;
+}
/* yy_get_previous_state - get the state just before the EOB char was reached */
-static yy_state_type yy_get_previous_state()
- {
+ static yy_state_type yy_get_previous_state (void)
+{
register yy_state_type yy_current_state;
register char *yy_cp;
-
- yy_current_state = yy_start;
+
+ yy_current_state = (yy_start);
yy_current_state += YY_AT_BOL();
- for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
{
register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
if ( yy_accept[yy_current_state] )
{
- yy_last_accepting_state = yy_current_state;
- yy_last_accepting_cpos = yy_cp;
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
}
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 >= 622 )
+ if ( yy_current_state >= 814 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
}
return yy_current_state;
- }
-
+}
/* yy_try_NUL_trans - try to make a transition on the NUL character
*
* synopsis
* next_state = yy_try_NUL_trans( current_state );
*/
-
-#ifdef YY_USE_PROTOS
-static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
-#else
-static yy_state_type yy_try_NUL_trans( yy_current_state )
-yy_state_type yy_current_state;
-#endif
- {
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
register int yy_is_jam;
- register char *yy_cp = yy_c_buf_p;
+ register char *yy_cp = (yy_c_buf_p);
register YY_CHAR yy_c = 1;
if ( yy_accept[yy_current_state] )
{
- yy_last_accepting_state = yy_current_state;
- yy_last_accepting_cpos = yy_cp;
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
}
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 >= 622 )
+ if ( yy_current_state >= 814 )
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 == 621);
-
- return yy_is_jam ? 0 : yy_current_state;
- }
-
-
-#ifndef YY_NO_UNPUT
-#ifdef YY_USE_PROTOS
-static void yyunput( int c, register char *yy_bp )
-#else
-static void yyunput( c, yy_bp )
-int c;
-register char *yy_bp;
-#endif
- {
- register char *yy_cp = yy_c_buf_p;
-
- /* undo effects of setting up yytext */
- *yy_cp = yy_hold_char;
-
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
- { /* need to shift things up to make room */
- /* +2 for EOB chars. */
- register int number_to_move = yy_n_chars + 2;
- register char *dest = &yy_current_buffer->yy_ch_buf[
- yy_current_buffer->yy_buf_size + 2];
- register char *source =
- &yy_current_buffer->yy_ch_buf[number_to_move];
-
- while ( source > yy_current_buffer->yy_ch_buf )
- *--dest = *--source;
-
- yy_cp += (int) (dest - source);
- yy_bp += (int) (dest - source);
- yy_current_buffer->yy_n_chars =
- yy_n_chars = yy_current_buffer->yy_buf_size;
-
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
- YY_FATAL_ERROR( "flex scanner push-back overflow" );
- }
-
- *--yy_cp = (char) c;
-
-
- yytext_ptr = yy_bp;
- yy_hold_char = *yy_cp;
- yy_c_buf_p = yy_cp;
- }
-#endif /* ifndef YY_NO_UNPUT */
+ yy_is_jam = (yy_current_state == 813);
+ return yy_is_jam ? 0 : yy_current_state;
+}
#ifndef YY_NO_INPUT
#ifdef __cplusplus
-static int yyinput()
+ static int yyinput (void)
#else
-static int input()
+ static int input (void)
#endif
- {
- int c;
- *yy_c_buf_p = yy_hold_char;
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
- if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
{
/* yy_c_buf_p now points to the character we want to return.
* If this occurs *before* the EOB characters, then it's a
* valid NUL; if not, then we've hit the end of the buffer.
*/
- if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
/* This was really a NUL. */
- *yy_c_buf_p = '\0';
+ *(yy_c_buf_p) = '\0';
else
{ /* need more input */
- int offset = yy_c_buf_p - yytext_ptr;
- ++yy_c_buf_p;
+ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
- switch ( yy_get_next_buffer() )
+ switch ( yy_get_next_buffer( ) )
{
case EOB_ACT_LAST_MATCH:
/* This happens because yy_g_n_b()
@@ -2886,16 +3556,16 @@ static int input()
*/
/* Reset buffer status. */
- yyrestart( yyin );
+ yyrestart(yyin );
- /* fall through */
+ /*FALLTHROUGH*/
case EOB_ACT_END_OF_FILE:
{
- if ( yywrap() )
+ if ( yywrap( ) )
return EOF;
- if ( ! yy_did_buffer_switch_on_eof )
+ if ( ! (yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
#ifdef __cplusplus
return yyinput();
@@ -2905,92 +3575,94 @@ static int input()
}
case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p = yytext_ptr + offset;
+ (yy_c_buf_p) = (yytext_ptr) + offset;
break;
}
}
}
- c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
- *yy_c_buf_p = '\0'; /* preserve yytext */
- yy_hold_char = *++yy_c_buf_p;
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
- yy_current_buffer->yy_at_bol = (c == '\n');
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
return c;
- }
+}
#endif /* ifndef YY_NO_INPUT */
-
-#ifdef YY_USE_PROTOS
-void yyrestart( FILE *input_file )
-#else
-void yyrestart( input_file )
-FILE *input_file;
-#endif
- {
- if ( ! yy_current_buffer )
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
-
- yy_init_buffer( yy_current_buffer, input_file );
- yy_load_buffer_state();
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
}
+ yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ yy_load_buffer_state( );
+}
-#ifdef YY_USE_PROTOS
-void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-#else
-void yy_switch_to_buffer( new_buffer )
-YY_BUFFER_STATE new_buffer;
-#endif
- {
- if ( yy_current_buffer == new_buffer )
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
return;
- if ( yy_current_buffer )
+ if ( YY_CURRENT_BUFFER )
{
/* Flush out information for old buffer. */
- *yy_c_buf_p = yy_hold_char;
- yy_current_buffer->yy_buf_pos = yy_c_buf_p;
- yy_current_buffer->yy_n_chars = yy_n_chars;
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
}
- yy_current_buffer = new_buffer;
- yy_load_buffer_state();
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
/* We don't actually know whether we did this switch during
* EOF (yywrap()) processing, but the only time this flag
* is looked at is after yywrap() is called, so it's safe
* to go ahead and always set it.
*/
- yy_did_buffer_switch_on_eof = 1;
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_load_buffer_state( void )
-#else
-void yy_load_buffer_state()
-#endif
- {
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
- yyin = yy_current_buffer->yy_input_file;
- yy_hold_char = *yy_c_buf_p;
- }
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
-#else
-YY_BUFFER_STATE yy_create_buffer( file, size )
-FILE *file;
-int size;
-#endif
- {
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
YY_BUFFER_STATE b;
-
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
@@ -2999,83 +3671,71 @@ int size;
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
*/
- b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
if ( ! b->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_is_our_buffer = 1;
- yy_init_buffer( b, file );
+ yy_init_buffer(b,file );
return b;
- }
-
+}
-#ifdef YY_USE_PROTOS
-void yy_delete_buffer( YY_BUFFER_STATE b )
-#else
-void yy_delete_buffer( b )
-YY_BUFFER_STATE b;
-#endif
- {
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
if ( ! b )
return;
- if ( b == yy_current_buffer )
- yy_current_buffer = (YY_BUFFER_STATE) 0;
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
if ( b->yy_is_our_buffer )
- yy_flex_free( (void *) b->yy_ch_buf );
-
- yy_flex_free( (void *) b );
- }
-
+ yyfree((void *) b->yy_ch_buf );
-#ifndef YY_ALWAYS_INTERACTIVE
-#ifndef YY_NEVER_INTERACTIVE
-#include <unistd.h>
-#endif
-#endif
-
-#ifdef YY_USE_PROTOS
-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
-#else
-void yy_init_buffer( b, file )
-YY_BUFFER_STATE b;
-FILE *file;
-#endif
+ yyfree((void *) b );
+}
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
- {
+{
int oerrno = errno;
-
- yy_flush_buffer( b );
+
+ yy_flush_buffer(b );
b->yy_input_file = file;
b->yy_fill_buffer = 1;
-#if defined(YY_ALWAYS_INTERACTIVE) && YY_ALWAYS_INTERACTIVE
- b->yy_is_interactive = 1;
-#else
-#if defined(YY_NEVER_INTERACTIVE) && YY_NEVER_INTERACTIVE
- b->yy_is_interactive = 0;
-#else
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-#endif
-#endif
- errno = oerrno;
- }
-
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
-#ifdef YY_USE_PROTOS
-void yy_flush_buffer( YY_BUFFER_STATE b )
-#else
-void yy_flush_buffer( b )
-YY_BUFFER_STATE b;
-#endif
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
- {
- if ( ! b )
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
return;
b->yy_n_chars = 0;
@@ -3092,29 +3752,125 @@ YY_BUFFER_STATE b;
b->yy_at_bol = 1;
b->yy_buffer_status = YY_BUFFER_NEW;
- if ( b == yy_current_buffer )
- yy_load_buffer_state();
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
}
+}
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
-#ifndef YY_NO_SCAN_BUFFER
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
-#else
-YY_BUFFER_STATE yy_scan_buffer( base, size )
-char *base;
-yy_size_t size;
-#endif
- {
- YY_BUFFER_STATE b;
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
if ( size < 2 ||
base[size-2] != YY_END_OF_BUFFER_CHAR ||
base[size-1] != YY_END_OF_BUFFER_CHAR )
/* They forgot to leave room for the EOB's. */
return 0;
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
@@ -3128,56 +3884,51 @@ yy_size_t size;
b->yy_fill_buffer = 0;
b->yy_buffer_status = YY_BUFFER_NEW;
- yy_switch_to_buffer( b );
+ yy_switch_to_buffer(b );
return b;
- }
-#endif
-
-
-#ifndef YY_NO_SCAN_STRING
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
-#else
-YY_BUFFER_STATE yy_scan_string( yy_str )
-yyconst char *yy_str;
-#endif
- {
- int len;
- for ( len = 0; yy_str[len]; ++len )
- ;
-
- return yy_scan_bytes( yy_str, len );
- }
-#endif
+}
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+
+ return yy_scan_bytes(yystr,strlen(yystr) );
+}
-#ifndef YY_NO_SCAN_BYTES
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
-#else
-YY_BUFFER_STATE yy_scan_bytes( bytes, len )
-yyconst char *bytes;
-int len;
-#endif
- {
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
+{
YY_BUFFER_STATE b;
char *buf;
yy_size_t n;
- int i;
-
+ yy_size_t i;
+
/* Get memory for full buffer, including space for trailing EOB's. */
- n = len + 2;
- buf = (char *) yy_flex_alloc( n );
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc(n );
if ( ! buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
- for ( i = 0; i < len; ++i )
- buf[i] = bytes[i];
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
- buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
- b = yy_scan_buffer( buf, n );
+ b = yy_scan_buffer(buf,n );
if ( ! b )
YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
@@ -3187,148 +3938,196 @@ int len;
b->yy_is_our_buffer = 1;
return b;
- }
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
#endif
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
-#ifndef YY_NO_PUSH_STATE
-#ifdef YY_USE_PROTOS
-static void yy_push_state( int new_state )
-#else
-static void yy_push_state( new_state )
-int new_state;
-#endif
- {
- if ( yy_start_stack_ptr >= yy_start_stack_depth )
- {
- yy_size_t new_size;
+/* Redefine yyless() so it works in section 3 code. */
- yy_start_stack_depth += YY_START_STACK_INCR;
- new_size = yy_start_stack_depth * sizeof( int );
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
- if ( ! yy_start_stack )
- yy_start_stack = (int *) yy_flex_alloc( new_size );
+/* Accessor methods (get/set functions) to struct members. */
- else
- yy_start_stack = (int *) yy_flex_realloc(
- (void *) yy_start_stack, new_size );
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
- if ( ! yy_start_stack )
- YY_FATAL_ERROR(
- "out of memory expanding start-condition stack" );
- }
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
- yy_start_stack[yy_start_stack_ptr++] = YY_START;
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
- BEGIN(new_state);
- }
-#endif
+/** Get the length of the current token.
+ *
+ */
+yy_size_t yyget_leng (void)
+{
+ return yyleng;
+}
+/** Get the current token.
+ *
+ */
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state()
- {
- if ( --yy_start_stack_ptr < 0 )
- YY_FATAL_ERROR( "start-condition stack underflow" );
+char *yyget_text (void)
+{
+ return yytext;
+}
- BEGIN(yy_start_stack[yy_start_stack_ptr]);
- }
-#endif
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void yyset_lineno (int line_number )
+{
+
+ yylineno = line_number;
+}
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * in_str )
+{
+ yyin = in_str ;
+}
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state()
- {
- return yy_start_stack[yy_start_stack_ptr - 1];
- }
-#endif
+void yyset_out (FILE * out_str )
+{
+ yyout = out_str ;
+}
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int bdebug )
+{
+ yy_flex_debug = bdebug ;
+}
-#ifdef YY_USE_PROTOS
-static void yy_fatal_error( yyconst char msg[] )
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
#else
-static void yy_fatal_error( msg )
-char msg[];
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
#endif
- {
- (void) fprintf( stderr, "%s\n", msg );
- exit( YY_EXIT_FAILURE );
- }
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- yytext[yyleng] = yy_hold_char; \
- yy_c_buf_p = yytext + n; \
- yy_hold_char = *yy_c_buf_p; \
- *yy_c_buf_p = '\0'; \
- yyleng = n; \
- } \
- while ( 0 )
-
+ return 0;
+}
-/* Internal utility routines. */
+/*
+ * Internal utility routines.
+ */
#ifndef yytext_ptr
-#ifdef YY_USE_PROTOS
-static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
-#else
-static void yy_flex_strncpy( s1, s2, n )
-char *s1;
-yyconst char *s2;
-int n;
-#endif
- {
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
register int i;
for ( i = 0; i < n; ++i )
s1[i] = s2[i];
- }
+}
#endif
#ifdef YY_NEED_STRLEN
-#ifdef YY_USE_PROTOS
-static int yy_flex_strlen( yyconst char *s )
-#else
-static int yy_flex_strlen( s )
-yyconst char *s;
-#endif
- {
+static int yy_flex_strlen (yyconst char * s )
+{
register int n;
for ( n = 0; s[n]; ++n )
;
return n;
- }
+}
#endif
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_alloc( yy_size_t size )
-#else
-static void *yy_flex_alloc( size )
-yy_size_t size;
-#endif
- {
+void *yyalloc (yy_size_t size )
+{
return (void *) malloc( size );
- }
+}
-#ifdef YY_USE_PROTOS
-static void *yy_flex_realloc( void *ptr, yy_size_t size )
-#else
-static void *yy_flex_realloc( ptr, size )
-void *ptr;
-yy_size_t size;
-#endif
- {
+void *yyrealloc (void * ptr, yy_size_t size )
+{
/* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter
@@ -3337,26 +4136,17 @@ yy_size_t size;
* as though doing an assignment.
*/
return (void *) realloc( (char *) ptr, size );
- }
+}
-#ifdef YY_USE_PROTOS
-static void yy_flex_free( void *ptr )
-#else
-static void yy_flex_free( ptr )
-void *ptr;
-#endif
- {
- free( ptr );
- }
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 720 "toke.l"
-#if defined(YY_MAIN) && YY_MAIN
-int main()
- {
- yylex();
- return 0;
- }
-#endif
-#line 654 "toke.l"
struct path_list {
char *path;
@@ -3598,7 +4388,7 @@ _push_include(char *path, bool isdir)
idepth++;
sudolineno = 1;
sudoers = path;
- yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE));
+ yy_switch_to_buffer(yy_create_buffer(fp,YY_BUF_SIZE));
debug_return_bool(true);
}
@@ -3624,7 +4414,7 @@ pop_include(void)
efree(sudoers);
sudoers = pl->path;
sudolineno = 1;
- yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE));
+ yy_switch_to_buffer(yy_create_buffer(fp,YY_BUF_SIZE));
efree(pl);
break;
}
@@ -3740,3 +4530,4 @@ sudoers_trace_print(const char *msg)
return 0;
}
#endif /* TRACELEXER */
+
diff -up sudo-1.8.6p7/plugins/sudoers/toke.l.digest-backport sudo-1.8.6p7/plugins/sudoers/toke.l
--- sudo-1.8.6p7/plugins/sudoers/toke.l.digest-backport 2015-07-06 11:42:33.115904997 +0200
+++ sudo-1.8.6p7/plugins/sudoers/toke.l 2015-07-06 11:42:33.135904696 +0200
@@ -72,6 +72,7 @@
#include "toke.h"
#include <gram.h>
#include "lbuf.h"
+#include "filedigest.h"
#include "secure_path.h"
extern YYSTYPE yylval;
@@ -89,6 +90,7 @@ gid_t sudoers_gid = SUDOERS_GID;
static bool continued, sawspace;
static int prev_state;
+static int digest_len;
static bool _push_include(char *, bool);
static bool pop_include(void);
@@ -128,6 +130,7 @@ DEFVAR [a-z_]+
%x STARTDEFS
%x INDEFS
%x INSTR
+%s WANTDIGEST
%%
<GOTDEFS>[[:blank:]]*,[[:blank:]]* {
@@ -265,6 +268,40 @@ DEFVAR [a-z_]+
} /* a command line arg */
}
+<WANTDIGEST>[[:xdigit:]]+ {
+ /* Only return DIGEST if the length is correct. */
+ if (yyleng == digest_len * 2) {
+ if (!fill(yytext, yyleng))
+ yyterminate();
+ BEGIN INITIAL;
+ LEXTRACE("DIGEST ");
+ LEXRETURN(DIGEST);
+ }
+ BEGIN INITIAL;
+ yyless(yyleng);
+ } /* hex digest */
+
+<WANTDIGEST>[A-Za-z0-9\+/=]+ {
+ /* Only return DIGEST if the length is correct. */
+ size_t len;
+ if (yytext[yyleng - 1] == '=') {
+ /* use padding */
+ len = 4 * ((digest_len + 2) / 3);
+ } else {
+ /* no padding */
+ len = (4 * digest_len + 2) / 3;
+ }
+ if (yyleng == len) {
+ if (!fill(yytext, yyleng))
+ yyterminate();
+ BEGIN INITIAL;
+ LEXTRACE("DIGEST ");
+ LEXRETURN(DIGEST);
+ }
+ BEGIN INITIAL;
+ yyless(yyleng);
+ } /* base64 digest */
+
<INITIAL>^#include[[:blank:]]+.*\n {
char *path;
@@ -530,6 +567,7 @@ ALL {
}
<GOTDEFS>({PATH}|sudoedit) {
+ /* XXX - no way to specify digest for command */
/* no command args allowed for Defaults!/path */
if (!fill_cmnd(yytext, yyleng))
yyterminate();
@@ -537,6 +575,34 @@ ALL {
LEXRETURN(COMMAND);
}
+sha224 {
+ digest_len = SUDO_SHA224_DIGEST_LENGTH;
+ BEGIN WANTDIGEST;
+ LEXTRACE("SHA224 ");
+ LEXRETURN(SHA224);
+ }
+
+sha256 {
+ digest_len = SUDO_SHA256_DIGEST_LENGTH;
+ BEGIN WANTDIGEST;
+ LEXTRACE("SHA256 ");
+ LEXRETURN(SHA256);
+ }
+
+sha384 {
+ digest_len = SUDO_SHA384_DIGEST_LENGTH;
+ BEGIN WANTDIGEST;
+ LEXTRACE("SHA384 ");
+ LEXRETURN(SHA384);
+ }
+
+sha512 {
+ digest_len = SUDO_SHA512_DIGEST_LENGTH;
+ BEGIN WANTDIGEST;
+ LEXTRACE("SHA512 ");
+ LEXRETURN(SHA512);
+ }
+
sudoedit {
BEGIN GOTCMND;
LEXTRACE("COMMAND ");
diff -up sudo-1.8.6p7/plugins/sudoers/toke_util.c.digest-backport sudo-1.8.6p7/plugins/sudoers/toke_util.c
--- sudo-1.8.6p7/plugins/sudoers/toke_util.c.digest-backport 2013-02-25 20:42:45.000000000 +0100
+++ sudo-1.8.6p7/plugins/sudoers/toke_util.c 2015-07-06 11:42:33.135904696 +0200
@@ -57,51 +57,6 @@
static int arg_len = 0;
static int arg_size = 0;
-static int
-hexchar(const char *s)
-{
- int i, result = 0;
- debug_decl(hexchar, SUDO_DEBUG_PARSER)
-
- s += 2; /* skip \\x */
- for (i = 0; i < 2; i++) {
- switch (*s) {
- case 'A':
- case 'a':
- result += 10;
- break;
- case 'B':
- case 'b':
- result += 11;
- break;
- case 'C':
- case 'c':
- result += 12;
- break;
- case 'D':
- case 'd':
- result += 13;
- break;
- case 'E':
- case 'e':
- result += 14;
- break;
- case 'F':
- case 'f':
- result += 15;
- break;
- default:
- result += *s - '0';
- break;
- }
- if (i == 0) {
- result *= 16;
- s++;
- }
- }
- debug_return_int(result);
-}
-
bool
fill_txt(const char *src, int len, int olen)
{
@@ -122,7 +77,7 @@ fill_txt(const char *src, int len, int o
if (src[1] == 'x' && len >= 3 &&
isxdigit((unsigned char) src[2]) &&
isxdigit((unsigned char) src[3])) {
- *dst++ = hexchar(src);
+ *dst++ = hexchar(src + 2);
src += 4;
len -= 3;
} else {