From 86d2173937535a7681957cded774202e4150ab90 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 10 Feb 2022 18:26:24 -0700 Subject: [PATCH] Add support for matching command and args using regular expressions. Either the command, its arguments or both may be (separate) regular expressions. --- MANIFEST | 13 + configure | 18 + configure.ac | 17 + docs/sudoers.man.in | 149 +- docs/sudoers.mdoc.in | 143 +- examples/sudoers | 10 +- plugins/sudoers/fmtsudoers.c | 19 +- plugins/sudoers/match_command.c | 105 +- plugins/sudoers/parse.h | 6 +- plugins/sudoers/regress/sudoers/test28.in | 33 + .../sudoers/regress/sudoers/test28.json.ok | 186 + .../sudoers/regress/sudoers/test28.ldif.ok | 110 + .../regress/sudoers/test28.ldif2sudo.ok | 10 + plugins/sudoers/regress/sudoers/test28.out.ok | 12 + .../sudoers/regress/sudoers/test28.toke.ok | 29 + plugins/sudoers/regress/sudoers/test29.in | 11 + .../sudoers/regress/sudoers/test29.json.ok | 0 .../sudoers/regress/sudoers/test29.ldif.ok | 0 plugins/sudoers/regress/sudoers/test29.out.ok | 1 + .../sudoers/regress/sudoers/test29.toke.ok | 11 + .../sudoers/regress/testsudoers/test18.out.ok | 60 + plugins/sudoers/regress/testsudoers/test18.sh | 40 + plugins/sudoers/toke.c | 5195 +++++++++-------- plugins/sudoers/toke.h | 1 + plugins/sudoers/toke.l | 85 +- plugins/sudoers/toke_util.c | 81 +- 26 files changed, 3854 insertions(+), 2491 deletions(-) create mode 100644 plugins/sudoers/regress/sudoers/test28.in create mode 100644 plugins/sudoers/regress/sudoers/test28.json.ok create mode 100644 plugins/sudoers/regress/sudoers/test28.ldif.ok create mode 100644 plugins/sudoers/regress/sudoers/test28.ldif2sudo.ok create mode 100644 plugins/sudoers/regress/sudoers/test28.out.ok create mode 100644 plugins/sudoers/regress/sudoers/test28.toke.ok create mode 100644 plugins/sudoers/regress/sudoers/test29.in create mode 100644 plugins/sudoers/regress/sudoers/test29.json.ok create mode 100644 plugins/sudoers/regress/sudoers/test29.ldif.ok create mode 100644 plugins/sudoers/regress/sudoers/test29.out.ok create mode 100644 plugins/sudoers/regress/sudoers/test29.toke.ok create mode 100644 plugins/sudoers/regress/testsudoers/test18.out.ok create mode 100755 plugins/sudoers/regress/testsudoers/test18.sh diff --git a/MANIFEST b/MANIFEST index 442ca8f3d..a053265cb 100644 --- a/MANIFEST +++ b/MANIFEST @@ -921,6 +921,17 @@ plugins/sudoers/regress/sudoers/test27.ldif.ok plugins/sudoers/regress/sudoers/test27.ldif2sudo.ok plugins/sudoers/regress/sudoers/test27.out.ok plugins/sudoers/regress/sudoers/test27.toke.ok +plugins/sudoers/regress/sudoers/test28.in +plugins/sudoers/regress/sudoers/test28.json.ok +plugins/sudoers/regress/sudoers/test28.ldif.ok +plugins/sudoers/regress/sudoers/test28.ldif2sudo.ok +plugins/sudoers/regress/sudoers/test28.out.ok +plugins/sudoers/regress/sudoers/test28.toke.ok +plugins/sudoers/regress/sudoers/test29.in +plugins/sudoers/regress/sudoers/test29.json.ok +plugins/sudoers/regress/sudoers/test29.ldif.ok +plugins/sudoers/regress/sudoers/test29.out.ok +plugins/sudoers/regress/sudoers/test29.toke.ok plugins/sudoers/regress/sudoers/test3.in plugins/sudoers/regress/sudoers/test3.json.ok plugins/sudoers/regress/sudoers/test3.ldif.ok @@ -977,6 +988,8 @@ plugins/sudoers/regress/testsudoers/test16.out.ok plugins/sudoers/regress/testsudoers/test16.sh plugins/sudoers/regress/testsudoers/test17.out.ok plugins/sudoers/regress/testsudoers/test17.sh +plugins/sudoers/regress/testsudoers/test18.out.ok +plugins/sudoers/regress/testsudoers/test18.sh plugins/sudoers/regress/testsudoers/test2.inc plugins/sudoers/regress/testsudoers/test2.out.ok plugins/sudoers/regress/testsudoers/test2.sh diff --git a/configure b/configure index 865913235..7a6154045 100755 --- a/configure +++ b/configure @@ -830,6 +830,7 @@ NOEXECFILE intercept_file INTERCEPTDIR INTERCEPTFILE +mansectmisc mansectform mansectsu devdir @@ -3567,6 +3568,7 @@ ac_config_headers="$ac_config_headers config.h pathnames.h" + # @@ -5209,6 +5211,7 @@ printf "%s\n" "$as_me: adding CSOps standard options" >&6;} with_env_editor=yes : ${mansectsu='8'} : ${mansectform='5'} + : ${mansectmisc='7'} ;; no) ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ignoring unknown argument to --with-csops: $with_csops" >&5 @@ -17094,6 +17097,7 @@ case "$host" in fi : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} test -z "$with_pam" && AUTH_EXCL_DEF="PAM" for ac_func in priv_set @@ -17339,6 +17343,7 @@ printf "%s\n" "#define HAVE_DECL_SETAUTHDB $ac_have_decl" >>confdefs.h : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} # HP-UX does not clear /var/run so we need to do it INIT_SCRIPT=hpux.sh @@ -17376,6 +17381,7 @@ fi fi : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} # HP-UX does not clear /var/run so we need to do it INIT_SCRIPT=hpux.sh @@ -17587,6 +17593,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext RTLD_PRELOAD_DEFAULT="DEFAULT" : ${mansectsu='8'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-*-irix*) printf "%s\n" "#define _BSD_TYPES 1" >>confdefs.h @@ -17646,6 +17653,7 @@ fi RTLD_PRELOAD_DEFAULT="DEFAULT" : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-*-linux*|*-*-k*bsd*-gnu) shadow_funcs="getspnam" @@ -17689,18 +17697,21 @@ fi shadow_libs="-lprot -lx" : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; m88k-motorola-sysv*) # motorolla's cc (a variant of gcc) does -O but not -O2 CFLAGS=`echo $CFLAGS | sed 's/-O2/-O/g'` : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-sequent-sysv*) shadow_funcs="getspnam" shadow_libs="-lsec" : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-ncr-sysv4*|*-ncr-sysvr4*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strcasecmp in -lc89" >&5 @@ -17745,11 +17756,13 @@ fi : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-ccur-sysv4*|*-ccur-sysvr4*) LIBS="${LIBS} -lgen" : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-*-bsdi*) SKIP_SETREUID=yes @@ -18022,10 +18035,12 @@ fi *-*-*sysv4*) : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-*-*sco3.2*) # SCO OpenServer 5 : ${mansectsu='1'} : ${mansectform='4'} + : ${mansectmisc='5'} shadow_funcs="getprpwnam" shadow_libs="-lprot" ;; @@ -18033,6 +18048,7 @@ fi *-*-*sysv5*) : ${mansectsu='1'} : ${mansectform='4'} + : ${mansectmisc='5'} case "$host" in *-*-sysv5SCO_SV*) # SCO OpenServer 6.x shadow_funcs="getprpwnam" @@ -18046,6 +18062,7 @@ fi *-*-sysv*) : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; esac @@ -18122,6 +18139,7 @@ fi : ${mansectsu='8'} : ${mansectform='5'} +: ${mansectmisc='7'} if test -n "$with_libpath"; then for i in ${with_libpath}; do diff --git a/configure.ac b/configure.ac index 9efcce526..92381cb07 100644 --- a/configure.ac +++ b/configure.ac @@ -70,6 +70,7 @@ AC_SUBST([SEMAN]) AC_SUBST([devdir]) AC_SUBST([mansectsu]) AC_SUBST([mansectform]) +AC_SUBST([mansectmisc]) AC_SUBST([INTERCEPTFILE]) AC_SUBST([INTERCEPTDIR]) AC_SUBST([intercept_file]) @@ -495,6 +496,7 @@ AC_ARG_WITH(csops, [AS_HELP_STRING([--with-csops], [add CSOps standard options]) with_env_editor=yes : ${mansectsu='8'} : ${mansectform='5'} + : ${mansectmisc='7'} ;; no) ;; *) AC_MSG_WARN([ignoring unknown argument to --with-csops: $with_csops]) @@ -1790,6 +1792,7 @@ case "$host" in fi : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} test -z "$with_pam" && AUTH_EXCL_DEF="PAM" AC_CHECK_FUNCS([priv_set], [PSMAN=1]) ;; @@ -1884,6 +1887,7 @@ case "$host" in : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} # HP-UX does not clear /var/run so we need to do it INIT_SCRIPT=hpux.sh @@ -1908,6 +1912,7 @@ case "$host" in fi : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} # HP-UX does not clear /var/run so we need to do it INIT_SCRIPT=hpux.sh @@ -2022,6 +2027,7 @@ case "$host" in RTLD_PRELOAD_DEFAULT="DEFAULT" : ${mansectsu='8'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-*-irix*) AC_DEFINE([_BSD_TYPES]) @@ -2041,6 +2047,7 @@ case "$host" in RTLD_PRELOAD_DEFAULT="DEFAULT" : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-*-linux*|*-*-k*bsd*-gnu) shadow_funcs="getspnam" @@ -2069,28 +2076,33 @@ case "$host" in shadow_libs="-lprot -lx" : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; m88k-motorola-sysv*) # motorolla's cc (a variant of gcc) does -O but not -O2 CFLAGS=`echo $CFLAGS | sed 's/-O2/-O/g'` : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-sequent-sysv*) shadow_funcs="getspnam" shadow_libs="-lsec" : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-ncr-sysv4*|*-ncr-sysvr4*) AC_CHECK_LIB(c89, strcasecmp, [LIBS="${LIBS} -lc89"]) : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-ccur-sysv4*|*-ccur-sysvr4*) LIBS="${LIBS} -lgen" : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-*-bsdi*) SKIP_SETREUID=yes @@ -2239,10 +2251,12 @@ case "$host" in *-*-*sysv4*) : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; *-*-*sco3.2*) # SCO OpenServer 5 : ${mansectsu='1'} : ${mansectform='4'} + : ${mansectmisc='5'} shadow_funcs="getprpwnam" shadow_libs="-lprot" ;; @@ -2250,6 +2264,7 @@ case "$host" in *-*-*sysv5*) : ${mansectsu='1'} : ${mansectform='4'} + : ${mansectmisc='5'} case "$host" in *-*-sysv5SCO_SV*) # SCO OpenServer 6.x shadow_funcs="getprpwnam" @@ -2263,6 +2278,7 @@ case "$host" in *-*-sysv*) : ${mansectsu='1m'} : ${mansectform='4'} + : ${mansectmisc='5'} ;; esac @@ -2339,6 +2355,7 @@ dnl Use BSD-style man sections by default dnl : ${mansectsu='8'} : ${mansectform='5'} +: ${mansectmisc='7'} dnl dnl Add in any libpaths or libraries specified via configure diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index fb2fbfc0e..a63061d60 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -1008,13 +1008,20 @@ Digest_List ::= Digest_Spec | Cmnd_List ::= Cmnd | Cmnd ',' Cmnd_List -command name ::= file name | - file name args | - file name '""' +command name ::= regex | + file name -Edit_Spec ::= "sudoedit" file name+ +command ::= command name | + command name args | + command name regex | + command name '""' | + ALL -Cmnd ::= Digest_List? '!'* command name | +Edit_Spec ::= "sudoedit" file name+ | + "sudoedit" regex | + "sudoedit" + +Cmnd ::= Digest_List? '!'* command | '!'* directory | '!'* Edit_Spec | '!'* Cmnd_Alias @@ -1023,21 +1030,18 @@ Cmnd ::= Digest_List? '!'* command name | .PP A \fRCmnd_List\fR -is a list of one or more command names, directories, and other aliases. -A command name is a fully qualified file name which may include +is a list of one or more commands, directories, or aliases. +A command is a fully qualified file name, which may include shell-style wildcards (see the \fIWildcards\fR +section below), +or a regular expression that starts with +\(oq^\(cq +and ends with +\(oq$\(cq +(see the +\fIRegular expressions\fR section below). -A simple file name allows the user to run the command with any -arguments they wish. -However, you may also specify command line arguments (including -wildcards). -Alternately, you can specify -\fR\&""\fR -to indicate that the command -may only be run -\fBwithout\fR -command line arguments. A directory is a fully qualified path name ending in a \(oq/\(cq. @@ -1045,21 +1049,49 @@ When you specify a directory in a \fRCmnd_List\fR, the user will be able to run any file within that directory (but not in any sub-directories therein). +If no command line arguments are specified, the user may run the +command with any arguments they choose. +Command line arguments can include wildcards or be a regular +expression that starts with +\(oq^\(cq +and ends with +\(oq$\(cq. +If the command line arguments consist of +\fR\&""\fR, +the command may only be run with +\fIno\fR +arguments. .PP If a \fRCmnd\fR -has associated command line arguments, then the arguments +has associated command line arguments, the arguments in the \fRCmnd\fR -must match exactly those given by the user on the command line -(or match the wildcards if there are any). -Note that the following characters must be escaped with a +must match those given by the user on the command line. +If the arguments in a +\fRCmnd\fR +begin with the +\(oq^\(cq +character, they will be interpreted as a regular expression +and matched accordingly. +Otherwise, shell-style wildcards are used when matching. +Unless a regular expression is specified, the following characters must +be escaped with a \(oq\e\(cq if they are used in command arguments: \(oq,\&\(cq, \(oq:\&\(cq, \(oq=\&\(cq, \(oq\e\(cq. +To prevent arguments in a +\fRCmnd\fR +that begin with a +\(oq^\(cq +character from being interpreted as a regular expression, the +\(oq^\(cq +must be escaped with a +\(oq\e\(cq. +.PP The built-in command \(lq\fRsudoedit\fR\(rq is used to permit a user to run @@ -1076,7 +1108,7 @@ is a command built into itself and must be specified in the \fIsudoers\fR file -\fBwithout\fR +\fIwithout\fR a leading path. If a leading path is present, for example \fI/usr/bin/sudoedit\fR, @@ -1088,7 +1120,7 @@ is treated as an error by \fBvisudo\fR. .PP A -\fRcommand name\fR +\fRcommand\fR may be preceded by a \fRDigest_List\fR, a comma-separated list of one or more @@ -1206,6 +1238,8 @@ This is due to there being two levels of escaping, one in the \fIsudoers\fR parser itself and another when command line arguments are matched by the fnmatch(3) +or +regexec(3) function. .PP Lists have two additional assignment operators, @@ -2101,6 +2135,75 @@ Command line arguments to the built-in command should always be path names, so a forward slash (\(oq/\(cq) will not be matched by a wildcard. +.SS "Regular expressions" +Starting with version 1.9.10, it is possible to use +regular expressions for path names and command line arguments. +Regular expressions are more expressive than shell-style +\fIwildcards\fR +and are usually safer because they provide a greater degree of +control when matching. +The type of regular expressions supported by +\fBsudoers\fR +are POSIX extended regular expressions, similar to those used by the +egrep(1) +utility. +They are usually documented in the +regex(@mansectmisc@) +or +re_format(@mansectmisc@) +manual, depending on the system. +As an extension, if the regular expression begins with +\(lq(?i)\(rq, +it will be matched in a case-insensitive manner. +.PP +In +\fIsudoers\fR, +regular expressions must start with a +\(oq^\(cq +character and end with a +\(oq$\(cq. +This makes it explicit what is, or is not, a regular expression. +Either the path name, the command line arguments or both may +be regular expressions. +Because the path name and arguments are matched separately, it is +even possible to use wildcards for the path name and regular +expressions for the arguments. +It is not possible to use a single regular expression to match +both the command and its arguments. +.PP +There is no need to escape +\fIsudoers\fR +special characters in a regular expression other than the pound sign +(\(oq#\(cq). +.PP +In the following example, user +\fBjohn\fR +can run the passwd, chsh and chfn commands as root on any host but +is not allowed to change root's password database entry. +This kind of rule is impossible to express safely using wildcards. +.nf +.sp +.RS 4n +john ALL = ^/usr/bin/(passwd|chsh|chfn)$ ^[a-zA-Z0-9_]+$,\e + !^/usr/bin/(passwd|chsh|chfn)$ root +.RE +.fi +.PP +It is also possible to use a regular expression in conjunction with +\fBsudoedit\fR +rules. +The following rule would give user bob the ability to edit the +\fI/etc/motd\fR, +\fI/etc/issue\fR, +and +\fI/etc/hosts\fR +files only. +.nf +.sp +.RS 4n +bob ALL = sudoedit ^/etc/(motd|issue|hosts)$ +.RE +.fi .SS "Including other files from within sudoers" It is possible to include other \fIsudoers\fR diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index ebf76cb43..c0433eecd 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -968,13 +968,20 @@ Digest_List ::= Digest_Spec | Cmnd_List ::= Cmnd | Cmnd ',' Cmnd_List -command name ::= file name | - file name args | - file name '""' +command name ::= regex | + file name -Edit_Spec ::= "sudoedit" file name+ +command ::= command name | + command name args | + command name regex | + command name '""' | + ALL -Cmnd ::= Digest_List? '!'* command name | +Edit_Spec ::= "sudoedit" file name+ | + "sudoedit" regex | + "sudoedit" + +Cmnd ::= Digest_List? '!'* command | '!'* directory | '!'* Edit_Spec | '!'* Cmnd_Alias @@ -982,21 +989,18 @@ Cmnd ::= Digest_List? '!'* command name | .Pp A .Li Cmnd_List -is a list of one or more command names, directories, and other aliases. -A command name is a fully qualified file name which may include +is a list of one or more commands, directories, or aliases. +A command is a fully qualified file name, which may include shell-style wildcards (see the .Sx Wildcards +section below), +or a regular expression that starts with +.Ql ^ +and ends with +.Ql $ +(see the +.Sx Regular expressions section below). -A simple file name allows the user to run the command with any -arguments they wish. -However, you may also specify command line arguments (including -wildcards). -Alternately, you can specify -.Li \&"" -to indicate that the command -may only be run -.Sy without -command line arguments. A directory is a fully qualified path name ending in a .Ql / . @@ -1004,21 +1008,49 @@ When you specify a directory in a .Li Cmnd_List , the user will be able to run any file within that directory (but not in any sub-directories therein). +If no command line arguments are specified, the user may run the +command with any arguments they choose. +Command line arguments can include wildcards or be a regular +expression that starts with +.Ql ^ +and ends with +.Ql $ . +If the command line arguments consist of +.Li \&"" , +the command may only be run with +.Em no +arguments. .Pp If a .Li Cmnd -has associated command line arguments, then the arguments +has associated command line arguments, the arguments in the .Li Cmnd -must match exactly those given by the user on the command line -(or match the wildcards if there are any). -Note that the following characters must be escaped with a +must match those given by the user on the command line. +If the arguments in a +.Li Cmnd +begin with the +.Ql ^ +character, they will be interpreted as a regular expression +and matched accordingly. +Otherwise, shell-style wildcards are used when matching. +Unless a regular expression is specified, the following characters must +be escaped with a .Ql \e if they are used in command arguments: .Ql ,\& , .Ql :\& , .Ql =\& , .Ql \e . +To prevent arguments in a +.Li Cmnd +that begin with a +.Ql ^ +character from being interpreted as a regular expression, the +.Ql ^ +must be escaped with a +.Ql \e . +.Pp The built-in command .Dq Li sudoedit is used to permit a user to run @@ -1035,7 +1067,7 @@ is a command built into itself and must be specified in the .Em sudoers file -.Sy without +.Em without a leading path. If a leading path is present, for example .Pa /usr/bin/sudoedit , @@ -1047,7 +1079,7 @@ is treated as an error by .Nm visudo . .Pp A -.Li command name +.Li command may be preceded by a .Li Digest_List , a comma-separated list of one or more @@ -1156,6 +1188,8 @@ This is due to there being two levels of escaping, one in the .Em sudoers parser itself and another when command line arguments are matched by the .Xr fnmatch 3 +or +.Xr regexec 3 function. .Pp Lists have two additional assignment operators, @@ -1979,6 +2013,69 @@ built-in command should always be path names, so a forward slash .Pq Ql / will not be matched by a wildcard. .El +.Ss Regular expressions +Starting with version 1.9.10, it is possible to use +regular expressions for path names and command line arguments. +Regular expressions are more expressive than shell-style +.Em wildcards +and are usually safer because they provide a greater degree of +control when matching. +The type of regular expressions supported by +.Nm +are POSIX extended regular expressions, similar to those used by the +.Xr egrep 1 +utility. +They are usually documented in the +.Xr regex @mansectmisc@ +or +.Xr re_format @mansectmisc@ +manual, depending on the system. +As an extension, if the regular expression begins with +.Dq (?i) , +it will be matched in a case-insensitive manner. +.Pp +In +.Em sudoers , +regular expressions must start with a +.Ql ^ +character and end with a +.Ql $ . +This makes it explicit what is, or is not, a regular expression. +Either the path name, the command line arguments or both may +be regular expressions. +Because the path name and arguments are matched separately, it is +even possible to use wildcards for the path name and regular +expressions for the arguments. +It is not possible to use a single regular expression to match +both the command and its arguments. +.Pp +There is no need to escape +.Em sudoers +special characters in a regular expression other than the pound sign +.Pq Ql # . +.Pp +In the following example, user +.Sy john +can run the passwd, chsh and chfn commands as root on any host but +is not allowed to change root's password database entry. +This kind of rule is impossible to express safely using wildcards. +.Bd -literal -offset 4n +john ALL = ^/usr/bin/(passwd|chsh|chfn)$ ^[a-zA-Z0-9_]+$,\e + !^/usr/bin/(passwd|chsh|chfn)$ root +.Ed +.Pp +It is also possible to use a regular expression in conjunction with +.Nm sudoedit +rules. +The following rule would give user bob the ability to edit the +.Pa /etc/motd , +.Pa /etc/issue , +and +.Pa /etc/hosts +files only. +.Bd -literal -offset 4n +bob ALL = sudoedit ^/etc/(motd|issue|hosts)$ +.Ed .Ss Including other files from within sudoers It is possible to include other .Em sudoers diff --git a/examples/sudoers b/examples/sudoers index e697168ff..870ce9167 100644 --- a/examples/sudoers +++ b/examples/sudoers @@ -69,9 +69,9 @@ root ALL = (ALL:ALL) ALL %wheel ALL = (ALL:ALL) ALL # full time sysadmins can run anything on any machine without a password -FULLTIMERS ALL = NOPASSWD: ALL +FULLTIMERS ALL = (ALL:ALL) NOPASSWD: ALL -# part time sysadmins may run anything but need a password +# part time sysadmins may run anything as root but need a password PARTTIMERS ALL = ALL # jack may run anything on machines in CSNETS @@ -88,7 +88,7 @@ operator ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\ joe ALL = /usr/bin/su operator # pete may change passwords for anyone but root on the hp snakes -pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd *root* +pete HPPA = /usr/bin/passwd ^[a-zA-Z0-9_]+$, !/usr/bin/passwd root # bob may run anything on the sparc and sgi machines as any user # listed in the Runas_Alias "OP" (ie: root and operator) @@ -104,8 +104,8 @@ jim +biglab = ALL # fred can run commands as oracle or sybase without a password fred ALL = (DB) NOPASSWD: ALL -# on the alphas, john may su to anyone but root and flags are not allowed -john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root* +# on the alphas, john may su to anyone except root, no flags are allowed. +john ALPHA = /usr/bin/su ^[a-zA-Z0-9_]+$, !/usr/bin/su root # jen can run anything on all machines except the ones # in the "SERVERS" Host_Alias diff --git a/plugins/sudoers/fmtsudoers.c b/plugins/sudoers/fmtsudoers.c index 7daef40a8..e786f6636 100644 --- a/plugins/sudoers/fmtsudoers.c +++ b/plugins/sudoers/fmtsudoers.c @@ -68,11 +68,22 @@ sudoers_format_member_int(struct sudo_lbuf *lbuf, } if (negated) sudo_lbuf_append(lbuf, "!"); - sudo_lbuf_append_quoted(lbuf, SUDOERS_QUOTED_CMD, "%s", - c->cmnd ? c->cmnd : "ALL"); - if (c->args) { + if (c->cmnd == NULL || c->cmnd[0] == '^') { + /* No additional quoting of characters inside a regex. */ + sudo_lbuf_append(lbuf, "%s", c->cmnd ? c->cmnd : "ALL"); + } else { + sudo_lbuf_append_quoted(lbuf, SUDOERS_QUOTED_CMD, "%s", + c->cmnd); + } + if (c->args != NULL) { sudo_lbuf_append(lbuf, " "); - sudo_lbuf_append_quoted(lbuf, SUDOERS_QUOTED_ARG, "%s", c->args); + if (c->args[0] == '^') { + /* No additional quoting of characters inside a regex. */ + sudo_lbuf_append(lbuf, "%s", c->args); + } else { + sudo_lbuf_append_quoted(lbuf, SUDOERS_QUOTED_ARG, "%s", + c->args); + } } break; case USERGROUP: diff --git a/plugins/sudoers/match_command.c b/plugins/sudoers/match_command.c index 6d8b3a65c..e202c23ab 100644 --- a/plugins/sudoers/match_command.c +++ b/plugins/sudoers/match_command.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1996, 1998-2005, 2007-2019 + * Copyright (c) 1996, 1998-2005, 2007-2022 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -48,6 +48,7 @@ #else # include "compat/fnmatch.h" #endif /* HAVE_FNMATCH */ +#include #include "sudoers.h" #include @@ -56,9 +57,47 @@ # define O_EXEC O_PATH #endif +static bool +regex_matches(const char *pattern, const char *str) +{ + int errcode, cflags = REG_EXTENDED|REG_NOSUB; + char *copy = NULL; + regex_t re; + debug_decl(regex_matches, SUDOERS_DEBUG_MATCH); + + /* Check for (?i) to enable case-insensitive matching. */ + if (strncmp(pattern, "^(?i)", 5) == 0) { + cflags |= REG_ICASE; + copy = strdup(pattern + 4); + if (copy == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } + copy[0] = '^'; + pattern = copy; + } + + errcode = regcomp(&re, pattern, cflags); + if (errcode == 0) { + errcode = regexec(&re, str, 0, NULL, 0); + regfree(&re); + } else { + char errbuf[1024]; + + regerror(errcode, &re, errbuf, sizeof(errbuf)); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to compile regular expression \"%s\": %s", + pattern, errbuf); + } + free(copy); + + debug_return_bool(errcode == 0); +} + static bool command_args_match(const char *sudoers_cmnd, const char *sudoers_args) { + const char *args = user_args ? user_args : ""; int flags = 0; debug_decl(command_args_match, SUDOERS_DEBUG_MATCH); @@ -71,14 +110,18 @@ command_args_match(const char *sudoers_cmnd, const char *sudoers_args) /* * If args are specified in sudoers, they must match the user args. - * If running as sudoedit, all args are assumed to be paths. + * Args are matched either as a regular expression or glob pattern. */ + if (sudoers_args[0] == '^') { + size_t len = strlen(sudoers_args); + if (len > 0 && sudoers_args[len - 1] == '$') + debug_return_bool(regex_matches(sudoers_args, args)); + } + + /* If running as sudoedit, all args are assumed to be paths. */ if (strcmp(sudoers_cmnd, "sudoedit") == 0) flags = FNM_PATHNAME; - if (fnmatch(sudoers_args, user_args ? user_args : "", flags) == 0) - debug_return_bool(true); - - debug_return_bool(false); + debug_return_bool(fnmatch(sudoers_args, args, flags) == 0); } #ifndef SUDOERS_NAME_MATCH @@ -416,6 +459,49 @@ bad: debug_return_bool(false); } +static bool +command_matches_regex(const char *sudoers_cmnd, const char *sudoers_args, + const char *runchroot, bool intercepted, + const struct command_digest_list *digests) +{ + int fd = -1; + debug_decl(command_matches_regex, SUDOERS_DEBUG_MATCH); + + /* + * Return true if sudoers_cmnd regex matches user_cmnd AND + * a) there are no args in sudoers OR + * b) there are no args on command line and none required by sudoers OR + * c) there are args in sudoers and on command line and they match + * else return false. + * + * Neither sudoers_cmnd nor user_cmnd are relative to runchroot. + */ + if (!regex_matches(sudoers_cmnd, user_cmnd)) + debug_return_bool(false); + + if (command_args_match(sudoers_cmnd, sudoers_args)) { + /* Open the file for fdexec or for digest matching. */ + if (!open_cmnd(user_cmnd, runchroot, digests, &fd)) + goto bad; +#ifndef SUDOERS_NAME_MATCH + if (!do_stat(fd, user_cmnd, runchroot, intercepted, NULL)) + goto bad; +#endif + /* Check digest of user_cmnd since sudoers_cmnd is a pattern. */ + if (!digest_matches(fd, user_cmnd, runchroot, digests)) + goto bad; + set_cmnd_fd(fd); + + /* No need to set safe_cmnd since user_cmnd matches sudoers_cmnd */ + debug_return_bool(true); +bad: + if (fd != -1) + close(fd); + debug_return_bool(false); + } + debug_return_bool(false); +} + #ifndef SUDOERS_NAME_MATCH static bool command_matches_glob(const char *sudoers_cmnd, const char *sudoers_args, @@ -724,6 +810,13 @@ command_matches(const char *sudoers_cmnd, const char *sudoers_args, goto done; } + /* Check for regular expressions first. */ + if (sudoers_cmnd[0] == '^') { + rc = command_matches_regex(sudoers_cmnd, sudoers_args, runchroot, + intercepted, digests); + goto done; + } + /* Check for pseudo-commands */ if (sudoers_cmnd[0] != '/') { /* diff --git a/plugins/sudoers/parse.h b/plugins/sudoers/parse.h index 045ff1b34..0375b54be 100644 --- a/plugins/sudoers/parse.h +++ b/plugins/sudoers/parse.h @@ -24,9 +24,9 @@ #include "sudo_queue.h" /* Characters that must be quoted in sudoers. */ -#define SUDOERS_QUOTED ":\\,=#\"" -#define SUDOERS_QUOTED_CMD ":\\,= \t#" -#define SUDOERS_QUOTED_ARG ":\\,=#" +#define SUDOERS_QUOTED ":,=#\"" +#define SUDOERS_QUOTED_CMD ":,= \t#" +#define SUDOERS_QUOTED_ARG ":,=#" /* Returns true if string 's' contains meta characters. */ #define has_meta(s) (strpbrk(s, "\\?*[]") != NULL) diff --git a/plugins/sudoers/regress/sudoers/test28.in b/plugins/sudoers/regress/sudoers/test28.in new file mode 100644 index 000000000..645dccdfd --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test28.in @@ -0,0 +1,33 @@ +# Test simple command with regex args +user ALL = /bin/ls ^/etc/(hosts|motd|issue)$ + +# Test wildcard command with regex args +user ALL = /usr/bin/c* ^/etc/(hosts|motd|issue)$ + +# Test regex command with no args +user ALL = ^/usr/bin/(who|w|id|whoami)$ + +# Test regex command with empty args +user ALL = ^/usr/bin/(who|w|id|whoami)$ "" + +# Test regex command with simple args +user ALL = ^/usr/bin/(who|w|id|whoami)$ root + +# Test regex command with wildcard args +user ALL = ^/usr/bin/(who|w|id|whoami)$ -* + +# Test regex command with regex args +user ALL = ^/usr/bin/(who|w|id|whoami)$ ^(-[ahi] ?)+$ + +# Test sudoedit with regex args +user ALL = sudoedit ^/etc/(hosts|motd|issue)$ + +# Test regex command with escapted '$', no args +user ALL = ^/usr/bin/\$tree$ + +# Combined entry +user host1 = /bin/ls ^/etc/(hosts|motd|issue)$, \ + /usr/bin/c* ^/etc/(hosts|motd|issue)$ : \ + host2 = ^/usr/bin/(who|w|id|whoami)$ "", \ + ^/usr/bin/(who|w|id|whoami)$ root : \ + host3 = /bin/echo ^\$foo$ diff --git a/plugins/sudoers/regress/sudoers/test28.json.ok b/plugins/sudoers/regress/sudoers/test28.json.ok new file mode 100644 index 000000000..9706db4f4 --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test28.json.ok @@ -0,0 +1,186 @@ +{ + "User_Specs": [ + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/bin/ls ^/etc/(hosts|motd|issue)$" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/usr/bin/c* ^/etc/(hosts|motd|issue)$" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "^/usr/bin/(who|w|id|whoami)$" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "^/usr/bin/(who|w|id|whoami)$ \"\"" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "^/usr/bin/(who|w|id|whoami)$ root" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "^/usr/bin/(who|w|id|whoami)$ -*" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "^/usr/bin/(who|w|id|whoami)$ ^(-[ahi] ?)+$" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "sudoedit ^/etc/(hosts|motd|issue)$" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "^/usr/bin/\\$tree$" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "host1" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/bin/ls ^/etc/(hosts|motd|issue)$" }, + { "command": "/usr/bin/c* ^/etc/(hosts|motd|issue)$" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "host2" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "^/usr/bin/(who|w|id|whoami)$ \"\"" }, + { "command": "^/usr/bin/(who|w|id|whoami)$ root" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostname": "host3" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/bin/echo ^\\$foo$" } + ] + } + ] + } + ] +} diff --git a/plugins/sudoers/regress/sudoers/test28.ldif.ok b/plugins/sudoers/regress/sudoers/test28.ldif.ok new file mode 100644 index 000000000..d3318a4f3 --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test28.ldif.ok @@ -0,0 +1,110 @@ +dn: cn=user,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user +sudoUser: user +sudoHost: ALL +sudoCommand: /bin/ls ^/etc/(hosts|motd|issue)$ +sudoOrder: 1 + +dn: cn=user_1,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user_1 +sudoUser: user +sudoHost: ALL +sudoCommand: /usr/bin/c* ^/etc/(hosts|motd|issue)$ +sudoOrder: 2 + +dn: cn=user_2,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user_2 +sudoUser: user +sudoHost: ALL +sudoCommand: ^/usr/bin/(who|w|id|whoami)$ +sudoOrder: 3 + +dn: cn=user_3,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user_3 +sudoUser: user +sudoHost: ALL +sudoCommand: ^/usr/bin/(who|w|id|whoami)$ "" +sudoOrder: 4 + +dn: cn=user_4,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user_4 +sudoUser: user +sudoHost: ALL +sudoCommand: ^/usr/bin/(who|w|id|whoami)$ root +sudoOrder: 5 + +dn: cn=user_5,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user_5 +sudoUser: user +sudoHost: ALL +sudoCommand: ^/usr/bin/(who|w|id|whoami)$ -* +sudoOrder: 6 + +dn: cn=user_6,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user_6 +sudoUser: user +sudoHost: ALL +sudoCommand: ^/usr/bin/(who|w|id|whoami)$ ^(-[ahi] ?)+$ +sudoOrder: 7 + +dn: cn=user_7,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user_7 +sudoUser: user +sudoHost: ALL +sudoCommand: sudoedit ^/etc/(hosts|motd|issue)$ +sudoOrder: 8 + +dn: cn=user_8,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user_8 +sudoUser: user +sudoHost: ALL +sudoCommand: ^/usr/bin/\$tree$ +sudoOrder: 9 + +dn: cn=user_9,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user_9 +sudoUser: user +sudoHost: host1 +sudoCommand: /bin/ls ^/etc/(hosts|motd|issue)$ +sudoCommand: /usr/bin/c* ^/etc/(hosts|motd|issue)$ +sudoOrder: 10 + +dn: cn=user_10,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user_10 +sudoUser: user +sudoHost: host2 +sudoCommand: ^/usr/bin/(who|w|id|whoami)$ "" +sudoCommand: ^/usr/bin/(who|w|id|whoami)$ root +sudoOrder: 11 + +dn: cn=user_11,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user_11 +sudoUser: user +sudoHost: host3 +sudoCommand: /bin/echo ^\$foo$ +sudoOrder: 12 + diff --git a/plugins/sudoers/regress/sudoers/test28.ldif2sudo.ok b/plugins/sudoers/regress/sudoers/test28.ldif2sudo.ok new file mode 100644 index 000000000..3128a4e9d --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test28.ldif2sudo.ok @@ -0,0 +1,10 @@ +# sudoRole user, user_1, user_2, user_3, user_4, user_5, user_6, user_7, +# user_8, user_9, user_10, user_11 +user ALL = /bin/ls ^/etc/(hosts|motd|issue)$, /usr/bin/c*\ + ^/etc/(hosts|motd|issue)$, ^/usr/bin/(who|w|id|whoami)$,\ + ^/usr/bin/(who|w|id|whoami)$ "", ^/usr/bin/(who|w|id|whoami)$ root,\ + ^/usr/bin/(who|w|id|whoami)$ -*, ^/usr/bin/(who|w|id|whoami)$ ^(-[ahi]\ + ?)+$, sudoedit ^/etc/(hosts|motd|issue)$, ^/usr/bin/\$tree$ : host1 =\ + /bin/ls ^/etc/(hosts|motd|issue)$, /usr/bin/c* ^/etc/(hosts|motd|issue)$ :\ + host2 = ^/usr/bin/(who|w|id|whoami)$ "", ^/usr/bin/(who|w|id|whoami)$ root\ + : host3 = /bin/echo ^\$foo$ diff --git a/plugins/sudoers/regress/sudoers/test28.out.ok b/plugins/sudoers/regress/sudoers/test28.out.ok new file mode 100644 index 000000000..399a67093 --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test28.out.ok @@ -0,0 +1,12 @@ +Parses OK + +user ALL = /bin/ls ^/etc/(hosts|motd|issue)$ +user ALL = /usr/bin/c* ^/etc/(hosts|motd|issue)$ +user ALL = ^/usr/bin/(who|w|id|whoami)$ +user ALL = ^/usr/bin/(who|w|id|whoami)$ "" +user ALL = ^/usr/bin/(who|w|id|whoami)$ root +user ALL = ^/usr/bin/(who|w|id|whoami)$ -* +user ALL = ^/usr/bin/(who|w|id|whoami)$ ^(-[ahi] ?)+$ +user ALL = sudoedit ^/etc/(hosts|motd|issue)$ +user ALL = ^/usr/bin/\$tree$ +user host1 = /bin/ls ^/etc/(hosts|motd|issue)$, /usr/bin/c* ^/etc/(hosts|motd|issue)$ : host2 = ^/usr/bin/(who|w|id|whoami)$ "", ^/usr/bin/(who|w|id|whoami)$ root : host3 = /bin/echo ^\$foo$ diff --git a/plugins/sudoers/regress/sudoers/test28.toke.ok b/plugins/sudoers/regress/sudoers/test28.toke.ok new file mode 100644 index 000000000..c51b24da4 --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test28.toke.ok @@ -0,0 +1,29 @@ +# +WORD(6) ALL = COMMAND ARG REGEX + +# +WORD(6) ALL = COMMAND ARG REGEX + +# +WORD(6) ALL = COMMAND + +# +WORD(6) ALL = COMMAND ARG + +# +WORD(6) ALL = COMMAND ARG + +# +WORD(6) ALL = COMMAND ARG + +# +WORD(6) ALL = COMMAND ARG REGEX + +# +WORD(6) ALL = COMMAND ARG REGEX + +# +WORD(6) ALL = COMMAND + +# +WORD(6) WORD(6) = COMMAND ARG REGEX , COMMAND ARG REGEX : WORD(6) = COMMAND ARG , COMMAND ARG : WORD(6) = COMMAND ARG REGEX QUOTEDCHAR diff --git a/plugins/sudoers/regress/sudoers/test29.in b/plugins/sudoers/regress/sudoers/test29.in new file mode 100644 index 000000000..34092cd56 --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test29.in @@ -0,0 +1,11 @@ +# Test lexer regex syntax errors +# We don't test regcomp() errors since regerror() strings are not +# standardized. + +user ALL = /bin/ls ^/etc/(hosts|motd|issue + +user ALL = ^/bin/ls + +user ALL = ^/bin/ls$ ^error + +user ALL = ^/bin/ls$ ^error # comment diff --git a/plugins/sudoers/regress/sudoers/test29.json.ok b/plugins/sudoers/regress/sudoers/test29.json.ok new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/sudoers/regress/sudoers/test29.ldif.ok b/plugins/sudoers/regress/sudoers/test29.ldif.ok new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/sudoers/regress/sudoers/test29.out.ok b/plugins/sudoers/regress/sudoers/test29.out.ok new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test29.out.ok @@ -0,0 +1 @@ + diff --git a/plugins/sudoers/regress/sudoers/test29.toke.ok b/plugins/sudoers/regress/sudoers/test29.toke.ok new file mode 100644 index 000000000..ce3a4a9d7 --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test29.toke.ok @@ -0,0 +1,11 @@ +# +# +# + +WORD(6) ALL = COMMAND ARG REGEX ERROR <*> + +WORD(6) ALL = WORD(6) <*> + +WORD(6) ALL = COMMAND ARG REGEX ERROR <*> + +WORD(6) ALL = COMMAND ARG REGEX ERROR <*> # diff --git a/plugins/sudoers/regress/testsudoers/test18.out.ok b/plugins/sudoers/regress/testsudoers/test18.out.ok new file mode 100644 index 000000000..be2dab49d --- /dev/null +++ b/plugins/sudoers/regress/testsudoers/test18.out.ok @@ -0,0 +1,60 @@ +Parses OK + +Entries for user root: + +ALL = ^/usr/bin/w$ ^-[abc]$ + host matched + runas matched + cmnd allowed + +Command allowed +Parses OK + +Entries for user root: + +ALL = ^/bin/cat$ /var/log/* + host matched + runas matched + cmnd allowed + +Command allowed +Parses OK + +Entries for user root: + +ALL = /bin/cat ^/var/log/[^/]+$ + host matched + runas matched + cmnd allowed + +Command allowed +Parses OK + +Entries for user root: + +ALL = /bin/*at ^/var/log/[^/]+$ + host matched + runas matched + cmnd allowed + +Command allowed +Parses OK + +Entries for user root: + +ALL = /usr/bin/grep \^foo$ + host matched + runas matched + cmnd allowed + +Command allowed +Parses OK + +Entries for user root: + +ALL = sudoedit ^/etc/(motd|issue|hosts)$ + host matched + runas matched + cmnd allowed + +Command allowed diff --git a/plugins/sudoers/regress/testsudoers/test18.sh b/plugins/sudoers/regress/testsudoers/test18.sh new file mode 100755 index 000000000..601edc65c --- /dev/null +++ b/plugins/sudoers/regress/testsudoers/test18.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# +# Test regular expressions +# + +: ${TESTSUDOERS=testsudoers} + +exec 2>&1 + +# Command and args: regex +$TESTSUDOERS root /usr/bin/w -a <<'EOF' +root ALL = ^/usr/bin/w$ ^-[abc]$ +EOF + +# Command: regex, args: wildcard +$TESTSUDOERS root /bin/cat /var/log/syslog <<'EOF' +root ALL = ^/bin/cat$ /var/log/* +EOF + +# Command: path, args: regex +$TESTSUDOERS root /bin/cat /var/log/authlog <<'EOF' +root ALL = /bin/cat ^/var/log/[^/]+$ +EOF + +# Command: wildcard, args: regex +$TESTSUDOERS root /bin/cat /var/log/mail <<'EOF' +root ALL = /bin/*at ^/var/log/[^/]+$ +EOF + +# Command: path, args: args start with escaped ^ +$TESTSUDOERS root /usr/bin/grep ^foo$ <<'EOF' +root ALL = /usr/bin/grep \^foo$ +EOF + +# Command: sudoedit, args: regex +$TESTSUDOERS root sudoedit /etc/motd <<'EOF' +root ALL = sudoedit ^/etc/(motd|issue|hosts)$ +EOF + +exit 0 diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index 61d57a594..6f229c711 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -393,8 +393,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 83 -#define YY_END_OF_BUFFER 84 +#define YY_NUM_RULES 88 +#define YY_END_OF_BUFFER 89 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -402,138 +402,143 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[1184] = +static yyconst flex_int16_t yy_accept[1226] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, - 79, 78, 82, 77, 68, 81, 42, 72, 73, 42, - 74, 69, 69, 69, 69, 76, 75, 82, 69, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 82, 69, 69, 79, 81, 59, 59, - 59, 59, 59, 2, 82, 1, 69, 59, 59, 59, - 69, 17, 16, 16, 17, 16, 16, 82, 81, 82, - 3, 9, 8, 9, 4, 9, 5, 82, 13, 13, - 13, 11, 12, 82, 19, 19, 18, 18, 18, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89, 74, 84, 83, 87, 82, 73, 86, 46, 77, + 78, 46, 79, 74, 74, 74, 74, 81, 80, 87, + 74, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 87, 74, 74, 74, 84, + 86, 63, 63, 63, 63, 63, 2, 87, 1, 74, + 63, 63, 63, 74, 74, 17, 16, 16, 17, 16, + 16, 87, 21, 21, 19, 19, 21, 19, 20, 87, + 86, 87, 3, 9, 8, 9, 4, 9, 5, 87, - 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, - 19, 18, 19, 19, 70, 70, 71, 70, 66, 66, - 66, 66, 66, 66, 66, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 82, 66, 66, 69, - 0, 79, 78, 77, 81, 81, 0, 0, 69, 44, - 0, 42, 0, 43, 0, 67, 67, 0, 69, 69, - 0, 69, 69, 69, 69, 0, 47, 69, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 0, 80, 69, 69, - 69, 69, 79, 0, 0, 0, 0, 0, 81, 69, + 13, 13, 13, 11, 12, 87, 23, 23, 22, 22, + 22, 23, 22, 22, 22, 22, 23, 23, 23, 23, + 23, 23, 23, 87, 22, 23, 23, 75, 75, 76, + 75, 70, 70, 70, 70, 70, 70, 70, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 87, + 70, 70, 70, 74, 0, 84, 83, 82, 86, 86, + 0, 0, 74, 48, 0, 46, 0, 47, 0, 71, + 71, 0, 74, 74, 0, 74, 74, 74, 74, 0, + 51, 74, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 69, 69, 69, 69, 2, 1, 0, 1, 60, 60, - 0, 59, 69, 17, 17, 15, 0, 14, 15, 0, - 3, 9, 0, 6, 7, 9, 9, 13, 0, 13, - 13, 0, 10, 0, 44, 0, 0, 43, 19, 19, - 0, 19, 0, 0, 18, 18, 18, 18, 18, 18, - 19, 19, 59, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 70, 70, 70, 66, 0, 44, 0, - 43, 0, 66, 66, 0, 66, 66, 66, 66, 66, - 66, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 66, 66, 66, 66, 81, 81, 81, 0, + 0, 85, 74, 74, 74, 0, 72, 0, 74, 74, + 84, 0, 0, 0, 0, 0, 86, 74, 74, 74, + 74, 74, 2, 1, 0, 1, 64, 64, 0, 63, + 74, 0, 64, 0, 74, 17, 17, 15, 0, 14, + 15, 21, 21, 21, 18, 18, 0, 3, 9, 0, + 6, 7, 9, 9, 13, 0, 13, 13, 0, 10, + 0, 48, 0, 0, 47, 23, 23, 0, 23, 0, + 0, 22, 22, 22, 22, 22, 22, 23, 23, 63, + 23, 23, 23, 23, 23, 23, 23, 23, 72, 0, + 23, 23, 75, 75, 75, 70, 0, 48, 0, 47, - 44, 69, 69, 69, 69, 69, 0, 0, 47, 47, - 69, 59, 49, 59, 53, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 69, 69, 0, 0, 0, - 0, 0, 81, 69, 69, 69, 69, 69, 69, 0, - 69, 10, 0, 0, 0, 18, 18, 18, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 0, 66, 66, 66, 66, - 66, 59, 49, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 66, 66, 81, + 0, 70, 70, 0, 70, 70, 70, 70, 70, 70, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 70, 70, 70, 70, 0, 70, 70, 86, 86, + 86, 0, 48, 74, 74, 74, 74, 74, 0, 0, + 51, 51, 74, 63, 53, 63, 57, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 72, 74, 74, + 74, 0, 0, 0, 0, 0, 86, 74, 74, 74, + 74, 74, 74, 0, 64, 0, 64, 74, 74, 10, + 0, 0, 0, 22, 22, 22, 23, 23, 23, 23, - 81, 81, 69, 69, 69, 69, 69, 69, 0, 48, - 48, 48, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 69, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 55, 59, 59, 56, 69, 69, 69, 69, 0, - 0, 0, 0, 0, 0, 81, 69, 69, 69, 69, - 0, 0, 0, 0, 0, 18, 18, 19, 19, 19, - 59, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 66, 66, 66, 66, 66, - 66, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 72, 23, 23, 0, 70, 70, 70, 70, 70, + 63, 53, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 70, 70, 70, 70, + 86, 86, 86, 74, 74, 74, 74, 74, 74, 0, + 52, 52, 52, 0, 0, 51, 51, 51, 51, 51, + 51, 51, 74, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 59, 63, 63, 60, 74, 74, 74, 74, + 0, 0, 0, 0, 0, 0, 86, 74, 74, 74, - 59, 59, 59, 59, 59, 59, 66, 66, 66, 66, - 69, 69, 69, 0, 0, 48, 48, 48, 0, 47, - 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 69, 59, 0, 29, 59, 59, 59, - 59, 59, 0, 38, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 57, 59, 59, 69, 69, 69, - 69, 69, 0, 0, 0, 81, 69, 69, 69, 0, - 0, 0, 18, 18, 19, 19, 59, 59, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 66, 66, 66, 59, 59, 59, 59, 59, + 64, 74, 0, 0, 0, 0, 0, 22, 22, 23, + 23, 23, 63, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 70, 70, 70, + 70, 70, 70, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 70, 70, + 70, 70, 74, 74, 74, 0, 0, 52, 52, 52, + 0, 51, 51, 0, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 74, 63, 0, 33, 63, + 63, 63, 63, 63, 0, 42, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 61, 63, 63, 74, - 59, 59, 59, 59, 59, 59, 59, 59, 66, 66, - 66, 66, 66, 69, 69, 69, 69, 69, 0, 48, - 0, 47, 47, 47, 0, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 69, 54, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, - 62, 63, 64, 69, 0, 0, 81, 69, 69, 69, - 0, 0, 0, 0, 0, 19, 19, 59, 59, 19, - 19, 19, 59, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 66, 66, 66, 66, 66, 59, 59, + 74, 74, 74, 74, 0, 0, 0, 86, 74, 74, + 74, 0, 0, 0, 22, 22, 23, 23, 63, 63, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 70, 70, 70, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 70, 70, 70, 70, 70, 74, 74, 74, 74, 74, + 0, 52, 0, 51, 51, 51, 0, 0, 0, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 74, 58, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 61, 62, 63, 64, 66, 45, 45, 45, 0, - 0, 47, 47, 47, 47, 47, 47, 47, 0, 0, - 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 69, 0, 40, - 59, 59, 59, 59, 0, 28, 59, 59, 59, 59, - 0, 39, 59, 59, 59, 59, 0, 27, 0, 32, - 50, 69, 0, 0, 81, 69, 69, 69, 45, 45, - 45, 19, 59, 59, 19, 19, 59, 59, 19, 19, - 19, 45, 45, 45, 59, 59, 59, 59, 59, 59, + 63, 65, 66, 67, 68, 74, 0, 0, 86, 74, + 74, 74, 0, 0, 0, 0, 0, 23, 23, 63, + 63, 23, 23, 23, 63, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 70, 70, 70, 70, 70, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 65, 66, 67, 68, 70, 49, 49, + 49, 0, 0, 51, 51, 51, 51, 51, 51, 51, + 0, 0, 0, 0, 0, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 74, + 0, 44, 63, 63, 63, 63, 0, 32, 63, 63, - 59, 59, 59, 66, 69, 45, 45, 45, 45, 0, - 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 0, 0, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 20, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 52, 59, 65, 0, 0, 81, 69, 24, 60, 0, - 45, 45, 45, 45, 19, 59, 59, 19, 19, 59, - 59, 19, 19, 19, 66, 45, 45, 45, 45, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 65, 46, - 46, 46, 46, 47, 0, 0, 0, 47, 47, 47, + 63, 63, 0, 43, 63, 63, 63, 63, 0, 31, + 0, 36, 54, 74, 0, 0, 86, 74, 74, 74, + 49, 49, 49, 23, 63, 63, 23, 23, 63, 63, + 23, 23, 23, 49, 49, 49, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 70, 74, 49, 49, 49, + 49, 0, 51, 0, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 0, 0, 0, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 24, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 56, 63, 69, 0, 0, 86, 74, 28, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, - 47, 47, 47, 69, 59, 59, 59, 59, 0, 41, - 59, 59, 59, 0, 26, 0, 33, 51, 0, 24, - 22, 81, 25, 0, 69, 46, 46, 46, 46, 19, - 59, 59, 19, 59, 59, 46, 46, 46, 46, 59, - 59, 59, 59, 59, 59, 69, 69, 46, 46, 46, - 46, 0, 0, 0, 0, 0, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 69, 0, 30, 58, + 64, 0, 49, 49, 49, 49, 23, 63, 63, 23, + 23, 63, 63, 23, 23, 23, 70, 49, 49, 49, + 49, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 69, 50, 50, 50, 50, 51, 0, 0, 0, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 0, 0, 0, 0, 0, 51, 51, 51, + 51, 51, 51, 51, 51, 74, 63, 63, 63, 63, + 0, 45, 63, 63, 63, 0, 30, 0, 37, 55, + 0, 28, 26, 86, 29, 0, 74, 50, 50, 50, + 50, 23, 63, 63, 23, 63, 63, 50, 50, 50, - 0, 36, 59, 59, 59, 59, 25, 22, 22, 22, - 22, 81, 24, 0, 0, 0, 0, 0, 24, 0, - 0, 0, 46, 46, 46, 46, 59, 19, 59, 59, - 66, 66, 46, 46, 46, 46, 59, 59, 59, 59, - 69, 69, 69, 0, 0, 0, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 21, 0, 34, 59, 59, 59, - 22, 81, 0, 24, 0, 0, 0, 19, 59, 59, - 66, 66, 66, 59, 59, 59, 69, 69, 69, 69, - 69, 0, 0, 0, 0, 0, 47, 47, 47, 47, + 50, 63, 63, 63, 63, 63, 63, 74, 74, 50, + 50, 50, 50, 0, 0, 0, 0, 0, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 74, 0, + 34, 62, 0, 40, 63, 63, 63, 63, 29, 26, + 26, 26, 26, 86, 28, 0, 0, 0, 0, 0, + 28, 0, 0, 0, 50, 50, 50, 50, 63, 23, + 63, 63, 70, 70, 50, 50, 50, 50, 63, 63, + 63, 63, 74, 74, 74, 0, 0, 0, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 47, 47, 47, 47, 0, 31, 0, 37, 59, 23, - 0, 0, 0, 0, 0, 59, 66, 66, 66, 66, - 66, 59, 69, 69, 69, 47, 47, 47, 47, 47, - 47, 0, 35, 23, 23, 23, 23, 0, 0, 0, - 66, 66, 66, 69, 69, 69, 69, 69, 47, 47, - 47, 47, 47, 23, 0, 0, 0, 0, 0, 66, - 66, 66, 66, 66, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 0 + 51, 51, 51, 51, 51, 51, 25, 0, 38, 63, + 63, 63, 26, 86, 0, 28, 0, 0, 0, 23, + 63, 63, 70, 70, 70, 63, 63, 63, 74, 74, + 74, 74, 74, 0, 0, 0, 0, 0, 51, 51, + 51, 51, 51, 51, 51, 51, 0, 35, 0, 41, + 63, 27, 0, 0, 0, 0, 0, 63, 70, 70, + 70, 70, 70, 63, 74, 74, 74, 51, 51, 51, + 51, 51, 51, 0, 39, 27, 27, 27, 27, 0, + 0, 0, 70, 70, 70, 74, 74, 74, 74, 74, + 51, 51, 51, 51, 51, 27, 0, 0, 0, 0, + + 0, 70, 70, 70, 70, 70, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -541,17 +546,17 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 6, 7, 8, 9, 1, 10, 1, 1, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 1, 1, - 30, 31, 13, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 42, 43, 44, 45, 46, 47, - 42, 48, 49, 50, 51, 52, 53, 54, 55, 42, - 13, 56, 13, 1, 57, 1, 58, 59, 60, 61, + 1, 6, 7, 8, 9, 10, 11, 1, 1, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 1, 1, + 31, 32, 14, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 43, 44, 45, 46, 47, 48, + 43, 49, 50, 51, 52, 53, 54, 55, 56, 43, + 14, 57, 14, 58, 59, 1, 60, 61, 62, 63, - 62, 63, 64, 65, 66, 64, 64, 67, 68, 69, - 70, 64, 64, 71, 72, 73, 74, 64, 64, 64, - 64, 64, 1, 1, 1, 1, 1, 1, 1, 1, + 64, 65, 66, 67, 68, 66, 66, 69, 70, 71, + 72, 66, 66, 73, 74, 75, 76, 66, 66, 66, + 66, 66, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -568,2140 +573,2442 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst flex_int32_t yy_meta[75] = +static yyconst flex_int32_t yy_meta[77] = { 0, - 1, 2, 3, 4, 3, 2, 5, 6, 7, 1, - 8, 8, 1, 9, 10, 1, 11, 12, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 14, 15, - 8, 1, 13, 13, 13, 13, 13, 13, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 17, 18, 19, 19, 19, - 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20 + 1, 2, 3, 4, 3, 2, 5, 6, 7, 8, + 1, 9, 9, 1, 10, 11, 1, 12, 13, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, + 16, 9, 1, 14, 14, 14, 14, 14, 14, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 18, 1, 19, 20, + 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21 } ; -static yyconst flex_int16_t yy_base[1286] = +static yyconst flex_int16_t yy_base[1350] = { 0, - 0, 73, 123, 194, 81, 97, 265, 338, 411, 466, - 128, 137, 522, 0, 157, 172, 596, 0, 6774, 6717, - 74, 8226, 6768, 6753, 8226, 668, 72, 8226, 8226, 6701, - 8226, 174, 680, 195, 95, 6727, 8226, 8226, 29, 743, - 6712, 54, 35, 77, 799, 6688, 52, 6699, 6685, 44, - 6674, 6680, 50, 861, 226, 127, 225, 890, 216, 105, - 6646, 76, 6643, 192, 266, 145, 359, 6668, 6667, 6679, - 132, 0, 8226, 6708, 6703, 8226, 0, 427, 954, 230, - 0, 6653, 8226, 116, 8226, 169, 8226, 275, 6651, 202, - 182, 8226, 293, 246, 434, 982, 1026, 284, 294, 1084, + 0, 75, 126, 199, 83, 91, 99, 176, 272, 347, + 422, 478, 131, 147, 535, 0, 187, 219, 611, 0, + 6107, 6049, 76, 9534, 6102, 6087, 9534, 685, 101, 9534, + 9534, 6025, 9534, 199, 697, 238, 143, 6021, 9534, 9534, + 23, 762, 6006, 76, 71, 97, 819, 5980, 76, 5991, + 5976, 112, 5964, 5972, 87, 883, 914, 262, 152, 266, + 969, 176, 39, 5937, 100, 5889, 197, 299, 167, 298, + 5915, 5900, 5910, 1036, 237, 0, 9534, 5940, 5918, 9534, + 0, 1092, 0, 196, 9534, 5921, 5916, 9534, 9534, 234, + 1148, 249, 0, 5864, 9534, 94, 9534, 140, 9534, 290, - 1134, 6652, 148, 106, 1190, 6649, 6647, 6659, 6645, 6647, - 6640, 329, 0, 294, 6614, 227, 8226, 372, 6596, 333, - 6584, 447, 1237, 360, 465, 1300, 6594, 315, 111, 1356, - 6591, 6589, 6591, 6566, 6564, 6559, 1418, 485, 387, 6537, - 719, 358, 8226, 6585, 259, 8226, 6553, 655, 824, 6497, - 858, 436, 892, 6477, 919, 929, 6475, 1448, 981, 1463, - 6488, 6499, 996, 1006, 495, 6484, 343, 100, 1526, 1582, - 6449, 6432, 6441, 6439, 6432, 6414, 6408, 6401, 6395, 1086, - 6385, 6392, 6353, 6343, 6329, 6324, 492, 8226, 184, 717, - 307, 392, 1241, 6289, 6294, 6283, 6258, 6248, 836, 676, + 5860, 306, 153, 9534, 356, 240, 1177, 1236, 1281, 345, + 355, 1340, 1391, 5869, 198, 194, 1448, 5853, 5830, 5842, + 5828, 5824, 5811, 177, 363, 0, 233, 5772, 294, 9534, + 391, 5771, 417, 5768, 433, 1496, 434, 378, 1561, 5780, + 388, 270, 1618, 5765, 5756, 5768, 5754, 5743, 5727, 1682, + 1713, 478, 415, 5700, 737, 462, 9534, 5736, 211, 9534, + 5727, 490, 500, 5670, 672, 440, 926, 5669, 971, 861, + 5667, 1769, 880, 1784, 5674, 5685, 939, 984, 927, 5672, + 414, 379, 1849, 1906, 5644, 5624, 5635, 5626, 5562, 5539, + 5542, 5546, 5541, 976, 5532, 5538, 5529, 5521, 5526, 5522, - 194, 207, 368, 414, 927, 727, 1381, 749, 1224, 6261, - 1644, 1241, 833, 0, 6309, 941, 6312, 8226, 8226, 1415, - 0, 6248, 1300, 8226, 8226, 6236, 1235, 6224, 6269, 985, - 366, 949, 752, 6273, 846, 879, 1498, 6219, 1653, 0, - 1682, 1713, 1505, 1445, 1754, 6247, 1602, 1679, 942, 1804, - 1860, 6209, 0, 6203, 6173, 6165, 6175, 6156, 1690, 6147, - 6145, 6120, 6092, 6095, 1456, 665, 6083, 1790, 6071, 1895, - 6059, 1922, 1753, 6055, 1952, 1729, 1967, 6087, 1919, 1949, - 1612, 2030, 2086, 6047, 6052, 6039, 6031, 6041, 6026, 1969, - 6017, 6007, 390, 1659, 365, 897, 457, 474, 496, 2106, + 528, 9534, 431, 1026, 1970, 385, 5502, 862, 300, 410, + 1028, 5481, 5486, 5475, 5457, 5458, 857, 684, 387, 418, + 659, 412, 859, 746, 1033, 768, 1077, 5474, 2026, 1076, + 2057, 681, 5438, 1031, 414, 0, 5487, 1068, 5490, 9534, + 9534, 0, 769, 5485, 9534, 1073, 1115, 0, 5413, 1094, + 9534, 9534, 5382, 1125, 5381, 5406, 1105, 721, 1152, 864, + 5410, 868, 1103, 1191, 5354, 2114, 0, 1250, 2173, 1184, + 1204, 2215, 5381, 1250, 1263, 1196, 2266, 2323, 5354, 0, + 5359, 5284, 5275, 5273, 5262, 1342, 5253, 5251, 9534, 694, + 5235, 5224, 5229, 1203, 916, 5228, 1536, 5227, 1725, 5183, - 2131, 2143, 2183, 2223, 2261, 6039, 6026, 2306, 717, 2352, - 911, 2415, 2471, 6008, 0, 6008, 5984, 5989, 5982, 5930, - 5943, 5929, 5926, 5905, 5900, 5911, 5910, 5897, 286, 5873, - 5858, 5852, 5845, 5808, 5807, 1110, 154, 370, 5779, 5769, - 5748, 5753, 1392, 335, 1173, 5755, 798, 654, 782, 2183, - 393, 966, 2155, 2197, 2209, 2516, 5790, 2561, 0, 5757, - 5747, 5752, 5715, 5722, 5693, 5700, 5700, 5687, 5684, 5683, - 5678, 5655, 5655, 1104, 5610, 2262, 2608, 2648, 2688, 2728, - 5660, 2773, 0, 5640, 5624, 5627, 5596, 5609, 5583, 5586, - 5567, 5554, 5564, 5549, 5544, 5525, 5536, 1389, 940, 8226, + 1756, 1483, 5182, 2387, 1643, 2402, 5220, 1477, 1681, 1373, + 2467, 2524, 5173, 5162, 5148, 5140, 5150, 5124, 1786, 5102, + 5073, 432, 1671, 2588, 5066, 1154, 680, 854, 266, 847, + 873, 1769, 1926, 2628, 2668, 2708, 2746, 5104, 5091, 2792, + 910, 2839, 879, 2904, 2961, 5051, 0, 5048, 5037, 5042, + 5029, 5011, 5023, 5001, 4995, 4995, 4993, 4995, 4983, 4965, + 264, 4941, 4911, 4925, 4913, 4910, 4886, 3025, 3081, 994, + 394, 16, 4858, 4848, 4840, 4823, 907, 896, 918, 4814, + 913, 837, 123, 1979, 9534, 990, 3137, 3193, 978, 1080, + 1993, 2023, 2054, 3231, 4855, 3282, 3339, 4834, 4809, 4814, - 826, 1111, 2281, 928, 2820, 2860, 1892, 464, 5543, 5527, - 2233, 1118, 5488, 5487, 1122, 2326, 2900, 2372, 1657, 2946, - 2493, 1227, 3009, 1193, 1240, 1257, 890, 471, 1717, 1666, - 1112, 968, 1007, 801, 657, 1053, 1445, 827, 1359, 867, - 1238, 5463, 1013, 1415, 5451, 1711, 1395, 1461, 1249, 5395, - 5354, 5356, 5340, 5347, 5327, 1655, 1188, 1712, 1356, 1446, - 2536, 5373, 2583, 2620, 2118, 3065, 3110, 1690, 5343, 5340, - 1266, 2009, 5339, 5320, 5308, 5296, 5279, 5270, 5233, 5227, - 5234, 3155, 1779, 1517, 1494, 2630, 1476, 3202, 3242, 2661, - 1583, 5249, 2031, 5222, 5195, 1701, 2264, 5193, 5183, 5165, + 4792, 4770, 4751, 4758, 4758, 4737, 4741, 4740, 4735, 4716, + 4720, 1015, 1094, 4685, 2089, 3387, 3427, 3467, 3507, 4738, + 3553, 0, 4674, 4665, 4670, 4636, 4650, 4638, 4635, 4624, + 4608, 4614, 4597, 4577, 4564, 4563, 3617, 3673, 1123, 1075, + 9534, 1180, 1236, 1936, 925, 3713, 3753, 2079, 699, 4570, + 4569, 2128, 1318, 4568, 4560, 1062, 1182, 3793, 2139, 1726, + 3840, 2174, 1110, 3905, 992, 1544, 1057, 1212, 1162, 1341, + 1827, 821, 955, 1477, 1342, 1222, 1215, 1645, 1122, 1075, + 65, 1359, 4534, 1267, 1159, 4533, 1636, 736, 1145, 1424, + 4503, 4497, 4490, 4457, 4468, 4454, 1524, 1351, 1697, 1350, - 5164, 5095, 5085, 5076, 5060, 5067, 1738, 1419, 1628, 1710, - 3282, 3322, 3362, 5072, 5058, 2668, 5042, 5035, 5034, 5033, - 1369, 2699, 1980, 2709, 2003, 3402, 0, 2750, 3449, 2793, - 2291, 3495, 2832, 1420, 1906, 2353, 8226, 1504, 1775, 1689, - 1863, 723, 2354, 8226, 1870, 1764, 1679, 1779, 1907, 1618, - 1985, 1949, 1979, 903, 5002, 1216, 1990, 1615, 1835, 1909, - 1094, 1924, 4974, 4932, 4932, 2113, 1899, 1968, 2130, 2844, - 2872, 2884, 4963, 4962, 4937, 4910, 4884, 4875, 4857, 4848, - 4846, 4825, 4838, 4831, 4824, 4824, 4807, 2172, 2248, 2380, - 276, 2217, 3542, 3582, 3622, 4791, 4799, 4769, 4760, 4775, + 1241, 1490, 2187, 4480, 2199, 2237, 2088, 3962, 4013, 4088, + 2006, 2140, 1447, 1850, 2024, 2361, 1973, 2367, 2368, 2449, + 2562, 2444, 2563, 1514, 4458, 4461, 4398, 2550, 1520, 4136, + 4176, 2357, 1507, 4413, 2268, 4395, 4392, 1650, 2442, 4396, + 4371, 4344, 4354, 4349, 4340, 4326, 4315, 4322, 1758, 737, + 1629, 1506, 4216, 4256, 4296, 4337, 4322, 2601, 4322, 4320, + 4319, 4307, 1630, 2612, 1808, 2638, 1821, 4336, 0, 2650, + 4384, 2678, 2688, 4431, 2720, 1516, 1688, 2443, 9534, 478, + 1681, 1015, 1694, 1706, 2450, 9534, 1686, 1329, 1361, 1773, + 1449, 1729, 1621, 1786, 1957, 1705, 4305, 1805, 1813, 1760, - 4754, 4752, 4731, 4744, 4720, 4715, 4694, 4665, 2138, 2159, - 2361, 2490, 2301, 2920, 2171, 3662, 3702, 2806, 4683, 4660, - 4646, 4621, 3740, 2172, 2968, 3087, 3132, 2245, 2389, 2391, - 3175, 2597, 3787, 0, 3214, 3834, 3225, 2503, 3880, 3254, - 2302, 4565, 2563, 2238, 940, 2289, 2373, 2564, 1933, 2013, - 2572, 2774, 1584, 2376, 2393, 2544, 2775, 2776, 2395, 4537, - 4519, 4518, 4515, 1164, 4501, 4491, 2696, 2719, 2604, 2945, - 3264, 4500, 3294, 3306, 2932, 3010, 4476, 4453, 4433, 3334, - 4436, 4425, 2526, 3351, 4406, 4358, 3362, 3363, 2015, 2547, - 2638, 2642, 2717, 3376, 2644, 3927, 3967, 3353, 3365, 4364, + 1423, 1949, 1917, 1703, 4300, 4235, 4213, 2020, 1785, 1935, + 1798, 2732, 2768, 2814, 4245, 4242, 2842, 2877, 4225, 4218, + 2880, 2999, 2879, 3000, 3006, 3012, 2882, 3009, 3014, 4223, + 4206, 4206, 4207, 4165, 4479, 4519, 4559, 4163, 4159, 4146, + 4125, 4119, 4103, 4108, 4086, 4100, 4082, 4091, 4091, 4068, + 1983, 1972, 2036, 2033, 1927, 2694, 2050, 4599, 4639, 3048, + 4090, 4089, 4075, 4074, 4677, 1975, 3096, 3108, 3134, 2097, + 2103, 2111, 3150, 2253, 4725, 0, 3056, 4773, 3160, 2869, + 4820, 3190, 1934, 4063, 3097, 2054, 1832, 1521, 2087, 3190, + 2093, 2036, 2146, 3191, 2007, 2188, 2056, 2096, 3232, 3233, - 4337, 4330, 3404, 4295, 4290, 2571, 3405, 4266, 4267, 3450, - 3451, 4217, 4213, 4192, 4190, 2958, 4006, 4045, 4084, 4197, - 4171, 4170, 3422, 4124, 3469, 3097, 4169, 3517, 3552, 4163, - 3564, 3594, 3187, 2247, 2884, 3337, 3531, 3604, 3634, 4216, - 0, 3636, 4263, 3647, 3142, 4309, 3674, 2684, 3452, 8226, - 4372, 2956, 1635, 4088, 3496, 8226, 2968, 2803, 1693, 2651, - 3497, 8226, 3058, 2826, 1384, 2379, 3498, 8226, 3674, 8226, - 4087, 2686, 4059, 4027, 3290, 2445, 2818, 2687, 3686, 3713, - 3724, 4038, 4033, 4014, 4007, 3987, 3976, 3929, 3899, 3859, - 3791, 4429, 4468, 4507, 4563, 2951, 3772, 3207, 3265, 2777, + 2216, 4035, 4034, 4014, 4013, 2216, 3977, 3962, 2406, 2297, + 2172, 2298, 3220, 4012, 3253, 3361, 3208, 3284, 3389, 3981, + 3886, 3390, 3391, 3392, 2092, 3427, 3428, 3429, 3430, 3437, + 0, 0, 0, 0, 3850, 3480, 2358, 4868, 4908, 3456, + 3440, 3879, 3859, 3848, 3467, 3848, 3824, 2359, 3508, 3818, + 3805, 3509, 3510, 3793, 3768, 3767, 3752, 2345, 4947, 4986, + 5025, 3758, 3742, 3714, 3527, 5065, 3537, 3441, 5111, 3575, + 3614, 3714, 3632, 3644, 3587, 2423, 2424, 2537, 2584, 3670, + 2587, 5159, 0, 3688, 5207, 3699, 3497, 5254, 3725, 2080, + 3753, 9534, 5319, 2127, 2130, 3681, 3754, 9534, 2422, 2220, - 3309, 3103, 3361, 2858, 3761, 3149, 4620, 4659, 3772, 3768, - 3742, 3810, 3376, 3854, 3518, 4699, 0, 3902, 4712, 3937, - 3820, 4757, 3949, 3979, 3991, 4018, 3306, 3333, 3916, 4030, - 4030, 4057, 4804, 0, 4059, 4851, 4070, 3864, 4096, 3356, - 4914, 2880, 3665, 2497, 4125, 2949, 2656, 3590, 4126, 4127, - 3544, 3205, 3445, 3401, 3379, 3631, 3184, 4107, 3305, 4145, - 3319, 4190, 4237, 4201, 4975, 3222, 3169, 4264, 3545, 3165, - 3137, 4265, 4266, 0, 4283, 3579, 5032, 5071, 4331, 5127, - 3092, 2927, 4311, 3627, 2970, 3072, 4468, 4469, 3041, 5185, - 5225, 5265, 5305, 3011, 4441, 4482, 4519, 2989, 3583, 3903, + 2387, 2316, 3755, 9534, 2410, 2368, 1704, 1889, 3756, 9534, + 3761, 9534, 3667, 2315, 3633, 3625, 2578, 2400, 2225, 2540, + 3773, 3814, 3861, 5381, 3635, 3636, 2562, 2563, 3605, 3579, + 2543, 2628, 3553, 5439, 5478, 5517, 5574, 2356, 3578, 2629, + 2691, 2636, 2560, 2750, 2751, 2748, 3988, 1072, 5632, 5671, + 4076, 3591, 3564, 4114, 2815, 4146, 2974, 5711, 0, 4158, + 5724, 4186, 3783, 5770, 4198, 4228, 4240, 4268, 2868, 2876, + 3030, 3033, 4278, 3035, 5818, 0, 4308, 5866, 4319, 3824, + 4358, 2946, 5931, 2711, 3475, 2272, 4386, 2956, 2596, 3472, + 4387, 4433, 3448, 2996, 3415, 3408, 3350, 3763, 2823, 3864, - 4529, 3950, 5345, 0, 4632, 5358, 4643, 4457, 5403, 4671, - 4681, 2983, 4734, 4779, 4826, 3991, 4108, 4345, 3078, 3123, - 5450, 0, 4834, 3871, 4893, 3136, 4894, 2907, 4172, 8226, - 3247, 3308, 3546, 4354, 8226, 4373, 8226, 2900, 2843, 4530, - 3751, 4315, 2819, 4514, 5059, 5052, 5083, 5097, 5197, 5225, - 4563, 2752, 3670, 2733, 2711, 5462, 5502, 5542, 5582, 5226, - 5227, 2689, 3931, 3364, 3935, 5238, 3240, 5622, 5662, 5250, - 3399, 5276, 2662, 5288, 5317, 4884, 2609, 2587, 4070, 4113, - 5327, 4348, 5702, 0, 5380, 5715, 5423, 4744, 5760, 5474, - 5485, 5513, 5524, 4330, 2573, 3488, 1460, 4806, 8226, 2478, + 3360, 4404, 3361, 4452, 4490, 4501, 5993, 3320, 3288, 4434, + 3007, 3291, 3264, 4527, 4559, 0, 4546, 2744, 6051, 6090, + 4572, 6147, 3247, 2627, 4600, 3047, 2798, 3213, 4602, 4603, + 3179, 6206, 6246, 6286, 6326, 3197, 4616, 4651, 4663, 3192, + 3010, 3066, 4697, 3074, 6366, 0, 4747, 6379, 4707, 3982, + 6425, 4795, 4840, 3128, 4880, 4892, 4531, 3076, 3121, 3269, + 2759, 2806, 6473, 0, 4807, 3215, 4947, 2800, 4948, 3064, + 3906, 9534, 2962, 2819, 3013, 4100, 9534, 4101, 9534, 3057, + 3027, 3757, 3908, 3097, 2936, 4481, 4870, 4961, 4998, 5010, + 5037, 4950, 4229, 2860, 3059, 2795, 2731, 6485, 6525, 6565, - 4807, 8226, 5404, 2452, 2396, 3500, 8226, 3236, 4509, 8226, - 3767, 4176, 5569, 5577, 5609, 5620, 5635, 5127, 5664, 5797, - 5568, 2344, 5674, 5686, 5436, 2321, 4888, 2266, 2147, 2122, - 5735, 3699, 5812, 5852, 5747, 3762, 5841, 2093, 2086, 3611, - 5892, 5932, 5972, 5829, 5873, 5904, 2088, 2016, 4349, 4455, - 5839, 4543, 6012, 0, 5916, 6025, 5942, 5062, 5954, 1931, - 5983, 5994, 5216, 1899, 1834, 4891, 8226, 6062, 6063, 1785, - 8226, 4708, 6051, 6074, 6097, 6109, 6121, 6148, 4896, 1761, - 6182, 6222, 6262, 6150, 6161, 1564, 6161, 3809, 6302, 6342, - 6138, 6199, 1369, 6234, 6246, 5864, 1302, 1161, 4549, 1148, + 6605, 5066, 5067, 2673, 3156, 2884, 3375, 5085, 3091, 6645, + 6685, 4937, 3180, 4918, 2669, 5133, 5181, 4758, 2613, 2527, + 3388, 3407, 5227, 3410, 6725, 0, 5276, 6738, 5237, 5054, + 6784, 5451, 5462, 5489, 5500, 3270, 2464, 3123, 2509, 4306, + 9534, 2424, 4528, 9534, 5113, 2410, 2383, 3139, 9534, 2797, + 4184, 9534, 3014, 3641, 5161, 5547, 5660, 5668, 5540, 5319, + 5699, 5906, 5658, 2394, 5746, 5792, 5287, 2353, 4529, 2305, + 2218, 2196, 5839, 3565, 6832, 6872, 5698, 3588, 5114, 2128, + 2084, 3233, 6912, 6952, 6992, 6063, 6075, 6102, 2041, 1969, + 3453, 3468, 6112, 3602, 7032, 0, 6218, 7045, 6229, 5191, - 1066, 6274, 0, 4632, 5405, 8226, 5406, 8226, 6162, 5354, - 6209, 1018, 6286, 6314, 6086, 5551, 6324, 3810, 6382, 6422, - 6355, 6163, 6462, 6502, 6542, 6362, 6393, 6403, 858, 0, - 694, 6164, 8226, 3886, 5618, 8226, 3907, 6434, 6446, 6474, - 6582, 6622, 6662, 6484, 3873, 6702, 6742, 6515, 8226, 6522, - 6553, 5883, 8226, 8226, 6563, 668, 6594, 6606, 6634, 6640, - 3980, 6782, 6822, 6652, 6678, 6716, 6726, 6764, 6792, 6802, - 6832, 6842, 6880, 320, 6890, 6863, 8226, 6901, 6152, 134, - 6928, 6911, 8226, 6984, 7004, 7024, 7044, 7064, 7084, 7104, - 7124, 7144, 7164, 5304, 7184, 7204, 4654, 7224, 7244, 7264, + 6258, 1970, 6269, 6297, 5690, 1748, 1642, 4605, 9534, 5528, + 5820, 1504, 9534, 4644, 6307, 6336, 6348, 6401, 6447, 5821, + 4869, 1397, 7093, 7133, 7173, 5910, 6514, 1372, 6501, 3645, + 7213, 7253, 6513, 6551, 1296, 6577, 6589, 5758, 1208, 1154, + 3658, 1005, 936, 6617, 0, 3992, 5546, 9534, 5575, 9534, + 6645, 4990, 6632, 869, 6658, 6697, 6413, 5867, 6712, 3659, + 7293, 7333, 6539, 6784, 7373, 7413, 7453, 6804, 6842, 6852, + 709, 0, 460, 5868, 9534, 3161, 5904, 9534, 3367, 6884, + 6896, 6924, 7493, 7533, 7573, 6934, 3660, 7613, 7653, 6670, + 9534, 6972, 7002, 6317, 9534, 9534, 7012, 364, 7067, 7105, - 7284, 7304, 7324, 7344, 7364, 7384, 7404, 7424, 7444, 7464, - 7484, 7504, 7524, 7544, 5501, 5541, 7553, 7572, 7592, 7612, - 4724, 7632, 7652, 7672, 7692, 7704, 7724, 4903, 7744, 7764, - 7784, 7804, 7824, 7844, 7864, 7884, 5600, 7893, 5617, 5621, - 5655, 7901, 7920, 5117, 5787, 5791, 5811, 7929, 7938, 5928, - 5971, 6011, 7946, 7955, 6341, 6378, 7963, 7972, 7991, 5798, - 8003, 6381, 8013, 8021, 8030, 8049, 6419, 8061, 8081, 6501, - 8091, 8099, 8108, 8127, 8147, 8167, 6538, 8177, 4345, 6541, - 8186, 6581, 3917, 8205, 3533 + 6459, 7115, 3834, 7693, 7733, 6760, 7153, 7191, 7229, 7239, + 7267, 7277, 7306, 7316, 7354, 172, 7392, 7146, 9534, 7430, + 6771, 100, 7440, 7164, 9534, 7790, 7811, 7832, 7853, 7874, + 7895, 7916, 7937, 7958, 7979, 8000, 3878, 8021, 8042, 8063, + 8084, 8105, 8126, 3565, 8147, 8168, 8189, 8210, 8231, 8252, + 8273, 8294, 8315, 8336, 8357, 8378, 8399, 8420, 8441, 8462, + 8483, 8504, 8525, 8546, 4295, 4598, 8555, 8575, 8596, 8617, + 8638, 8659, 8680, 8701, 8722, 3974, 8743, 8764, 8785, 8806, + 8818, 8839, 4983, 8860, 8881, 8902, 8923, 8944, 8965, 8986, + 9007, 9028, 9049, 5900, 9058, 9078, 9099, 9120, 9141, 5919, + + 6129, 6139, 9150, 9158, 9178, 9199, 5308, 6245, 6285, 6365, + 9208, 9217, 6684, 6822, 6868, 9225, 9234, 6871, 6951, 9242, + 9251, 9271, 6824, 9283, 9304, 6968, 9314, 9322, 9331, 9351, + 6970, 9363, 9384, 6988, 9394, 9402, 9411, 9431, 9452, 9473, + 6991, 9483, 4171, 7028, 9492, 7031, 5651, 9512, 4638 } ; -static yyconst flex_int16_t yy_def[1286] = +static yyconst flex_int16_t yy_def[1350] = { 0, - 1183, 1, 1, 1, 1184, 1184, 1185, 1185, 1186, 1186, - 1187, 1187, 1183, 13, 1188, 1188, 1183, 17, 1183, 1189, - 1183, 1183, 1183, 1183, 1183, 1190, 1191, 1183, 1183, 1192, - 1183, 1193, 1189, 33, 33, 1194, 1183, 1183, 1189, 1183, - 40, 40, 40, 40, 40, 45, 45, 45, 45, 45, - 45, 45, 45, 1189, 33, 1189, 1183, 1190, 40, 40, - 45, 45, 45, 1183, 1183, 1183, 1195, 45, 45, 45, - 1189, 1196, 1183, 1183, 1196, 1183, 1196, 1183, 1190, 1183, - 1197, 1198, 1183, 1198, 1183, 1198, 1183, 1199, 1200, 1200, - 1200, 1183, 1183, 1201, 1202, 1203, 1183, 97, 97, 97, + 1225, 1, 1, 1, 1226, 1226, 1227, 1227, 1228, 1228, + 1229, 1229, 1230, 1230, 1225, 15, 1231, 1231, 1225, 19, + 1225, 1232, 1225, 1225, 1225, 1225, 1225, 1233, 1234, 1225, + 1225, 1235, 1225, 1236, 1232, 35, 35, 1237, 1225, 1225, + 1232, 1225, 42, 42, 42, 42, 42, 47, 47, 47, + 47, 47, 47, 47, 47, 1232, 1238, 35, 1232, 1225, + 1233, 42, 42, 47, 47, 47, 1225, 1225, 1225, 1239, + 47, 47, 47, 1240, 1232, 1241, 1225, 1225, 1241, 1225, + 1241, 1225, 1242, 1242, 1225, 1225, 1242, 1225, 1225, 1243, + 1233, 1225, 1244, 1245, 1225, 1245, 1225, 1245, 1225, 1246, - 1183, 101, 101, 101, 101, 105, 105, 105, 105, 105, - 105, 97, 100, 100, 1204, 1204, 1183, 1204, 1205, 1206, - 1207, 1208, 1205, 123, 123, 1183, 126, 126, 126, 126, - 130, 130, 130, 130, 130, 130, 1205, 123, 1205, 1189, - 1189, 1183, 1183, 1183, 1209, 1183, 1183, 1210, 1183, 1211, - 1183, 1201, 1211, 1212, 1212, 1213, 1214, 1189, 1189, 1189, - 1215, 160, 160, 160, 160, 1216, 1217, 1189, 1183, 169, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 1183, 1183, 1189, 1189, - 1189, 1189, 1183, 1183, 1183, 1183, 1183, 1183, 1209, 1189, + 1247, 1247, 1247, 1225, 1225, 1248, 1249, 1250, 1225, 109, + 109, 109, 1225, 113, 113, 113, 113, 117, 117, 117, + 117, 117, 117, 1251, 109, 112, 112, 1252, 1252, 1225, + 1252, 1253, 1254, 1255, 1256, 1253, 136, 136, 1225, 139, + 139, 139, 139, 143, 143, 143, 143, 143, 143, 1253, + 1257, 136, 1253, 1258, 1258, 1225, 1225, 1225, 1259, 1225, + 1225, 1260, 1225, 1261, 1225, 1248, 1261, 1262, 1262, 1263, + 1264, 1258, 1258, 1258, 1265, 174, 174, 174, 174, 1266, + 1267, 1258, 1225, 183, 184, 184, 184, 184, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 160, 1189, 1189, 1189, 1183, 1183, 1183, 1183, 1218, 1219, - 1189, 170, 1189, 1220, 1220, 1183, 1183, 1183, 1183, 1210, - 1221, 1222, 1222, 1183, 1183, 1222, 1222, 1223, 1183, 1223, - 1223, 1183, 1183, 1183, 1201, 1201, 1201, 1224, 1225, 1226, - 1224, 1227, 1183, 1183, 1226, 245, 245, 245, 245, 1183, - 250, 251, 1228, 251, 251, 251, 251, 251, 251, 251, - 251, 1226, 1226, 1229, 1229, 1229, 1230, 1230, 1231, 1231, - 1232, 1232, 1233, 1234, 1230, 1230, 1230, 277, 277, 277, - 277, 1183, 282, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 1230, 1230, 1230, 1230, 1235, 1235, 1236, 1183, + 1225, 1225, 1258, 1258, 1268, 1269, 1258, 1268, 1258, 1258, + 1225, 1225, 1225, 1225, 1225, 1225, 1259, 1258, 174, 1258, + 1258, 1258, 1225, 1225, 1225, 1225, 1270, 1271, 1258, 184, + 1272, 1273, 1258, 1272, 1258, 1274, 1274, 1225, 1225, 1225, + 1225, 1275, 1275, 1275, 1225, 1225, 1260, 1276, 1277, 1277, + 1225, 1225, 1277, 1277, 1278, 1225, 1278, 1278, 1225, 1225, + 1225, 1248, 1248, 1248, 1279, 1280, 1281, 1279, 1282, 1225, + 1225, 1281, 272, 272, 272, 272, 1225, 277, 278, 1283, + 278, 278, 278, 278, 278, 278, 278, 278, 1225, 1269, + 1281, 1281, 1284, 1284, 1284, 1285, 1285, 1286, 1286, 1287, - 1183, 1189, 1189, 1189, 1189, 305, 1237, 1183, 1238, 1183, - 1189, 1183, 312, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 1189, 1189, 1183, 1183, 1183, - 1183, 1183, 1235, 1189, 1189, 305, 1189, 1189, 1189, 1183, - 1189, 1183, 1183, 1183, 1183, 1226, 356, 250, 251, 251, - 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, - 251, 251, 251, 1226, 1226, 1183, 1230, 1230, 1230, 277, - 380, 282, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 1230, 1230, 1183, + 1287, 1288, 1289, 1285, 1285, 1285, 306, 306, 306, 306, + 1225, 311, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 1285, 1285, 1290, 1285, 1290, 1285, 1285, 1291, 1291, + 1292, 1225, 1225, 1293, 1293, 1293, 1293, 337, 1294, 1225, + 1295, 1225, 1293, 1225, 344, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 1296, 1296, 1293, + 1293, 1225, 1225, 1225, 1225, 1225, 1291, 1293, 1293, 337, + 1293, 1293, 1293, 1225, 1225, 1297, 1298, 1298, 1293, 1225, + 1225, 1225, 1225, 1281, 394, 1225, 396, 397, 397, 397, - 1236, 1236, 1189, 1189, 1189, 1189, 1189, 1189, 1239, 1240, - 1240, 411, 1241, 1240, 1242, 310, 1183, 417, 417, 1183, - 417, 1189, 1183, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 1189, 1189, 1189, 1189, 1183, - 1183, 1183, 1183, 1183, 1183, 1243, 1189, 1189, 1189, 1189, - 1183, 1183, 1183, 1183, 1183, 356, 250, 251, 251, 251, - 1244, 251, 251, 251, 251, 251, 251, 251, 251, 251, - 251, 466, 482, 482, 482, 1230, 1230, 1230, 1230, 1230, - 1230, 283, 283, 283, 283, 283, 283, 283, 283, 283, + 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, + 397, 1299, 1281, 1281, 1225, 1285, 1285, 1285, 306, 419, + 311, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 1290, 1290, 1285, 1285, + 1225, 1292, 1292, 1293, 1293, 1293, 1293, 1293, 1293, 1300, + 1301, 1301, 452, 1302, 1301, 1303, 1304, 1225, 458, 458, + 1225, 458, 1293, 1225, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 1293, 1293, 1293, 1293, + 1225, 1225, 1225, 1225, 1225, 1225, 1305, 1293, 1293, 1293, - 283, 283, 283, 283, 283, 283, 1230, 1230, 1230, 1230, - 1189, 1189, 1189, 1183, 1245, 1245, 516, 1245, 1246, 1247, - 1248, 1183, 1249, 420, 1249, 1183, 526, 1249, 1183, 529, - 529, 1183, 529, 1189, 423, 1183, 1183, 423, 423, 423, - 423, 423, 1183, 1183, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, 423, 1189, 1189, 1189, - 1189, 1189, 1183, 1183, 1183, 1243, 1189, 1189, 1189, 1183, - 1183, 1183, 466, 467, 251, 251, 1244, 1244, 251, 251, - 251, 251, 251, 251, 251, 251, 251, 482, 482, 482, - 482, 482, 1230, 1230, 1230, 283, 283, 283, 283, 283, + 1306, 1293, 1225, 1225, 1225, 1225, 1225, 1281, 1225, 509, + 510, 510, 1307, 510, 510, 510, 510, 510, 510, 510, + 510, 510, 510, 1281, 1281, 1281, 1281, 1285, 1285, 1285, + 1285, 1285, 1285, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 1285, 1285, + 1285, 1285, 1293, 1293, 1293, 1225, 1308, 1308, 558, 1308, + 1309, 1310, 1311, 1225, 1312, 461, 1312, 1225, 568, 1312, + 1225, 571, 571, 1225, 571, 1293, 464, 1225, 1225, 464, + 464, 464, 464, 464, 1225, 1225, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, 464, 1293, - 283, 283, 283, 283, 283, 283, 283, 283, 1230, 1230, - 1230, 1230, 1230, 1189, 1189, 1189, 1189, 1189, 1250, 1250, - 1251, 1252, 1183, 1183, 1183, 1183, 1183, 1253, 1253, 1254, - 532, 1254, 1183, 633, 1254, 1183, 636, 636, 1183, 636, - 1189, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 1189, - 1189, 1189, 1189, 1189, 1183, 1183, 1243, 1189, 1189, 1189, - 1183, 1183, 1183, 1183, 1183, 251, 251, 1244, 1244, 251, - 251, 251, 1244, 251, 251, 251, 251, 251, 482, 482, - 482, 482, 482, 1230, 1230, 1230, 1230, 1230, 283, 283, + 1293, 1293, 1293, 1293, 1225, 1225, 1225, 1305, 1293, 1293, + 1293, 1225, 1225, 1225, 508, 509, 510, 510, 1307, 1307, + 510, 510, 510, 510, 510, 510, 510, 510, 510, 1281, + 1281, 1281, 1281, 1281, 1285, 1285, 1285, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 1285, 1285, 1285, 1285, 1285, 1293, 1293, 1293, 1293, 1293, + 1313, 1313, 1314, 1315, 1225, 1225, 1225, 1225, 1225, 1316, + 1316, 1317, 574, 1317, 1225, 675, 1317, 1225, 678, 678, + 1225, 678, 1293, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 1230, 1230, 1230, 1230, 1230, 1189, 1189, 1189, 1183, - 1255, 1256, 623, 1183, 724, 724, 1183, 724, 1183, 1183, - 1183, 1183, 1183, 1183, 1257, 1257, 1258, 639, 1258, 1183, - 740, 1258, 1183, 743, 743, 1183, 743, 1189, 1183, 1183, - 1183, 751, 751, 751, 1183, 1183, 751, 751, 751, 751, - 1183, 1183, 751, 751, 751, 751, 1183, 1183, 1183, 1183, - 751, 1189, 1183, 1183, 1259, 1189, 1189, 1189, 1183, 1183, - 1183, 251, 1260, 1260, 251, 251, 1260, 1260, 251, 251, - 1261, 1230, 1230, 1230, 1183, 795, 795, 795, 795, 795, + 464, 1293, 1293, 1293, 1293, 1293, 1225, 1225, 1305, 1293, + 1293, 1293, 1225, 1225, 1225, 1225, 1225, 510, 510, 1307, + 1307, 510, 510, 510, 1307, 510, 510, 510, 510, 510, + 1281, 1281, 1281, 1281, 1281, 1285, 1285, 1285, 1285, 1285, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 1285, 1285, 1285, 1285, 1285, 1293, 1293, + 1293, 1225, 1318, 1319, 665, 1225, 766, 766, 1225, 766, + 1225, 1225, 1225, 1225, 1225, 1225, 1320, 1320, 1321, 681, + 1321, 1225, 782, 1321, 1225, 785, 785, 1225, 785, 1293, + 1225, 1225, 1225, 793, 793, 793, 1225, 1225, 793, 793, - 795, 795, 795, 1230, 1189, 1189, 1189, 1189, 1189, 1183, - 1262, 1183, 1263, 727, 1263, 1263, 816, 1263, 1183, 819, - 819, 1183, 819, 1183, 1183, 1183, 1183, 1264, 1264, 1265, - 746, 1265, 1183, 833, 1265, 1183, 836, 836, 836, 1189, - 1183, 841, 841, 841, 841, 841, 841, 841, 841, 841, - 841, 841, 1189, 1183, 1183, 1266, 1189, 1189, 1189, 1183, - 1183, 1183, 1183, 1183, 1183, 1267, 1267, 865, 865, 1267, - 1267, 865, 865, 1268, 1269, 1269, 1269, 1269, 1269, 1183, - 880, 880, 880, 880, 880, 880, 880, 880, 1269, 1189, - 1189, 1189, 1189, 1183, 1183, 1183, 1183, 1270, 1270, 1271, + 793, 793, 1225, 1225, 793, 793, 793, 793, 1225, 1225, + 1225, 1225, 793, 1293, 1225, 1225, 1322, 1293, 1293, 1293, + 1225, 1225, 1225, 1225, 1323, 1323, 824, 824, 1323, 1323, + 824, 824, 1324, 1325, 1325, 1325, 1225, 837, 837, 837, + 837, 837, 837, 837, 837, 1325, 1293, 1293, 1293, 1293, + 1293, 1225, 1326, 1225, 1327, 769, 1327, 1327, 858, 1327, + 1225, 861, 861, 1225, 861, 1225, 1225, 1225, 1225, 1328, + 1328, 1329, 788, 1329, 1225, 875, 1329, 1225, 878, 878, + 878, 1293, 1225, 883, 883, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 1293, 1225, 1225, 1330, 1293, 1293, - 822, 1271, 1271, 903, 1271, 1183, 906, 906, 1183, 906, - 1183, 1183, 1183, 1183, 1183, 1183, 1272, 1272, 1273, 1273, - 1273, 921, 1273, 1189, 841, 841, 841, 841, 1183, 1183, - 841, 841, 841, 1183, 1183, 1183, 1183, 841, 1183, 1183, - 1274, 1266, 1189, 1275, 1276, 1183, 1183, 1183, 1183, 865, - 1267, 1267, 865, 1267, 1267, 1269, 1269, 1269, 1269, 880, - 880, 880, 880, 880, 880, 1189, 1189, 1189, 1189, 1189, - 1189, 1183, 1183, 1183, 1183, 1183, 1183, 1277, 1277, 1278, - 909, 1278, 1278, 983, 1278, 1183, 986, 986, 1183, 986, - 1183, 1183, 1183, 1183, 1279, 1279, 1189, 1183, 1183, 841, + 1293, 1225, 1225, 1225, 1225, 1225, 1225, 1331, 1331, 907, + 907, 1331, 1331, 907, 907, 1332, 1333, 1333, 1333, 1333, + 1333, 1225, 922, 922, 922, 922, 922, 922, 922, 922, + 1333, 1293, 1293, 1293, 1293, 1225, 1225, 1225, 1225, 1334, + 1334, 1335, 864, 1335, 1335, 945, 1335, 1225, 948, 948, + 1225, 948, 1225, 1225, 1225, 1225, 1225, 1225, 1336, 1336, + 1337, 1337, 1337, 963, 1337, 1293, 883, 883, 883, 883, + 1225, 1225, 883, 883, 883, 1225, 1225, 1225, 1225, 883, + 1225, 1225, 1338, 1330, 1293, 1339, 1340, 1225, 1225, 1225, + 1225, 907, 1331, 1331, 907, 1331, 1331, 1333, 1333, 1333, - 1183, 1183, 841, 841, 841, 841, 1183, 1274, 1274, 1183, - 1274, 1266, 1275, 1275, 1275, 1275, 1183, 1275, 1276, 1276, - 1183, 1183, 1183, 1183, 1183, 1183, 1267, 865, 1267, 1267, - 1269, 1269, 1269, 1269, 1269, 1269, 880, 880, 880, 880, - 1189, 1189, 1189, 1183, 1183, 1183, 1183, 1280, 1280, 1281, - 989, 1281, 1281, 1053, 1281, 1183, 1056, 1056, 1056, 1183, - 1183, 1183, 1183, 1183, 1189, 1183, 1183, 841, 841, 841, - 1183, 1266, 1183, 1183, 1183, 1183, 1183, 865, 1267, 1267, - 1269, 1269, 1269, 880, 880, 880, 1189, 1189, 1189, 1189, - 1189, 1183, 1183, 1183, 1183, 1183, 1183, 1282, 1282, 1283, + 1333, 922, 922, 922, 922, 922, 922, 1293, 1293, 1293, + 1293, 1293, 1293, 1225, 1225, 1225, 1225, 1225, 1225, 1341, + 1341, 1342, 951, 1342, 1342, 1025, 1342, 1225, 1028, 1028, + 1225, 1028, 1225, 1225, 1225, 1225, 1343, 1343, 1293, 1225, + 1225, 883, 1225, 1225, 883, 883, 883, 883, 1225, 1338, + 1338, 1225, 1338, 1330, 1339, 1339, 1339, 1339, 1225, 1339, + 1340, 1340, 1225, 1225, 1225, 1225, 1225, 1225, 1331, 907, + 1331, 1331, 1333, 1333, 1333, 1333, 1333, 1333, 922, 922, + 922, 922, 1293, 1293, 1293, 1225, 1225, 1225, 1225, 1344, + 1344, 1345, 1031, 1345, 1345, 1095, 1345, 1225, 1098, 1098, - 1283, 1283, 1102, 1102, 1183, 1183, 1183, 1183, 841, 1284, - 1183, 1183, 1183, 1183, 1183, 1267, 1269, 1269, 1269, 1269, - 1269, 880, 1189, 1189, 1189, 1183, 1183, 1183, 1183, 1285, - 1285, 1183, 1183, 1284, 1284, 1183, 1284, 1183, 1183, 1183, - 1269, 1269, 1269, 1189, 1189, 1189, 1189, 1189, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1269, - 1269, 1269, 1269, 1269, 1189, 1189, 1189, 1183, 1183, 1183, - 1269, 1269, 1269, 1189, 1189, 1189, 1183, 1183, 1183, 1269, - 1269, 1269, 0, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, + 1098, 1225, 1225, 1225, 1225, 1225, 1293, 1225, 1225, 883, + 883, 883, 1225, 1330, 1225, 1225, 1225, 1225, 1225, 907, + 1331, 1331, 1333, 1333, 1333, 922, 922, 922, 1293, 1293, + 1293, 1293, 1293, 1225, 1225, 1225, 1225, 1225, 1225, 1346, + 1346, 1347, 1347, 1347, 1144, 1144, 1225, 1225, 1225, 1225, + 883, 1348, 1225, 1225, 1225, 1225, 1225, 1331, 1333, 1333, + 1333, 1333, 1333, 922, 1293, 1293, 1293, 1225, 1225, 1225, + 1225, 1349, 1349, 1225, 1225, 1348, 1348, 1225, 1348, 1225, + 1225, 1225, 1333, 1333, 1333, 1293, 1293, 1293, 1293, 1293, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183 + 1225, 1333, 1333, 1333, 1333, 1333, 1293, 1293, 1293, 1225, + 1225, 1225, 1333, 1333, 1333, 1293, 1293, 1293, 1225, 1225, + 1225, 1333, 1333, 1333, 0, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225 } ; -static yyconst flex_int16_t yy_nxt[8301] = +static yyconst flex_int16_t yy_nxt[9611] = { 0, - 20, 21, 22, 20, 23, 21, 24, 25, 26, 27, - 28, 29, 20, 30, 31, 20, 20, 32, 33, 34, - 35, 33, 33, 33, 33, 33, 33, 33, 36, 37, - 38, 39, 40, 41, 42, 41, 43, 44, 45, 45, - 46, 45, 47, 48, 49, 45, 50, 51, 52, 53, - 45, 45, 45, 45, 45, 54, 20, 55, 55, 55, - 55, 55, 55, 20, 20, 20, 20, 20, 20, 20, - 20, 56, 20, 20, 57, 142, 181, 170, 57, 142, - 151, 58, 21, 73, 141, 74, 21, 75, 174, 76, - 185, 182, 177, 172, 168, 76, 170, 178, 21, 73, + 22, 23, 24, 22, 25, 23, 26, 27, 28, 22, + 29, 30, 31, 22, 32, 33, 22, 22, 34, 35, + 36, 37, 35, 35, 35, 35, 35, 35, 35, 38, + 39, 40, 41, 42, 43, 44, 43, 45, 46, 47, + 47, 48, 47, 49, 50, 51, 47, 52, 53, 54, + 55, 47, 47, 47, 47, 47, 56, 57, 22, 58, + 58, 58, 58, 58, 58, 22, 22, 22, 22, 22, + 22, 22, 22, 59, 22, 22, 60, 156, 491, 155, + 60, 156, 184, 61, 23, 77, 492, 78, 23, 79, + 182, 80, 23, 77, 1225, 78, 23, 79, 80, 80, - 152, 74, 21, 75, 186, 76, 173, 59, 60, 76, - 77, 76, 61, 164, 164, 164, 164, 164, 165, 170, - 62, 183, 175, 63, 64, 76, 77, 153, 64, 90, - 22, 65, 23, 90, 91, 92, 78, 66, 90, 22, - 67, 23, 90, 91, 92, 224, 208, 170, 251, 203, - 208, 255, 78, 283, 20, 141, 286, 41, 21, 22, - 38, 23, 21, 116, 117, 68, 201, 69, 311, 70, - 45, 223, 45, 21, 22, 38, 23, 21, 116, 117, - 157, 157, 141, 93, 157, 157, 188, 141, 231, 268, - 251, 191, 93, 205, 71, 64, 191, 205, 225, 64, + 84, 85, 219, 86, 84, 87, 80, 88, 89, 165, + 62, 63, 80, 81, 184, 64, 186, 191, 596, 184, + 80, 81, 192, 65, 251, 188, 66, 67, 199, 187, + 166, 67, 102, 24, 68, 25, 102, 103, 104, 82, + 184, 69, 200, 189, 70, 195, 197, 82, 102, 24, + 250, 25, 102, 103, 104, 90, 297, 167, 22, 258, + 196, 43, 178, 178, 178, 178, 178, 179, 226, 71, + 252, 72, 226, 73, 47, 221, 47, 84, 85, 155, + 86, 84, 87, 74, 88, 89, 289, 105, 23, 24, + 40, 25, 23, 129, 130, 378, 250, 243, 223, 75, - 192, 254, 65, 230, 157, 213, 206, 230, 66, 141, - 140, 67, 118, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 449, 223, 20, 193, 118, 41, 158, - 193, 187, 188, 266, 217, 187, 68, 229, 69, 141, - 70, 45, 140, 45, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 151, 172, 346, 229, 170, 194, - 195, 146, 141, 298, 196, 71, 21, 22, 173, 23, - 21, 24, 197, 79, 236, 198, 227, 188, 347, 217, - 227, 207, 265, 200, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 232, 233, 692, 234, 232, 240, + 67, 243, 223, 105, 67, 171, 171, 68, 155, 256, + 171, 171, 224, 160, 69, 330, 186, 70, 209, 184, + 23, 24, 40, 25, 23, 129, 130, 210, 155, 187, + 171, 22, 90, 290, 43, 246, 202, 278, 239, 246, + 282, 278, 71, 131, 72, 218, 73, 47, 165, 47, + 201, 202, 281, 239, 201, 172, 74, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 211, 160, 263, + 330, 211, 75, 23, 24, 131, 25, 23, 26, 154, + 91, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 254, 202, 155, 239, 254, 264, 479, 480, 291, - 228, 237, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 248, 248, 248, 248, 248, 249, 438, 439, - 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, 81, 21, - 22, 151, 23, 21, 24, 1183, 79, 246, 246, 246, - 246, 246, 246, 246, 246, 246, 246, 283, 262, 142, - 308, 236, 141, 142, 336, 210, 210, 263, 285, 210, - 210, 310, 231, 187, 188, 141, 217, 187, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, 270, 210, - 141, 457, 188, 80, 81, 81, 81, 81, 81, 81, + 295, 212, 213, 209, 228, 228, 214, 257, 292, 228, + 228, 257, 235, 312, 215, 225, 315, 216, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 92, 228, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 23, 24, + 294, 25, 23, 26, 229, 91, 155, 259, 260, 370, + 261, 259, 256, 255, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 275, 275, 275, 275, 275, 276, + 1225, 1197, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 201, 202, 289, 239, 201, 309, 309, 309, - 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 21, 22, 211, 23, 21, 24, 83, 79, - 268, 229, 398, 141, 84, 85, 86, 265, 216, 188, - 450, 217, 216, 218, 238, 219, 348, 238, 451, 218, - 87, 219, 268, 238, 151, 268, 238, 141, 141, 238, - 238, 295, 337, 274, 274, 219, 219, 274, 274, 146, - 296, 298, 460, 240, 1183, 238, 88, 21, 22, 141, - 23, 21, 24, 83, 79, 349, 400, 274, 298, 84, - 85, 86, 219, 280, 280, 280, 280, 280, 281, 241, - 238, 237, 161, 187, 188, 87, 217, 187, 146, 1183, + 309, 309, 310, 92, 154, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 23, 24, 165, 25, 23, 26, 95, + 91, 312, 340, 202, 202, 155, 96, 97, 98, 303, + 303, 290, 314, 342, 303, 303, 263, 294, 165, 343, + 155, 380, 99, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 156, 303, 490, 155, 156, 155, 1225, + 155, 297, 371, 299, 155, 383, 389, 854, 100, 23, + 24, 327, 25, 23, 26, 95, 91, 155, 297, 304, + 328, 381, 96, 97, 98, 296, 264, 307, 307, 307, - 402, 267, 275, 278, 278, 278, 278, 278, 278, 278, - 278, 278, 278, 306, 306, 306, 306, 306, 306, 141, - 540, 88, 38, 21, 22, 38, 23, 21, 24, 38, - 38, 94, 28, 29, 38, 95, 31, 38, 38, 96, - 97, 98, 99, 97, 97, 97, 97, 97, 97, 97, - 36, 100, 38, 38, 101, 102, 102, 102, 103, 104, - 105, 105, 106, 105, 107, 108, 109, 105, 110, 105, - 111, 105, 105, 105, 105, 105, 105, 80, 38, 112, - 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, - 113, 113, 113, 114, 113, 113, 119, 21, 22, 119, + 307, 307, 307, 307, 307, 307, 307, 1225, 99, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 201, + 202, 685, 239, 201, 100, 40, 23, 24, 40, 25, + 23, 26, 40, 40, 40, 106, 30, 31, 40, 107, + 33, 40, 40, 108, 109, 110, 111, 109, 109, 109, + 109, 109, 109, 109, 38, 112, 40, 40, 113, 114, + 114, 114, 115, 116, 117, 117, 118, 117, 119, 120, + 121, 117, 122, 117, 123, 117, 117, 117, 117, 117, + 117, 92, 124, 40, 125, 125, 125, 125, 125, 125, - 23, 21, 24, 38, 38, 120, 28, 29, 119, 121, - 31, 119, 119, 122, 123, 124, 125, 123, 123, 123, - 123, 123, 123, 123, 36, 37, 38, 119, 126, 127, - 127, 127, 128, 129, 130, 130, 131, 130, 132, 133, - 134, 130, 135, 130, 136, 130, 130, 130, 130, 130, - 130, 137, 119, 138, 138, 138, 138, 138, 138, 119, - 119, 119, 119, 119, 119, 119, 119, 139, 119, 119, - 146, 266, 147, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 148, 1155, 1183, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 159, 549, 160, 160, + 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, + 126, 132, 23, 24, 132, 25, 23, 26, 40, 40, + 132, 133, 30, 31, 132, 134, 33, 132, 132, 135, + 136, 137, 138, 136, 136, 136, 136, 136, 136, 136, + 38, 39, 40, 132, 139, 140, 140, 140, 141, 142, + 143, 143, 144, 143, 145, 146, 147, 143, 148, 143, + 149, 143, 143, 143, 143, 143, 143, 150, 151, 132, + 152, 152, 152, 152, 152, 152, 132, 132, 132, 132, + 132, 132, 132, 132, 153, 132, 132, 160, 332, 161, + 385, 333, 333, 333, 333, 333, 333, 333, 333, 333, - 160, 160, 160, 160, 160, 160, 160, 160, 161, 141, - 812, 459, 162, 162, 162, 162, 162, 162, 187, 188, - 265, 217, 187, 140, 140, 140, 140, 140, 208, 140, - 140, 141, 208, 140, 308, 141, 344, 162, 162, 162, - 162, 162, 162, 140, 345, 416, 140, 140, 140, 140, - 208, 1183, 140, 352, 208, 140, 140, 352, 140, 140, - 140, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 161, 141, 647, 140, 169, 169, 169, 169, 169, - 169, 170, 170, 170, 170, 171, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 141, 170, + 333, 162, 206, 412, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 173, 155, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 175, 258, 175, 382, + 176, 176, 176, 176, 176, 176, 297, 386, 1093, 439, + 155, 154, 154, 154, 154, 154, 378, 226, 154, 154, + 290, 226, 154, 155, 379, 155, 176, 176, 176, 176, + 176, 176, 154, 602, 653, 154, 154, 154, 154, 226, + 243, 154, 154, 226, 243, 154, 154, 256, 154, 154, + 154, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 175, 155, 297, 154, 183, 183, 183, 183, 183, - 162, 162, 162, 162, 162, 162, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 1183, 146, 1183, - 402, 170, 170, 170, 170, 170, 170, 141, 146, 548, - 298, 170, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 344, 141, 1183, 1183, 140, 140, 140, 140, - 140, 140, 187, 188, 552, 189, 190, 140, 140, 140, - 344, 140, 140, 300, 1183, 140, 301, 301, 301, 301, - 301, 301, 301, 301, 301, 301, 1051, 151, 141, 140, - 140, 140, 146, 351, 147, 1183, 150, 150, 150, 150, + 183, 184, 184, 184, 184, 185, 184, 184, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 184, 155, 154, + 184, 176, 176, 176, 176, 176, 176, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 184, 1225, 441, + 1225, 330, 184, 184, 184, 184, 184, 184, 587, 160, + 223, 330, 184, 206, 223, 390, 154, 171, 171, 390, + 205, 368, 171, 171, 224, 160, 1225, 443, 154, 154, + 154, 154, 154, 154, 201, 202, 1153, 203, 204, 154, + 154, 154, 171, 155, 154, 154, 500, 1225, 154, 334, - 150, 237, 150, 150, 343, 148, 150, 1183, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 1183, 554, - 150, 150, 150, 154, 154, 154, 154, 154, 205, 154, - 154, 1183, 205, 154, 237, 157, 157, 539, 657, 157, - 157, 206, 187, 188, 403, 217, 187, 154, 154, 154, - 232, 233, 268, 234, 232, 199, 146, 399, 147, 157, - 357, 357, 357, 357, 357, 357, 141, 352, 1183, 220, - 422, 352, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 157, 141, 158, 157, 230, 752, 157, 157, - 230, 157, 157, 157, 157, 268, 1183, 157, 157, 302, + 335, 336, 334, 334, 334, 334, 334, 334, 334, 160, + 297, 330, 154, 154, 154, 206, 440, 172, 369, 206, + 206, 206, 295, 207, 264, 206, 206, 377, 340, 206, + 164, 164, 164, 164, 164, 155, 155, 164, 164, 457, + 463, 164, 444, 206, 206, 206, 338, 338, 338, 338, + 338, 338, 155, 1225, 498, 164, 164, 164, 338, 338, + 338, 338, 338, 338, 338, 338, 338, 338, 497, 155, + 208, 160, 294, 161, 155, 168, 168, 168, 168, 168, + 378, 155, 168, 168, 1225, 162, 168, 378, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 588, 501, - 303, 304, 302, 302, 302, 302, 302, 302, 302, 510, - 546, 240, 157, 157, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 1111, 1183, 141, 243, 157, 240, - 229, 1183, 244, 240, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 161, 240, 547, 556, 246, 246, - 246, 246, 246, 246, 240, 240, 240, 240, 240, 240, - 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, - 240, 1183, 1183, 246, 246, 246, 246, 246, 246, 240, - 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, + 168, 168, 168, 338, 338, 338, 338, 338, 338, 338, + 338, 338, 338, 354, 355, 487, 488, 356, 489, 357, + 358, 1225, 854, 359, 289, 360, 361, 201, 202, 211, + 239, 201, 232, 211, 155, 154, 217, 232, 577, 231, + 387, 232, 232, 232, 1225, 233, 386, 232, 232, 502, + 155, 232, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 687, 212, 213, 232, 232, 232, 214, 201, + 202, 290, 239, 201, 201, 202, 215, 239, 201, 216, + 340, 390, 155, 228, 228, 390, 1225, 388, 228, 228, + 847, 457, 234, 238, 202, 249, 239, 238, 240, 249, - 1183, 550, 240, 240, 240, 240, 240, 240, 240, 240, - 240, 240, 1183, 400, 663, 402, 240, 240, 240, 240, - 240, 240, 322, 323, 482, 483, 324, 484, 325, 326, - 446, 447, 327, 448, 328, 329, 518, 518, 518, 308, - 1183, 240, 240, 240, 240, 240, 240, 240, 545, 141, - 416, 240, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 161, 240, 812, 141, 250, 250, 250, 250, - 250, 250, 251, 251, 251, 251, 252, 251, 251, 251, - 251, 251, 251, 251, 251, 251, 251, 251, 251, 1051, - 253, 246, 246, 246, 246, 246, 246, 240, 240, 240, + 241, 249, 249, 580, 1225, 240, 257, 241, 228, 249, + 257, 165, 595, 354, 355, 524, 525, 356, 526, 357, + 358, 241, 241, 359, 249, 360, 201, 202, 155, 239, + 201, 297, 1225, 229, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 549, 550, 552, 551, 241, 240, + 160, 1225, 161, 259, 260, 206, 261, 259, 296, 264, + 594, 256, 324, 437, 247, 603, 155, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 265, 576, 297, + 265, 250, 160, 1093, 443, 171, 265, 265, 1225, 171, + 265, 1225, 171, 265, 265, 262, 262, 262, 262, 171, - 240, 240, 240, 240, 240, 240, 240, 240, 251, 251, - 251, 251, 251, 251, 251, 251, 251, 251, 1183, 141, - 567, 1183, 251, 251, 251, 251, 251, 251, 141, 772, - 210, 210, 251, 344, 210, 210, 187, 188, 535, 217, - 187, 536, 193, 141, 1183, 536, 193, 240, 240, 240, - 240, 240, 240, 276, 210, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 161, 1183, 658, 537, 278, - 278, 278, 278, 278, 278, 194, 195, 322, 323, 211, - 196, 324, 141, 325, 326, 1183, 555, 327, 197, 328, - 223, 198, 268, 534, 278, 278, 278, 278, 278, 278, + 340, 155, 262, 262, 293, 599, 262, 267, 293, 265, + 438, 461, 582, 171, 171, 395, 395, 395, 395, 395, + 395, 262, 262, 391, 392, 393, 391, 391, 391, 391, + 391, 391, 391, 268, 265, 265, 171, 1023, 441, 171, + 443, 1225, 171, 171, 1225, 171, 171, 171, 171, 171, + 385, 1225, 171, 171, 265, 265, 265, 265, 265, 294, + 581, 265, 265, 591, 592, 265, 267, 171, 171, 395, + 395, 395, 395, 395, 395, 395, 395, 395, 395, 265, + 265, 265, 395, 395, 395, 395, 395, 395, 395, 395, + 395, 395, 270, 171, 171, 267, 1225, 386, 271, 267, - 267, 222, 538, 267, 141, 222, 577, 222, 222, 267, - 562, 578, 267, 267, 222, 267, 267, 267, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 161, 222, - 981, 267, 282, 282, 282, 282, 282, 282, 283, 283, - 283, 283, 284, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 268, 283, 278, 278, 278, - 278, 278, 278, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 1183, 1092, 308, 1183, 283, 283, - 283, 283, 283, 283, 146, 553, 298, 416, 283, 149, - - 149, 149, 149, 149, 149, 149, 149, 149, 149, 507, - 508, 141, 509, 267, 267, 267, 267, 267, 267, 187, - 188, 560, 293, 294, 267, 267, 267, 344, 267, 267, - 170, 851, 267, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 268, 611, 267, 267, 267, 157, - 141, 456, 140, 156, 140, 140, 156, 264, 140, 140, - 557, 264, 156, 353, 354, 355, 353, 353, 353, 353, - 353, 353, 353, 1183, 268, 141, 156, 156, 140, 159, - 561, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 161, 486, 641, 551, 305, 305, 305, 305, 305, - - 305, 141, 235, 235, 235, 235, 157, 569, 235, 235, - 157, 265, 235, 157, 240, 141, 141, 240, 141, 157, - 305, 305, 305, 305, 305, 305, 140, 235, 235, 140, - 1065, 268, 1183, 157, 157, 140, 591, 240, 140, 140, - 240, 140, 140, 140, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 161, 592, 643, 140, 312, 312, - 312, 312, 312, 312, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 141, 170, 305, 305, 305, 305, 305, 305, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 1183, 161, 1183, 1122, 170, 170, 170, 170, 170, 170, - 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, - 381, 381, 381, 381, 381, 381, 763, 660, 268, 140, - 140, 140, 140, 140, 140, 210, 1183, 612, 140, 209, - 140, 140, 209, 238, 140, 140, 238, 146, 209, 298, - 187, 188, 238, 217, 187, 238, 653, 543, 238, 238, - 141, 543, 209, 209, 140, 527, 527, 527, 527, 527, - 528, 170, 240, 268, 238, 843, 238, 238, 238, 238, - 238, 536, 238, 238, 544, 536, 238, 357, 357, 357, - - 357, 357, 357, 357, 357, 357, 357, 1183, 241, 238, - 238, 238, 238, 157, 268, 650, 157, 1183, 537, 157, - 157, 566, 157, 157, 157, 157, 365, 366, 157, 157, - 367, 558, 368, 369, 559, 645, 370, 847, 371, 170, - 161, 598, 240, 157, 157, 1183, 599, 377, 378, 379, - 377, 377, 377, 377, 377, 377, 377, 541, 609, 274, - 274, 610, 542, 274, 274, 268, 141, 141, 243, 157, - 244, 613, 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 161, 274, 268, 568, 356, 356, 356, 356, - 356, 356, 1183, 268, 267, 267, 267, 267, 267, 240, - - 267, 267, 240, 1183, 267, 590, 649, 1183, 275, 644, - 1116, 356, 356, 356, 356, 356, 356, 240, 267, 267, - 267, 240, 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 161, 240, 1109, 651, 358, 358, 358, 358, - 358, 358, 251, 251, 251, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 251, 251, 251, 251, 251, 661, - 253, 356, 356, 356, 356, 356, 356, 240, 240, 240, - 240, 240, 240, 240, 240, 240, 240, 240, 251, 251, - 251, 251, 251, 251, 251, 251, 251, 251, 1183, 141, - 141, 1183, 251, 251, 251, 251, 251, 251, 1183, 269, - - 269, 269, 269, 269, 648, 269, 269, 646, 403, 269, - 404, 404, 404, 404, 404, 404, 308, 240, 240, 240, - 240, 240, 240, 269, 269, 269, 271, 271, 271, 271, - 271, 662, 271, 271, 1183, 1183, 271, 381, 381, 381, - 381, 381, 381, 381, 381, 381, 381, 141, 308, 652, - 271, 271, 271, 274, 141, 642, 267, 273, 267, 267, - 273, 1183, 267, 267, 141, 668, 273, 381, 381, 381, - 381, 381, 381, 381, 381, 381, 381, 1183, 757, 141, - 273, 273, 267, 276, 664, 380, 380, 380, 380, 380, - 380, 380, 380, 380, 380, 161, 522, 308, 655, 380, - - 380, 380, 380, 380, 380, 389, 390, 1183, 524, 391, - 543, 392, 393, 1183, 543, 394, 656, 395, 1183, 1183, - 308, 654, 268, 141, 380, 380, 380, 380, 380, 380, - 267, 524, 536, 267, 669, 240, 536, 544, 240, 267, - 659, 1183, 267, 267, 981, 267, 267, 267, 382, 382, - 382, 382, 382, 382, 382, 382, 382, 382, 161, 537, - 758, 267, 382, 382, 382, 382, 382, 382, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 268, 283, 380, 380, 380, - 380, 380, 380, 267, 267, 267, 267, 267, 267, 267, - - 267, 267, 267, 267, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 1183, 146, 901, 298, 283, 283, - 283, 283, 283, 283, 301, 301, 301, 301, 301, 301, - 301, 301, 301, 301, 461, 1085, 462, 462, 462, 462, - 462, 462, 1084, 267, 267, 267, 267, 267, 267, 301, - 301, 301, 301, 301, 301, 301, 301, 301, 301, 403, - 712, 404, 404, 404, 404, 404, 404, 404, 404, 404, - 404, 461, 1080, 462, 462, 462, 462, 462, 462, 462, - 462, 462, 462, 713, 210, 141, 667, 614, 210, 308, - 670, 210, 240, 268, 689, 240, 1079, 210, 141, 403, - - 416, 405, 405, 405, 405, 405, 405, 405, 405, 405, - 405, 210, 210, 461, 268, 463, 463, 463, 463, 463, - 463, 463, 463, 463, 463, 461, 141, 464, 464, 464, - 464, 464, 465, 462, 462, 462, 462, 240, 141, 403, - 240, 406, 406, 406, 406, 406, 407, 404, 404, 404, - 404, 516, 516, 517, 518, 518, 518, 518, 518, 518, - 518, 413, 308, 274, 308, 543, 1183, 274, 240, 543, - 274, 240, 690, 524, 751, 524, 274, 693, 141, 408, - 408, 408, 408, 408, 408, 408, 408, 408, 408, 161, - 274, 274, 544, 408, 408, 408, 408, 408, 408, 511, - - 512, 513, 511, 511, 511, 511, 511, 511, 511, 634, - 634, 634, 634, 634, 635, 1078, 141, 1183, 408, 408, - 408, 408, 408, 408, 410, 411, 412, 412, 412, 412, - 412, 412, 412, 412, 413, 753, 141, 1021, 414, 414, - 414, 414, 414, 414, 421, 421, 421, 421, 421, 421, - 421, 421, 421, 421, 536, 543, 268, 141, 536, 543, - 1021, 716, 748, 414, 414, 414, 414, 414, 414, 308, - 417, 418, 419, 417, 417, 417, 417, 417, 417, 417, - 420, 537, 544, 714, 421, 421, 421, 421, 421, 421, - 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, - - 240, 1183, 691, 240, 1183, 522, 308, 522, 308, 421, - 421, 421, 421, 421, 421, 140, 268, 524, 140, 631, - 764, 1183, 754, 1183, 140, 170, 852, 140, 140, 765, - 140, 140, 140, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 161, 771, 1069, 140, 423, 423, 423, - 423, 423, 423, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 141, 170, 408, 408, 408, 408, 408, 408, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 1183, - - 141, 1068, 857, 170, 170, 170, 170, 170, 170, 1183, - 715, 525, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 741, 741, 741, 741, 741, 742, 170, 140, 140, - 140, 140, 140, 140, 466, 466, 466, 466, 466, 466, - 466, 466, 466, 466, 161, 268, 170, 928, 466, 466, - 466, 466, 466, 466, 570, 571, 572, 570, 570, 570, - 570, 570, 570, 570, 749, 755, 787, 240, 749, 755, - 240, 788, 1183, 466, 466, 466, 466, 466, 466, 467, - 467, 467, 467, 467, 467, 467, 467, 467, 467, 766, - 308, 750, 756, 467, 467, 467, 467, 467, 467, 461, - - 1183, 462, 462, 462, 462, 462, 462, 462, 462, 462, - 462, 800, 759, 1183, 308, 901, 801, 760, 466, 466, - 466, 466, 466, 466, 486, 631, 487, 487, 487, 487, - 487, 487, 487, 487, 487, 487, 461, 814, 462, 462, - 462, 462, 462, 462, 462, 462, 462, 462, 593, 594, - 595, 593, 593, 593, 593, 593, 593, 593, 240, 141, - 694, 240, 240, 268, 486, 240, 488, 488, 488, 488, - 488, 488, 488, 488, 488, 488, 777, 486, 972, 487, - 487, 487, 487, 487, 487, 268, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 413, 170, 146, 268, - - 298, 848, 932, 268, 486, 170, 489, 489, 489, 489, - 489, 490, 487, 487, 487, 487, 268, 625, 626, 627, - 625, 625, 625, 625, 625, 625, 625, 533, 533, 533, - 533, 533, 533, 533, 533, 533, 533, 240, 1037, 141, - 240, 141, 141, 268, 267, 840, 491, 491, 491, 491, - 491, 491, 491, 491, 491, 491, 775, 1030, 853, 859, - 491, 491, 491, 491, 491, 491, 522, 308, 629, 629, - 629, 629, 629, 629, 141, 761, 767, 769, 524, 761, - 767, 769, 791, 1029, 776, 491, 491, 491, 491, 491, - 491, 492, 492, 492, 492, 492, 492, 492, 492, 492, - - 492, 1027, 762, 768, 770, 492, 492, 492, 492, 492, - 492, 633, 633, 633, 633, 633, 633, 633, 633, 633, - 633, 885, 614, 283, 615, 615, 615, 615, 615, 615, - 491, 491, 491, 491, 491, 491, 403, 846, 404, 404, - 404, 404, 404, 404, 404, 404, 404, 404, 1183, 170, - 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, - 671, 141, 672, 672, 672, 672, 672, 672, 672, 672, - 672, 672, 170, 141, 141, 141, 403, 850, 404, 404, - 404, 404, 404, 404, 404, 404, 404, 404, 671, 858, - 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, - - 671, 308, 674, 674, 674, 674, 674, 675, 672, 672, - 672, 672, 631, 268, 1007, 141, 522, 308, 523, 523, - 523, 523, 523, 523, 523, 523, 523, 523, 524, 170, - 889, 926, 525, 525, 525, 525, 525, 525, 717, 718, - 719, 717, 717, 717, 717, 717, 717, 717, 671, 170, - 672, 672, 672, 672, 672, 672, 1003, 525, 525, 525, - 525, 525, 525, 308, 529, 530, 531, 529, 529, 529, - 529, 529, 529, 529, 532, 141, 283, 962, 533, 533, - 533, 533, 533, 533, 729, 931, 730, 730, 730, 730, - 730, 730, 730, 730, 730, 730, 842, 283, 170, 911, - - 141, 881, 170, 533, 533, 533, 533, 533, 533, 140, - 778, 749, 140, 268, 170, 749, 964, 814, 140, 283, - 845, 140, 140, 804, 140, 140, 140, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 161, 750, 723, - 140, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 141, 170, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 573, 573, 573, 573, 573, 573, 573, - 573, 573, 573, 849, 522, 308, 268, 573, 573, 573, - - 573, 573, 573, 729, 170, 731, 731, 731, 731, 731, - 731, 731, 731, 731, 731, 817, 817, 817, 817, 817, - 818, 965, 573, 573, 573, 573, 573, 573, 574, 574, - 574, 574, 574, 574, 574, 574, 574, 574, 887, 1183, - 308, 961, 574, 574, 574, 574, 574, 574, 729, 283, - 732, 732, 732, 732, 732, 733, 730, 730, 730, 730, - 834, 834, 834, 834, 834, 835, 805, 573, 573, 573, - 573, 573, 573, 240, 240, 588, 240, 240, 589, 240, - 240, 240, 240, 1183, 1000, 170, 955, 240, 240, 240, - 240, 240, 240, 640, 640, 640, 640, 640, 640, 640, - - 640, 640, 640, 729, 141, 730, 730, 730, 730, 730, - 730, 954, 240, 240, 240, 240, 240, 240, 486, 952, - 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, - 522, 308, 736, 736, 736, 736, 736, 736, 1010, 141, - 1011, 938, 631, 740, 740, 740, 740, 740, 740, 740, - 740, 740, 740, 283, 170, 943, 966, 268, 486, 883, - 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, - 1183, 951, 739, 739, 739, 739, 739, 739, 739, 739, - 739, 739, 779, 780, 781, 779, 779, 779, 779, 779, - 779, 779, 146, 1004, 298, 141, 170, 268, 614, 884, - - 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, - 671, 283, 672, 672, 672, 672, 672, 672, 672, 672, - 672, 672, 671, 308, 672, 672, 672, 672, 672, 672, - 672, 672, 672, 672, 631, 755, 860, 141, 614, 755, - 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, - 308, 856, 761, 522, 308, 283, 761, 170, 1005, 886, - 141, 738, 756, 767, 769, 631, 749, 767, 769, 694, - 749, 695, 695, 695, 695, 695, 695, 141, 614, 762, - 617, 617, 617, 617, 617, 618, 615, 615, 615, 615, - 768, 770, 812, 750, 792, 793, 794, 792, 792, 792, - - 792, 792, 792, 792, 814, 755, 761, 283, 268, 755, - 761, 141, 888, 283, 1039, 966, 924, 141, 522, 308, - 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, - 524, 268, 756, 762, 628, 628, 628, 628, 628, 628, - 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, - 940, 767, 769, 749, 141, 767, 769, 749, 939, 628, - 628, 628, 628, 628, 628, 522, 308, 630, 630, 630, - 630, 630, 630, 630, 630, 630, 630, 631, 768, 770, - 750, 632, 632, 632, 632, 632, 632, 816, 816, 816, - 816, 816, 816, 816, 816, 816, 816, 755, 761, 767, - - 141, 755, 761, 767, 522, 308, 632, 632, 632, 632, - 632, 632, 308, 636, 637, 638, 636, 636, 636, 636, - 636, 636, 636, 639, 756, 762, 768, 640, 640, 640, - 640, 640, 640, 1183, 1183, 815, 815, 815, 815, 815, - 815, 815, 815, 815, 815, 1153, 814, 522, 308, 170, - 1070, 1153, 640, 640, 640, 640, 640, 640, 694, 738, - 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, - 824, 825, 826, 824, 824, 824, 824, 824, 824, 824, - 729, 953, 730, 730, 730, 730, 730, 730, 730, 730, - 730, 730, 1006, 170, 251, 170, 875, 268, 694, 812, - - 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, - 729, 814, 730, 730, 730, 730, 730, 730, 730, 730, - 730, 730, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 941, 146, 268, 298, 941, 268, 694, 933, - 697, 697, 697, 697, 697, 698, 695, 695, 695, 695, - 1183, 308, 522, 308, 829, 829, 829, 829, 829, 829, - 283, 1086, 738, 963, 738, 833, 833, 833, 833, 833, - 833, 833, 833, 833, 833, 769, 283, 268, 614, 769, - 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, - 1183, 942, 832, 832, 832, 832, 832, 832, 832, 832, - - 832, 832, 770, 860, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 927, 1031, 1028, 141, 614, 251, - 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, - 860, 862, 862, 862, 862, 862, 862, 862, 862, 862, - 862, 860, 863, 863, 863, 863, 863, 864, 861, 861, - 861, 861, 1009, 1010, 268, 1011, 1009, 141, 724, 725, - 726, 724, 724, 724, 724, 724, 724, 724, 727, 1071, - 723, 1011, 728, 728, 728, 728, 728, 728, 1031, 890, - 891, 892, 893, 890, 890, 890, 890, 890, 890, 805, - 806, 806, 806, 806, 806, 806, 520, 728, 728, 728, - - 728, 728, 728, 522, 308, 736, 736, 736, 736, 736, - 736, 736, 736, 736, 736, 631, 141, 268, 882, 735, - 735, 735, 735, 735, 735, 1087, 1117, 141, 895, 896, - 897, 895, 895, 895, 895, 895, 895, 895, 904, 904, - 904, 904, 904, 905, 735, 735, 735, 735, 735, 735, - 522, 308, 737, 737, 737, 737, 737, 737, 737, 737, - 737, 737, 738, 874, 141, 268, 739, 739, 739, 739, - 739, 739, 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 922, 922, 922, 922, 922, 923, 1136, 1144, - 1137, 739, 739, 739, 739, 739, 739, 308, 743, 744, - - 745, 743, 743, 743, 743, 743, 743, 743, 746, 1154, - 873, 1137, 747, 747, 747, 747, 747, 747, 812, 812, - 899, 899, 899, 899, 899, 899, 141, 1130, 141, 1130, - 814, 901, 522, 308, 872, 1130, 997, 747, 747, 747, - 747, 747, 747, 694, 738, 695, 695, 695, 695, 695, - 695, 695, 695, 695, 695, 903, 903, 903, 903, 903, - 903, 903, 903, 903, 903, 1183, 1183, 902, 902, 902, - 902, 902, 902, 902, 902, 902, 902, 1038, 901, 871, - 283, 1040, 268, 694, 283, 695, 695, 695, 695, 695, - 695, 695, 695, 695, 695, 911, 1160, 912, 912, 912, - - 912, 912, 912, 912, 912, 912, 912, 911, 308, 913, - 913, 913, 913, 913, 913, 913, 913, 913, 913, 738, - 870, 869, 268, 805, 806, 806, 806, 806, 806, 806, - 806, 806, 806, 806, 911, 268, 914, 914, 914, 914, - 914, 915, 912, 912, 912, 912, 522, 308, 839, 839, - 839, 839, 839, 839, 839, 839, 839, 839, 831, 868, - 867, 141, 805, 807, 807, 807, 807, 807, 807, 807, - 807, 807, 807, 1183, 308, 522, 308, 918, 918, 918, - 918, 918, 918, 866, 865, 831, 812, 831, 921, 921, - 921, 921, 921, 921, 921, 921, 921, 921, 901, 855, - - 141, 805, 808, 808, 808, 808, 808, 809, 806, 806, - 806, 806, 1183, 944, 920, 920, 920, 920, 920, 920, - 920, 920, 920, 920, 854, 308, 929, 934, 936, 812, - 929, 934, 936, 170, 844, 944, 831, 944, 945, 141, - 812, 981, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 814, 930, 935, 937, 815, 815, 815, 815, - 815, 815, 141, 946, 947, 948, 949, 946, 946, 946, - 946, 946, 946, 929, 170, 170, 170, 929, 146, 729, - 298, 815, 815, 815, 815, 815, 815, 819, 820, 821, - 819, 819, 819, 819, 819, 819, 819, 822, 723, 520, - - 930, 823, 823, 823, 823, 823, 823, 860, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 860, 861, - 861, 861, 861, 861, 861, 413, 823, 823, 823, 823, - 823, 823, 522, 308, 829, 829, 829, 829, 829, 829, - 829, 829, 829, 829, 738, 268, 1072, 268, 828, 828, - 828, 828, 828, 828, 860, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 929, 934, 936, 268, 929, - 934, 936, 268, 828, 828, 828, 828, 828, 828, 522, - 308, 830, 830, 830, 830, 830, 830, 830, 830, 830, - 830, 831, 930, 935, 937, 832, 832, 832, 832, 832, - - 832, 956, 957, 958, 959, 956, 956, 956, 956, 956, - 956, 803, 929, 251, 251, 251, 929, 146, 802, 298, - 832, 832, 832, 832, 832, 832, 308, 836, 837, 838, - 836, 836, 836, 836, 836, 836, 836, 799, 268, 930, - 798, 839, 839, 839, 839, 839, 839, 308, 875, 876, - 876, 876, 876, 876, 876, 934, 1064, 1064, 831, 934, - 283, 522, 308, 1064, 1183, 812, 839, 839, 839, 839, - 839, 839, 140, 831, 936, 140, 981, 981, 936, 797, - 1012, 140, 935, 796, 140, 140, 268, 140, 140, 140, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - - 795, 937, 790, 140, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 841, 170, - 170, 170, 170, 170, 170, 170, 170, 141, 170, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 875, 876, 876, 876, - 876, 876, 876, 876, 876, 876, 876, 972, 789, 973, - 973, 973, 973, 973, 973, 973, 973, 973, 973, 934, - 936, 812, 786, 934, 936, 984, 984, 984, 984, 984, - 985, 785, 784, 1051, 268, 875, 877, 877, 877, 877, - 877, 877, 877, 877, 877, 877, 935, 937, 972, 783, - - 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, - 1009, 1010, 782, 1011, 1009, 1014, 671, 283, 283, 1014, - 1015, 1016, 1017, 268, 875, 878, 878, 878, 878, 878, - 879, 876, 876, 876, 876, 972, 944, 975, 975, 975, - 975, 975, 976, 973, 973, 973, 973, 910, 910, 910, - 910, 910, 910, 910, 910, 910, 910, 774, 944, 1183, - 944, 944, 268, 267, 1001, 812, 267, 773, 1001, 1018, - 141, 1051, 267, 141, 141, 267, 267, 1051, 267, 267, - 267, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 1002, 141, 1183, 267, 283, 283, 283, 283, 283, - - 283, 283, 283, 283, 283, 283, 283, 283, 283, 880, - 283, 283, 283, 283, 283, 283, 283, 283, 268, 283, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 175, 267, 598, 1134, 273, 273, 273, 273, 273, 273, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 805, 806, 806, - 806, 806, 806, 806, 806, 806, 806, 806, 812, 723, - 979, 979, 979, 979, 979, 979, 1130, 1130, 1130, 1130, - 901, 983, 983, 983, 983, 983, 983, 983, 983, 983, - 983, 221, 221, 221, 520, 141, 805, 806, 806, 806, - 806, 806, 806, 806, 806, 806, 806, 1183, 413, 982, - 982, 982, 982, 982, 982, 982, 982, 982, 982, 991, + 267, 267, 267, 267, 267, 267, 267, 560, 560, 560, + 273, 273, 273, 273, 273, 273, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 1225, 1225, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 1225, + 1225, 1225, 691, 267, 267, 267, 267, 267, 267, 403, + 404, 590, 583, 405, 609, 406, 407, 584, 1225, 408, + 1225, 409, 420, 420, 420, 420, 420, 420, 692, 267, - 992, 993, 991, 991, 991, 991, 991, 991, 991, 1110, - 146, 413, 298, 1110, 141, 812, 711, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 814, 812, 710, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 901, 221, 221, 221, 902, 902, 902, 902, 902, 902, - 911, 709, 912, 912, 912, 912, 912, 912, 912, 912, - 912, 912, 1054, 1054, 1054, 1054, 1054, 1055, 708, 902, - 902, 902, 902, 902, 902, 906, 907, 908, 906, 906, - 906, 906, 906, 906, 906, 909, 707, 706, 705, 910, - 910, 910, 910, 910, 910, 911, 704, 912, 912, 912, + 267, 267, 267, 267, 267, 267, 155, 155, 597, 267, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 175, 267, 1164, 378, 277, 277, 277, 277, 277, 277, + 278, 278, 278, 278, 279, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 1158, 703, 280, + 273, 273, 273, 273, 273, 273, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 1225, 1225, 155, + 155, 278, 278, 278, 278, 278, 278, 604, 619, 303, + 303, 278, 694, 620, 303, 303, 420, 420, 420, 420, - 912, 912, 912, 912, 912, 912, 912, 998, 1001, 703, - 702, 998, 1001, 701, 910, 910, 910, 910, 910, 910, - 522, 308, 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 831, 700, 999, 1002, 917, 917, 917, 917, - 917, 917, 911, 699, 912, 912, 912, 912, 912, 912, - 522, 308, 996, 996, 996, 996, 996, 996, 688, 687, - 686, 917, 917, 917, 917, 917, 917, 522, 308, 919, - 919, 919, 919, 919, 919, 919, 919, 919, 919, 685, - 684, 683, 682, 920, 920, 920, 920, 920, 920, 1066, - 681, 680, 1066, 1066, 998, 1001, 1066, 1107, 998, 1001, + 420, 420, 420, 420, 420, 420, 1225, 267, 267, 267, + 267, 267, 267, 305, 303, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 175, 160, 589, 330, 307, + 307, 307, 307, 307, 307, 630, 175, 528, 631, 304, + 296, 296, 296, 296, 296, 578, 155, 296, 296, 578, + 1225, 296, 297, 611, 1151, 307, 307, 307, 307, 307, + 307, 296, 297, 297, 296, 296, 296, 296, 795, 655, + 296, 296, 155, 579, 296, 296, 297, 296, 296, 296, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 175, 683, 608, 296, 311, 311, 311, 311, 311, 311, - 972, 1107, 973, 973, 973, 973, 973, 973, 920, 920, - 920, 920, 920, 920, 140, 253, 1067, 140, 253, 1067, - 253, 999, 1002, 140, 1108, 679, 140, 140, 678, 140, - 140, 140, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 677, 140, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 925, 170, 170, 170, 170, 170, 141, - 170, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 240, 676, - 1183, 1183, 240, 251, 251, 251, 251, 251, 251, 251, + 312, 312, 312, 312, 313, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 297, 296, 312, + 307, 307, 307, 307, 307, 307, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 1225, 340, 654, + 1225, 312, 312, 312, 312, 312, 312, 600, 696, 457, + 601, 312, 416, 417, 418, 416, 416, 416, 416, 416, + 416, 416, 201, 202, 1225, 239, 201, 296, 296, 296, + 296, 296, 296, 201, 202, 297, 322, 323, 296, 296, + 296, 640, 155, 296, 296, 593, 641, 296, 155, 297, - 251, 251, 251, 450, 240, 666, 665, 251, 251, 251, - 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 950, 251, 251, 251, 251, 251, - 1183, 253, 240, 240, 240, 240, 240, 240, 240, 240, - 240, 240, 240, 240, 240, 240, 240, 240, 240, 875, - 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, - 1014, 623, 520, 413, 1014, 1015, 1016, 1017, 1021, 619, - 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, - 1103, 1103, 1103, 1103, 1103, 1104, 413, 268, 875, 876, - 876, 876, 876, 876, 876, 876, 876, 876, 876, 1021, + 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, + 1225, 296, 296, 296, 206, 1225, 686, 1225, 206, 206, + 206, 690, 325, 1225, 206, 206, 175, 297, 206, 298, + 298, 298, 298, 298, 1225, 1225, 298, 298, 684, 688, + 298, 699, 206, 206, 206, 569, 569, 569, 569, 569, + 570, 184, 893, 155, 298, 298, 298, 689, 1225, 155, + 300, 300, 300, 300, 300, 706, 340, 300, 300, 326, + 171, 300, 610, 154, 170, 154, 154, 170, 695, 651, + 154, 154, 652, 702, 170, 300, 300, 300, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 170, 170, - 167, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, - 1023, 608, 607, 1021, 1020, 1024, 1024, 1024, 1024, 1024, - 1025, 1026, 1026, 1026, 1026, 606, 268, 267, 1183, 253, - 267, 1013, 253, 605, 253, 604, 267, 1013, 1013, 267, - 267, 1013, 267, 267, 267, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 1013, 1013, 1013, 267, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 960, 283, 283, 283, - 283, 283, 268, 283, 267, 267, 267, 267, 267, 267, + 154, 173, 1225, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 337, 175, 297, 1225, 155, 337, 337, 337, + 337, 337, 337, 428, 429, 564, 340, 430, 585, 431, + 432, 693, 585, 433, 1225, 434, 697, 566, 1225, 340, + 155, 155, 1225, 337, 337, 337, 337, 337, 337, 154, + 566, 585, 154, 710, 155, 585, 586, 700, 154, 154, + 712, 1225, 154, 154, 701, 154, 154, 154, 344, 344, + 344, 344, 344, 344, 344, 344, 344, 344, 175, 586, + 794, 154, 344, 344, 344, 344, 344, 344, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, + + 184, 184, 184, 184, 184, 155, 154, 184, 337, 337, + 337, 337, 337, 337, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 184, 184, 184, 184, 184, + 184, 184, 184, 184, 184, 1225, 184, 894, 705, 184, + 184, 184, 184, 184, 184, 333, 333, 333, 333, 333, + 333, 333, 333, 333, 333, 553, 554, 555, 553, 553, + 553, 553, 553, 553, 553, 154, 154, 154, 154, 154, + 154, 206, 704, 155, 1225, 206, 206, 206, 1225, 207, + 228, 206, 206, 297, 228, 206, 1225, 228, 340, 758, + 155, 155, 155, 340, 228, 698, 790, 755, 1023, 206, + + 206, 206, 1225, 711, 457, 155, 754, 1225, 228, 228, + 503, 1225, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 160, 623, 330, 1225, 208, 228, 297, 1225, + 154, 227, 154, 154, 227, 1225, 1225, 154, 154, 297, + 503, 227, 505, 505, 505, 505, 505, 505, 505, 505, + 505, 505, 617, 1225, 757, 227, 227, 154, 232, 756, + 805, 621, 232, 232, 232, 1225, 233, 656, 232, 232, + 943, 503, 232, 506, 506, 506, 506, 506, 507, 504, + 504, 504, 504, 1225, 800, 1225, 232, 232, 232, 297, + 303, 793, 297, 807, 303, 709, 444, 303, 445, 445, + + 445, 445, 445, 445, 303, 503, 155, 504, 504, 504, + 504, 504, 504, 234, 265, 340, 1225, 265, 303, 303, + 564, 340, 1225, 265, 265, 1225, 566, 265, 564, 340, + 265, 265, 566, 829, 1127, 155, 155, 796, 830, 799, + 673, 1225, 808, 882, 267, 1225, 265, 558, 558, 559, + 560, 560, 560, 560, 560, 560, 560, 454, 568, 568, + 568, 568, 568, 568, 568, 568, 568, 568, 884, 1225, + 268, 265, 265, 171, 184, 1225, 171, 184, 1126, 171, + 171, 885, 171, 171, 171, 171, 171, 801, 618, 171, + 171, 1225, 802, 567, 567, 567, 567, 567, 567, 567, + + 567, 567, 567, 267, 171, 171, 612, 613, 614, 612, + 612, 612, 612, 612, 612, 612, 503, 1225, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 155, 270, + 171, 171, 271, 806, 394, 394, 394, 394, 394, 394, + 394, 394, 394, 394, 175, 1225, 819, 1122, 394, 394, + 394, 394, 394, 394, 503, 888, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 813, 184, 1121, 578, + 1225, 340, 155, 578, 394, 394, 394, 394, 394, 394, + 267, 155, 673, 814, 267, 396, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 175, 267, 579, 900, 396, + + 396, 396, 396, 396, 396, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 184, 970, 280, 394, 394, 394, 394, 394, + 394, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 1225, 155, 155, 1120, 278, 278, 278, 278, + 278, 278, 1225, 184, 818, 820, 1225, 890, 1225, 1225, + 1063, 155, 1225, 1225, 528, 736, 529, 529, 529, 529, + 529, 529, 267, 267, 267, 267, 267, 267, 303, 895, + 1225, 296, 302, 296, 296, 302, 1225, 1225, 296, 296, + + 842, 297, 302, 312, 622, 843, 624, 923, 160, 625, + 330, 1063, 846, 297, 297, 184, 302, 302, 296, 305, + 892, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 175, 889, 1111, 184, 419, 419, 419, 419, 419, + 419, 340, 340, 585, 578, 1225, 891, 585, 578, 1225, + 1225, 585, 566, 673, 1225, 585, 155, 184, 297, 899, + 1110, 419, 419, 419, 419, 419, 419, 296, 817, 184, + 296, 586, 579, 1225, 184, 887, 296, 296, 1225, 586, + 296, 296, 340, 296, 296, 296, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 175, 628, 626, 296, + + 421, 421, 421, 421, 421, 421, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 297, 296, 312, 419, 419, 419, 419, + 419, 419, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 1225, 564, 340, 943, 312, 312, 312, + 312, 312, 312, 1225, 1225, 155, 673, 1225, 1225, 635, + 636, 637, 635, 635, 635, 635, 635, 635, 635, 914, + 160, 1107, 330, 296, 296, 296, 296, 296, 296, 206, + 278, 1225, 1225, 206, 206, 206, 155, 325, 911, 206, + + 206, 564, 340, 206, 1225, 340, 297, 312, 629, 278, + 278, 928, 627, 780, 901, 910, 780, 206, 206, 206, + 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, + 454, 667, 668, 669, 667, 667, 667, 667, 667, 667, + 667, 898, 856, 974, 326, 444, 184, 445, 445, 445, + 445, 445, 445, 445, 445, 445, 445, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 564, 340, 671, + 671, 671, 671, 671, 671, 278, 312, 312, 1004, 566, + 915, 927, 925, 312, 155, 444, 1014, 446, 446, 446, + 446, 446, 446, 446, 446, 446, 446, 675, 675, 675, + + 675, 675, 675, 675, 675, 675, 675, 676, 676, 676, + 676, 676, 677, 759, 760, 761, 759, 759, 759, 759, + 759, 759, 759, 1079, 155, 444, 926, 447, 447, 447, + 447, 447, 448, 445, 445, 445, 445, 1225, 312, 674, + 674, 674, 674, 674, 674, 674, 674, 674, 674, 713, + 155, 714, 714, 714, 714, 714, 714, 714, 714, 714, + 714, 184, 917, 968, 155, 449, 449, 449, 449, 449, + 449, 449, 449, 449, 449, 175, 564, 340, 1072, 449, + 449, 449, 449, 449, 449, 713, 929, 715, 715, 715, + 715, 715, 715, 715, 715, 715, 715, 312, 312, 1052, + + 297, 1053, 155, 930, 297, 449, 449, 449, 449, 449, + 449, 451, 452, 453, 453, 453, 453, 453, 453, 453, + 453, 454, 931, 1225, 340, 455, 455, 455, 455, 455, + 455, 713, 854, 716, 716, 716, 716, 716, 717, 714, + 714, 714, 714, 1225, 856, 1006, 1071, 1225, 312, 1042, + 184, 455, 455, 455, 455, 455, 455, 340, 458, 459, + 460, 458, 458, 458, 458, 458, 458, 458, 461, 184, + 1047, 1225, 462, 462, 462, 462, 462, 462, 1225, 155, + 1225, 1225, 1225, 1225, 1225, 1225, 340, 1225, 783, 783, + 783, 783, 783, 784, 340, 718, 985, 673, 462, 462, + + 462, 462, 462, 462, 154, 780, 1225, 154, 1225, 1225, + 1069, 1225, 719, 154, 154, 722, 724, 154, 154, 728, + 154, 154, 154, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 175, 312, 1081, 154, 464, 464, 464, + 464, 464, 464, 184, 184, 184, 184, 184, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, + 155, 154, 184, 449, 449, 449, 449, 449, 449, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, + 1225, 1225, 155, 973, 184, 184, 184, 184, 184, 184, + + 1225, 1225, 155, 856, 1225, 1225, 184, 1225, 966, 1046, + 1225, 1225, 184, 1225, 1225, 1225, 1113, 1225, 1053, 1225, + 154, 154, 154, 154, 154, 154, 206, 854, 1225, 1225, + 206, 206, 206, 980, 207, 1225, 206, 206, 1225, 856, + 206, 1225, 723, 1225, 995, 729, 184, 564, 340, 726, + 564, 340, 1225, 340, 206, 206, 206, 278, 725, 780, + 1048, 727, 873, 184, 873, 656, 730, 657, 657, 657, + 657, 657, 657, 564, 340, 778, 778, 778, 778, 778, + 778, 208, 206, 854, 1005, 673, 206, 206, 206, 206, + 368, 1225, 206, 206, 340, 943, 206, 312, 791, 160, + + 1049, 330, 791, 943, 155, 780, 1070, 184, 1008, 278, + 206, 206, 206, 771, 1045, 772, 772, 772, 772, 772, + 772, 772, 772, 772, 772, 771, 792, 773, 773, 773, + 773, 773, 773, 773, 773, 773, 773, 208, 232, 340, + 564, 340, 232, 232, 232, 953, 233, 155, 232, 232, + 873, 771, 232, 774, 774, 774, 774, 774, 775, 772, + 772, 772, 772, 1178, 1054, 1179, 232, 232, 232, 682, + 682, 682, 682, 682, 682, 682, 682, 682, 682, 782, + 782, 782, 782, 782, 782, 782, 782, 782, 782, 184, + 1112, 797, 803, 234, 232, 797, 803, 1008, 232, 232, + + 232, 232, 387, 1080, 232, 232, 312, 1225, 232, 781, + 781, 781, 781, 781, 781, 781, 781, 781, 781, 798, + 804, 856, 232, 232, 232, 713, 765, 714, 714, 714, + 714, 714, 714, 809, 811, 297, 155, 809, 811, 821, + 822, 823, 821, 821, 821, 821, 821, 821, 821, 234, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 175, 810, 812, 1007, 508, 508, 508, 508, 508, 508, + 713, 155, 714, 714, 714, 714, 714, 714, 714, 714, + 714, 714, 1039, 312, 1128, 791, 564, 340, 340, 791, + 508, 508, 508, 508, 508, 508, 267, 1003, 873, 873, + + 267, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 175, 267, 792, 997, 509, 509, 509, 509, 509, + 509, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 996, 994, + 280, 508, 508, 508, 508, 508, 508, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 1225, 1196, + 993, 1179, 278, 278, 278, 278, 278, 278, 713, 902, + 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, + 1225, 797, 1225, 1225, 1225, 797, 1225, 1225, 267, 267, + + 267, 267, 267, 267, 528, 854, 529, 529, 529, 529, + 529, 529, 529, 529, 529, 529, 155, 943, 1225, 798, + 1225, 1225, 1082, 982, 854, 312, 824, 1225, 803, 1225, + 1225, 809, 803, 1225, 1225, 809, 1023, 827, 811, 1023, + 828, 791, 811, 297, 528, 791, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 804, 1225, 1225, 810, + 859, 859, 859, 859, 859, 860, 812, 981, 797, 792, + 854, 155, 797, 736, 832, 737, 737, 737, 737, 737, + 737, 831, 1023, 297, 528, 854, 531, 531, 531, 531, + 531, 532, 529, 529, 529, 529, 798, 1093, 184, 834, + + 835, 836, 834, 834, 834, 834, 834, 834, 834, 803, + 809, 811, 297, 803, 809, 811, 876, 876, 876, 876, + 876, 877, 975, 297, 296, 969, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 297, 804, 810, 812, + 533, 533, 533, 533, 533, 533, 770, 770, 770, 770, + 770, 770, 770, 770, 770, 770, 858, 858, 858, 858, + 858, 858, 858, 858, 858, 858, 533, 533, 533, 533, + 533, 533, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 1073, 248, 248, 248, 534, 534, 534, 534, + 534, 534, 1225, 765, 857, 857, 857, 857, 857, 857, + + 857, 857, 857, 857, 771, 1073, 772, 772, 772, 772, + 772, 772, 533, 533, 533, 533, 533, 533, 206, 1225, + 562, 297, 206, 206, 206, 924, 325, 916, 206, 206, + 913, 1093, 206, 866, 867, 868, 866, 866, 866, 866, + 866, 866, 866, 160, 297, 330, 206, 206, 206, 771, + 912, 772, 772, 772, 772, 772, 772, 772, 772, 772, + 772, 771, 1129, 772, 772, 772, 772, 772, 772, 772, + 772, 772, 772, 326, 206, 854, 1159, 1186, 206, 206, + 206, 206, 437, 909, 206, 206, 908, 1093, 206, 789, + 789, 789, 789, 789, 789, 789, 789, 789, 789, 897, + + 896, 155, 206, 206, 206, 564, 340, 871, 871, 871, + 871, 871, 871, 1114, 184, 297, 155, 780, 875, 875, + 875, 875, 875, 875, 875, 875, 875, 875, 886, 326, + 444, 771, 445, 445, 445, 445, 445, 445, 445, 445, + 445, 445, 1225, 765, 874, 874, 874, 874, 874, 874, + 874, 874, 874, 874, 791, 797, 803, 809, 791, 797, + 803, 809, 811, 986, 983, 160, 811, 330, 983, 155, + 444, 562, 445, 445, 445, 445, 445, 445, 445, 445, + 445, 445, 792, 798, 804, 810, 986, 454, 986, 986, + 812, 902, 903, 903, 903, 903, 903, 903, 903, 903, + + 903, 903, 946, 946, 946, 946, 946, 947, 297, 155, + 564, 340, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 566, 297, 297, 984, 567, 567, 567, 567, + 567, 567, 902, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 904, 964, 964, 964, 964, 964, 965, 297, + 845, 1202, 567, 567, 567, 567, 567, 567, 340, 571, + 572, 573, 571, 571, 571, 571, 571, 571, 571, 574, + 986, 844, 841, 575, 575, 575, 575, 575, 575, 902, + 905, 905, 905, 905, 905, 906, 903, 903, 903, 903, + 297, 180, 180, 986, 840, 986, 987, 180, 839, 575, + + 575, 575, 575, 575, 575, 154, 838, 971, 154, 1051, + 1052, 971, 1053, 1051, 154, 154, 837, 833, 154, 154, + 155, 154, 154, 154, 184, 184, 184, 184, 184, 184, + 184, 184, 184, 184, 175, 972, 826, 154, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, + 184, 155, 154, 184, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 175, 248, 248, 248, 615, 615, 615, 615, 615, + + 615, 1026, 1026, 1026, 1026, 1026, 1027, 932, 933, 934, + 935, 932, 932, 932, 932, 932, 932, 1172, 1172, 1172, + 1172, 615, 615, 615, 615, 615, 615, 267, 825, 713, + 816, 267, 616, 616, 616, 616, 616, 616, 616, 616, + 616, 616, 175, 267, 155, 815, 616, 616, 616, 616, + 616, 616, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 155, + 155, 280, 615, 615, 615, 615, 615, 615, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 578, + 155, 155, 1225, 578, 847, 848, 848, 848, 848, 848, + + 848, 976, 978, 765, 562, 976, 978, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 579, 454, 454, + 753, 278, 278, 278, 278, 278, 278, 752, 751, 977, + 979, 750, 155, 937, 938, 939, 937, 937, 937, 937, + 937, 937, 937, 749, 748, 747, 746, 267, 267, 267, + 267, 267, 267, 528, 745, 529, 529, 529, 529, 529, + 529, 529, 529, 529, 529, 865, 865, 865, 865, 865, + 865, 865, 865, 865, 865, 854, 744, 941, 941, 941, + 941, 941, 941, 1106, 1106, 1051, 1052, 856, 1053, 1051, + 1106, 743, 297, 528, 742, 529, 529, 529, 529, 529, + + 529, 529, 529, 529, 529, 945, 945, 945, 945, 945, + 945, 945, 945, 945, 945, 1225, 741, 944, 944, 944, + 944, 944, 944, 944, 944, 944, 944, 735, 734, 733, + 1043, 732, 297, 656, 1043, 657, 657, 657, 657, 657, + 657, 657, 657, 657, 657, 953, 731, 954, 954, 954, + 954, 954, 954, 954, 954, 954, 954, 953, 1044, 955, + 955, 955, 955, 955, 955, 955, 955, 955, 955, 721, + 720, 1225, 155, 656, 1225, 658, 658, 658, 658, 658, + 658, 658, 658, 658, 658, 953, 491, 956, 956, 956, + 956, 956, 957, 954, 954, 954, 954, 881, 881, 881, + + 881, 881, 881, 881, 881, 881, 881, 1040, 180, 180, + 708, 1040, 155, 656, 180, 659, 659, 659, 659, 659, + 660, 657, 657, 657, 657, 564, 340, 960, 960, 960, + 960, 960, 960, 707, 1225, 1041, 665, 873, 963, 963, + 963, 963, 963, 963, 963, 963, 963, 963, 562, 454, + 661, 454, 155, 564, 340, 671, 671, 671, 671, 671, + 671, 671, 671, 671, 671, 566, 181, 650, 649, 670, + 670, 670, 670, 670, 670, 1225, 648, 962, 962, 962, + 962, 962, 962, 962, 962, 962, 962, 971, 976, 647, + 646, 971, 976, 645, 644, 670, 670, 670, 670, 670, + + 670, 564, 340, 672, 672, 672, 672, 672, 672, 672, + 672, 672, 672, 673, 643, 972, 977, 674, 674, 674, + 674, 674, 674, 988, 989, 990, 991, 988, 988, 988, + 988, 988, 988, 642, 978, 971, 184, 184, 978, 971, + 639, 638, 175, 674, 674, 674, 674, 674, 674, 340, + 678, 679, 680, 678, 678, 678, 678, 678, 678, 678, + 681, 634, 979, 972, 682, 682, 682, 682, 682, 682, + 902, 903, 903, 903, 903, 903, 903, 903, 903, 903, + 903, 633, 1056, 184, 278, 632, 1056, 1057, 1058, 1059, + 682, 682, 682, 682, 682, 682, 736, 503, 737, 737, + + 737, 737, 737, 737, 737, 737, 737, 737, 902, 903, + 903, 903, 903, 903, 903, 903, 903, 903, 903, 902, + 903, 903, 903, 903, 903, 903, 491, 607, 976, 1043, + 1108, 491, 976, 1043, 1108, 297, 736, 1060, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 953, 606, + 954, 954, 954, 954, 954, 954, 977, 1044, 1109, 491, + 978, 605, 1225, 1225, 978, 998, 999, 1000, 1001, 998, + 998, 998, 998, 998, 998, 297, 736, 278, 739, 739, + 739, 739, 739, 740, 737, 737, 737, 737, 979, 454, + 917, 918, 918, 918, 918, 918, 918, 562, 454, 181, + + 548, 971, 297, 976, 978, 971, 1108, 976, 978, 278, + 1108, 339, 339, 547, 546, 297, 656, 339, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 297, 972, + 545, 977, 979, 1014, 1109, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1152, 160, 544, 330, 1152, + 312, 1195, 312, 312, 543, 155, 656, 1195, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 1014, 542, + 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, + 1014, 541, 1017, 1017, 1017, 1017, 1017, 1018, 1015, 1015, + 1015, 1015, 540, 539, 538, 155, 766, 767, 768, 766, + + 766, 766, 766, 766, 766, 766, 769, 537, 536, 535, + 770, 770, 770, 770, 770, 770, 952, 952, 952, 952, + 952, 952, 952, 952, 952, 952, 1025, 1025, 1025, 1025, + 1025, 1025, 1025, 1025, 1025, 1025, 770, 770, 770, 770, + 770, 770, 564, 340, 778, 778, 778, 778, 778, 778, + 778, 778, 778, 778, 673, 305, 527, 523, 777, 777, + 777, 777, 777, 777, 854, 522, 1021, 1021, 1021, 1021, + 1021, 1021, 521, 520, 519, 1014, 943, 1015, 1015, 1015, + 1015, 1015, 1015, 518, 777, 777, 777, 777, 777, 777, + 564, 340, 779, 779, 779, 779, 779, 779, 779, 779, + + 779, 779, 780, 517, 516, 515, 781, 781, 781, 781, + 781, 781, 1225, 514, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 564, 340, 1038, 1038, 1038, 1038, + 1038, 1038, 781, 781, 781, 781, 781, 781, 340, 785, + 786, 787, 785, 785, 785, 785, 785, 785, 785, 788, + 513, 512, 511, 789, 789, 789, 789, 789, 789, 1033, + 1034, 1035, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 510, + 1149, 1056, 271, 499, 1149, 1056, 1057, 1058, 1059, 789, + 789, 789, 789, 789, 789, 736, 496, 737, 737, 737, + 737, 737, 737, 737, 737, 737, 737, 953, 1150, 954, + + 954, 954, 954, 954, 954, 954, 954, 954, 954, 953, + 495, 954, 954, 954, 954, 954, 954, 954, 954, 954, + 954, 494, 493, 486, 297, 736, 1062, 737, 737, 737, + 737, 737, 737, 737, 737, 737, 737, 1086, 1087, 1088, + 1086, 1086, 1086, 1086, 1086, 1086, 1086, 485, 1040, 1043, + 484, 1040, 1040, 1043, 1008, 1040, 1009, 1009, 1009, 1009, + 1009, 1009, 483, 482, 297, 847, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 848, 1041, 1044, 1063, 1041, + 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, + 481, 1177, 1178, 155, 1179, 1177, 280, 184, 184, 280, + + 278, 280, 478, 155, 847, 849, 849, 849, 849, 849, + 849, 849, 849, 849, 849, 1063, 477, 1065, 1065, 1065, + 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1063, 476, 1066, + 1066, 1066, 1066, 1066, 1067, 1068, 1068, 1068, 1068, 475, + 474, 473, 155, 847, 850, 850, 850, 850, 850, 851, + 848, 848, 848, 848, 1063, 472, 1068, 1068, 1068, 1064, + 1064, 1064, 1064, 1064, 1064, 1064, 471, 1040, 1043, 470, + 469, 1040, 1043, 1096, 1096, 1096, 1096, 1096, 1097, 468, + 467, 155, 854, 466, 855, 855, 855, 855, 855, 855, + 855, 855, 855, 855, 856, 1041, 1044, 465, 857, 857, + + 857, 857, 857, 857, 1083, 1084, 1085, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1108, 1108, 312, 312, 1108, 1108, + 181, 173, 297, 436, 857, 857, 857, 857, 857, 857, + 861, 862, 863, 861, 861, 861, 861, 861, 861, 861, + 864, 155, 1109, 1109, 865, 865, 865, 865, 865, 865, + 1014, 435, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1225, 184, 312, 427, 1225, 1225, 1225, 1225, + 865, 865, 865, 865, 865, 865, 564, 340, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 780, 426, + 425, 424, 870, 870, 870, 870, 870, 870, 1014, 423, + + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1145, 1145, 1145, 1145, 1145, 1146, 422, 1060, 870, 870, + 870, 870, 870, 870, 564, 340, 872, 872, 872, 872, + 872, 872, 872, 872, 872, 872, 873, 296, 415, 301, + 874, 874, 874, 874, 874, 874, 1032, 1032, 1032, 1032, + 1032, 1032, 1032, 1032, 1032, 1032, 1095, 1095, 1095, 1095, + 1095, 1095, 1095, 1095, 1095, 1095, 874, 874, 874, 874, + 874, 874, 340, 878, 879, 880, 878, 878, 878, 878, + 878, 878, 878, 299, 297, 294, 414, 881, 881, 881, + 881, 881, 881, 854, 413, 1091, 1091, 1091, 1091, 1091, + + 1091, 411, 410, 402, 1063, 1023, 1064, 1064, 1064, 1064, + 1064, 1064, 401, 881, 881, 881, 881, 881, 881, 154, + 1225, 280, 154, 1055, 280, 400, 280, 399, 154, 154, + 1055, 1055, 154, 154, 1055, 154, 154, 154, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 184, 1055, 1055, + 1055, 154, 184, 184, 184, 184, 184, 184, 184, 184, + 184, 184, 184, 184, 184, 184, 883, 184, 184, 184, + 184, 184, 184, 184, 184, 155, 154, 184, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 267, 398, 397, 1225, 267, + + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 268, 267, 260, 255, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 907, 278, + 278, 278, 278, 278, 278, 278, 278, 256, 250, 280, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 917, 918, 918, + 918, 918, 918, 918, 918, 918, 918, 918, 1225, 250, + 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, + 340, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, 244, 202, 237, 155, 297, 917, 919, 919, 919, - 267, 966, 603, 967, 967, 967, 967, 967, 967, 967, - 967, 967, 967, 1021, 602, 1026, 1026, 1026, 1022, 1022, - 1022, 1022, 1022, 1022, 1022, 601, 998, 998, 1001, 600, - 998, 998, 1001, 308, 1060, 1060, 1060, 1060, 1060, 1060, - 141, 966, 597, 968, 968, 968, 968, 968, 968, 968, - 968, 968, 968, 999, 999, 1002, 1041, 1042, 1043, 1041, - 1041, 1041, 1041, 1041, 1041, 1041, 966, 596, 967, 967, - 967, 967, 967, 967, 251, 283, 283, 161, 587, 586, - 141, 966, 585, 969, 969, 969, 969, 969, 970, 971, - 971, 971, 971, 141, 1044, 1045, 1046, 1044, 1044, 1044, + 919, 919, 919, 919, 919, 919, 919, 340, 1103, 1103, + 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 340, 1104, + 1104, 1104, 1104, 1104, 1105, 1102, 1102, 1102, 1102, 1147, + 384, 376, 375, 1147, 297, 917, 920, 920, 920, 920, + 920, 921, 918, 918, 918, 918, 374, 1147, 1056, 373, + 372, 1147, 1056, 1057, 1058, 1059, 1115, 1148, 155, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 367, + 366, 365, 364, 297, 296, 1148, 1149, 296, 184, 363, + 1149, 362, 353, 296, 296, 352, 351, 296, 296, 350, + 296, 296, 296, 312, 312, 312, 312, 312, 312, 312, - 1044, 1044, 1044, 1044, 972, 141, 973, 973, 973, 973, - 973, 973, 973, 973, 973, 973, 166, 166, 584, 583, - 141, 966, 166, 971, 971, 971, 967, 967, 967, 967, - 967, 967, 967, 972, 582, 973, 973, 973, 973, 973, - 973, 973, 973, 973, 973, 990, 990, 990, 990, 990, - 990, 990, 990, 990, 990, 1135, 1136, 581, 1137, 1135, - 141, 812, 580, 979, 979, 979, 979, 979, 979, 979, - 979, 979, 979, 901, 812, 579, 980, 980, 980, 980, - 980, 980, 980, 980, 980, 980, 981, 576, 575, 461, - 982, 982, 982, 982, 982, 982, 812, 450, 1049, 1049, + 312, 312, 312, 1060, 1150, 349, 296, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 922, 312, 312, 312, 312, 312, 312, 312, 312, + 297, 296, 312, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 847, 848, 848, 848, 848, 848, 848, 848, 848, 848, + 848, 1225, 1172, 348, 1172, 1225, 1057, 1058, 1059, 1225, + 1172, 347, 346, 1225, 1225, 1225, 1059, 1117, 1118, 1119, + 1117, 1117, 1117, 1117, 1117, 1117, 1117, 345, 155, 847, + 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, - 1049, 1049, 1049, 1049, 565, 1066, 1105, 1107, 981, 1066, - 1105, 1107, 450, 564, 450, 982, 982, 982, 982, 982, - 982, 986, 987, 988, 986, 986, 986, 986, 986, 986, - 986, 989, 1067, 1106, 1108, 990, 990, 990, 990, 990, - 990, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, - 1053, 563, 1021, 170, 1022, 1022, 1022, 1022, 1022, 1022, - 990, 990, 990, 990, 990, 990, 522, 308, 996, 996, - 996, 996, 996, 996, 996, 996, 996, 996, 1031, 1183, + 1225, 181, 154, 181, 1225, 1225, 1225, 1225, 340, 1102, + 1102, 1102, 1102, 1102, 1102, 1073, 1060, 1074, 1074, 1074, + 1074, 1074, 1074, 270, 1060, 169, 167, 155, 854, 160, + 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, + 856, 854, 158, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 943, 297, 1062, 155, 944, 944, 944, + 944, 944, 944, 1063, 321, 1064, 1064, 1064, 1064, 1064, + 1064, 1064, 1064, 1064, 1064, 1134, 320, 1135, 1135, 1135, + 1135, 1135, 1135, 944, 944, 944, 944, 944, 944, 948, + 949, 950, 948, 948, 948, 948, 948, 948, 948, 951, + + 319, 318, 317, 952, 952, 952, 952, 952, 952, 1063, + 316, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, + 1064, 1149, 1147, 312, 301, 1149, 1147, 297, 294, 952, + 952, 952, 952, 952, 952, 564, 340, 960, 960, 960, + 960, 960, 960, 960, 960, 960, 960, 873, 288, 1150, + 1148, 959, 959, 959, 959, 959, 959, 287, 1123, 1124, + 1125, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1174, 1174, + 184, 278, 1174, 1174, 286, 285, 284, 959, 959, 959, + 959, 959, 959, 564, 340, 961, 961, 961, 961, 961, + 961, 961, 961, 961, 961, 297, 1175, 1175, 283, 962, + + 962, 962, 962, 962, 962, 1177, 1178, 1225, 1179, 1177, + 1061, 1147, 278, 450, 450, 1147, 256, 1061, 1061, 450, + 250, 1061, 244, 157, 237, 962, 962, 962, 962, 962, + 962, 154, 556, 556, 154, 1061, 1061, 1061, 556, 1148, + 154, 154, 157, 195, 154, 154, 230, 154, 154, 154, + 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, + 312, 192, 222, 154, 184, 184, 184, 184, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, + 184, 967, 184, 184, 184, 184, 184, 155, 154, 184, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + + 154, 154, 154, 154, 154, 154, 154, 267, 220, 198, + 197, 267, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 194, 267, 193, 190, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 992, 278, 278, 278, 278, 278, 184, + 181, 280, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 917, + 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, + 1134, 169, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, + 1135, 1135, 1134, 158, 1136, 1136, 1136, 1136, 1136, 1136, + + 1136, 1136, 1136, 1136, 157, 155, 1225, 297, 917, 918, + 918, 918, 918, 918, 918, 918, 918, 918, 918, 1134, + 1225, 1137, 1137, 1137, 1137, 1137, 1138, 1135, 1135, 1135, + 1135, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, + 1101, 1225, 557, 557, 1225, 1225, 297, 296, 557, 1225, + 296, 1225, 561, 561, 1225, 1225, 296, 296, 561, 1225, + 296, 296, 1225, 296, 296, 296, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 1225, 1225, 1225, 296, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 1002, 312, 312, + + 312, 312, 312, 297, 296, 312, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 1008, 1225, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 854, 1225, 1141, 1141, 1141, + 1141, 1141, 1141, 1225, 1225, 1225, 1225, 1093, 1144, 1144, + 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 661, 661, + 1225, 1225, 155, 1008, 661, 1010, 1010, 1010, 1010, 1010, + 1010, 1010, 1010, 1010, 1010, 1225, 1225, 1143, 1143, 1143, + 1143, 1143, 1143, 1143, 1143, 1143, 1143, 340, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 663, 663, + + 1225, 1225, 155, 1008, 663, 1011, 1011, 1011, 1011, 1011, + 1012, 1013, 1013, 1013, 1013, 340, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1116, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1191, 1191, 1191, 1191, + 1191, 1191, 155, 1008, 1225, 1013, 1013, 1013, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1116, 1116, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1153, 1225, 1154, 1154, 1154, + 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1225, 664, 664, + 1225, 1225, 155, 854, 664, 1021, 1021, 1021, 1021, 1021, + 1021, 1021, 1021, 1021, 1021, 943, 854, 1225, 1022, 1022, + + 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1023, 1225, + 1225, 1225, 1024, 1024, 1024, 1024, 1024, 1024, 1153, 1225, + 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, + 1153, 1225, 1154, 1154, 1154, 1154, 1154, 1154, 1024, 1024, + 1024, 1024, 1024, 1024, 1028, 1029, 1030, 1028, 1028, 1028, + 1028, 1028, 1028, 1028, 1031, 1225, 1225, 1225, 1032, 1032, + 1032, 1032, 1032, 1032, 1153, 1225, 1156, 1156, 1156, 1156, + 1156, 1157, 1154, 1154, 1154, 1154, 1197, 1225, 1198, 1198, + 1198, 1198, 1198, 1198, 1032, 1032, 1032, 1032, 1032, 1032, + 564, 340, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + + 1038, 1038, 1073, 1225, 1074, 1074, 1074, 1074, 1074, 1074, + 1074, 1074, 1074, 1074, 1225, 1149, 1225, 1225, 1225, 1149, + 1165, 1166, 1167, 1165, 1165, 1165, 1165, 1165, 1165, 1165, + 1129, 1225, 1130, 1130, 1130, 1130, 1130, 1130, 1225, 1225, + 1225, 297, 1073, 1150, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, 1075, 1075, 1075, 1225, 1225, 1159, 155, 1160, 1160, + 1160, 1160, 1160, 1160, 312, 1225, 1225, 1225, 1225, 155, + 1168, 1169, 1170, 1168, 1168, 1168, 1168, 1168, 1168, 1168, + 1225, 297, 1073, 1225, 1076, 1076, 1076, 1076, 1076, 1077, + 1078, 1078, 1078, 1078, 1134, 297, 1135, 1135, 1135, 1135, + + 1135, 1135, 1135, 1135, 1135, 1135, 1134, 1225, 1135, 1135, + 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1225, 1225, + 1225, 297, 1073, 1225, 1078, 1078, 1078, 1074, 1074, 1074, + 1074, 1074, 1074, 1074, 854, 1225, 1173, 1173, 1173, 1173, + 1173, 1173, 1173, 1173, 1173, 1173, 1174, 1225, 1225, 1225, + 1174, 1180, 1181, 1182, 1180, 1180, 1180, 1180, 1180, 1180, + 1180, 297, 1008, 1225, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1175, 1153, 1225, 1154, 1154, 1154, + 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1186, 1225, 1187, + 1187, 1187, 1187, 1187, 1187, 184, 1225, 762, 762, 1225, + + 1225, 155, 1008, 762, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1153, 1225, 1154, 1154, 1154, 1154, + 1154, 1154, 1154, 1154, 1154, 1154, 155, 1225, 1225, 1225, + 1225, 1183, 1184, 1185, 1183, 1183, 1183, 1183, 1183, 1183, + 1183, 155, 854, 1225, 1091, 1091, 1091, 1091, 1091, 1091, + 1091, 1091, 1091, 1091, 1023, 854, 1225, 1092, 1092, 1092, + 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1093, 297, 1225, + 1225, 1094, 1094, 1094, 1094, 1094, 1094, 1202, 1225, 1203, + 1203, 1203, 1203, 1203, 1203, 1174, 1225, 1225, 1225, 1174, + 1219, 1219, 1219, 1219, 1219, 1219, 1225, 1094, 1094, 1094, + + 1094, 1094, 1094, 1098, 1099, 1100, 1098, 1098, 1098, 1098, + 1098, 1098, 1098, 1175, 1225, 1225, 297, 1101, 1101, 1101, + 1101, 1101, 1101, 1191, 1191, 1191, 1191, 1191, 1191, 1191, + 1191, 1191, 1191, 1225, 312, 763, 763, 280, 1225, 1225, + 280, 763, 280, 1101, 1101, 1101, 1101, 1101, 1101, 1073, + 1225, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, + 1074, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, + 1192, 1193, 1193, 1193, 1193, 1193, 1194, 1191, 1191, 1191, + 1191, 764, 764, 1225, 852, 852, 1225, 764, 297, 1073, + 852, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, + + 1074, 1197, 1225, 1198, 1198, 1198, 1198, 1198, 1198, 1198, + 1198, 1198, 1198, 1197, 1225, 1199, 1199, 1199, 1199, 1199, + 1199, 1199, 1199, 1199, 1199, 1225, 1225, 1225, 297, 1129, + 1225, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, + 1130, 1197, 1225, 1200, 1200, 1200, 1200, 1200, 1201, 1198, + 1198, 1198, 1198, 1207, 1208, 1209, 1207, 1207, 1207, 1207, + 1207, 1207, 1207, 1225, 853, 853, 1225, 1225, 155, 1129, + 853, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, + 1131, 936, 936, 280, 1225, 1225, 280, 936, 280, 1225, + 155, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, + + 1191, 1019, 1019, 1225, 1089, 1089, 1225, 1019, 155, 1129, + 1089, 1132, 1132, 1132, 1132, 1132, 1133, 1130, 1130, 1130, + 1130, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, + 1191, 1210, 1211, 1212, 1210, 1210, 1210, 1210, 1210, 1210, + 1210, 1139, 1139, 1225, 1171, 1171, 1225, 1139, 155, 854, + 1171, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, + 1141, 1093, 854, 1225, 1142, 1142, 1142, 1142, 1142, 1142, + 1142, 1142, 1142, 1142, 1225, 1225, 1225, 1225, 1143, 1143, + 1143, 1143, 1143, 1143, 1197, 1225, 1198, 1198, 1198, 1198, + 1198, 1198, 1198, 1198, 1198, 1198, 1225, 1225, 1225, 1225, + + 1225, 1225, 1225, 1225, 1143, 1143, 1143, 1143, 1143, 1143, + 1159, 1225, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, + 1160, 1160, 1197, 1225, 1198, 1198, 1198, 1198, 1198, 1198, + 1198, 1198, 1198, 1198, 1213, 1214, 1215, 1213, 1213, 1213, + 1213, 1213, 1213, 1213, 1225, 1225, 1225, 1225, 1225, 297, + 1159, 1225, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, + 1161, 1161, 1225, 1225, 1225, 1216, 1216, 1216, 1216, 1216, + 1216, 297, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, + 1216, 1216, 1225, 1222, 1222, 1222, 1222, 1222, 1222, 297, + 1159, 1225, 1162, 1162, 1162, 1162, 1162, 1163, 1160, 1160, + + 1160, 1160, 155, 1225, 1225, 1225, 1225, 1225, 1225, 155, + 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + 297, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 297, + 1129, 1225, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, + 1130, 1130, 1225, 1225, 1225, 1225, 1225, 155, 1217, 1217, + 1217, 1217, 1217, 1218, 1216, 1216, 1216, 1216, 1219, 1219, + 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1225, 155, + 1129, 1225, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, + 1130, 1130, 1225, 1225, 1225, 155, 1210, 1210, 1210, 1210, + 1210, 1210, 1210, 1210, 1210, 1210, 1220, 1220, 1220, 1220, + + 1220, 1221, 1219, 1219, 1219, 1219, 1225, 1225, 1225, 155, + 1159, 1225, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, + 1160, 1160, 1225, 1225, 1225, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1213, 1213, 1213, 1213, 1213, + 1213, 1213, 1213, 1213, 1213, 1225, 1225, 1225, 1225, 297, + 1159, 1225, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, + 1160, 1160, 297, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 297, 1223, 1223, 1223, 1223, 1223, 1224, 1222, + 1222, 1222, 1222, 1225, 1225, 1225, 1225, 1225, 1225, 297, + 1186, 1225, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, + + 1187, 1187, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 297, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, + 1216, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 155, + 1186, 1225, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, + 1188, 1188, 1225, 1225, 1225, 1225, 1225, 1225, 155, 1219, + 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 155, + 1186, 1225, 1189, 1189, 1189, 1189, 1189, 1190, 1187, 1187, + 1187, 1187, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 297, 1225, 1225, 1225, + + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 155, + 1202, 1225, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 297, + 1202, 1225, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, + 1204, 1204, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 297, + 1202, 1225, 1205, 1205, 1205, 1205, 1205, 1206, 1203, 1203, + + 1203, 1203, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 297, + 1186, 1225, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, + 1187, 1187, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 155, + 1186, 1225, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, + 1187, 1187, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 155, + 1202, 1225, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 297, + 1202, 1225, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 297, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 128, 128, 128, 128, 128, + + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 154, 1225, 1225, 154, + 1225, 1225, 1225, 154, 1225, 154, 1225, 154, 154, 154, + 1225, 1225, 154, 154, 154, 154, 154, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 164, 1225, + 1225, 164, 1225, 1225, 164, 164, 1225, 164, 1225, 164, + 164, 164, 164, 1225, 164, 164, 164, 164, 164, 168, + 1225, 1225, 168, 1225, 1225, 1225, 168, 1225, 168, 1225, + 168, 168, 168, 1225, 1225, 168, 168, 168, 168, 168, + + 170, 1225, 1225, 170, 170, 170, 1225, 170, 170, 170, + 1225, 170, 170, 170, 1225, 1225, 170, 170, 170, 170, + 170, 205, 205, 1225, 205, 205, 205, 1225, 205, 205, + 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, + 205, 205, 227, 1225, 1225, 227, 227, 227, 1225, 227, + 227, 227, 1225, 227, 227, 227, 1225, 1225, 227, 227, + 227, 227, 227, 231, 231, 1225, 231, 231, 231, 1225, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 236, 1225, 1225, 236, 236, 236, + 1225, 236, 236, 236, 1225, 236, 236, 236, 1225, 236, + + 236, 1225, 236, 236, 236, 242, 242, 1225, 242, 242, + 242, 1225, 1225, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 1225, 242, 242, 242, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 249, 1225, 1225, + 249, 249, 1225, 1225, 249, 249, 249, 1225, 249, 249, + 249, 249, 1225, 249, 249, 249, 249, 249, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 255, + 255, 1225, 255, 255, 1225, 255, 255, 255, 255, 255, + + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 262, 1225, 1225, 262, 1225, 1225, 262, 262, 1225, 262, + 1225, 262, 262, 262, 262, 1225, 262, 262, 262, 262, + 262, 266, 1225, 1225, 266, 1225, 1225, 1225, 266, 1225, + 266, 1225, 266, 266, 266, 1225, 266, 266, 266, 266, + 266, 266, 269, 1225, 1225, 269, 269, 269, 1225, 269, + 269, 269, 1225, 269, 269, 269, 1225, 269, 269, 269, + 269, 269, 269, 206, 206, 1225, 206, 206, 206, 1225, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 293, 1225, 1225, 1225, 293, 293, + + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 296, 1225, 1225, 296, 1225, + 1225, 1225, 296, 1225, 296, 1225, 296, 296, 296, 1225, + 1225, 296, 296, 296, 296, 296, 298, 1225, 1225, 298, + 1225, 1225, 298, 298, 1225, 298, 1225, 298, 298, 298, + 298, 1225, 298, 298, 298, 298, 298, 300, 1225, 1225, + 300, 1225, 1225, 1225, 300, 1225, 300, 1225, 300, 300, + 300, 1225, 1225, 300, 300, 300, 300, 300, 302, 1225, + 1225, 302, 302, 302, 1225, 302, 302, 302, 1225, 302, + 302, 302, 1225, 1225, 302, 302, 302, 302, 302, 324, + + 324, 1225, 324, 324, 324, 1225, 324, 324, 324, 324, + 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, + 154, 1225, 1225, 154, 1225, 1225, 1225, 154, 1225, 154, + 1225, 154, 154, 154, 1225, 1225, 154, 154, 154, 154, + 154, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 331, 331, 1225, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 164, 1225, 1225, 164, 1225, 1225, 1225, + 164, 1225, 164, 1225, 164, 164, 164, 1225, 1225, 164, + + 164, 164, 164, 164, 168, 1225, 1225, 168, 1225, 1225, + 1225, 168, 1225, 168, 1225, 168, 168, 168, 1225, 1225, + 168, 168, 168, 168, 168, 170, 1225, 1225, 170, 170, + 170, 1225, 170, 170, 170, 1225, 170, 170, 170, 1225, + 1225, 170, 170, 170, 170, 170, 171, 1225, 1225, 171, + 171, 171, 1225, 171, 171, 171, 1225, 171, 171, 171, + 1225, 1225, 171, 171, 171, 171, 171, 341, 341, 341, + 1225, 1225, 1225, 1225, 341, 205, 205, 1225, 205, 205, + 205, 1225, 205, 205, 205, 205, 205, 205, 205, 205, + 205, 205, 205, 205, 205, 205, 206, 206, 1225, 206, + + 206, 206, 1225, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 227, 1225, 1225, + 227, 227, 227, 1225, 227, 227, 227, 1225, 227, 227, + 227, 1225, 1225, 227, 227, 227, 227, 227, 228, 1225, + 1225, 228, 228, 228, 1225, 228, 228, 228, 1225, 228, + 228, 228, 1225, 1225, 228, 228, 228, 228, 228, 231, + 231, 1225, 231, 231, 231, 1225, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 232, 232, 1225, 232, 232, 232, 1225, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + + 232, 236, 1225, 1225, 236, 236, 236, 1225, 236, 236, + 236, 1225, 236, 236, 236, 1225, 236, 236, 1225, 236, + 236, 236, 242, 242, 1225, 242, 242, 242, 1225, 1225, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 1225, + 242, 242, 242, 249, 1225, 1225, 249, 249, 1225, 1225, + 249, 249, 249, 1225, 249, 249, 249, 249, 1225, 249, + 249, 249, 249, 249, 255, 255, 1225, 255, 255, 1225, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 265, 1225, 1225, 265, 1225, + 1225, 1225, 265, 1225, 265, 1225, 265, 265, 265, 1225, + + 1225, 265, 265, 265, 265, 265, 266, 1225, 1225, 266, + 1225, 1225, 1225, 266, 1225, 266, 1225, 266, 266, 266, + 1225, 266, 266, 266, 266, 266, 266, 267, 1225, 1225, + 267, 267, 1225, 267, 267, 1225, 1225, 267, 267, 269, + 1225, 1225, 269, 269, 269, 1225, 269, 269, 269, 1225, + 269, 269, 269, 1225, 269, 269, 269, 269, 269, 269, + 293, 1225, 1225, 1225, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 296, 1225, 1225, 296, 1225, 1225, 1225, 296, 1225, + 296, 1225, 296, 296, 296, 1225, 1225, 296, 296, 296, + + 296, 296, 298, 1225, 1225, 298, 1225, 1225, 1225, 298, + 1225, 298, 1225, 298, 298, 298, 1225, 1225, 298, 298, + 298, 298, 298, 300, 1225, 1225, 300, 1225, 1225, 1225, + 300, 1225, 300, 1225, 300, 300, 300, 1225, 1225, 300, + 300, 300, 300, 300, 302, 1225, 1225, 302, 302, 302, + 1225, 302, 302, 302, 1225, 302, 302, 302, 1225, 1225, + 302, 302, 302, 302, 302, 303, 1225, 1225, 303, 303, + 303, 1225, 303, 303, 303, 1225, 303, 303, 303, 1225, + 1225, 303, 303, 303, 303, 303, 324, 324, 1225, 324, + 324, 324, 1225, 324, 324, 324, 324, 324, 324, 324, + + 324, 324, 324, 324, 324, 324, 324, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, 442, 154, + 1225, 1225, 154, 1225, 1225, 1225, 154, 1225, 154, 1225, + 154, 154, 154, 1225, 1225, 154, 154, 154, 154, 154, + 456, 456, 456, 1225, 1225, 1225, 1225, 456, 205, 205, + 1225, 205, 205, 205, 1225, 205, 205, 205, 205, 205, + 205, 205, 205, 205, 205, 205, 205, 205, 205, 232, + + 232, 1225, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 231, 231, 1225, 231, 231, 231, 1225, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 206, 206, 1225, 206, 206, 206, 1225, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 563, 563, 563, 1225, 1225, 1225, 1225, 563, + 462, 462, 462, 1225, 1225, 1225, 1225, 462, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 232, + + 232, 1225, 232, 232, 232, 1225, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 666, 666, 666, 1225, 1225, 1225, 1225, 666, 670, 670, + 670, 670, 1225, 1225, 1225, 1225, 670, 776, 776, 776, + 1225, 1225, 1225, 1225, 776, 777, 777, 777, 777, 1225, + 1225, 1225, 1225, 777, 869, 869, 869, 1225, 1225, 1225, + 1225, 869, 870, 870, 870, 870, 1225, 1225, 1225, 1225, + 870, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 267, 1225, 1225, 267, 267, 1225, 267, 267, + + 1225, 1225, 267, 267, 296, 1225, 1225, 296, 1225, 1225, + 1225, 296, 1225, 296, 1225, 296, 296, 296, 1225, 1225, + 296, 296, 296, 296, 296, 940, 1225, 940, 940, 1225, + 1225, 1225, 1225, 940, 958, 958, 958, 1225, 1225, 1225, + 1225, 958, 959, 959, 959, 959, 1225, 1225, 1225, 1225, + 959, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 267, 1225, 1225, 267, 267, 1225, 267, 267, + 1225, 1225, 267, 267, 296, 1225, 1225, 296, 1225, 1225, + 1225, 296, 1225, 296, 1225, 296, 296, 296, 1225, 1225, + + 296, 296, 296, 296, 296, 1020, 1225, 1020, 1020, 1225, + 1225, 1225, 1225, 1020, 1036, 1036, 1036, 1225, 1225, 1225, + 1225, 1036, 1037, 1037, 1037, 1225, 1225, 1225, 1225, 1225, + 1037, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, + 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, + 1050, 1050, 1055, 1055, 1225, 1055, 1055, 1055, 1055, 1055, + 1225, 1055, 1225, 1055, 1055, 1055, 1225, 1225, 1055, 1055, + 1055, 1055, 1055, 1061, 1061, 1225, 1061, 1061, 1061, 1061, + 1061, 1225, 1061, 1225, 1061, 1061, 1061, 1225, 1225, 1061, + 1061, 1061, 1061, 1061, 1090, 1225, 1090, 1090, 1225, 1225, + + 1225, 1225, 1090, 1140, 1225, 1140, 1140, 1225, 1225, 1225, + 1225, 1140, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, + 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, + 1176, 1176, 1176, 21, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225 + } ; + +static yyconst flex_int16_t yy_chk[9611] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 23, 372, 41, + 2, 23, 63, 2, 5, 5, 372, 5, 5, 5, + 41, 5, 6, 6, 481, 6, 6, 6, 5, 6, + + 7, 7, 63, 7, 7, 7, 6, 7, 7, 29, + 2, 2, 5, 5, 45, 2, 44, 49, 481, 44, + 6, 6, 49, 2, 96, 45, 2, 3, 55, 44, + 29, 3, 13, 13, 3, 13, 13, 13, 13, 5, + 46, 3, 55, 46, 3, 52, 65, 6, 14, 14, + 96, 14, 14, 14, 14, 7, 1222, 29, 3, 103, + 52, 3, 37, 37, 37, 37, 37, 37, 69, 3, + 98, 3, 69, 3, 3, 65, 3, 8, 8, 383, + 8, 8, 8, 3, 8, 8, 124, 13, 17, 17, + 17, 17, 17, 17, 17, 383, 98, 84, 67, 3, + + 4, 84, 67, 14, 4, 34, 34, 4, 59, 103, + 34, 34, 67, 159, 4, 159, 62, 4, 59, 62, + 18, 18, 18, 18, 18, 18, 18, 59, 1216, 62, + 34, 4, 8, 124, 4, 90, 90, 116, 90, 90, + 116, 115, 4, 17, 4, 62, 4, 4, 106, 4, + 92, 92, 115, 92, 92, 34, 4, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 60, 329, 106, + 329, 60, 4, 9, 9, 18, 9, 9, 9, 58, + 9, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 100, 100, 75, 100, 100, 106, 361, 361, 127, + + 129, 60, 60, 75, 70, 70, 60, 102, 127, 70, + 70, 102, 75, 142, 60, 68, 142, 60, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, 9, 70, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, + 129, 10, 10, 10, 70, 10, 209, 105, 105, 209, + 105, 105, 102, 105, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, + 125, 1198, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 131, 131, 206, 131, 131, 138, 138, 138, + + 138, 138, 138, 10, 219, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 11, 11, 133, 11, 11, 11, 11, + 11, 141, 181, 203, 322, 182, 11, 11, 11, 135, + 135, 206, 141, 181, 135, 135, 133, 131, 166, 182, + 371, 219, 11, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 156, 135, 371, 210, 156, 222, 166, + 235, 153, 210, 133, 220, 222, 235, 1173, 11, 12, + 12, 153, 12, 12, 12, 12, 12, 203, 322, 135, + 153, 220, 12, 12, 12, 152, 166, 152, 152, 152, + + 152, 152, 152, 152, 152, 152, 152, 580, 12, 162, + 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 201, + 201, 580, 201, 201, 12, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 28, 165, 28, + 232, 165, 165, 165, 165, 165, 165, 165, 165, 165, + + 165, 28, 290, 290, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 35, 221, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 258, 449, 221, + 35, 35, 35, 35, 35, 35, 327, 232, 1171, 327, + 218, 155, 155, 155, 155, 155, 218, 224, 155, 155, + 290, 224, 155, 35, 218, 449, 35, 35, 35, 35, + 35, 35, 42, 488, 550, 42, 155, 155, 155, 226, + 243, 42, 42, 226, 243, 42, 42, 258, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 488, 550, 42, 42, 42, 42, 42, 42, + + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 330, + 472, 330, 47, 47, 47, 47, 47, 47, 472, 217, + 223, 217, 47, 208, 223, 260, 208, 170, 170, 260, + 208, 208, 170, 170, 223, 331, 262, 331, 47, 47, + 47, 47, 47, 47, 56, 56, 1154, 56, 56, 56, + 56, 56, 170, 382, 56, 56, 382, 262, 56, 173, + + 173, 173, 173, 173, 173, 173, 173, 173, 173, 377, + 328, 377, 56, 56, 56, 57, 328, 170, 208, 57, + 57, 57, 295, 57, 262, 57, 57, 217, 341, 57, + 167, 167, 167, 167, 167, 343, 173, 167, 167, 341, + 343, 167, 445, 57, 57, 57, 179, 179, 179, 179, + 179, 179, 378, 1143, 378, 167, 167, 167, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 377, 381, + 57, 61, 295, 61, 379, 169, 169, 169, 169, 169, + 379, 445, 169, 169, 473, 61, 169, 381, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 473, 386, + + 169, 169, 169, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 194, 194, 370, 370, 194, 370, 194, + 194, 465, 1142, 194, 412, 194, 194, 204, 204, 211, + 204, 204, 234, 211, 389, 234, 61, 74, 465, 234, + 234, 74, 74, 74, 582, 74, 386, 74, 74, 389, + 370, 74, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 582, 211, 211, 74, 74, 74, 211, 238, + 238, 412, 238, 238, 246, 246, 211, 246, 246, 211, + 456, 390, 204, 227, 227, 390, 467, 234, 227, 227, + 848, 456, 74, 82, 82, 250, 82, 82, 82, 250, + + 82, 250, 250, 467, 480, 82, 257, 82, 227, 250, + 257, 263, 480, 230, 230, 413, 413, 230, 413, 230, + 230, 82, 82, 230, 250, 230, 254, 254, 848, 254, + 254, 440, 263, 227, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 439, 439, 440, 439, 82, 82, + 91, 479, 91, 259, 259, 326, 259, 259, 326, 263, + 479, 257, 326, 326, 91, 489, 463, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 107, 463, 439, + 107, 254, 442, 1140, 442, 270, 107, 107, 485, 270, + 107, 469, 270, 107, 107, 264, 264, 264, 264, 270, + + 457, 489, 264, 264, 294, 485, 264, 107, 294, 107, + 326, 457, 469, 270, 270, 276, 276, 276, 276, 276, + 276, 264, 264, 271, 271, 271, 271, 271, 271, 271, + 271, 271, 271, 107, 107, 107, 108, 1139, 443, 108, + 443, 468, 108, 108, 477, 108, 108, 108, 108, 108, + 501, 476, 108, 108, 268, 268, 268, 268, 268, 294, + 468, 268, 268, 476, 477, 268, 108, 108, 108, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 268, + 268, 268, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 108, 108, 108, 109, 484, 501, 109, 109, + + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 484, 1135, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 453, 453, 453, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 112, 588, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 470, 475, 588, 112, 112, 112, 112, 112, 112, 286, + 286, 475, 470, 286, 498, 286, 286, 470, 482, 286, + 589, 286, 310, 310, 310, 310, 310, 310, 589, 112, + + 112, 112, 112, 112, 112, 113, 500, 498, 482, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 1128, 500, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 1122, 601, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 591, 601, + 490, 117, 117, 117, 117, 117, 117, 490, 513, 302, + 302, 117, 591, 513, 302, 302, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 474, 117, 117, 117, + 117, 117, 117, 136, 302, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 497, 474, 497, 136, + 136, 136, 136, 136, 136, 524, 533, 529, 524, 302, + 297, 297, 297, 297, 297, 466, 502, 297, 297, 466, + 688, 297, 136, 502, 1112, 136, 136, 136, 136, 136, + 136, 139, 552, 533, 139, 297, 297, 297, 688, 552, + 139, 139, 576, 466, 139, 139, 529, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 576, 497, 139, 139, 139, 139, 139, 139, 139, + + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 563, 551, + 593, 143, 143, 143, 143, 143, 143, 487, 593, 563, + 487, 143, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 323, 323, 478, 323, 323, 143, 143, 143, + 143, 143, 143, 150, 150, 551, 150, 150, 150, 150, + 150, 538, 487, 150, 150, 478, 538, 150, 1107, 305, + + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 581, 150, 150, 150, 151, 587, 581, 577, 151, 151, + 151, 587, 151, 583, 151, 151, 499, 323, 151, 299, + 299, 299, 299, 299, 596, 584, 299, 299, 577, 583, + 299, 596, 151, 151, 151, 460, 460, 460, 460, 460, + 460, 807, 807, 499, 299, 299, 299, 584, 592, 604, + 301, 301, 301, 301, 301, 604, 1106, 301, 301, 151, + 172, 301, 499, 172, 172, 172, 172, 172, 592, 549, + 172, 172, 549, 600, 172, 301, 301, 301, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, 172, 172, + + 172, 174, 590, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 549, 594, 600, 174, 174, 174, + 174, 174, 174, 319, 319, 565, 565, 319, 471, 319, + 319, 590, 471, 319, 598, 319, 594, 565, 567, 567, + 174, 609, 599, 174, 174, 174, 174, 174, 174, 183, + 567, 514, 183, 609, 611, 514, 471, 598, 183, 183, + 611, 687, 183, 183, 599, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 514, + 687, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, + 184, 184, 184, 184, 184, 184, 808, 808, 603, 184, + 184, 184, 184, 184, 184, 333, 333, 333, 333, 333, + 333, 333, 333, 333, 333, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 184, 184, 184, 184, 184, + 184, 205, 602, 603, 517, 205, 205, 205, 517, 205, + 384, 205, 205, 655, 384, 205, 595, 384, 1102, 655, + 683, 610, 444, 666, 384, 595, 683, 652, 1090, 205, + + 205, 205, 517, 610, 666, 602, 651, 511, 384, 384, + 391, 511, 391, 391, 391, 391, 391, 391, 391, 391, + 391, 391, 608, 517, 608, 515, 205, 229, 652, 515, + 229, 229, 229, 229, 229, 511, 695, 229, 229, 651, + 392, 229, 392, 392, 392, 392, 392, 392, 392, 392, + 392, 392, 511, 515, 654, 229, 229, 229, 231, 653, + 695, 515, 231, 231, 231, 692, 231, 657, 231, 231, + 1089, 393, 231, 393, 393, 393, 393, 393, 393, 393, + 393, 393, 393, 686, 692, 697, 231, 231, 231, 654, + 415, 686, 653, 697, 415, 608, 448, 415, 448, 448, + + 448, 448, 448, 448, 415, 507, 657, 507, 507, 507, + 507, 507, 507, 231, 266, 670, 689, 266, 415, 415, + 671, 671, 691, 266, 266, 698, 670, 266, 672, 672, + 266, 266, 671, 725, 1081, 448, 790, 689, 725, 691, + 672, 512, 698, 790, 266, 512, 266, 452, 452, 452, + 452, 452, 452, 452, 452, 452, 452, 452, 459, 459, + 459, 459, 459, 459, 459, 459, 459, 459, 794, 512, + 266, 266, 266, 269, 794, 693, 269, 795, 1080, 269, + 269, 795, 269, 269, 269, 269, 269, 693, 512, 269, + 269, 462, 693, 462, 462, 462, 462, 462, 462, 462, + + 462, 462, 462, 269, 269, 269, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 505, 696, 505, 505, + 505, 505, 505, 505, 505, 505, 505, 505, 711, 269, + 269, 269, 272, 696, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 701, 711, 1072, 272, 272, + 272, 272, 272, 272, 506, 800, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 701, 800, 1071, 535, + 674, 674, 706, 535, 272, 272, 272, 272, 272, 272, + 277, 819, 674, 706, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 535, 819, 277, + + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 886, 886, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 710, 712, 1070, 278, 278, 278, 278, + 278, 278, 516, 802, 710, 712, 516, 802, 518, 519, + 1068, 814, 518, 519, 532, 737, 532, 532, 532, 532, + 532, 532, 278, 278, 278, 278, 278, 278, 304, 814, + 516, 304, 304, 304, 304, 304, 518, 519, 304, 304, + + 748, 758, 304, 838, 516, 748, 518, 838, 709, 519, + 709, 1064, 758, 532, 737, 806, 304, 304, 304, 306, + 806, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 801, 1047, 801, 306, 306, 306, 306, 306, + 306, 776, 777, 539, 578, 522, 805, 539, 578, 522, + 520, 585, 776, 777, 520, 585, 818, 805, 306, 818, + 1046, 306, 306, 306, 306, 306, 306, 311, 709, 799, + 311, 539, 578, 522, 1042, 799, 311, 311, 520, 585, + 311, 311, 1037, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 522, 520, 311, + + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 778, 778, 1020, 312, 312, 312, + 312, 312, 312, 521, 523, 1039, 778, 521, 523, 528, + 528, 528, 528, 528, 528, 528, 528, 528, 528, 831, + 817, 1039, 817, 312, 312, 312, 312, 312, 312, 324, + 831, 521, 523, 324, 324, 324, 820, 324, 828, 324, + + 324, 779, 779, 324, 781, 781, 528, 843, 523, 827, + 828, 843, 521, 779, 820, 827, 781, 324, 324, 324, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 564, 564, 564, 564, 564, 564, 564, 564, 564, + 564, 817, 1019, 889, 324, 334, 889, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 566, 566, 566, + 566, 566, 566, 566, 566, 566, 566, 570, 570, 570, + 570, 570, 570, 570, 570, 832, 840, 924, 924, 570, + 832, 842, 840, 842, 334, 335, 1015, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 572, 572, 572, + + 572, 572, 572, 572, 572, 572, 572, 573, 573, 573, + 573, 573, 573, 656, 656, 656, 656, 656, 656, 656, + 656, 656, 656, 1004, 335, 336, 841, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 575, 841, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 612, + 656, 612, 612, 612, 612, 612, 612, 612, 612, 612, + 612, 884, 918, 884, 336, 337, 337, 337, 337, 337, + 337, 337, 337, 337, 337, 337, 961, 961, 997, 337, + 337, 337, 337, 337, 337, 613, 844, 613, 613, 613, + 613, 613, 613, 613, 613, 613, 613, 844, 845, 1050, + + 918, 1050, 337, 845, 846, 337, 337, 337, 337, 337, + 337, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 846, 962, 962, 340, 340, 340, 340, 340, + 340, 614, 855, 614, 614, 614, 614, 614, 614, 614, + 614, 614, 614, 617, 855, 927, 996, 617, 927, 968, + 968, 340, 340, 340, 340, 340, 340, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, 342, 974, + 974, 617, 342, 342, 342, 342, 342, 342, 618, 899, + 623, 621, 618, 627, 623, 621, 869, 627, 680, 680, + 680, 680, 680, 680, 870, 617, 899, 869, 342, 342, + + 342, 342, 342, 342, 344, 870, 618, 344, 623, 621, + 994, 627, 618, 344, 344, 621, 623, 344, 344, 627, + 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, + 344, 344, 344, 344, 1006, 1006, 344, 344, 344, 344, + 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, + 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, + 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, + 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 857, 985, 888, 345, 345, 345, 345, 345, 345, + + 622, 624, 882, 857, 622, 624, 888, 625, 882, 973, + 628, 625, 973, 626, 628, 629, 1053, 626, 1053, 629, + 345, 345, 345, 345, 345, 345, 368, 941, 622, 624, + 368, 368, 368, 894, 368, 625, 368, 368, 628, 941, + 368, 626, 622, 629, 911, 628, 894, 871, 871, 625, + 872, 872, 874, 874, 368, 368, 368, 911, 624, 871, + 975, 626, 872, 975, 874, 660, 629, 660, 660, 660, + 660, 660, 660, 677, 677, 677, 677, 677, 677, 677, + 677, 368, 369, 942, 926, 677, 369, 369, 369, 369, + 369, 944, 369, 369, 958, 942, 369, 926, 685, 984, + + 981, 984, 685, 944, 660, 958, 995, 980, 1009, 995, + 369, 369, 369, 667, 970, 667, 667, 667, 667, 667, + 667, 667, 667, 667, 667, 668, 685, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 369, 387, 959, + 1038, 1038, 387, 387, 387, 954, 387, 1009, 387, 387, + 959, 669, 387, 669, 669, 669, 669, 669, 669, 669, + 669, 669, 669, 1176, 984, 1176, 387, 387, 387, 673, + 673, 673, 673, 673, 673, 673, 673, 673, 673, 679, + 679, 679, 679, 679, 679, 679, 679, 679, 679, 1048, + 1048, 690, 694, 387, 388, 690, 694, 1013, 388, 388, + + 388, 388, 388, 1005, 388, 388, 1005, 682, 388, 682, + 682, 682, 682, 682, 682, 682, 682, 682, 682, 690, + 694, 940, 388, 388, 388, 717, 936, 717, 717, 717, + 717, 717, 717, 699, 700, 931, 1013, 699, 700, 713, + 713, 713, 713, 713, 713, 713, 713, 713, 713, 388, + 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, + 394, 699, 700, 928, 394, 394, 394, 394, 394, 394, + 715, 966, 715, 715, 715, 715, 715, 715, 715, 715, + 715, 715, 966, 1082, 1082, 718, 960, 960, 1036, 718, + 394, 394, 394, 394, 394, 394, 396, 923, 960, 1036, + + 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 396, 718, 913, 396, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, 912, 909, + 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, 397, 397, + 397, 397, 397, 397, 397, 397, 397, 397, 397, 1179, + 908, 1179, 397, 397, 397, 397, 397, 397, 716, 903, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 719, 722, 723, 724, 719, 722, 723, 724, 397, 397, + + 397, 397, 397, 397, 416, 1021, 416, 416, 416, 416, + 416, 416, 416, 416, 416, 416, 901, 1021, 719, 722, + 723, 724, 1007, 897, 1022, 1007, 719, 1024, 726, 727, + 728, 729, 726, 727, 728, 729, 1022, 723, 730, 1024, + 724, 741, 730, 416, 417, 741, 417, 417, 417, 417, + 417, 417, 417, 417, 417, 417, 726, 727, 728, 729, + 768, 768, 768, 768, 768, 768, 730, 896, 745, 741, + 1091, 895, 745, 740, 728, 740, 740, 740, 740, 740, + 740, 727, 1091, 417, 418, 1092, 418, 418, 418, 418, + 418, 418, 418, 418, 418, 418, 745, 1092, 893, 736, + + 736, 736, 736, 736, 736, 736, 736, 736, 736, 749, + 752, 753, 740, 749, 752, 753, 787, 787, 787, 787, + 787, 787, 890, 418, 419, 885, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 736, 749, 752, 753, + 419, 419, 419, 419, 419, 419, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 767, 767, 767, 767, + 767, 767, 767, 767, 767, 767, 419, 419, 419, 419, + 419, 419, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 1074, 1244, 1244, 1244, 421, 421, 421, 421, + 421, 421, 770, 853, 770, 770, 770, 770, 770, 770, + + 770, 770, 770, 770, 775, 1078, 775, 775, 775, 775, + 775, 775, 421, 421, 421, 421, 421, 421, 437, 1094, + 852, 1074, 437, 437, 437, 839, 437, 833, 437, 437, + 830, 1094, 437, 771, 771, 771, 771, 771, 771, 771, + 771, 771, 771, 1054, 1078, 1054, 437, 437, 437, 773, + 829, 773, 773, 773, 773, 773, 773, 773, 773, 773, + 773, 774, 1130, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 437, 438, 1141, 1160, 1187, 438, 438, + 438, 438, 438, 826, 438, 438, 825, 1141, 438, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 816, + + 815, 1130, 438, 438, 438, 784, 784, 784, 784, 784, + 784, 784, 784, 1054, 813, 1160, 1187, 784, 786, 786, + 786, 786, 786, 786, 786, 786, 786, 786, 796, 438, + 446, 772, 446, 446, 446, 446, 446, 446, 446, 446, + 446, 446, 789, 764, 789, 789, 789, 789, 789, 789, + 789, 789, 789, 789, 791, 797, 803, 809, 791, 797, + 803, 809, 811, 982, 898, 898, 811, 898, 898, 446, + 447, 763, 447, 447, 447, 447, 447, 447, 447, 447, + 447, 447, 791, 797, 803, 809, 982, 762, 982, 982, + 811, 821, 821, 821, 821, 821, 821, 821, 821, 821, + + 821, 821, 863, 863, 863, 863, 863, 863, 757, 447, + 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, + 458, 458, 458, 756, 755, 898, 458, 458, 458, 458, + 458, 458, 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 880, 880, 880, 880, 880, 880, 754, + 751, 1203, 458, 458, 458, 458, 458, 458, 461, 461, + 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, + 900, 750, 747, 461, 461, 461, 461, 461, 461, 823, + 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, + 1203, 1237, 1237, 900, 746, 900, 900, 1237, 744, 461, + + 461, 461, 461, 461, 461, 464, 743, 971, 464, 983, + 983, 971, 983, 983, 464, 464, 742, 735, 464, 464, + 900, 464, 464, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 971, 721, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, + 464, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 1276, 1276, 1276, 508, 508, 508, 508, 508, + + 508, 950, 950, 950, 950, 950, 950, 847, 847, 847, + 847, 847, 847, 847, 847, 847, 847, 1146, 1146, 1146, + 1146, 508, 508, 508, 508, 508, 508, 509, 720, 714, + 708, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 847, 707, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 705, + 704, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 510, + 703, 702, 684, 510, 851, 851, 851, 851, 851, 851, + + 851, 976, 978, 664, 663, 976, 978, 510, 510, 510, + 510, 510, 510, 510, 510, 510, 510, 510, 662, 661, + 650, 510, 510, 510, 510, 510, 510, 649, 648, 976, + 978, 647, 851, 854, 854, 854, 854, 854, 854, 854, + 854, 854, 854, 646, 645, 644, 643, 510, 510, 510, + 510, 510, 510, 530, 642, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 856, 856, 856, 856, 856, + 856, 856, 856, 856, 856, 860, 641, 860, 860, 860, + 860, 860, 860, 1343, 1343, 1051, 1051, 860, 1051, 1051, + 1343, 640, 530, 531, 639, 531, 531, 531, 531, 531, + + 531, 531, 531, 531, 531, 862, 862, 862, 862, 862, + 862, 862, 862, 862, 862, 865, 638, 865, 865, 865, + 865, 865, 865, 865, 865, 865, 865, 634, 633, 632, + 993, 631, 531, 553, 993, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 866, 630, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 867, 993, 867, + 867, 867, 867, 867, 867, 867, 867, 867, 867, 620, + 619, 616, 553, 554, 615, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 868, 607, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 873, 873, 873, + + 873, 873, 873, 873, 873, 873, 873, 1040, 1265, 1265, + 606, 1040, 554, 555, 1265, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 877, 877, 877, 877, 877, + 877, 877, 877, 605, 597, 1040, 562, 877, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, 561, 560, + 559, 557, 555, 568, 568, 568, 568, 568, 568, 568, + 568, 568, 568, 568, 568, 568, 556, 548, 547, 568, + 568, 568, 568, 568, 568, 881, 546, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 887, 891, 545, + 544, 887, 891, 543, 542, 568, 568, 568, 568, 568, + + 568, 571, 571, 571, 571, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 541, 887, 891, 571, 571, 571, + 571, 571, 571, 902, 902, 902, 902, 902, 902, 902, + 902, 902, 902, 540, 892, 910, 887, 891, 892, 910, + 537, 536, 534, 571, 571, 571, 571, 571, 571, 574, + 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, + 574, 527, 892, 910, 574, 574, 574, 574, 574, 574, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 526, 986, 892, 910, 525, 986, 986, 986, 986, + 574, 574, 574, 574, 574, 574, 635, 504, 635, 635, + + 635, 635, 635, 635, 635, 635, 635, 635, 905, 905, + 905, 905, 905, 905, 905, 905, 905, 905, 905, 906, + 906, 906, 906, 906, 906, 906, 496, 495, 914, 1043, + 1069, 494, 914, 1043, 1069, 635, 636, 986, 636, 636, + 636, 636, 636, 636, 636, 636, 636, 636, 957, 493, + 957, 957, 957, 957, 957, 957, 914, 1043, 1069, 492, + 915, 491, 486, 483, 915, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 636, 637, 914, 637, 637, + 637, 637, 637, 637, 637, 637, 637, 637, 915, 455, + 921, 921, 921, 921, 921, 921, 921, 454, 451, 450, + + 436, 925, 917, 929, 930, 925, 1108, 929, 930, 915, + 1108, 1266, 1266, 435, 434, 637, 658, 1266, 658, 658, + 658, 658, 658, 658, 658, 658, 658, 658, 921, 925, + 433, 929, 930, 937, 1108, 937, 937, 937, 937, 937, + 937, 937, 937, 937, 937, 1114, 1114, 432, 1114, 1114, + 925, 1349, 929, 930, 431, 658, 659, 1349, 659, 659, + 659, 659, 659, 659, 659, 659, 659, 659, 938, 430, + 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, + 939, 429, 939, 939, 939, 939, 939, 939, 939, 939, + 939, 939, 428, 427, 426, 659, 665, 665, 665, 665, + + 665, 665, 665, 665, 665, 665, 665, 425, 424, 423, + 665, 665, 665, 665, 665, 665, 943, 943, 943, 943, + 943, 943, 943, 943, 943, 943, 949, 949, 949, 949, + 949, 949, 949, 949, 949, 949, 665, 665, 665, 665, + 665, 665, 675, 675, 675, 675, 675, 675, 675, 675, + 675, 675, 675, 675, 675, 420, 414, 411, 675, 675, + 675, 675, 675, 675, 947, 410, 947, 947, 947, 947, + 947, 947, 409, 408, 407, 1018, 947, 1018, 1018, 1018, + 1018, 1018, 1018, 406, 675, 675, 675, 675, 675, 675, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + + 678, 678, 678, 405, 404, 403, 678, 678, 678, 678, + 678, 678, 952, 402, 952, 952, 952, 952, 952, 952, + 952, 952, 952, 952, 965, 965, 965, 965, 965, 965, + 965, 965, 678, 678, 678, 678, 678, 678, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 401, 400, 399, 681, 681, 681, 681, 681, 681, 953, + 953, 953, 953, 953, 953, 953, 953, 953, 953, 398, + 1121, 987, 395, 380, 1121, 987, 987, 987, 987, 681, + 681, 681, 681, 681, 681, 738, 376, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 955, 1121, 955, + + 955, 955, 955, 955, 955, 955, 955, 955, 955, 956, + 375, 956, 956, 956, 956, 956, 956, 956, 956, 956, + 956, 374, 373, 367, 738, 739, 987, 739, 739, 739, + 739, 739, 739, 739, 739, 739, 739, 1014, 1014, 1014, + 1014, 1014, 1014, 1014, 1014, 1014, 1014, 366, 967, 969, + 365, 992, 967, 969, 1012, 992, 1012, 1012, 1012, 1012, + 1012, 1012, 364, 363, 739, 759, 759, 759, 759, 759, + 759, 759, 759, 759, 759, 759, 967, 969, 988, 992, + 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, + 362, 1152, 1152, 1012, 1152, 1152, 1283, 967, 969, 1283, + + 992, 1283, 360, 759, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 989, 359, 989, 989, 989, + 989, 989, 989, 989, 989, 989, 989, 990, 358, 990, + 990, 990, 990, 990, 990, 990, 990, 990, 990, 357, + 356, 355, 760, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 991, 354, 991, 991, 991, 991, + 991, 991, 991, 991, 991, 991, 353, 1002, 1003, 352, + 351, 1002, 1003, 1030, 1030, 1030, 1030, 1030, 1030, 350, + 349, 761, 766, 348, 766, 766, 766, 766, 766, 766, + 766, 766, 766, 766, 766, 1002, 1003, 346, 766, 766, + + 766, 766, 766, 766, 1008, 1008, 1008, 1008, 1008, 1008, + 1008, 1008, 1008, 1008, 1045, 1079, 1002, 1003, 1045, 1079, + 339, 338, 325, 321, 766, 766, 766, 766, 766, 766, + 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, + 769, 1008, 1045, 1079, 769, 769, 769, 769, 769, 769, + 1016, 320, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, + 1016, 1016, 1055, 1045, 1079, 318, 1055, 1055, 1055, 1055, + 769, 769, 769, 769, 769, 769, 782, 782, 782, 782, + 782, 782, 782, 782, 782, 782, 782, 782, 782, 317, + 316, 315, 782, 782, 782, 782, 782, 782, 1017, 314, + + 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, + 1100, 1100, 1100, 1100, 1100, 1100, 313, 1055, 782, 782, + 782, 782, 782, 782, 785, 785, 785, 785, 785, 785, + 785, 785, 785, 785, 785, 785, 785, 307, 303, 300, + 785, 785, 785, 785, 785, 785, 1023, 1023, 1023, 1023, + 1023, 1023, 1023, 1023, 1023, 1023, 1029, 1029, 1029, 1029, + 1029, 1029, 1029, 1029, 1029, 1029, 785, 785, 785, 785, + 785, 785, 788, 788, 788, 788, 788, 788, 788, 788, + 788, 788, 788, 298, 296, 293, 292, 788, 788, 788, + 788, 788, 788, 1027, 291, 1027, 1027, 1027, 1027, 1027, + + 1027, 288, 287, 285, 1067, 1027, 1067, 1067, 1067, 1067, + 1067, 1067, 284, 788, 788, 788, 788, 788, 788, 793, + 1060, 1307, 793, 1060, 1307, 283, 1307, 282, 793, 793, + 1060, 1060, 793, 793, 1060, 793, 793, 793, 793, 793, + 793, 793, 793, 793, 793, 793, 793, 793, 1060, 1060, + 1060, 793, 793, 793, 793, 793, 793, 793, 793, 793, + 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, + 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, + 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, + 793, 793, 793, 793, 793, 824, 281, 279, 273, 824, + + 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, + 265, 824, 261, 256, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 255, 253, 824, + 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 834, 834, 834, + 834, 834, 834, 834, 834, 834, 834, 834, 1032, 249, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1183, 1183, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - - 1052, 1052, 308, 1060, 1060, 1060, 1060, 1060, 1060, 1060, - 1060, 1060, 1060, 166, 166, 413, 520, 268, 1031, 166, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, - 308, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, - 1061, 308, 1062, 1062, 1062, 1062, 1062, 1063, 1060, 1060, - 1060, 1060, 1132, 307, 307, 413, 1132, 268, 1031, 307, - 1034, 1034, 1034, 1034, 1034, 1035, 1036, 1036, 1036, 1036, - 1183, 167, 506, 505, 1183, 1183, 1183, 1183, 1014, 1133, - 504, 503, 1014, 1015, 1016, 1017, 1075, 1076, 1077, 1075, - 1075, 1075, 1075, 1075, 1075, 1075, 502, 268, 1031, 501, + 1033, 244, 239, 237, 233, 834, 835, 835, 835, 835, - 1036, 1036, 1036, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1183, 500, 409, 409, 1183, 1015, 1016, 1017, 409, 1135, - 1136, 1183, 1137, 1135, 1018, 1183, 1183, 1183, 1017, 514, - 514, 499, 1018, 515, 515, 514, 498, 268, 966, 515, - 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, - 1073, 497, 496, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 495, 1018, 1183, 494, 519, 519, 1183, - 1183, 1183, 1183, 519, 493, 1018, 276, 141, 966, 485, - 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, - 1021, 481, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, + 835, 835, 835, 835, 835, 835, 835, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1035, 1035, + 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1110, + 228, 216, 215, 1110, 835, 836, 836, 836, 836, 836, + 836, 836, 836, 836, 836, 836, 214, 1147, 1056, 213, + 212, 1147, 1056, 1056, 1056, 1056, 1059, 1110, 207, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 200, + 199, 198, 197, 836, 837, 1147, 1149, 837, 1110, 196, + 1149, 195, 193, 837, 837, 192, 191, 837, 837, 190, + 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, - 1022, 1022, 1021, 480, 1022, 1022, 1022, 1022, 1022, 1022, - 1022, 1022, 1022, 1022, 479, 478, 477, 141, 812, 1020, - 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, - 981, 812, 476, 1050, 1050, 1050, 1050, 1050, 1050, 1050, - 1050, 1050, 1050, 1051, 475, 474, 473, 1052, 1052, 1052, - 1052, 1052, 1052, 1081, 1082, 1083, 1081, 1081, 1081, 1081, - 1081, 1081, 1081, 1031, 472, 1032, 1032, 1032, 1032, 1032, - 1032, 471, 1052, 1052, 1052, 1052, 1052, 1052, 1056, 1057, - 1058, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 470, 469, - 268, 468, 1059, 1059, 1059, 1059, 1059, 1059, 1183, 619, + 837, 837, 837, 1056, 1149, 189, 837, 837, 837, 837, + 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, + 849, 1057, 1347, 188, 1347, 1057, 1057, 1057, 1057, 1058, + 1347, 187, 186, 1058, 1058, 1058, 1058, 1063, 1063, 1063, + 1063, 1063, 1063, 1063, 1063, 1063, 1063, 185, 849, 850, + 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, - 619, 1019, 268, 621, 621, 619, 244, 1019, 1019, 621, - 253, 1019, 458, 253, 455, 253, 454, 1059, 1059, 1059, - 1059, 1059, 1059, 622, 622, 1019, 1019, 1019, 1031, 622, - 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 453, 452, 1066, 445, 444, 1092, 1066, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1059, 1059, 1059, - 1059, 1059, 1059, 1059, 1059, 1059, 1059, 268, 1031, 1067, - 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1092, 443, 1093, 1093, 1093, 1093, 1093, 1093, 442, 1092, - 283, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, + 1061, 180, 176, 175, 1061, 1061, 1061, 1061, 1105, 1105, + 1105, 1105, 1105, 1105, 1105, 1077, 1057, 1077, 1077, 1077, + 1077, 1077, 1077, 171, 1058, 168, 164, 850, 858, 161, + 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, + 858, 861, 158, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 1077, 1061, 154, 861, 861, 861, + 861, 861, 861, 1065, 149, 1065, 1065, 1065, 1065, 1065, + 1065, 1065, 1065, 1065, 1065, 1138, 148, 1138, 1138, 1138, + 1138, 1138, 1138, 861, 861, 861, 861, 861, 861, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, - 1094, 1149, 1149, 1149, 1149, 1149, 1149, 268, 1087, 441, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1092, 440, 1095, 1095, 1095, 1095, 1095, 1096, 1093, 1093, - 1093, 1093, 812, 437, 1099, 1099, 1099, 1099, 1099, 1099, - 720, 720, 436, 435, 1051, 434, 720, 141, 1087, 433, - 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, - 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, - 1183, 432, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, - 1101, 1101, 431, 721, 721, 430, 429, 141, 1087, 721, - 1090, 1090, 1090, 1090, 1090, 1091, 1088, 1088, 1088, 1088, + 147, 146, 145, 864, 864, 864, 864, 864, 864, 1066, + 144, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, + 1066, 1111, 1120, 140, 134, 1111, 1120, 132, 128, 864, + 864, 864, 864, 864, 864, 875, 875, 875, 875, 875, + 875, 875, 875, 875, 875, 875, 875, 875, 123, 1111, + 1120, 875, 875, 875, 875, 875, 875, 122, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1158, 1174, + 1111, 1120, 1158, 1174, 121, 120, 119, 875, 875, 875, + 875, 875, 875, 878, 878, 878, 878, 878, 878, 878, + 878, 878, 878, 878, 878, 1073, 1158, 1174, 118, 878, - 308, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, - 1060, 308, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, - 1060, 1060, 428, 722, 722, 427, 426, 141, 812, 722, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1051, 812, 425, 1100, 1100, 1100, 1100, 1100, 1100, 1100, - 1100, 1100, 1100, 424, 167, 159, 397, 1101, 1101, 1101, - 1101, 1101, 1101, 1105, 1107, 396, 388, 1105, 1107, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 387, - 386, 385, 1101, 1101, 1101, 1101, 1101, 1101, 384, 383, - 1106, 1108, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, + 878, 878, 878, 878, 878, 1177, 1177, 1062, 1177, 1177, + 1062, 1126, 114, 1294, 1294, 1126, 101, 1062, 1062, 1294, + 94, 1062, 87, 86, 79, 878, 878, 878, 878, 878, + 878, 883, 1300, 1300, 883, 1062, 1062, 1062, 1300, 1126, + 883, 883, 78, 73, 883, 883, 72, 883, 883, 883, + 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, + 1126, 71, 66, 883, 883, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, - 1074, 1074, 1111, 267, 1112, 1112, 1112, 1112, 1112, 1112, - 376, 170, 170, 1111, 272, 1112, 1112, 1112, 1112, 1112, - 1112, 1112, 1112, 1112, 1112, 1111, 270, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1111, 268, 1114, - 1114, 1114, 1114, 1114, 1115, 1112, 1112, 1112, 1112, 1105, - 265, 1105, 375, 1105, 1087, 1105, 1088, 1088, 1088, 1088, - 1088, 1088, 1107, 1132, 1132, 1132, 1107, 1132, 1132, 1132, - 1177, 1177, 1177, 1177, 1177, 1177, 1106, 374, 1106, 1123, - 1124, 1125, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1108, - 1133, 1133, 1133, 141, 373, 372, 364, 251, 1117, 283, + 883, 883, 883, 883, 883, 883, 883, 907, 64, 54, + 53, 907, 907, 907, 907, 907, 907, 907, 907, 907, + 907, 907, 51, 907, 50, 48, 907, 907, 907, 907, + 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, + 907, 907, 907, 907, 907, 907, 907, 907, 907, 43, + 38, 907, 907, 907, 907, 907, 907, 907, 907, 907, + 907, 907, 907, 907, 907, 907, 907, 907, 907, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 1086, 32, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, + 1086, 1086, 1087, 26, 1087, 1087, 1087, 1087, 1087, 1087, + 1087, 1087, 1087, 1087, 25, 22, 21, 919, 920, 920, + 920, 920, 920, 920, 920, 920, 920, 920, 920, 1088, + 0, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, + 1088, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, + 1093, 0, 1301, 1301, 0, 0, 920, 922, 1301, 0, + 922, 0, 1302, 1302, 0, 0, 922, 922, 1302, 0, + 922, 922, 0, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 0, 0, 0, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 932, 0, 932, 932, 932, 932, 932, + 932, 932, 932, 932, 932, 1097, 0, 1097, 1097, 1097, + 1097, 1097, 1097, 0, 0, 0, 0, 1097, 1099, 1099, + 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1308, 1308, + 0, 0, 932, 933, 1308, 933, 933, 933, 933, 933, + 933, 933, 933, 933, 933, 1101, 0, 1101, 1101, 1101, + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1103, 1103, 1103, + 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1309, 1309, + + 0, 0, 933, 934, 1309, 934, 934, 934, 934, 934, + 934, 934, 934, 934, 934, 1104, 1104, 1104, 1104, 1104, + 1104, 1104, 1104, 1104, 1104, 1104, 1115, 1115, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1194, 1194, 1194, 1194, + 1194, 1194, 934, 935, 0, 935, 935, 935, 935, 935, + 935, 935, 935, 935, 935, 1116, 1116, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1117, 0, 1117, 1117, 1117, + 1117, 1117, 1117, 1117, 1117, 1117, 1117, 0, 1310, 1310, + 0, 0, 935, 945, 1310, 945, 945, 945, 945, 945, + 945, 945, 945, 945, 945, 945, 948, 0, 948, 948, + + 948, 948, 948, 948, 948, 948, 948, 948, 948, 0, + 0, 0, 948, 948, 948, 948, 948, 948, 1118, 0, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, - 283, 170, 283, 363, 362, 361, 141, 1126, 1127, 1128, - 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1138, 1139, 1140, - 1138, 1138, 1138, 1138, 1138, 1138, 1138, 268, 1117, 360, - 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, - 1092, 359, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1092, 1183, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 241, 233, 228, 268, 1117, 229, - 1120, 1120, 1120, 1120, 1120, 1121, 1118, 1118, 1118, 1118, - 812, 223, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, + 1157, 0, 1157, 1157, 1157, 1157, 1157, 1157, 948, 948, + 948, 948, 948, 948, 951, 951, 951, 951, 951, 951, + 951, 951, 951, 951, 951, 0, 0, 0, 951, 951, + 951, 951, 951, 951, 1119, 0, 1119, 1119, 1119, 1119, + 1119, 1119, 1119, 1119, 1119, 1119, 1201, 0, 1201, 1201, + 1201, 1201, 1201, 1201, 951, 951, 951, 951, 951, 951, + 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, - 1131, 1131, 1111, 223, 1112, 1112, 1112, 1112, 1112, 1112, - 1112, 1112, 1112, 1112, 188, 215, 350, 268, 1087, 342, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1111, 341, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, - 1112, 1112, 1141, 1142, 1143, 1141, 1141, 1141, 1141, 1141, - 1141, 1141, 340, 810, 810, 339, 338, 141, 1087, 810, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 335, 1117, 334, 1118, 1118, 1118, 1118, 1118, 1118, 268, - 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, - 811, 811, 333, 894, 894, 332, 811, 141, 1117, 894, - - 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, - 268, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1151, 1151, 1151, 1151, 1151, 1152, 1149, 1149, 1149, - 1149, 253, 331, 330, 253, 321, 253, 268, 1117, 320, - 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, - 1155, 319, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, - 1156, 1156, 1155, 318, 1157, 1157, 1157, 1157, 1157, 1157, - 1157, 1157, 1157, 1157, 317, 316, 315, 268, 1144, 314, - 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, - 1155, 313, 1158, 1158, 1158, 1158, 1158, 1159, 1156, 1156, - - 1156, 1156, 1165, 1166, 1167, 1165, 1165, 1165, 1165, 1165, - 1165, 1165, 167, 977, 977, 140, 167, 141, 1144, 977, - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - 243, 1144, 155, 1145, 1145, 1145, 1145, 1145, 1145, 141, - 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, - 1047, 1047, 153, 1097, 1097, 146, 1047, 141, 1144, 1097, - 1147, 1147, 1147, 1147, 1147, 1148, 1145, 1145, 1145, 1145, - 141, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, - 1149, 1168, 1169, 1170, 1168, 1168, 1168, 1168, 1168, 1168, - 1168, 144, 141, 1129, 1129, 292, 291, 141, 1160, 1129, - - 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, - 1155, 290, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, - 1156, 1156, 1155, 289, 1156, 1156, 1156, 1156, 1156, 1156, - 1156, 1156, 1156, 1156, 288, 287, 283, 268, 1160, 272, - 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, - 1155, 268, 1156, 1156, 1156, 1156, 1156, 1156, 1171, 1172, - 1173, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1160, 265, - 1161, 1161, 1161, 1161, 1161, 1161, 261, 268, 1160, 260, - 1163, 1163, 1163, 1163, 1163, 1164, 1161, 1161, 1161, 1161, - 259, 258, 257, 256, 251, 268, 1174, 1174, 1174, 1174, - - 1174, 1174, 1174, 1174, 1174, 1174, 229, 268, 223, 215, - 143, 181, 212, 178, 204, 202, 184, 268, 1144, 183, - 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, - 180, 179, 176, 141, 1165, 1165, 1165, 1165, 1165, 1165, - 1165, 1165, 1165, 1165, 1175, 1175, 1175, 1175, 1175, 1176, - 1174, 1174, 1174, 1174, 170, 167, 155, 141, 1144, 144, - 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, - 143, 141, 141, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 141, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, - 1177, 1177, 1183, 1183, 1183, 1183, 1183, 141, 1160, 1183, - - 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, - 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, - 1178, 1178, 1178, 1178, 1178, 1179, 1177, 1177, 1177, 1177, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 268, 1160, 1183, - 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, - 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, - 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 268, 1183, 1183, - 1183, 1174, 1174, 1174, 1174, 1174, 1174, 268, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 268, 1181, 1181, - - 1181, 1181, 1181, 1182, 1180, 1180, 1180, 1180, 1174, 1174, - 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 141, 1177, - 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1180, - 1180, 1180, 1180, 1180, 1180, 268, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 141, 1180, 1180, 1180, 1180, - 1180, 1180, 1180, 1180, 1180, 1180, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 268, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 268, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - - 72, 72, 72, 72, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 140, 1183, 1183, 140, 1183, 1183, - 1183, 1183, 140, 1183, 140, 140, 140, 1183, 1183, 140, - - 140, 140, 140, 140, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 150, 1183, 1183, 150, 1183, 1183, - 150, 1183, 150, 1183, 150, 150, 150, 150, 1183, 150, - 150, 150, 150, 150, 154, 1183, 1183, 154, 1183, 1183, - 1183, 1183, 154, 1183, 154, 154, 154, 1183, 1183, 154, - 154, 154, 154, 154, 156, 1183, 1183, 156, 156, 156, - 1183, 156, 156, 1183, 156, 156, 156, 1183, 1183, 156, - 156, 156, 156, 156, 209, 1183, 1183, 209, 209, 209, - 1183, 209, 209, 1183, 209, 209, 209, 1183, 1183, 209, - - 209, 209, 209, 209, 214, 1183, 1183, 214, 214, 214, - 1183, 214, 214, 1183, 214, 214, 214, 1183, 214, 214, - 1183, 214, 214, 214, 222, 1183, 1183, 222, 222, 1183, - 1183, 222, 222, 1183, 222, 222, 222, 222, 1183, 222, - 222, 222, 222, 222, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 228, 228, 1183, 228, 228, 1183, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 235, 1183, 1183, 235, 1183, 1183, - 235, 1183, 235, 1183, 235, 235, 235, 235, 1183, 235, - - 235, 235, 235, 235, 239, 1183, 1183, 239, 1183, 1183, - 1183, 1183, 239, 1183, 239, 239, 239, 1183, 239, 239, - 239, 239, 239, 239, 242, 1183, 1183, 242, 242, 242, - 1183, 242, 242, 1183, 242, 242, 242, 1183, 242, 242, - 242, 242, 242, 242, 264, 1183, 1183, 1183, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 267, 1183, 1183, 267, 1183, 1183, - 1183, 1183, 267, 1183, 267, 267, 267, 1183, 1183, 267, - 267, 267, 267, 267, 269, 1183, 1183, 269, 1183, 1183, - 269, 1183, 269, 1183, 269, 269, 269, 269, 1183, 269, - - 269, 269, 269, 269, 271, 1183, 1183, 271, 1183, 1183, - 1183, 1183, 271, 1183, 271, 271, 271, 1183, 1183, 271, - 271, 271, 271, 271, 273, 1183, 1183, 273, 273, 273, - 1183, 273, 273, 1183, 273, 273, 273, 1183, 1183, 273, - 273, 273, 273, 273, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 299, 299, 1183, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 150, 1183, 1183, 150, 1183, 1183, - 1183, 1183, 150, 1183, 150, 150, 150, 1183, 1183, 150, - - 150, 150, 150, 150, 154, 1183, 1183, 154, 1183, 1183, - 1183, 1183, 154, 1183, 154, 154, 154, 1183, 1183, 154, - 154, 154, 154, 154, 156, 1183, 1183, 156, 156, 156, - 1183, 156, 156, 1183, 156, 156, 156, 1183, 1183, 156, - 156, 156, 156, 156, 157, 1183, 1183, 157, 157, 157, - 1183, 157, 157, 1183, 157, 157, 157, 1183, 1183, 157, - 157, 157, 157, 157, 309, 309, 309, 1183, 1183, 1183, - 1183, 309, 209, 1183, 1183, 209, 209, 209, 1183, 209, - 209, 1183, 209, 209, 209, 1183, 1183, 209, 209, 209, - 209, 209, 210, 1183, 1183, 210, 210, 210, 1183, 210, - - 210, 1183, 210, 210, 210, 1183, 1183, 210, 210, 210, - 210, 210, 214, 1183, 1183, 214, 214, 214, 1183, 214, - 214, 1183, 214, 214, 214, 1183, 214, 214, 1183, 214, - 214, 214, 222, 1183, 1183, 222, 222, 1183, 1183, 222, - 222, 1183, 222, 222, 222, 222, 1183, 222, 222, 222, - 222, 222, 228, 228, 1183, 228, 228, 1183, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 238, 1183, 1183, 238, 1183, 1183, 1183, 1183, - 238, 1183, 238, 238, 238, 1183, 1183, 238, 238, 238, - 238, 238, 239, 1183, 1183, 239, 1183, 1183, 1183, 1183, - - 239, 1183, 239, 239, 239, 1183, 239, 239, 239, 239, - 239, 239, 240, 1183, 1183, 240, 240, 1183, 240, 240, - 1183, 1183, 240, 240, 242, 1183, 1183, 242, 242, 242, - 1183, 242, 242, 1183, 242, 242, 242, 1183, 242, 242, - 242, 242, 242, 242, 264, 1183, 1183, 1183, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 267, 1183, 1183, 267, 1183, 1183, - 1183, 1183, 267, 1183, 267, 267, 267, 1183, 1183, 267, - 267, 267, 267, 267, 269, 1183, 1183, 269, 1183, 1183, - 1183, 1183, 269, 1183, 269, 269, 269, 1183, 1183, 269, - - 269, 269, 269, 269, 271, 1183, 1183, 271, 1183, 1183, - 1183, 1183, 271, 1183, 271, 271, 271, 1183, 1183, 271, - 271, 271, 271, 271, 273, 1183, 1183, 273, 273, 273, - 1183, 273, 273, 1183, 273, 273, 273, 1183, 1183, 273, - 273, 273, 273, 273, 274, 1183, 1183, 274, 274, 274, - 1183, 274, 274, 1183, 274, 274, 274, 1183, 1183, 274, - 274, 274, 274, 274, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 401, 401, 401, 401, 401, 401, - 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, - - 401, 401, 401, 401, 415, 415, 415, 1183, 1183, 1183, - 1183, 415, 521, 521, 521, 1183, 1183, 1183, 1183, 521, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 624, 624, 624, 1183, 1183, 1183, 1183, 624, 628, 628, - 628, 628, 1183, 1183, 1183, 1183, 628, 734, 734, 734, - 1183, 1183, 1183, 1183, 734, 735, 735, 735, 735, 1183, - 1183, 1183, 1183, 735, 827, 827, 827, 1183, 1183, 1183, - 1183, 827, 828, 828, 828, 828, 1183, 1183, 1183, 1183, - 828, 297, 297, 297, 297, 297, 297, 297, 297, 297, - - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 240, 1183, 1183, 240, 240, 1183, 240, 240, 1183, - 1183, 240, 240, 898, 1183, 898, 898, 1183, 1183, 1183, - 1183, 898, 916, 916, 916, 1183, 1183, 1183, 1183, 916, - 917, 917, 917, 917, 1183, 1183, 1183, 1183, 917, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 240, - 1183, 1183, 240, 240, 1183, 240, 240, 1183, 1183, 240, - 240, 267, 1183, 1183, 267, 1183, 1183, 1183, 1183, 267, - 1183, 267, 267, 267, 1183, 1183, 267, 267, 267, 267, - - 267, 978, 1183, 978, 978, 1183, 1183, 1183, 1183, 978, - 994, 994, 994, 1183, 1183, 1183, 1183, 994, 995, 995, - 995, 1183, 1183, 1183, 1183, 1183, 995, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1013, 1013, 1183, - 1013, 1013, 1013, 1013, 1183, 1013, 1183, 1013, 1013, 1013, - 1183, 1183, 1013, 1013, 1013, 1013, 1013, 1019, 1019, 1183, - 1019, 1019, 1019, 1019, 1183, 1019, 1183, 1019, 1019, 1019, - 1183, 1183, 1019, 1019, 1019, 1019, 1019, 1048, 1183, 1048, - 1048, 1183, 1183, 1183, 1183, 1048, 1098, 1183, 1098, 1098, - - 1183, 1183, 1183, 1183, 1098, 1134, 1134, 1134, 1134, 1134, + 963, 963, 998, 0, 998, 998, 998, 998, 998, 998, + 998, 998, 998, 998, 0, 1127, 0, 0, 0, 1127, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1133, 0, 1133, 1133, 1133, 1133, 1133, 1133, 0, 0, + 0, 998, 999, 1127, 999, 999, 999, 999, 999, 999, + 999, 999, 999, 999, 0, 0, 1163, 1129, 1163, 1163, + 1163, 1163, 1163, 1163, 1127, 0, 0, 0, 0, 1133, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, - 1134, 1134, 1134, 1134, 1134, 19, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183 - - } ; - -static yyconst flex_int16_t yy_chk[8301] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 21, 50, 43, 2, 21, - 27, 2, 5, 5, 39, 5, 5, 5, 43, 5, - 53, 50, 47, 42, 39, 5, 42, 47, 6, 6, - - 27, 6, 6, 6, 53, 6, 42, 2, 2, 5, - 5, 6, 2, 35, 35, 35, 35, 35, 35, 44, - 2, 62, 44, 2, 3, 6, 6, 27, 3, 11, - 11, 3, 11, 11, 11, 11, 5, 3, 12, 12, - 3, 12, 12, 12, 12, 84, 66, 60, 104, 62, - 66, 104, 6, 129, 3, 168, 129, 3, 15, 15, - 15, 15, 15, 15, 15, 3, 60, 3, 168, 3, - 3, 84, 3, 16, 16, 16, 16, 16, 16, 16, - 32, 32, 56, 11, 32, 32, 189, 71, 91, 1180, - 103, 56, 12, 64, 3, 4, 71, 64, 86, 4, - - 56, 103, 4, 90, 32, 71, 64, 90, 4, 337, - 201, 4, 15, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 337, 86, 4, 57, 16, 4, 32, - 57, 80, 80, 116, 80, 80, 4, 91, 4, 189, - 4, 4, 55, 4, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 94, 59, 201, 90, 59, 57, - 57, 145, 202, 145, 57, 4, 7, 7, 59, 7, - 7, 7, 57, 7, 94, 57, 88, 88, 202, 88, - 88, 65, 116, 59, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 93, 93, 591, 93, 93, 591, - - 93, 94, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 99, 99, 99, 99, 99, 99, 329, 329, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, - 8, 120, 8, 8, 8, 112, 8, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 128, 114, 142, - 167, 120, 191, 142, 191, 67, 67, 114, 128, 67, - 67, 167, 231, 118, 118, 1174, 118, 118, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, 120, 67, - 344, 344, 293, 8, 8, 8, 8, 8, 8, 8, - - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 9, 9, 67, 9, 9, 9, 9, 9, - 295, 231, 295, 203, 9, 9, 9, 118, 78, 78, - 338, 78, 78, 78, 95, 78, 203, 95, 338, 78, - 9, 78, 139, 95, 152, 293, 95, 192, 351, 95, - 95, 139, 192, 122, 122, 78, 78, 122, 122, 297, - 139, 297, 351, 95, 152, 95, 9, 10, 10, 204, - 10, 10, 10, 10, 10, 204, 298, 122, 298, 10, - 10, 10, 78, 125, 125, 125, 125, 125, 125, 95, - 95, 152, 408, 187, 187, 10, 187, 187, 299, 428, - - 299, 138, 122, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 165, 165, 165, 165, 165, 165, 408, - 428, 10, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 17, 17, 17, 17, - - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 26, 266, 26, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 26, 1156, 435, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 33, 435, 33, 33, - - 33, 33, 33, 33, 33, 33, 33, 33, 33, 348, - 1131, 348, 33, 33, 33, 33, 33, 33, 190, 190, - 266, 190, 190, 141, 141, 141, 141, 141, 206, 141, - 141, 200, 206, 141, 309, 33, 200, 33, 33, 33, - 33, 33, 33, 40, 200, 309, 40, 141, 141, 141, - 208, 542, 40, 233, 208, 40, 40, 233, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 190, 542, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 401, 434, - 401, 45, 45, 45, 45, 45, 45, 349, 199, 434, - 199, 45, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 349, 347, 235, 438, 45, 45, 45, 45, - 45, 45, 54, 54, 438, 54, 54, 54, 54, 54, - 347, 54, 54, 151, 235, 54, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 1129, 236, 213, 54, - 54, 54, 58, 213, 58, 440, 153, 153, 153, 153, - - 153, 235, 153, 153, 199, 58, 153, 236, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 427, 440, - 153, 153, 153, 155, 155, 155, 155, 155, 205, 155, - 155, 554, 205, 155, 236, 156, 156, 427, 554, 156, - 156, 205, 216, 216, 404, 216, 216, 155, 155, 155, - 232, 232, 296, 232, 232, 58, 79, 296, 79, 156, - 249, 249, 249, 249, 249, 249, 311, 352, 645, 79, - 311, 352, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 96, 404, 156, 96, 230, 645, 96, 96, - 230, 96, 96, 96, 96, 399, 432, 96, 96, 159, - - 159, 159, 159, 159, 159, 159, 159, 159, 159, 399, - 432, 96, 96, 96, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 1112, 433, 159, 96, 96, 97, - 230, 443, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 433, 443, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 436, 1101, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - - 100, 436, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 402, 561, 402, 100, 100, 100, 100, - 100, 100, 180, 180, 374, 374, 180, 374, 180, 180, - 336, 336, 180, 336, 180, 180, 412, 412, 412, 415, - 431, 100, 100, 100, 100, 100, 100, 101, 431, 561, - 415, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 1100, 336, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 101, 1098, - 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - - 101, 101, 101, 101, 101, 101, 101, 101, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 664, - 457, 424, 105, 105, 105, 105, 105, 105, 345, 664, - 209, 209, 105, 345, 209, 209, 227, 227, 424, 227, - 227, 425, 193, 457, 556, 425, 193, 105, 105, 105, - 105, 105, 105, 123, 209, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 441, 556, 425, 123, - 123, 123, 123, 123, 123, 193, 193, 212, 212, 209, - 193, 212, 422, 212, 212, 426, 441, 212, 193, 212, - 227, 193, 123, 422, 123, 123, 123, 123, 123, 123, - - 126, 223, 426, 126, 449, 223, 471, 223, 223, 126, - 449, 471, 126, 126, 223, 126, 126, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 126, 126, 126, 223, - 1097, 126, 126, 126, 126, 126, 126, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, - 126, 126, 126, 126, 130, 130, 130, 130, 130, 130, - 130, 130, 130, 130, 130, 1093, 521, 439, 130, 130, - 130, 130, 130, 130, 343, 439, 343, 521, 130, 207, - - 207, 207, 207, 207, 207, 207, 207, 207, 207, 398, - 398, 459, 398, 130, 130, 130, 130, 130, 130, 137, - 137, 447, 137, 137, 137, 137, 137, 459, 137, 137, - 765, 765, 137, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 444, 398, 508, 137, 137, 137, 158, - 447, 343, 158, 158, 158, 158, 158, 265, 158, 158, - 444, 265, 158, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 437, 508, 534, 158, 158, 158, 160, - 448, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 487, 534, 437, 160, 160, 160, 160, 160, - - 160, 460, 237, 237, 237, 237, 243, 460, 237, 237, - 243, 265, 237, 243, 485, 997, 448, 485, 160, 243, - 160, 160, 160, 160, 160, 160, 169, 237, 237, 169, - 997, 487, 538, 243, 243, 169, 484, 484, 169, 169, - 484, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 485, 538, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 491, 653, 1086, 170, 170, 170, 170, 170, 170, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 281, 281, 281, 281, 281, 281, 653, 558, 491, 170, - 170, 170, 170, 170, 170, 211, 550, 509, 211, 211, - 211, 211, 211, 239, 211, 211, 239, 456, 211, 456, - 294, 294, 239, 294, 294, 239, 550, 430, 239, 239, - 558, 430, 211, 211, 211, 419, 419, 419, 419, 419, - 419, 753, 239, 509, 239, 753, 241, 241, 241, 241, - 241, 468, 241, 241, 430, 468, 241, 248, 248, 248, - - 248, 248, 248, 248, 248, 248, 248, 547, 239, 239, - 241, 241, 241, 242, 294, 547, 242, 540, 468, 242, - 242, 456, 242, 242, 242, 242, 259, 259, 242, 242, - 259, 446, 259, 259, 446, 540, 259, 759, 259, 759, - 458, 496, 242, 242, 242, 429, 496, 276, 276, 276, - 276, 276, 276, 276, 276, 276, 276, 429, 507, 273, - 273, 507, 429, 273, 273, 510, 446, 458, 242, 242, - 245, 510, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 273, 276, 458, 245, 245, 245, 245, - 245, 245, 546, 507, 268, 268, 268, 268, 268, 483, - - 268, 268, 483, 539, 268, 483, 546, 548, 273, 539, - 1080, 245, 245, 245, 245, 245, 245, 250, 268, 268, - 268, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 1070, 548, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 559, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 251, 251, - 251, 251, 251, 251, 251, 251, 251, 251, 251, 1065, - 559, 541, 251, 251, 251, 251, 251, 251, 545, 270, - - 270, 270, 270, 270, 545, 270, 270, 541, 407, 270, - 407, 407, 407, 407, 407, 407, 1064, 251, 251, 251, - 251, 251, 251, 270, 270, 270, 272, 272, 272, 272, - 272, 560, 272, 272, 535, 549, 272, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 407, 1060, 549, - 272, 272, 272, 275, 567, 535, 275, 275, 275, 275, - 275, 649, 275, 275, 560, 567, 275, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 552, 649, 562, - 275, 275, 275, 277, 562, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 523, 523, 552, 277, - - 277, 277, 277, 277, 277, 290, 290, 553, 523, 290, - 472, 290, 290, 551, 472, 290, 553, 290, 557, 525, - 525, 551, 277, 568, 277, 277, 277, 277, 277, 277, - 282, 525, 493, 282, 568, 689, 493, 472, 689, 282, - 557, 650, 282, 282, 1048, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 493, - 650, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - - 282, 282, 282, 282, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 566, 1047, 566, 283, 283, - 283, 283, 283, 283, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 465, 1039, 465, 465, 465, 465, - 465, 465, 1038, 283, 283, 283, 283, 283, 283, 301, - 301, 301, 301, 301, 301, 301, 301, 301, 301, 302, - 609, 302, 302, 302, 302, 302, 302, 302, 302, 302, - 302, 353, 1030, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 610, 350, 569, 566, 615, 350, 624, - 569, 350, 588, 609, 588, 588, 1029, 350, 302, 303, - - 624, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 350, 350, 354, 610, 354, 354, 354, 354, 354, - 354, 354, 354, 354, 354, 355, 615, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 592, 303, 304, - 592, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 411, 411, 411, 411, 411, 411, 411, 411, 411, - 411, 411, 628, 376, 734, 497, 644, 376, 589, 497, - 376, 589, 589, 628, 644, 734, 376, 592, 304, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 376, 376, 497, 305, 305, 305, 305, 305, 305, 403, - - 403, 403, 403, 403, 403, 403, 403, 403, 403, 531, - 531, 531, 531, 531, 531, 1028, 305, 646, 305, 305, - 305, 305, 305, 305, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 646, 403, 1026, 308, 308, - 308, 308, 308, 308, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 536, 543, 613, 641, 536, 543, - 1022, 613, 641, 308, 308, 308, 308, 308, 308, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 536, 543, 611, 310, 310, 310, 310, 310, 310, - 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, - - 590, 647, 590, 590, 654, 629, 629, 630, 630, 310, - 310, 310, 310, 310, 310, 312, 611, 629, 312, 630, - 654, 655, 647, 659, 312, 766, 766, 312, 312, 655, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 659, 1005, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 313, - 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - - 776, 1004, 776, 313, 313, 313, 313, 313, 313, 421, - 612, 421, 421, 421, 421, 421, 421, 421, 421, 421, - 421, 638, 638, 638, 638, 638, 638, 1000, 313, 313, - 313, 313, 313, 313, 356, 356, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 612, 844, 844, 356, 356, - 356, 356, 356, 356, 461, 461, 461, 461, 461, 461, - 461, 461, 461, 461, 643, 648, 683, 690, 643, 648, - 690, 683, 656, 356, 356, 356, 356, 356, 356, 358, - 358, 358, 358, 358, 358, 358, 358, 358, 358, 656, - 995, 643, 648, 358, 358, 358, 358, 358, 358, 463, - - 651, 463, 463, 463, 463, 463, 463, 463, 463, 463, - 463, 706, 651, 632, 632, 978, 706, 651, 358, 358, - 358, 358, 358, 358, 377, 632, 377, 377, 377, 377, - 377, 377, 377, 377, 377, 377, 464, 977, 464, 464, - 464, 464, 464, 464, 464, 464, 464, 464, 486, 486, - 486, 486, 486, 486, 486, 486, 486, 486, 691, 669, - 695, 691, 692, 377, 378, 692, 378, 378, 378, 378, - 378, 378, 378, 378, 378, 378, 669, 490, 973, 490, - 490, 490, 490, 490, 490, 486, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 760, 667, 695, - - 667, 760, 847, 378, 379, 847, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 490, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 522, 524, 524, 524, - 524, 524, 524, 524, 524, 524, 524, 693, 962, 748, - 693, 772, 778, 379, 380, 748, 380, 380, 380, 380, - 380, 380, 380, 380, 380, 380, 667, 955, 772, 778, - 380, 380, 380, 380, 380, 380, 528, 528, 528, 528, - 528, 528, 528, 528, 668, 652, 657, 658, 528, 652, - 657, 658, 693, 954, 668, 380, 380, 380, 380, 380, - 380, 382, 382, 382, 382, 382, 382, 382, 382, 382, - - 382, 952, 652, 657, 658, 382, 382, 382, 382, 382, - 382, 530, 530, 530, 530, 530, 530, 530, 530, 530, - 530, 800, 618, 800, 618, 618, 618, 618, 618, 618, - 382, 382, 382, 382, 382, 382, 405, 758, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, 533, 758, - 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, - 570, 618, 570, 570, 570, 570, 570, 570, 570, 570, - 570, 570, 764, 777, 943, 405, 406, 764, 406, 406, - 406, 406, 406, 406, 406, 406, 406, 406, 571, 777, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - - 572, 735, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 735, 804, 939, 406, 417, 417, 417, 417, - 417, 417, 417, 417, 417, 417, 417, 417, 417, 842, - 804, 842, 417, 417, 417, 417, 417, 417, 614, 614, - 614, 614, 614, 614, 614, 614, 614, 614, 675, 938, - 675, 675, 675, 675, 675, 675, 928, 417, 417, 417, - 417, 417, 417, 420, 420, 420, 420, 420, 420, 420, - 420, 420, 420, 420, 420, 614, 882, 882, 420, 420, - 420, 420, 420, 420, 625, 846, 625, 625, 625, 625, - 625, 625, 625, 625, 625, 625, 752, 796, 846, 912, - - 670, 796, 752, 420, 420, 420, 420, 420, 420, 423, - 670, 676, 423, 716, 757, 676, 885, 898, 423, 885, - 757, 423, 423, 716, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, 423, 423, 676, 894, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 466, 466, 466, 466, 466, 466, 466, - 466, 466, 466, 763, 919, 919, 889, 466, 466, 466, - - 466, 466, 466, 626, 763, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 726, 726, 726, 726, 726, - 726, 886, 466, 466, 466, 466, 466, 466, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, 802, 920, - 920, 881, 467, 467, 467, 467, 467, 467, 627, 802, - 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, - 745, 745, 745, 745, 745, 745, 806, 467, 467, 467, - 467, 467, 467, 482, 482, 482, 482, 482, 482, 482, - 482, 482, 482, 482, 926, 926, 871, 482, 482, 482, - 482, 482, 482, 631, 631, 631, 631, 631, 631, 631, - - 631, 631, 631, 733, 806, 733, 733, 733, 733, 733, - 733, 870, 482, 482, 482, 482, 482, 482, 488, 867, - 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, - 635, 635, 635, 635, 635, 635, 635, 635, 1008, 857, - 1008, 852, 635, 637, 637, 637, 637, 637, 637, 637, - 637, 637, 637, 798, 852, 857, 967, 488, 489, 798, - 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, - 640, 866, 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 671, 671, 671, 671, 671, 671, 671, 671, - 671, 671, 775, 931, 775, 967, 931, 489, 511, 799, - - 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, - 673, 799, 673, 673, 673, 673, 673, 673, 673, 673, - 673, 673, 674, 827, 674, 674, 674, 674, 674, 674, - 674, 674, 674, 674, 827, 680, 861, 511, 512, 680, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 828, 775, 684, 736, 736, 801, 684, 932, 932, 801, - 859, 828, 680, 687, 688, 736, 699, 687, 688, 698, - 699, 698, 698, 698, 698, 698, 698, 512, 513, 684, - 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, - 687, 688, 813, 699, 694, 694, 694, 694, 694, 694, - - 694, 694, 694, 694, 813, 703, 707, 803, 698, 703, - 707, 840, 803, 964, 964, 971, 840, 513, 526, 526, - 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, - 526, 694, 703, 707, 526, 526, 526, 526, 526, 526, - 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, - 855, 710, 711, 749, 971, 710, 711, 749, 854, 526, - 526, 526, 526, 526, 526, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 710, 711, - 749, 529, 529, 529, 529, 529, 529, 725, 725, 725, - 725, 725, 725, 725, 725, 725, 725, 755, 761, 767, - - 853, 755, 761, 767, 996, 996, 529, 529, 529, 529, - 529, 529, 532, 532, 532, 532, 532, 532, 532, 532, - 532, 532, 532, 532, 755, 761, 767, 532, 532, 532, - 532, 532, 532, 728, 815, 728, 728, 728, 728, 728, - 728, 728, 728, 728, 728, 1285, 815, 737, 737, 1006, - 1006, 1285, 532, 532, 532, 532, 532, 532, 593, 737, - 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, - 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, - 731, 869, 731, 731, 731, 731, 731, 731, 731, 731, - 731, 731, 933, 851, 869, 933, 876, 593, 594, 899, - - 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, - 732, 899, 732, 732, 732, 732, 732, 732, 732, 732, - 732, 732, 738, 738, 738, 738, 738, 738, 738, 738, - 738, 738, 856, 856, 876, 856, 856, 594, 595, 848, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 739, 739, 742, 742, 742, 742, 742, 742, 742, 742, - 1040, 1040, 739, 884, 742, 744, 744, 744, 744, 744, - 744, 744, 744, 744, 744, 769, 884, 595, 616, 769, - 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, - 747, 856, 747, 747, 747, 747, 747, 747, 747, 747, - - 747, 747, 769, 779, 779, 779, 779, 779, 779, 779, - 779, 779, 779, 779, 843, 1032, 953, 616, 617, 953, - 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, - 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, - 780, 781, 781, 781, 781, 781, 781, 781, 781, 781, - 781, 781, 941, 941, 1032, 941, 941, 617, 623, 623, - 623, 623, 623, 623, 623, 623, 623, 623, 623, 1011, - 811, 1011, 623, 623, 623, 623, 623, 623, 1036, 805, - 805, 805, 805, 805, 805, 805, 805, 805, 805, 809, - 809, 809, 809, 809, 809, 809, 810, 623, 623, 623, - - 623, 623, 623, 633, 633, 633, 633, 633, 633, 633, - 633, 633, 633, 633, 633, 633, 805, 1036, 797, 633, - 633, 633, 633, 633, 633, 1088, 1118, 809, 812, 812, - 812, 812, 812, 812, 812, 812, 812, 812, 821, 821, - 821, 821, 821, 821, 633, 633, 633, 633, 633, 633, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 791, 1088, 1118, 636, 636, 636, 636, - 636, 636, 814, 814, 814, 814, 814, 814, 814, 814, - 814, 814, 838, 838, 838, 838, 838, 838, 1134, 1145, - 1134, 636, 636, 636, 636, 636, 636, 639, 639, 639, - - 639, 639, 639, 639, 639, 639, 639, 639, 639, 1137, - 790, 1137, 639, 639, 639, 639, 639, 639, 818, 900, - 818, 818, 818, 818, 818, 818, 924, 1283, 1145, 1283, - 818, 900, 829, 829, 789, 1283, 924, 639, 639, 639, - 639, 639, 639, 696, 829, 696, 696, 696, 696, 696, - 696, 696, 696, 696, 696, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 823, 902, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 963, 902, 788, - 963, 965, 696, 697, 965, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 824, 1161, 824, 824, 824, - - 824, 824, 824, 824, 824, 824, 824, 825, 916, 825, - 825, 825, 825, 825, 825, 825, 825, 825, 825, 916, - 787, 786, 697, 717, 717, 717, 717, 717, 717, 717, - 717, 717, 717, 717, 826, 1161, 826, 826, 826, 826, - 826, 826, 826, 826, 826, 826, 830, 830, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, 830, 785, - 784, 717, 718, 718, 718, 718, 718, 718, 718, 718, - 718, 718, 718, 832, 832, 835, 835, 835, 835, 835, - 835, 835, 835, 783, 782, 832, 979, 835, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 979, 774, - - 718, 719, 719, 719, 719, 719, 719, 719, 719, 719, - 719, 719, 839, 858, 839, 839, 839, 839, 839, 839, - 839, 839, 839, 839, 773, 917, 845, 849, 850, 980, - 845, 849, 850, 771, 754, 858, 917, 858, 858, 719, - 724, 980, 724, 724, 724, 724, 724, 724, 724, 724, - 724, 724, 724, 845, 849, 850, 724, 724, 724, 724, - 724, 724, 858, 860, 860, 860, 860, 860, 860, 860, - 860, 860, 860, 929, 845, 849, 850, 929, 1012, 730, - 1012, 724, 724, 724, 724, 724, 724, 727, 727, 727, - 727, 727, 727, 727, 727, 727, 727, 727, 722, 721, - - 929, 727, 727, 727, 727, 727, 727, 862, 862, 862, - 862, 862, 862, 862, 862, 862, 862, 862, 864, 864, - 864, 864, 864, 864, 864, 720, 727, 727, 727, 727, - 727, 727, 740, 740, 740, 740, 740, 740, 740, 740, - 740, 740, 740, 740, 740, 715, 1012, 714, 740, 740, - 740, 740, 740, 740, 863, 863, 863, 863, 863, 863, - 863, 863, 863, 863, 863, 868, 872, 873, 713, 868, - 872, 873, 712, 740, 740, 740, 740, 740, 740, 743, - 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, - 743, 743, 868, 872, 873, 743, 743, 743, 743, 743, - - 743, 875, 875, 875, 875, 875, 875, 875, 875, 875, - 875, 709, 883, 868, 872, 873, 883, 942, 708, 942, - 743, 743, 743, 743, 743, 743, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 705, 875, 883, - 704, 746, 746, 746, 746, 746, 746, 994, 879, 879, - 879, 879, 879, 879, 879, 934, 1279, 1279, 994, 934, - 883, 918, 918, 1279, 982, 1049, 746, 746, 746, 746, - 746, 746, 751, 918, 936, 751, 982, 1049, 936, 702, - 942, 751, 934, 701, 751, 751, 879, 751, 751, 751, - 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, - - 700, 936, 686, 751, 751, 751, 751, 751, 751, 751, - 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, - 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, - 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, - 751, 751, 751, 751, 751, 751, 792, 792, 792, 792, - 792, 792, 792, 792, 792, 792, 792, 895, 685, 895, - 895, 895, 895, 895, 895, 895, 895, 895, 895, 887, - 888, 1050, 682, 887, 888, 908, 908, 908, 908, 908, - 908, 681, 679, 1050, 792, 793, 793, 793, 793, 793, - 793, 793, 793, 793, 793, 793, 887, 888, 896, 678, - - 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, - 1009, 1009, 677, 1009, 1009, 944, 672, 887, 888, 944, - 944, 944, 944, 793, 794, 794, 794, 794, 794, 794, - 794, 794, 794, 794, 794, 897, 940, 897, 897, 897, - 897, 897, 897, 897, 897, 897, 897, 901, 901, 901, - 901, 901, 901, 901, 901, 901, 901, 666, 940, 1052, - 940, 940, 794, 795, 951, 1099, 795, 665, 951, 944, - 663, 1052, 795, 662, 661, 795, 795, 1099, 795, 795, - 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, - 795, 951, 660, 642, 795, 795, 795, 795, 795, 795, - - 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, - 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, - 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, - 795, 795, 795, 795, 795, 795, 795, 807, 807, 807, - 807, 807, 807, 807, 807, 807, 807, 807, 905, 622, - 905, 905, 905, 905, 905, 905, 1104, 1104, 1104, 1104, - 905, 907, 907, 907, 907, 907, 907, 907, 907, 907, - 907, 1197, 1197, 1197, 621, 807, 808, 808, 808, 808, - 808, 808, 808, 808, 808, 808, 808, 910, 620, 910, - 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, - - 911, 911, 911, 911, 911, 911, 911, 911, 911, 1072, - 1072, 619, 1072, 1072, 808, 816, 608, 816, 816, 816, - 816, 816, 816, 816, 816, 816, 816, 816, 819, 607, - 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, - 819, 1221, 1221, 1221, 819, 819, 819, 819, 819, 819, - 913, 606, 913, 913, 913, 913, 913, 913, 913, 913, - 913, 913, 988, 988, 988, 988, 988, 988, 605, 819, - 819, 819, 819, 819, 819, 822, 822, 822, 822, 822, - 822, 822, 822, 822, 822, 822, 604, 603, 602, 822, - 822, 822, 822, 822, 822, 914, 601, 914, 914, 914, - - 914, 914, 914, 914, 914, 914, 914, 998, 1001, 600, - 599, 998, 1001, 598, 822, 822, 822, 822, 822, 822, - 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, - 833, 833, 833, 597, 998, 1001, 833, 833, 833, 833, - 833, 833, 915, 596, 915, 915, 915, 915, 915, 915, - 923, 923, 923, 923, 923, 923, 923, 923, 587, 586, - 585, 833, 833, 833, 833, 833, 833, 836, 836, 836, - 836, 836, 836, 836, 836, 836, 836, 836, 836, 584, - 583, 582, 581, 836, 836, 836, 836, 836, 836, 1027, - 580, 579, 1066, 1027, 925, 927, 1066, 1079, 925, 927, - - 976, 1079, 976, 976, 976, 976, 976, 976, 836, 836, - 836, 836, 836, 836, 841, 1228, 1027, 841, 1228, 1066, - 1228, 925, 927, 841, 1079, 578, 841, 841, 577, 841, - 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, - 841, 841, 925, 927, 576, 841, 841, 841, 841, 841, - 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, - 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, - 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, - 841, 841, 841, 841, 841, 841, 841, 841, 865, 575, - 574, 573, 865, 865, 865, 865, 865, 865, 865, 865, - - 865, 865, 865, 565, 865, 564, 563, 865, 865, 865, - 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, - 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, - 555, 865, 865, 865, 865, 865, 865, 865, 865, 865, - 865, 865, 865, 865, 865, 865, 865, 865, 865, 877, - 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, - 945, 520, 519, 518, 945, 945, 945, 945, 946, 517, - 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, - 1058, 1058, 1058, 1058, 1058, 1058, 515, 877, 878, 878, - 878, 878, 878, 878, 878, 878, 878, 878, 878, 947, - - 514, 947, 947, 947, 947, 947, 947, 947, 947, 947, - 947, 506, 505, 948, 945, 948, 948, 948, 948, 948, - 948, 948, 948, 948, 948, 504, 878, 880, 1018, 1244, - 880, 1018, 1244, 503, 1244, 502, 880, 1018, 1018, 880, - 880, 1018, 880, 880, 880, 880, 880, 880, 880, 880, - 880, 880, 880, 880, 880, 1018, 1018, 1018, 880, 880, - 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, - 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, - 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, - 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, - - 880, 890, 501, 890, 890, 890, 890, 890, 890, 890, - 890, 890, 890, 949, 500, 949, 949, 949, 949, 949, - 949, 949, 949, 949, 949, 499, 950, 960, 961, 498, - 950, 960, 961, 1063, 1063, 1063, 1063, 1063, 1063, 1063, - 890, 891, 495, 891, 891, 891, 891, 891, 891, 891, - 891, 891, 891, 950, 960, 961, 966, 966, 966, 966, - 966, 966, 966, 966, 966, 966, 970, 494, 970, 970, - 970, 970, 970, 970, 950, 960, 961, 492, 481, 480, - 891, 892, 479, 892, 892, 892, 892, 892, 892, 892, - 892, 892, 892, 966, 972, 972, 972, 972, 972, 972, - - 972, 972, 972, 972, 974, 970, 974, 974, 974, 974, - 974, 974, 974, 974, 974, 974, 1194, 1194, 478, 477, - 892, 893, 1194, 893, 893, 893, 893, 893, 893, 893, - 893, 893, 893, 975, 476, 975, 975, 975, 975, 975, - 975, 975, 975, 975, 975, 981, 981, 981, 981, 981, - 981, 981, 981, 981, 981, 1110, 1110, 475, 1110, 1110, - 893, 903, 474, 903, 903, 903, 903, 903, 903, 903, - 903, 903, 903, 903, 906, 473, 906, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 470, 469, 462, - 906, 906, 906, 906, 906, 906, 985, 455, 985, 985, - - 985, 985, 985, 985, 454, 1003, 1105, 1107, 985, 1003, - 1105, 1107, 453, 452, 451, 906, 906, 906, 906, 906, - 906, 909, 909, 909, 909, 909, 909, 909, 909, 909, - 909, 909, 1003, 1105, 1107, 909, 909, 909, 909, 909, - 909, 987, 987, 987, 987, 987, 987, 987, 987, 987, - 987, 450, 1025, 1003, 1025, 1025, 1025, 1025, 1025, 1025, - 909, 909, 909, 909, 909, 909, 921, 921, 921, 921, - 921, 921, 921, 921, 921, 921, 921, 921, 956, 445, - 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, - 990, 442, 990, 990, 990, 990, 990, 990, 990, 990, - - 990, 990, 991, 991, 991, 991, 991, 991, 991, 991, - 991, 991, 991, 1215, 1215, 414, 413, 956, 957, 1215, - 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, - 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, - 992, 993, 993, 993, 993, 993, 993, 993, 993, 993, - 993, 993, 1116, 1216, 1216, 410, 1116, 957, 958, 1216, - 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, - 1013, 409, 397, 396, 1013, 1013, 1013, 1013, 1014, 1116, - 395, 394, 1014, 1014, 1014, 1014, 1021, 1021, 1021, 1021, - 1021, 1021, 1021, 1021, 1021, 1021, 393, 958, 959, 392, - - 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, - 1015, 391, 1237, 1237, 1015, 1015, 1015, 1015, 1237, 1135, - 1135, 1016, 1135, 1135, 1013, 1016, 1016, 1016, 1016, 1239, - 1239, 390, 1014, 1240, 1240, 1239, 389, 959, 968, 1240, - 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, - 1017, 388, 387, 1017, 1017, 1017, 1017, 1017, 1017, 1017, - 1017, 1017, 1017, 386, 1015, 1019, 385, 1241, 1241, 1019, - 1019, 1019, 1019, 1241, 384, 1016, 381, 968, 969, 375, - 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, - 1023, 373, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, - - 1023, 1023, 1024, 372, 1024, 1024, 1024, 1024, 1024, 1024, - 1024, 1024, 1024, 1024, 371, 370, 369, 969, 983, 1019, - 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, - 983, 986, 368, 986, 986, 986, 986, 986, 986, 986, - 986, 986, 986, 986, 367, 366, 365, 986, 986, 986, - 986, 986, 986, 1031, 1031, 1031, 1031, 1031, 1031, 1031, - 1031, 1031, 1031, 1035, 364, 1035, 1035, 1035, 1035, 1035, - 1035, 363, 986, 986, 986, 986, 986, 986, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, 362, 361, - 1031, 360, 989, 989, 989, 989, 989, 989, 1020, 1245, - - 1245, 1020, 1035, 1246, 1246, 1245, 357, 1020, 1020, 1246, - 1260, 1020, 346, 1260, 342, 1260, 341, 989, 989, 989, - 989, 989, 989, 1247, 1247, 1020, 1020, 1020, 1033, 1247, - 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, - 340, 339, 1037, 335, 334, 1044, 1037, 1044, 1044, 1044, - 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1051, 1051, 1051, - 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1033, 1034, 1037, - 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, - 1096, 333, 1096, 1096, 1096, 1096, 1096, 1096, 332, 1045, - 1037, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, - - 1045, 1152, 1152, 1152, 1152, 1152, 1152, 1034, 1041, 331, - 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, - 1046, 330, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - 1046, 1046, 1055, 328, 1055, 1055, 1055, 1055, 1055, 1055, - 1250, 1250, 327, 326, 1055, 325, 1250, 1041, 1042, 324, - 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, - 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, - 1059, 323, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, - 1059, 1059, 322, 1251, 1251, 321, 320, 1042, 1043, 1251, - 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, - - 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, - 1061, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, - 1062, 1062, 319, 1252, 1252, 318, 317, 1043, 1053, 1252, - 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, - 1053, 1056, 316, 1056, 1056, 1056, 1056, 1056, 1056, 1056, - 1056, 1056, 1056, 314, 307, 306, 292, 1056, 1056, 1056, - 1056, 1056, 1056, 1068, 1069, 291, 289, 1068, 1069, 1073, - 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 288, - 287, 286, 1056, 1056, 1056, 1056, 1056, 1056, 285, 284, - 1068, 1069, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - - 1074, 1074, 1115, 278, 1115, 1115, 1115, 1115, 1115, 1115, - 274, 1068, 1069, 1075, 271, 1075, 1075, 1075, 1075, 1075, - 1075, 1075, 1075, 1075, 1075, 1076, 269, 1076, 1076, 1076, - 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1077, 267, 1077, - 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1078, - 264, 1084, 263, 1078, 1091, 1084, 1091, 1091, 1091, 1091, - 1091, 1091, 1085, 1109, 1122, 1132, 1085, 1109, 1122, 1132, - 1179, 1179, 1179, 1179, 1179, 1179, 1078, 262, 1084, 1087, - 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1085, - 1109, 1122, 1132, 1091, 261, 260, 258, 1078, 1081, 1084, - - 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, - 1085, 1109, 1122, 257, 256, 255, 1087, 1092, 1092, 1092, - 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1081, 1082, 254, - 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, - 1094, 252, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1095, 246, 1095, 1095, 1095, 1095, 1095, 1095, - 1095, 1095, 1095, 1095, 238, 234, 229, 1082, 1083, 228, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1102, 226, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, - - 1102, 1102, 1113, 222, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 217, 215, 210, 1083, 1089, 198, - 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, - 1114, 197, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, - 1114, 1114, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, - 1117, 1117, 196, 1255, 1255, 195, 194, 1089, 1090, 1255, - 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, - 186, 1121, 185, 1121, 1121, 1121, 1121, 1121, 1121, 1117, - 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, - 1256, 1256, 184, 1262, 1262, 183, 1256, 1090, 1119, 1262, - - 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, - 1121, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, - 1127, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, - 1128, 1267, 182, 181, 1267, 179, 1267, 1119, 1120, 178, - 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, - 1138, 177, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, - 1138, 1138, 1139, 176, 1139, 1139, 1139, 1139, 1139, 1139, - 1139, 1139, 1139, 1139, 175, 174, 173, 1120, 1123, 172, - 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, - 1140, 171, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, - - 1140, 1140, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, - 1144, 1144, 166, 1270, 1270, 162, 161, 1123, 1124, 1270, - 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, - 157, 1148, 154, 1148, 1148, 1148, 1148, 1148, 1148, 1144, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1277, 1277, 150, 1280, 1280, 147, 1277, 1124, 1125, 1280, - 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, - 1148, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, - 1155, 144, 140, 1282, 1282, 136, 135, 1125, 1141, 1282, - - 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, - 1157, 134, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, - 1157, 1157, 1158, 133, 1158, 1158, 1158, 1158, 1158, 1158, - 1158, 1158, 1158, 1158, 132, 131, 127, 1141, 1142, 121, - 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, - 1159, 119, 1159, 1159, 1159, 1159, 1159, 1159, 1160, 1160, - 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1164, 115, - 1164, 1164, 1164, 1164, 1164, 1164, 111, 1142, 1143, 110, - 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, - 109, 108, 107, 106, 102, 1160, 1165, 1165, 1165, 1165, - - 1165, 1165, 1165, 1165, 1165, 1165, 89, 1164, 82, 75, - 74, 70, 69, 68, 63, 61, 52, 1143, 1146, 51, - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - 49, 48, 46, 1165, 1166, 1166, 1166, 1166, 1166, 1166, - 1166, 1166, 1166, 1166, 1167, 1167, 1167, 1167, 1167, 1167, - 1167, 1167, 1167, 1167, 41, 36, 30, 1146, 1147, 24, - 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, - 23, 1166, 20, 19, 0, 0, 0, 0, 0, 0, - 0, 1167, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, - 1168, 1168, 0, 0, 0, 0, 0, 1147, 1162, 0, - - 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, - 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, - 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, - 0, 0, 0, 0, 0, 0, 0, 1162, 1163, 0, - 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, - 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, - 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, - 0, 0, 0, 0, 0, 0, 0, 1163, 0, 0, - 0, 1176, 1176, 1176, 1176, 1176, 1176, 1171, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1172, 1173, 1173, - - 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1175, 1175, - 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1176, 1178, - 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1182, - 1182, 1182, 1182, 1182, 1182, 1173, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1175, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1182, 0, 0, 0, + 0, 999, 1000, 0, 1000, 1000, 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1000, 1136, 1163, 1136, 1136, 1136, 1136, + + 1136, 1136, 1136, 1136, 1136, 1136, 1137, 0, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 0, 0, + 0, 1000, 1001, 0, 1001, 1001, 1001, 1001, 1001, 1001, + 1001, 1001, 1001, 1001, 1144, 0, 1144, 1144, 1144, 1144, + 1144, 1144, 1144, 1144, 1144, 1144, 1151, 0, 0, 0, + 1151, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, + 1153, 1001, 1010, 0, 1010, 1010, 1010, 1010, 1010, 1010, + 1010, 1010, 1010, 1010, 1151, 1155, 0, 1155, 1155, 1155, + 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1190, 0, 1190, + 1190, 1190, 1190, 1190, 1190, 1151, 0, 1313, 1313, 0, + + 0, 1010, 1011, 1313, 1011, 1011, 1011, 1011, 1011, 1011, + 1011, 1011, 1011, 1011, 1156, 0, 1156, 1156, 1156, 1156, + 1156, 1156, 1156, 1156, 1156, 1156, 1190, 0, 0, 0, + 0, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, + 1159, 1011, 1025, 0, 1025, 1025, 1025, 1025, 1025, 1025, + 1025, 1025, 1025, 1025, 1025, 1028, 0, 1028, 1028, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1159, 0, + 0, 1028, 1028, 1028, 1028, 1028, 1028, 1206, 0, 1206, + 1206, 1206, 1206, 1206, 1206, 1164, 0, 0, 0, 1164, + 1221, 1221, 1221, 1221, 1221, 1221, 0, 1028, 1028, 1028, + + 1028, 1028, 1028, 1031, 1031, 1031, 1031, 1031, 1031, 1031, + 1031, 1031, 1031, 1164, 0, 0, 1206, 1031, 1031, 1031, + 1031, 1031, 1031, 1168, 1168, 1168, 1168, 1168, 1168, 1168, + 1168, 1168, 1168, 0, 1164, 1314, 1314, 1323, 0, 0, + 1323, 1314, 1323, 1031, 1031, 1031, 1031, 1031, 1031, 1075, + 0, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, + 1169, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, + 1170, 1315, 1315, 0, 1318, 1318, 0, 1315, 1075, 1076, + 1318, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + + 1076, 1180, 0, 1180, 1180, 1180, 1180, 1180, 1180, 1180, + 1180, 1180, 1180, 1181, 0, 1181, 1181, 1181, 1181, 1181, + 1181, 1181, 1181, 1181, 1181, 0, 0, 0, 1076, 1083, + 0, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1182, 0, 1182, 1182, 1182, 1182, 1182, 1182, 1182, + 1182, 1182, 1182, 1186, 1186, 1186, 1186, 1186, 1186, 1186, + 1186, 1186, 1186, 0, 1319, 1319, 0, 0, 1083, 1084, + 1319, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, + 1084, 1326, 1326, 1331, 0, 0, 1331, 1326, 1331, 0, + 1186, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, + + 1192, 1334, 1334, 0, 1341, 1341, 0, 1334, 1084, 1085, + 1341, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, + 1085, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, + 1193, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, + 1197, 1344, 1344, 0, 1346, 1346, 0, 1344, 1085, 1095, + 1346, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, + 1095, 1095, 1098, 0, 1098, 1098, 1098, 1098, 1098, 1098, + 1098, 1098, 1098, 1098, 0, 0, 0, 0, 1098, 1098, + 1098, 1098, 1098, 1098, 1199, 0, 1199, 1199, 1199, 1199, + 1199, 1199, 1199, 1199, 1199, 1199, 0, 0, 0, 0, + + 0, 0, 0, 0, 1098, 1098, 1098, 1098, 1098, 1098, + 1123, 0, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1200, 0, 1200, 1200, 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, 1202, 1202, 1202, 1202, 1202, 1202, + 1202, 1202, 1202, 1202, 0, 0, 0, 0, 0, 1123, + 1124, 0, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 0, 0, 0, 1218, 1218, 1218, 1218, 1218, + 1218, 1202, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + 1207, 1207, 0, 1224, 1224, 1224, 1224, 1224, 1224, 1124, + 1125, 0, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + + 1125, 1125, 1218, 0, 0, 0, 0, 0, 0, 1207, + 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, + 1224, 0, 0, 0, 0, 0, 0, 0, 0, 1125, + 1131, 0, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, + 1131, 1131, 0, 0, 0, 0, 0, 1208, 1209, 1209, + 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1210, 1210, + 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 0, 1131, + 1132, 0, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, + 1132, 1132, 0, 0, 0, 1209, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1212, 1212, 1212, 1212, + + 1212, 1212, 1212, 1212, 1212, 1212, 0, 0, 0, 1132, + 1161, 0, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, + 1161, 1161, 0, 0, 0, 1213, 1213, 1213, 1213, 1213, + 1213, 1213, 1213, 1213, 1213, 1214, 1214, 1214, 1214, 1214, + 1214, 1214, 1214, 1214, 1214, 0, 0, 0, 0, 1161, + 1162, 0, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, + 1162, 1162, 1213, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1214, 1215, 1215, 1215, 1215, 1215, 1215, 1215, + 1215, 1215, 1215, 0, 0, 0, 0, 0, 0, 1162, + 1165, 0, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, + + 1165, 1165, 0, 0, 0, 0, 0, 0, 0, 0, + 1215, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, + 1217, 0, 0, 0, 0, 0, 0, 0, 0, 1165, + 1166, 0, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, + 1166, 1166, 0, 0, 0, 0, 0, 0, 1217, 1220, + 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1223, + 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1166, + 1167, 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, + 1167, 1167, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1223, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1167, + 1183, 0, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, + 1183, 1183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1181, 1184, 1184, 1184, 1184, 1184, 1184, - 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1183, + 1184, 0, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, + 1184, 1184, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1184, + 1185, 0, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, - 1184, 1184, 1184, 1184, 1185, 1185, 1185, 1185, 1185, 1185, - 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, - 1185, 1185, 1185, 1185, 1186, 1186, 1186, 1186, 1186, 1186, - 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, - 1186, 1186, 1186, 1186, 1187, 1187, 1187, 1187, 1187, 1187, - 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, - 1187, 1187, 1187, 1187, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1189, 0, 0, 1189, 0, 0, - 0, 0, 1189, 0, 1189, 1189, 1189, 0, 0, 1189, + 1185, 1185, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1185, + 1188, 0, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, + 1188, 1188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1188, + 1189, 0, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, + 1189, 1189, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1189, 1189, 1189, 1189, 1190, 1190, 1190, 1190, 1190, 1190, - 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, - 1190, 1190, 1190, 1190, 1191, 0, 0, 1191, 0, 0, - 1191, 0, 1191, 0, 1191, 1191, 1191, 1191, 0, 1191, - 1191, 1191, 1191, 1191, 1192, 0, 0, 1192, 0, 0, - 0, 0, 1192, 0, 1192, 1192, 1192, 0, 0, 1192, - 1192, 1192, 1192, 1192, 1193, 0, 0, 1193, 1193, 1193, - 0, 1193, 1193, 0, 1193, 1193, 1193, 0, 0, 1193, - 1193, 1193, 1193, 1193, 1195, 0, 0, 1195, 1195, 1195, - 0, 1195, 1195, 0, 1195, 1195, 1195, 0, 0, 1195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1189, + 1204, 0, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, + 1204, 1204, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1204, + 1205, 0, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, + 1205, 1205, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1205, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, - 1195, 1195, 1195, 1195, 1196, 0, 0, 1196, 1196, 1196, - 0, 1196, 1196, 0, 1196, 1196, 1196, 0, 1196, 1196, - 0, 1196, 1196, 1196, 1198, 0, 0, 1198, 1198, 0, - 0, 1198, 1198, 0, 1198, 1198, 1198, 1198, 0, 1198, - 1198, 1198, 1198, 1198, 1199, 1199, 1199, 1199, 1199, 1199, - 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, - 1199, 1199, 1199, 1199, 1200, 1200, 0, 1200, 1200, 0, - 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, - 1200, 1200, 1200, 1200, 1201, 0, 0, 1201, 0, 0, - 1201, 0, 1201, 0, 1201, 1201, 1201, 1201, 0, 1201, - - 1201, 1201, 1201, 1201, 1202, 0, 0, 1202, 0, 0, - 0, 0, 1202, 0, 1202, 1202, 1202, 0, 1202, 1202, - 1202, 1202, 1202, 1202, 1203, 0, 0, 1203, 1203, 1203, - 0, 1203, 1203, 0, 1203, 1203, 1203, 0, 1203, 1203, - 1203, 1203, 1203, 1203, 1204, 0, 0, 0, 1204, 1204, - 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, - 1204, 1204, 1204, 1204, 1205, 0, 0, 1205, 0, 0, - 0, 0, 1205, 0, 1205, 1205, 1205, 0, 0, 1205, - 1205, 1205, 1205, 1205, 1206, 0, 0, 1206, 0, 0, - 1206, 0, 1206, 0, 1206, 1206, 1206, 1206, 0, 1206, - - 1206, 1206, 1206, 1206, 1207, 0, 0, 1207, 0, 0, - 0, 0, 1207, 0, 1207, 1207, 1207, 0, 0, 1207, - 1207, 1207, 1207, 1207, 1208, 0, 0, 1208, 1208, 1208, - 0, 1208, 1208, 0, 1208, 1208, 1208, 0, 0, 1208, - 1208, 1208, 1208, 1208, 1209, 1209, 1209, 1209, 1209, 1209, - 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, - 1209, 1209, 1209, 1209, 1210, 1210, 0, 1210, 1210, 1210, - 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, - 1210, 1210, 1210, 1210, 1211, 0, 0, 1211, 0, 0, - 0, 0, 1211, 0, 1211, 1211, 1211, 0, 0, 1211, - - 1211, 1211, 1211, 1211, 1212, 0, 0, 1212, 0, 0, - 0, 0, 1212, 0, 1212, 1212, 1212, 0, 0, 1212, - 1212, 1212, 1212, 1212, 1213, 0, 0, 1213, 1213, 1213, - 0, 1213, 1213, 0, 1213, 1213, 1213, 0, 0, 1213, - 1213, 1213, 1213, 1213, 1214, 0, 0, 1214, 1214, 1214, - 0, 1214, 1214, 0, 1214, 1214, 1214, 0, 0, 1214, - 1214, 1214, 1214, 1214, 1217, 1217, 1217, 0, 0, 0, - 0, 1217, 1218, 0, 0, 1218, 1218, 1218, 0, 1218, - 1218, 0, 1218, 1218, 1218, 0, 0, 1218, 1218, 1218, - 1218, 1218, 1219, 0, 0, 1219, 1219, 1219, 0, 1219, - - 1219, 0, 1219, 1219, 1219, 0, 0, 1219, 1219, 1219, - 1219, 1219, 1220, 0, 0, 1220, 1220, 1220, 0, 1220, - 1220, 0, 1220, 1220, 1220, 0, 1220, 1220, 0, 1220, - 1220, 1220, 1222, 0, 0, 1222, 1222, 0, 0, 1222, - 1222, 0, 1222, 1222, 1222, 1222, 0, 1222, 1222, 1222, - 1222, 1222, 1223, 1223, 0, 1223, 1223, 0, 1223, 1223, - 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, - 1223, 1223, 1224, 0, 0, 1224, 0, 0, 0, 0, - 1224, 0, 1224, 1224, 1224, 0, 0, 1224, 1224, 1224, - 1224, 1224, 1225, 0, 0, 1225, 0, 0, 0, 0, - - 1225, 0, 1225, 1225, 1225, 0, 1225, 1225, 1225, 1225, - 1225, 1225, 1226, 0, 0, 1226, 1226, 0, 1226, 1226, - 0, 0, 1226, 1226, 1227, 0, 0, 1227, 1227, 1227, - 0, 1227, 1227, 0, 1227, 1227, 1227, 0, 1227, 1227, - 1227, 1227, 1227, 1227, 1229, 0, 0, 0, 1229, 1229, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, + 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, + 1227, 1227, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, - 1229, 1229, 1229, 1229, 1230, 0, 0, 1230, 0, 0, - 0, 0, 1230, 0, 1230, 1230, 1230, 0, 0, 1230, - 1230, 1230, 1230, 1230, 1231, 0, 0, 1231, 0, 0, - 0, 0, 1231, 0, 1231, 1231, 1231, 0, 0, 1231, + 1229, 1229, 1229, 1229, 1230, 1230, 1230, 1230, 1230, 1230, + 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, + 1230, 1230, 1230, 1230, 1230, 1231, 1231, 1231, 1231, 1231, - 1231, 1231, 1231, 1231, 1232, 0, 0, 1232, 0, 0, - 0, 0, 1232, 0, 1232, 1232, 1232, 0, 0, 1232, - 1232, 1232, 1232, 1232, 1233, 0, 0, 1233, 1233, 1233, - 0, 1233, 1233, 0, 1233, 1233, 1233, 0, 0, 1233, - 1233, 1233, 1233, 1233, 1234, 0, 0, 1234, 1234, 1234, - 0, 1234, 1234, 0, 1234, 1234, 1234, 0, 0, 1234, - 1234, 1234, 1234, 1234, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, 1236, 1236, 1236, 1236, 1236, 1236, - 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, + 1231, 1231, 1231, 1231, 1231, 1231, 1232, 0, 0, 1232, + 0, 0, 0, 1232, 0, 1232, 0, 1232, 1232, 1232, + 0, 0, 1232, 1232, 1232, 1232, 1232, 1233, 1233, 1233, + 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, + 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1234, 0, + 0, 1234, 0, 0, 1234, 1234, 0, 1234, 0, 1234, + 1234, 1234, 1234, 0, 1234, 1234, 1234, 1234, 1234, 1235, + 0, 0, 1235, 0, 0, 0, 1235, 0, 1235, 0, + 1235, 1235, 1235, 0, 0, 1235, 1235, 1235, 1235, 1235, - 1236, 1236, 1236, 1236, 1238, 1238, 1238, 0, 0, 0, - 0, 1238, 1242, 1242, 1242, 0, 0, 0, 0, 1242, + 1236, 0, 0, 1236, 1236, 1236, 0, 1236, 1236, 1236, + 0, 1236, 1236, 1236, 0, 0, 1236, 1236, 1236, 1236, + 1236, 1238, 1238, 0, 1238, 1238, 1238, 0, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1239, 0, 0, 1239, 1239, 1239, 0, 1239, + 1239, 1239, 0, 1239, 1239, 1239, 0, 0, 1239, 1239, + 1239, 1239, 1239, 1240, 1240, 0, 1240, 1240, 1240, 0, + 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, + 1240, 1240, 1240, 1240, 1241, 0, 0, 1241, 1241, 1241, + 0, 1241, 1241, 1241, 0, 1241, 1241, 1241, 0, 1241, + + 1241, 0, 1241, 1241, 1241, 1242, 1242, 0, 1242, 1242, + 1242, 0, 0, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 0, 1242, 1242, 1242, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1248, 1248, 1248, 0, 0, 0, 0, 1248, 1249, 1249, - 1249, 1249, 0, 0, 0, 0, 1249, 1253, 1253, 1253, - 0, 0, 0, 0, 1253, 1254, 1254, 1254, 1254, 0, - 0, 0, 0, 1254, 1257, 1257, 1257, 0, 0, 0, - 0, 1257, 1258, 1258, 1258, 1258, 0, 0, 0, 0, + 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1245, 0, 0, + 1245, 1245, 0, 0, 1245, 1245, 1245, 0, 1245, 1245, + 1245, 1245, 0, 1245, 1245, 1245, 1245, 1245, 1246, 1246, + 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, + 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1247, + 1247, 0, 1247, 1247, 0, 1247, 1247, 1247, 1247, 1247, + + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1248, 0, 0, 1248, 0, 0, 1248, 1248, 0, 1248, + 0, 1248, 1248, 1248, 1248, 0, 1248, 1248, 1248, 1248, + 1248, 1249, 0, 0, 1249, 0, 0, 0, 1249, 0, + 1249, 0, 1249, 1249, 1249, 0, 1249, 1249, 1249, 1249, + 1249, 1249, 1250, 0, 0, 1250, 1250, 1250, 0, 1250, + 1250, 1250, 0, 1250, 1250, 1250, 0, 1250, 1250, 1250, + 1250, 1250, 1250, 1251, 1251, 0, 1251, 1251, 1251, 0, + 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, + 1251, 1251, 1251, 1251, 1252, 0, 0, 0, 1252, 1252, + + 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, + 1252, 1252, 1252, 1252, 1252, 1253, 0, 0, 1253, 0, + 0, 0, 1253, 0, 1253, 0, 1253, 1253, 1253, 0, + 0, 1253, 1253, 1253, 1253, 1253, 1254, 0, 0, 1254, + 0, 0, 1254, 1254, 0, 1254, 0, 1254, 1254, 1254, + 1254, 0, 1254, 1254, 1254, 1254, 1254, 1255, 0, 0, + 1255, 0, 0, 0, 1255, 0, 1255, 0, 1255, 1255, + 1255, 0, 0, 1255, 1255, 1255, 1255, 1255, 1256, 0, + 0, 1256, 1256, 1256, 0, 1256, 1256, 1256, 0, 1256, + 1256, 1256, 0, 0, 1256, 1256, 1256, 1256, 1256, 1257, + + 1257, 0, 1257, 1257, 1257, 0, 1257, 1257, 1257, 1257, + 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, + 1258, 0, 0, 1258, 0, 0, 0, 1258, 0, 1258, + 0, 1258, 1258, 1258, 0, 0, 1258, 1258, 1258, 1258, 1258, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, - 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, - 1259, 1261, 0, 0, 1261, 1261, 0, 1261, 1261, 0, - 0, 1261, 1261, 1263, 0, 1263, 1263, 0, 0, 0, - 0, 1263, 1264, 1264, 1264, 0, 0, 0, 0, 1264, - 1265, 1265, 1265, 1265, 0, 0, 0, 0, 1265, 1266, - 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, - 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1268, - 0, 0, 1268, 1268, 0, 1268, 1268, 0, 0, 1268, - 1268, 1269, 0, 0, 1269, 0, 0, 0, 0, 1269, - 0, 1269, 1269, 1269, 0, 0, 1269, 1269, 1269, 1269, + 1259, 1259, 1260, 1260, 0, 1260, 1260, 1260, 1260, 1260, + 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, + 1260, 1260, 1260, 1261, 0, 0, 1261, 0, 0, 0, + 1261, 0, 1261, 0, 1261, 1261, 1261, 0, 0, 1261, - 1269, 1271, 0, 1271, 1271, 0, 0, 0, 0, 1271, - 1272, 1272, 1272, 0, 0, 0, 0, 1272, 1273, 1273, - 1273, 0, 0, 0, 0, 0, 1273, 1274, 1274, 1274, - 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, - 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1275, 1275, 0, - 1275, 1275, 1275, 1275, 0, 1275, 0, 1275, 1275, 1275, - 0, 0, 1275, 1275, 1275, 1275, 1275, 1276, 1276, 0, - 1276, 1276, 1276, 1276, 0, 1276, 0, 1276, 1276, 1276, - 0, 0, 1276, 1276, 1276, 1276, 1276, 1278, 0, 1278, - 1278, 0, 0, 0, 0, 1278, 1281, 0, 1281, 1281, + 1261, 1261, 1261, 1261, 1262, 0, 0, 1262, 0, 0, + 0, 1262, 0, 1262, 0, 1262, 1262, 1262, 0, 0, + 1262, 1262, 1262, 1262, 1262, 1263, 0, 0, 1263, 1263, + 1263, 0, 1263, 1263, 1263, 0, 1263, 1263, 1263, 0, + 0, 1263, 1263, 1263, 1263, 1263, 1264, 0, 0, 1264, + 1264, 1264, 0, 1264, 1264, 1264, 0, 1264, 1264, 1264, + 0, 0, 1264, 1264, 1264, 1264, 1264, 1267, 1267, 1267, + 0, 0, 0, 0, 1267, 1268, 1268, 0, 1268, 1268, + 1268, 0, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, + 1268, 1268, 1268, 1268, 1268, 1268, 1269, 1269, 0, 1269, - 0, 0, 0, 0, 1281, 1284, 1284, 1284, 1284, 1284, + 1269, 1269, 0, 1269, 1269, 1269, 1269, 1269, 1269, 1269, + 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1270, 0, 0, + 1270, 1270, 1270, 0, 1270, 1270, 1270, 0, 1270, 1270, + 1270, 0, 0, 1270, 1270, 1270, 1270, 1270, 1271, 0, + 0, 1271, 1271, 1271, 0, 1271, 1271, 1271, 0, 1271, + 1271, 1271, 0, 0, 1271, 1271, 1271, 1271, 1271, 1272, + 1272, 0, 1272, 1272, 1272, 0, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1273, 1273, 0, 1273, 1273, 1273, 0, 1273, 1273, 1273, + 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, + + 1273, 1274, 0, 0, 1274, 1274, 1274, 0, 1274, 1274, + 1274, 0, 1274, 1274, 1274, 0, 1274, 1274, 0, 1274, + 1274, 1274, 1275, 1275, 0, 1275, 1275, 1275, 0, 0, + 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 0, + 1275, 1275, 1275, 1277, 0, 0, 1277, 1277, 0, 0, + 1277, 1277, 1277, 0, 1277, 1277, 1277, 1277, 0, 1277, + 1277, 1277, 1277, 1277, 1278, 1278, 0, 1278, 1278, 0, + 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, + 1278, 1278, 1278, 1278, 1278, 1279, 0, 0, 1279, 0, + 0, 0, 1279, 0, 1279, 0, 1279, 1279, 1279, 0, + + 0, 1279, 1279, 1279, 1279, 1279, 1280, 0, 0, 1280, + 0, 0, 0, 1280, 0, 1280, 0, 1280, 1280, 1280, + 0, 1280, 1280, 1280, 1280, 1280, 1280, 1281, 0, 0, + 1281, 1281, 0, 1281, 1281, 0, 0, 1281, 1281, 1282, + 0, 0, 1282, 1282, 1282, 0, 1282, 1282, 1282, 0, + 1282, 1282, 1282, 0, 1282, 1282, 1282, 1282, 1282, 1282, + 1284, 0, 0, 0, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, - 1284, 1284, 1284, 1284, 1284, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183 + 1284, 1285, 0, 0, 1285, 0, 0, 0, 1285, 0, + 1285, 0, 1285, 1285, 1285, 0, 0, 1285, 1285, 1285, + 1285, 1285, 1286, 0, 0, 1286, 0, 0, 0, 1286, + 0, 1286, 0, 1286, 1286, 1286, 0, 0, 1286, 1286, + 1286, 1286, 1286, 1287, 0, 0, 1287, 0, 0, 0, + 1287, 0, 1287, 0, 1287, 1287, 1287, 0, 0, 1287, + 1287, 1287, 1287, 1287, 1288, 0, 0, 1288, 1288, 1288, + 0, 1288, 1288, 1288, 0, 1288, 1288, 1288, 0, 0, + 1288, 1288, 1288, 1288, 1288, 1289, 0, 0, 1289, 1289, + 1289, 0, 1289, 1289, 1289, 0, 1289, 1289, 1289, 0, + 0, 1289, 1289, 1289, 1289, 1289, 1290, 1290, 0, 1290, + 1290, 1290, 0, 1290, 1290, 1290, 1290, 1290, 1290, 1290, + + 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1291, 1291, 1291, + 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, + 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1292, 1292, + 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, + 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1293, + 0, 0, 1293, 0, 0, 0, 1293, 0, 1293, 0, + 1293, 1293, 1293, 0, 0, 1293, 1293, 1293, 1293, 1293, + 1295, 1295, 1295, 0, 0, 0, 0, 1295, 1296, 1296, + 0, 1296, 1296, 1296, 0, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1297, + + 1297, 0, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1298, 1298, 0, 1298, 1298, 1298, 0, 1298, 1298, 1298, + 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, + 1298, 1299, 1299, 0, 1299, 1299, 1299, 0, 1299, 1299, + 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, + 1299, 1299, 1303, 1303, 1303, 0, 0, 0, 0, 1303, + 1304, 1304, 1304, 0, 0, 0, 0, 1304, 1305, 1305, + 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, + 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1306, + + 1306, 0, 1306, 1306, 1306, 0, 1306, 1306, 1306, 1306, + 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, + 1311, 1311, 1311, 0, 0, 0, 0, 1311, 1312, 1312, + 1312, 1312, 0, 0, 0, 0, 1312, 1316, 1316, 1316, + 0, 0, 0, 0, 1316, 1317, 1317, 1317, 1317, 0, + 0, 0, 0, 1317, 1320, 1320, 1320, 0, 0, 0, + 0, 1320, 1321, 1321, 1321, 1321, 0, 0, 0, 0, + 1321, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + 1322, 1322, 1324, 0, 0, 1324, 1324, 0, 1324, 1324, + + 0, 0, 1324, 1324, 1325, 0, 0, 1325, 0, 0, + 0, 1325, 0, 1325, 0, 1325, 1325, 1325, 0, 0, + 1325, 1325, 1325, 1325, 1325, 1327, 0, 1327, 1327, 0, + 0, 0, 0, 1327, 1328, 1328, 1328, 0, 0, 0, + 0, 1328, 1329, 1329, 1329, 1329, 0, 0, 0, 0, + 1329, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, + 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, + 1330, 1330, 1332, 0, 0, 1332, 1332, 0, 1332, 1332, + 0, 0, 1332, 1332, 1333, 0, 0, 1333, 0, 0, + 0, 1333, 0, 1333, 0, 1333, 1333, 1333, 0, 0, + + 1333, 1333, 1333, 1333, 1333, 1335, 0, 1335, 1335, 0, + 0, 0, 0, 1335, 1336, 1336, 1336, 0, 0, 0, + 0, 1336, 1337, 1337, 1337, 0, 0, 0, 0, 0, + 1337, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, + 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, + 1338, 1338, 1339, 1339, 0, 1339, 1339, 1339, 1339, 1339, + 0, 1339, 0, 1339, 1339, 1339, 0, 0, 1339, 1339, + 1339, 1339, 1339, 1340, 1340, 0, 1340, 1340, 1340, 1340, + 1340, 0, 1340, 0, 1340, 1340, 1340, 0, 0, 1340, + 1340, 1340, 1340, 1340, 1342, 0, 1342, 1342, 0, 0, + + 0, 0, 1342, 1345, 0, 1345, 1345, 0, 0, 0, + 0, 1345, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, + 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, + 1348, 1348, 1348, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, + + 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225 } ; static yy_state_type yy_last_accepting_state; @@ -2723,7 +3030,7 @@ char *sudoerstext; /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1996, 1998-2005, 2007-2021 + * Copyright (c) 1996, 1998-2005, 2007-2022 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -2821,17 +3128,19 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; -#line 2819 "toke.c" + +#line 3127 "toke.c" #define INITIAL 0 #define GOTDEFS 1 #define GOTCMND 2 -#define STARTDEFS 3 -#define INDEFS 4 -#define INSTR 5 -#define WANTDIGEST 6 -#define GOTINC 7 -#define EXPECTPATH 8 +#define GOTREGEX 3 +#define STARTDEFS 4 +#define INDEFS 5 +#define INSTR 6 +#define WANTDIGEST 7 +#define GOTINC 8 +#define EXPECTPATH 9 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way @@ -3041,9 +3350,9 @@ YY_DECL } { -#line 122 "toke.l" +#line 124 "toke.l" -#line 3041 "toke.c" +#line 3350 "toke.c" while ( 1 ) /* loops until end-of-file is reached */ { @@ -3071,13 +3380,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1184 ) + if ( yy_current_state >= 1226 ) 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] != 8226 ); + while ( yy_base[yy_current_state] != 9534 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3103,7 +3412,7 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 123 "toke.l" +#line 125 "toke.l" { LEXTRACE(", "); return ','; @@ -3111,12 +3420,12 @@ YY_RULE_SETUP YY_BREAK case 2: YY_RULE_SETUP -#line 128 "toke.l" +#line 130 "toke.l" BEGIN STARTDEFS; YY_BREAK case 3: YY_RULE_SETUP -#line 130 "toke.l" +#line 132 "toke.l" { BEGIN INDEFS; LEXTRACE("DEFVAR "); @@ -3128,7 +3437,7 @@ YY_RULE_SETUP case 4: YY_RULE_SETUP -#line 139 "toke.l" +#line 141 "toke.l" { BEGIN STARTDEFS; LEXTRACE(", "); @@ -3137,7 +3446,7 @@ YY_RULE_SETUP YY_BREAK case 5: YY_RULE_SETUP -#line 145 "toke.l" +#line 147 "toke.l" { LEXTRACE("= "); return '='; @@ -3145,7 +3454,7 @@ YY_RULE_SETUP YY_BREAK case 6: YY_RULE_SETUP -#line 150 "toke.l" +#line 152 "toke.l" { LEXTRACE("+= "); return '+'; @@ -3153,7 +3462,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 155 "toke.l" +#line 157 "toke.l" { LEXTRACE("-= "); return '-'; @@ -3161,7 +3470,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 160 "toke.l" +#line 162 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3171,7 +3480,7 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 167 "toke.l" +#line 169 "toke.l" { LEXTRACE("WORD(2) "); if (!fill(sudoerstext, sudoersleng)) @@ -3184,7 +3493,7 @@ YY_RULE_SETUP case 10: /* rule 10 can match eol */ YY_RULE_SETUP -#line 176 "toke.l" +#line 178 "toke.l" { /* Line continuation char followed by newline. */ sudolineno++; @@ -3193,7 +3502,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 182 "toke.l" +#line 184 "toke.l" { LEXTRACE("ENDSTR "); BEGIN prev_state; @@ -3235,7 +3544,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 221 "toke.l" +#line 223 "toke.l" { LEXTRACE("BACKSLASH "); if (!append(sudoerstext, sudoersleng)) @@ -3244,7 +3553,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 227 "toke.l" +#line 229 "toke.l" { LEXTRACE("STRBODY "); if (!append(sudoerstext, sudoersleng)) @@ -3255,7 +3564,7 @@ YY_RULE_SETUP case 14: YY_RULE_SETUP -#line 235 "toke.l" +#line 237 "toke.l" { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); @@ -3266,7 +3575,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 243 "toke.l" +#line 245 "toke.l" { /* quoted sudoers special char, strip backslash */ LEXTRACE("QUOTEDCHAR "); @@ -3278,7 +3587,7 @@ YY_RULE_SETUP case 16: /* rule 16 can match eol */ YY_RULE_SETUP -#line 251 "toke.l" +#line 253 "toke.l" { BEGIN INITIAL; sudoersless(0); @@ -3288,18 +3597,87 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 258 "toke.l" +#line 260 "toke.l" { - LEXTRACE("ARG "); - if (!fill_args(sudoerstext, sudoersleng, sawspace)) - yyterminate(); - sawspace = false; + if (sudoerslval.command.args == NULL && sudoerstext[0] == '^') { + LEXTRACE("ARG REGEX "); + BEGIN GOTREGEX; + sudoersless(0); + yy_set_bol(0); + } else { + LEXTRACE("ARG "); + if (!fill_args(sudoerstext, sudoersleng, sawspace)) + yyterminate(); + sawspace = false; + } } /* a command line arg */ YY_BREAK + case 18: YY_RULE_SETUP -#line 266 "toke.l" +#line 276 "toke.l" +{ + /* quoted character, pass verbatim */ + LEXTRACE("QUOTEDCHAR "); + if (!fill_args(sudoerstext, 2, false)) + yyterminate(); + } + YY_BREAK +case 19: +/* rule 19 can match eol */ +YY_RULE_SETUP +#line 283 "toke.l" +{ + /* Let the parser attempt to recover. */ + sudoersless(0); + yy_set_bol(0); + BEGIN INITIAL; + + sudoers_errstr = N_("unterminated regular expression"); + LEXTRACE("ERROR "); + return ERROR; + } /* illegal inside regex */ + YY_BREAK +case 20: +YY_RULE_SETUP +#line 294 "toke.l" +{ + if (!fill_args("$", 1, false)) + yyterminate(); + BEGIN INITIAL; + continued = false; + if (sudoers_strict) { + if (!regex_valid(sudoerstext, &sudoers_errstr)) { + LEXTRACE("ERROR "); + return ERROR; + } + } + return COMMAND; + } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 308 "toke.l" +{ + if (continued) { + /* remove whitespace after line continuation */ + while (isblank((unsigned char)*sudoerstext)) { + sudoerstext++; + sudoersleng--; + } + continued = false; + } + if (sudoersleng != 0) { + if (!fill_args(sudoerstext, sudoersleng, false)) + yyterminate(); + } + } + YY_BREAK + +case 22: +YY_RULE_SETUP +#line 324 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t digest_len = @@ -3315,9 +3693,9 @@ YY_RULE_SETUP sudoersless(sudoersleng); } /* hex digest */ YY_BREAK -case 19: +case 23: YY_RULE_SETUP -#line 281 "toke.l" +#line 339 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t len, digest_len = @@ -3340,9 +3718,9 @@ YY_RULE_SETUP sudoersless(sudoersleng); } /* base64 digest */ YY_BREAK -case 20: +case 24: YY_RULE_SETUP -#line 303 "toke.l" +#line 361 "toke.l" { if (continued) { sudoers_errstr = N_("invalid line continuation"); @@ -3355,9 +3733,9 @@ YY_RULE_SETUP return INCLUDE; } YY_BREAK -case 21: +case 25: YY_RULE_SETUP -#line 315 "toke.l" +#line 373 "toke.l" { if (continued) { sudoers_errstr = N_("invalid line continuation"); @@ -3370,10 +3748,10 @@ YY_RULE_SETUP return INCLUDEDIR; } YY_BREAK -case 22: -/* rule 22 can match eol */ +case 26: +/* rule 26 can match eol */ YY_RULE_SETUP -#line 327 "toke.l" +#line 385 "toke.l" { if (continued) { sudoers_errstr = N_("invalid line continuation"); @@ -3390,10 +3768,10 @@ YY_RULE_SETUP return INCLUDE; } YY_BREAK -case 23: -/* rule 23 can match eol */ +case 27: +/* rule 27 can match eol */ YY_RULE_SETUP -#line 343 "toke.l" +#line 401 "toke.l" { if (continued) { sudoers_errstr = N_("invalid line continuation"); @@ -3410,9 +3788,9 @@ YY_RULE_SETUP return INCLUDEDIR; } YY_BREAK -case 24: +case 28: YY_RULE_SETUP -#line 359 "toke.l" +#line 417 "toke.l" { char deftype; int n; @@ -3454,9 +3832,9 @@ YY_RULE_SETUP } } YY_BREAK -case 25: +case 29: YY_RULE_SETUP -#line 400 "toke.l" +#line 458 "toke.l" { int n; @@ -3484,139 +3862,139 @@ YY_RULE_SETUP } } YY_BREAK -case 26: +case 30: YY_RULE_SETUP -#line 427 "toke.l" +#line 485 "toke.l" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); return NOPASSWD; } YY_BREAK -case 27: +case 31: YY_RULE_SETUP -#line 433 "toke.l" +#line 491 "toke.l" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); return PASSWD; } YY_BREAK -case 28: +case 32: YY_RULE_SETUP -#line 439 "toke.l" +#line 497 "toke.l" { LEXTRACE("NOEXEC "); return NOEXEC; } YY_BREAK -case 29: +case 33: YY_RULE_SETUP -#line 444 "toke.l" +#line 502 "toke.l" { LEXTRACE("EXEC "); return EXEC; } YY_BREAK -case 30: +case 34: YY_RULE_SETUP -#line 449 "toke.l" +#line 507 "toke.l" { LEXTRACE("INTERCEPT "); return INTERCEPT; } YY_BREAK -case 31: +case 35: YY_RULE_SETUP -#line 454 "toke.l" +#line 512 "toke.l" { LEXTRACE("NOINTERCEPT "); return NOINTERCEPT; } YY_BREAK -case 32: +case 36: YY_RULE_SETUP -#line 459 "toke.l" +#line 517 "toke.l" { LEXTRACE("SETENV "); return SETENV; } YY_BREAK -case 33: +case 37: YY_RULE_SETUP -#line 464 "toke.l" +#line 522 "toke.l" { LEXTRACE("NOSETENV "); return NOSETENV; } YY_BREAK -case 34: +case 38: YY_RULE_SETUP -#line 469 "toke.l" +#line 527 "toke.l" { LEXTRACE("LOG_OUTPUT "); return LOG_OUTPUT; } YY_BREAK -case 35: +case 39: YY_RULE_SETUP -#line 474 "toke.l" +#line 532 "toke.l" { LEXTRACE("NOLOG_OUTPUT "); return NOLOG_OUTPUT; } YY_BREAK -case 36: +case 40: YY_RULE_SETUP -#line 479 "toke.l" +#line 537 "toke.l" { LEXTRACE("LOG_INPUT "); return LOG_INPUT; } YY_BREAK -case 37: +case 41: YY_RULE_SETUP -#line 484 "toke.l" +#line 542 "toke.l" { LEXTRACE("NOLOG_INPUT "); return NOLOG_INPUT; } YY_BREAK -case 38: +case 42: YY_RULE_SETUP -#line 489 "toke.l" +#line 547 "toke.l" { LEXTRACE("MAIL "); return MAIL; } YY_BREAK -case 39: +case 43: YY_RULE_SETUP -#line 494 "toke.l" +#line 552 "toke.l" { LEXTRACE("NOMAIL "); return NOMAIL; } YY_BREAK -case 40: +case 44: YY_RULE_SETUP -#line 499 "toke.l" +#line 557 "toke.l" { LEXTRACE("FOLLOW "); return FOLLOWLNK; } YY_BREAK -case 41: +case 45: YY_RULE_SETUP -#line 504 "toke.l" +#line 562 "toke.l" { LEXTRACE("NOFOLLOW "); return NOFOLLOWLNK; } YY_BREAK -case 42: +case 46: YY_RULE_SETUP -#line 509 "toke.l" +#line 567 "toke.l" { if (sudoerstext[0] == '+') sudoers_errstr = N_("empty netgroup"); @@ -3626,9 +4004,9 @@ YY_RULE_SETUP return ERROR; } YY_BREAK -case 43: +case 47: YY_RULE_SETUP -#line 518 "toke.l" +#line 576 "toke.l" { /* netgroup */ if (!fill(sudoerstext, sudoersleng)) @@ -3637,9 +4015,9 @@ YY_RULE_SETUP return NETGROUP; } YY_BREAK -case 44: +case 48: YY_RULE_SETUP -#line 526 "toke.l" +#line 584 "toke.l" { /* group */ if (!fill(sudoerstext, sudoersleng)) @@ -3648,92 +4026,92 @@ YY_RULE_SETUP return USERGROUP; } YY_BREAK -case 45: -YY_RULE_SETUP -#line 534 "toke.l" -{ - if (!fill(sudoerstext, sudoersleng)) - yyterminate(); - LEXTRACE("NTWKADDR "); - return NTWKADDR; - } - YY_BREAK -case 46: -YY_RULE_SETUP -#line 541 "toke.l" -{ - if (!fill(sudoerstext, sudoersleng)) - yyterminate(); - LEXTRACE("NTWKADDR "); - return NTWKADDR; - } - YY_BREAK -case 47: -YY_RULE_SETUP -#line 548 "toke.l" -{ - if (!ipv6_valid(sudoerstext)) { - sudoers_errstr = N_("invalid IPv6 address"); - LEXTRACE("ERROR "); - return ERROR; - } - if (!fill(sudoerstext, sudoersleng)) - yyterminate(); - LEXTRACE("NTWKADDR "); - return NTWKADDR; - } - YY_BREAK -case 48: -YY_RULE_SETUP -#line 560 "toke.l" -{ - if (!ipv6_valid(sudoerstext)) { - sudoers_errstr = N_("invalid IPv6 address"); - LEXTRACE("ERROR "); - return ERROR; - } - if (!fill(sudoerstext, sudoersleng)) - yyterminate(); - LEXTRACE("NTWKADDR "); - return NTWKADDR; - } - YY_BREAK case 49: YY_RULE_SETUP -#line 572 "toke.l" +#line 592 "toke.l" +{ + if (!fill(sudoerstext, sudoersleng)) + yyterminate(); + LEXTRACE("NTWKADDR "); + return NTWKADDR; + } + YY_BREAK +case 50: +YY_RULE_SETUP +#line 599 "toke.l" +{ + if (!fill(sudoerstext, sudoersleng)) + yyterminate(); + LEXTRACE("NTWKADDR "); + return NTWKADDR; + } + YY_BREAK +case 51: +YY_RULE_SETUP +#line 606 "toke.l" +{ + if (!ipv6_valid(sudoerstext)) { + sudoers_errstr = N_("invalid IPv6 address"); + LEXTRACE("ERROR "); + return ERROR; + } + if (!fill(sudoerstext, sudoersleng)) + yyterminate(); + LEXTRACE("NTWKADDR "); + return NTWKADDR; + } + YY_BREAK +case 52: +YY_RULE_SETUP +#line 618 "toke.l" +{ + if (!ipv6_valid(sudoerstext)) { + sudoers_errstr = N_("invalid IPv6 address"); + LEXTRACE("ERROR "); + return ERROR; + } + if (!fill(sudoerstext, sudoersleng)) + yyterminate(); + LEXTRACE("NTWKADDR "); + return NTWKADDR; + } + YY_BREAK +case 53: +YY_RULE_SETUP +#line 630 "toke.l" { LEXTRACE("ALL "); return ALL; } YY_BREAK -case 50: +case 54: YY_RULE_SETUP -#line 578 "toke.l" +#line 636 "toke.l" { LEXTRACE("CMND_TIMEOUT "); return CMND_TIMEOUT; } YY_BREAK -case 51: +case 55: YY_RULE_SETUP -#line 583 "toke.l" +#line 641 "toke.l" { LEXTRACE("NOTBEFORE "); return NOTBEFORE; } YY_BREAK -case 52: +case 56: YY_RULE_SETUP -#line 588 "toke.l" +#line 646 "toke.l" { LEXTRACE("NOTAFTER "); return NOTAFTER; } YY_BREAK -case 53: +case 57: YY_RULE_SETUP -#line 593 "toke.l" +#line 651 "toke.l" { LEXTRACE("CWD "); prev_state = YY_START; @@ -3741,9 +4119,9 @@ YY_RULE_SETUP return CWD; } YY_BREAK -case 54: +case 58: YY_RULE_SETUP -#line 600 "toke.l" +#line 658 "toke.l" { LEXTRACE("CHROOT "); prev_state = YY_START; @@ -3751,9 +4129,9 @@ YY_RULE_SETUP return CHROOT; } YY_BREAK -case 55: +case 59: YY_RULE_SETUP -#line 607 "toke.l" +#line 665 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -3763,9 +4141,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 56: +case 60: YY_RULE_SETUP -#line 616 "toke.l" +#line 674 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("TYPE "); @@ -3775,9 +4153,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 57: +case 61: YY_RULE_SETUP -#line 624 "toke.l" +#line 682 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("PRIVS "); @@ -3787,9 +4165,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 58: +case 62: YY_RULE_SETUP -#line 633 "toke.l" +#line 691 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("LIMITPRIVS "); @@ -3799,9 +4177,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 59: +case 63: YY_RULE_SETUP -#line 642 "toke.l" +#line 700 "toke.l" { got_alias: if (!fill(sudoerstext, sudoersleng)) @@ -3810,9 +4188,9 @@ YY_RULE_SETUP return ALIAS; } YY_BREAK -case 60: +case 64: YY_RULE_SETUP -#line 650 "toke.l" +#line 708 "toke.l" { /* XXX - no way to specify digest for command */ /* no command args allowed for Defaults!/path */ @@ -3822,9 +4200,9 @@ YY_RULE_SETUP return COMMAND; } YY_BREAK -case 61: +case 65: YY_RULE_SETUP -#line 659 "toke.l" +#line 717 "toke.l" { digest_type = SUDO_DIGEST_SHA224; BEGIN WANTDIGEST; @@ -3832,9 +4210,9 @@ YY_RULE_SETUP return SHA224_TOK; } YY_BREAK -case 62: +case 66: YY_RULE_SETUP -#line 666 "toke.l" +#line 724 "toke.l" { digest_type = SUDO_DIGEST_SHA256; BEGIN WANTDIGEST; @@ -3842,9 +4220,9 @@ YY_RULE_SETUP return SHA256_TOK; } YY_BREAK -case 63: +case 67: YY_RULE_SETUP -#line 673 "toke.l" +#line 731 "toke.l" { digest_type = SUDO_DIGEST_SHA384; BEGIN WANTDIGEST; @@ -3852,9 +4230,9 @@ YY_RULE_SETUP return SHA384_TOK; } YY_BREAK -case 64: +case 68: YY_RULE_SETUP -#line 680 "toke.l" +#line 738 "toke.l" { digest_type = SUDO_DIGEST_SHA512; BEGIN WANTDIGEST; @@ -3862,9 +4240,9 @@ YY_RULE_SETUP return SHA512_TOK; } YY_BREAK -case 65: +case 69: YY_RULE_SETUP -#line 687 "toke.l" +#line 745 "toke.l" { BEGIN GOTCMND; LEXTRACE("COMMAND "); @@ -3872,9 +4250,9 @@ YY_RULE_SETUP yyterminate(); } /* sudo -e */ YY_BREAK -case 66: +case 70: YY_RULE_SETUP -#line 694 "toke.l" +#line 752 "toke.l" { BEGIN prev_state; if (!fill(sudoerstext, sudoersleng)) @@ -3883,9 +4261,9 @@ YY_RULE_SETUP return WORD; } YY_BREAK -case 67: +case 71: YY_RULE_SETUP -#line 702 "toke.l" +#line 760 "toke.l" { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -3900,9 +4278,25 @@ YY_RULE_SETUP yyterminate(); } /* a pathname */ YY_BREAK -case 68: +case 72: YY_RULE_SETUP -#line 716 "toke.l" +#line 774 "toke.l" +{ + if (sudoers_strict) { + if (!regex_valid(sudoerstext, &sudoers_errstr)) { + LEXTRACE("ERROR "); + return ERROR; + } + } + BEGIN GOTCMND; + LEXTRACE("COMMAND "); + if (!fill_cmnd(sudoerstext, sudoersleng)) + yyterminate(); + } /* a regex */ + YY_BREAK +case 73: +YY_RULE_SETUP +#line 787 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3910,9 +4304,9 @@ YY_RULE_SETUP BEGIN INSTR; } YY_BREAK -case 69: +case 74: YY_RULE_SETUP -#line 723 "toke.l" +#line 794 "toke.l" { /* a word */ if (!fill(sudoerstext, sudoersleng)) @@ -3922,9 +4316,9 @@ YY_RULE_SETUP } YY_BREAK -case 70: +case 75: YY_RULE_SETUP -#line 732 "toke.l" +#line 803 "toke.l" { /* include file/directory */ if (!fill(sudoerstext, sudoersleng)) @@ -3934,9 +4328,9 @@ YY_RULE_SETUP return WORD; } YY_BREAK -case 71: +case 76: YY_RULE_SETUP -#line 741 "toke.l" +#line 812 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3945,49 +4339,49 @@ YY_RULE_SETUP } YY_BREAK -case 72: +case 77: YY_RULE_SETUP -#line 749 "toke.l" +#line 820 "toke.l" { LEXTRACE("( "); return '('; } YY_BREAK -case 73: +case 78: YY_RULE_SETUP -#line 754 "toke.l" +#line 825 "toke.l" { LEXTRACE(") "); return ')'; } YY_BREAK -case 74: +case 79: YY_RULE_SETUP -#line 759 "toke.l" +#line 830 "toke.l" { LEXTRACE(", "); return ','; } /* return ',' */ YY_BREAK -case 75: +case 80: YY_RULE_SETUP -#line 764 "toke.l" +#line 835 "toke.l" { LEXTRACE("= "); return '='; } /* return '=' */ YY_BREAK -case 76: +case 81: YY_RULE_SETUP -#line 769 "toke.l" +#line 840 "toke.l" { LEXTRACE(": "); return ':'; } /* return ':' */ YY_BREAK -case 77: +case 82: YY_RULE_SETUP -#line 774 "toke.l" +#line 845 "toke.l" { if (sudoersleng & 1) { LEXTRACE("!"); @@ -3995,10 +4389,10 @@ YY_RULE_SETUP } } YY_BREAK -case 78: -/* rule 78 can match eol */ +case 83: +/* rule 83 can match eol */ YY_RULE_SETUP -#line 781 "toke.l" +#line 852 "toke.l" { if (YY_START == INSTR) { /* throw away old string */ @@ -4018,27 +4412,27 @@ YY_RULE_SETUP return '\n'; } /* return newline */ YY_BREAK -case 79: +case 84: YY_RULE_SETUP -#line 800 "toke.l" +#line 871 "toke.l" { /* throw away space/tabs */ sawspace = true; /* but remember for fill_args */ } YY_BREAK -case 80: -/* rule 80 can match eol */ +case 85: +/* rule 85 can match eol */ YY_RULE_SETUP -#line 804 "toke.l" +#line 875 "toke.l" { sawspace = true; /* remember for fill_args */ sudolineno++; continued = true; } /* throw away EOL after \ */ YY_BREAK -case 81: -/* rule 81 can match eol */ +case 86: +/* rule 86 can match eol */ YY_RULE_SETUP -#line 810 "toke.l" +#line 881 "toke.l" { if (sudoerstext[sudoersleng - 1] == '\n') { /* comment ending in a newline */ @@ -4054,9 +4448,9 @@ YY_RULE_SETUP return '\n'; } /* comment, not uid/gid */ YY_BREAK -case 82: +case 87: YY_RULE_SETUP -#line 825 "toke.l" +#line 896 "toke.l" { LEXTRACE("NOMATCH "); return NOMATCH; @@ -4065,24 +4459,25 @@ YY_RULE_SETUP case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(GOTDEFS): case YY_STATE_EOF(GOTCMND): +case YY_STATE_EOF(GOTREGEX): case YY_STATE_EOF(STARTDEFS): case YY_STATE_EOF(INDEFS): case YY_STATE_EOF(INSTR): case YY_STATE_EOF(WANTDIGEST): case YY_STATE_EOF(GOTINC): case YY_STATE_EOF(EXPECTPATH): -#line 830 "toke.l" +#line 901 "toke.l" { if (!pop_include()) yyterminate(); } YY_BREAK -case 83: +case 88: YY_RULE_SETUP -#line 835 "toke.l" +#line 906 "toke.l" ECHO; YY_BREAK -#line 4080 "toke.c" +#line 4475 "toke.c" case YY_END_OF_BUFFER: { @@ -4376,7 +4771,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1184 ) + if ( yy_current_state >= 1226 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -4404,13 +4799,13 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1184 ) + if ( yy_current_state >= 1226 ) 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 == 1183); + yy_is_jam = (yy_current_state == 1225); - return yy_is_jam ? 0 : yy_current_state; + return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_INPUT @@ -5043,7 +5438,7 @@ void sudoersfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 835 "toke.l" +#line 906 "toke.l" struct path_list { @@ -5283,7 +5678,7 @@ expand_include(const char *opath) } /* Make a copy of the fully-qualified path and return it. */ - path = pp = sudo_rcstr_alloc(len + dirlen); + path = pp = sudo_rcstr_alloc(dirlen + len); if (path == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); sudoerserror(NULL); diff --git a/plugins/sudoers/toke.h b/plugins/sudoers/toke.h index 16f2c317d..69496aa4e 100644 --- a/plugins/sudoers/toke.h +++ b/plugins/sudoers/toke.h @@ -35,6 +35,7 @@ bool fill_args(const char *, size_t, int); bool fill_cmnd(const char *, size_t); bool fill(const char *, size_t); bool ipv6_valid(const char *s); +bool regex_valid(const char *pattern, char **errstr); int sudoers_trace_print(const char *); void sudoerserrorf(const char *, ...) __printf0like(1, 2); void sudoerserror(const char *); diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index ef7c216f2..6972c5956 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -2,7 +2,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1996, 1998-2005, 2007-2021 + * Copyright (c) 1996, 1998-2005, 2007-2022 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -102,6 +102,7 @@ HOSTNAME [[:alnum:]_-]+ WORD ([^#>!=:,\(\) \t\r\n\\\"]|\\[^\t\n])+ ID #-?[0-9]+ PATH \/(\\[\,:= \t#]|[^\,:=\\ \t\r\n#])+ +REGEX \^([^#\r\n\$]|\\[#\$])*\$ ENVAR ([^#!=, \t\r\n\\\"]|\\[^\r\n])([^#=, \t\r\n\\\"]|\\[^\r\n])* DEFVAR [a-z_]+ @@ -112,6 +113,7 @@ DEFVAR [a-z_]+ %s GOTDEFS %x GOTCMND +%x GOTREGEX %x STARTDEFS %x INDEFS %x INSTR @@ -232,7 +234,7 @@ DEFVAR [a-z_]+ } { - \\[\*\?\[\]\!] { + \\[\*\?\[\]\!^] { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); if (!fill_args(sudoerstext, 2, sawspace)) @@ -256,13 +258,69 @@ DEFVAR [a-z_]+ } /* end of command line args */ [^#\\:, \t\r\n]+ { - LEXTRACE("ARG "); - if (!fill_args(sudoerstext, sudoersleng, sawspace)) - yyterminate(); - sawspace = false; + if (sudoerslval.command.args == NULL && sudoerstext[0] == '^') { + LEXTRACE("ARG REGEX "); + BEGIN GOTREGEX; + sudoersless(0); + yy_set_bol(0); + } else { + LEXTRACE("ARG "); + if (!fill_args(sudoerstext, sudoersleng, sawspace)) + yyterminate(); + sawspace = false; + } } /* a command line arg */ } +{ + \\[^\r\n] { + /* quoted character, pass verbatim */ + LEXTRACE("QUOTEDCHAR "); + if (!fill_args(sudoerstext, 2, false)) + yyterminate(); + } + + [#\r\n] { + /* Let the parser attempt to recover. */ + sudoersless(0); + yy_set_bol(0); + BEGIN INITIAL; + + sudoers_errstr = N_("unterminated regular expression"); + LEXTRACE("ERROR "); + return ERROR; + } /* illegal inside regex */ + + \$ { + if (!fill_args("$", 1, false)) + yyterminate(); + BEGIN INITIAL; + continued = false; + if (sudoers_strict) { + if (!regex_valid(sudoerstext, &sudoers_errstr)) { + LEXTRACE("ERROR "); + return ERROR; + } + } + return COMMAND; + } + + [^#\\\r\n$]+ { + if (continued) { + /* remove whitespace after line continuation */ + while (isblank((unsigned char)*sudoerstext)) { + sudoerstext++; + sudoersleng--; + } + continued = false; + } + if (sudoersleng != 0) { + if (!fill_args(sudoerstext, sudoersleng, false)) + yyterminate(); + } + } +} + [[:xdigit:]]+ { /* Only return DIGEST if the length is correct. */ yy_size_t digest_len = @@ -647,7 +705,7 @@ ALL { return ALIAS; } -({PATH}|sudoedit) { +({PATH}|{REGEX}|sudoedit) { /* XXX - no way to specify digest for command */ /* no command args allowed for Defaults!/path */ if (!fill_cmnd(sudoerstext, sudoersleng)) @@ -713,6 +771,19 @@ sudoedit { yyterminate(); } /* a pathname */ +{REGEX} { + if (sudoers_strict) { + if (!regex_valid(sudoerstext, &sudoers_errstr)) { + LEXTRACE("ERROR "); + return ERROR; + } + } + BEGIN GOTCMND; + LEXTRACE("COMMAND "); + if (!fill_cmnd(sudoerstext, sudoersleng)) + yyterminate(); + } /* a regex */ + \" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; diff --git a/plugins/sudoers/toke_util.c b/plugins/sudoers/toke_util.c index f1df424d7..f03e0dae2 100644 --- a/plugins/sudoers/toke_util.c +++ b/plugins/sudoers/toke_util.c @@ -31,6 +31,7 @@ #include #include #include +#include #include "sudoers.h" #include "toke.h" @@ -38,6 +39,7 @@ static unsigned int arg_len = 0; static unsigned int arg_size = 0; +static char errbuf[1024]; /* * Copy the string and collapse any escaped characters. @@ -133,27 +135,33 @@ fill_cmnd(const char *src, size_t len) } sudoerslval.command.args = NULL; - /* Copy the string and collapse any escaped sudo-specific characters. */ - for (i = 0; i < len; i++) { - if (src[i] == '\\' && i != len - 1 && SPECIAL(src[i + 1])) - *dst++ = src[++i]; - else - *dst++ = src[i]; - } - *dst = '\0'; + if (src[0] == '^') { + /* Copy the regular expression, no escaped sudo-specific characters. */ + memcpy(dst, src, len); + dst[len] = '\0'; + } else { + /* Copy the string and collapse any escaped sudo-specific characters. */ + for (i = 0; i < len; i++) { + if (src[i] == '\\' && i != len - 1 && SPECIAL(src[i + 1])) + *dst++ = src[++i]; + else + *dst++ = src[i]; + } + *dst = '\0'; - /* Check for sudoedit specified as a fully-qualified path. */ - if ((dst = strrchr(sudoerslval.command.cmnd, '/')) != NULL) { // -V575 - if (strcmp(dst, "/sudoedit") == 0) { - if (sudoers_strict) { - sudoerserror( - N_("sudoedit should not be specified with a path")); - } - free(sudoerslval.command.cmnd); - if ((sudoerslval.command.cmnd = strdup("sudoedit")) == NULL) { - sudo_warnx(U_("%s: %s"), __func__, - U_("unable to allocate memory")); - debug_return_bool(false); + /* Check for sudoedit specified as a fully-qualified path. */ + if ((dst = strrchr(sudoerslval.command.cmnd, '/')) != NULL) { // -V575 + if (strcmp(dst, "/sudoedit") == 0) { + if (sudoers_strict) { + sudoerserror( + N_("sudoedit should not be specified with a path")); + } + free(sudoerslval.command.cmnd); + if ((sudoerslval.command.cmnd = strdup("sudoedit")) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + debug_return_bool(false); + } } } } @@ -239,3 +247,36 @@ ipv6_valid(const char *s) debug_return_bool(nmatch <= 1); } + +bool +regex_valid(const char *pattern, char **errstr) +{ + int errcode, cflags = REG_EXTENDED|REG_NOSUB; + char *copy = NULL; + regex_t re; + debug_decl(regex_valid, SUDOERS_DEBUG_PARSER); + + /* Check for (?i) to enable case-insensitive matching. */ + if (strncmp(pattern, "^(?i)", 5) == 0) { + cflags |= REG_ICASE; + copy = strdup(pattern + 4); + if (copy == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + sudoerserror(NULL); + debug_return_bool(false); + } + copy[0] = '^'; + pattern = copy; + } + + errcode = regcomp(&re, pattern, cflags); + if (errcode == 0) { + regfree(&re); + } else { + regerror(errcode, &re, errbuf, sizeof(errbuf)); + *errstr = errbuf; + } + free(copy); + + debug_return_bool(errcode == 0); +}